Rogerclark
Ср 27 мая 2015 г. 1:02
Ребята,
Этот код может быть полезен кому -то .
Возможно прочитать размер флэш -памяти и более интересно уникальный идентификатор устройства
Этот код может быть полезен кому -то .
Возможно прочитать размер флэш -памяти и более интересно уникальный идентификатор устройства
void setup() {
Serial.begin(115200);
}
void loop() {
uint16 *flashSize = (uint16 *) (0x1FFFF7E0);
uint16 *idBase0 = (uint16 *) (0x1FFFF7E8);
uint16 *idBase1 = (uint16 *) (0x1FFFF7E8+0x02);
uint32 *idBase2 = (uint32 *) (0x1FFFF7E8+0x04);
uint32 *idBase3 = (uint32 *) (0x1FFFF7E8+0x08);
Serial.print("Flash size is ");
Serial.print(*flashSize );
Serial.println("k");
Serial.print("Unique ID is ");
Serial.print(*(idBase0),HEX);
Serial.print(*(idBase1),HEX);
Serial.print(*(idBase2),HEX);
Serial.println(*(idBase3),HEX);
delay(500);
}
Кешавадк
Пн 25 июля 2016 г., 7:00 утра
Могу ли я узнать, почему идентификатор устройства начинается с адреса 0x1ffff7e8 и почему он должен быть увеличен 2 за четыре раза. Как 0x1ffff7e8+0x02, 0x1ffff7e8+0x04, 0x1ffff7e8+0x04
0x1ffff7e8+0x08
0x1ffff7e8+0x08
Rogerclark
Пн 25 июля 2016 г., 7:36 утра
Обычно все зарегистрировано в справочном руководстве STM32F103 RM0008 Страница 1079
(Google для этого)
Уникальный регистр идентификатора устройства (96 бит) Вы, вероятно, могли бы прочитать это как три 32 -битных чтения,. Я не уверен, почему пример кода прочитал первый регистр в двух 16 -битных кусках
Тем не менее, справочное руководство говорит.
(Google для этого)
Уникальный регистр идентификатора устройства (96 бит) Вы, вероятно, могли бы прочитать это как три 32 -битных чтения,. Я не уверен, почему пример кода прочитал первый регистр в двух 16 -битных кусках
Тем не менее, справочное руководство говорит.
Мадиас
Пн 25 июля 2016 г. 12:31
Хм. Мое первое размышление об уникальном идентификаторе - настройка сети NRF24L01, и каждый узел является идентификатором, поэтому вам не нужно думать о разных именах узлов. Я просто надеюсь, что «наш» STM32F01 действительно * уникальные *, а не китайские клоны с тем же идентификатором
Ахулл
Пн 25 июля 2016 г. 12:33
Мадиас написал:Хм. Мое первое размышление об уникальном идентификаторе - настройка сети NRF24L01, и каждый узел является идентификатором, поэтому вам не нужно думать о разных именах узлов. Я просто надеюсь, что «наш» STM32F01 действительно * уникальные *, а не китайские клоны с тем же идентификатором
Rogerclark
Пн 25 июля 2016 г., 21:43
Энди
Я согласен, эти регистры, вероятно, можно записать, но вам нужно знать, к каким другим регистрам доступ к ним, чтобы сделать их. Скорее всего, они просто являются частным блоком вспышки, которая также может содержать другую информацию, которая недоступна вне MCU.
У MCU должны быть специальные блоки вспышки, чтобы удерживать внутренний загрузчик, хотя я полагаю, что они могут быть частью матрицы; Но если бы я проектировал MCU с собственным внутренним SW, мне было бы очень соблазнить поместить этот код в какую -то личную вспышку.
Конечно, это означало бы, что каждый чип должен быть прошит, но я предполагаю, что каждый чип должен иметь свой идентификатор, если только у него не есть код магии, который первым запускает, который вызывает данные об окружающей среде для генерации идентификатора - и это звучит чревато проблемами, если только устройство Содержит выделенный генератор случайных чисел на основе шумного резистора и т. Д
Я согласен, эти регистры, вероятно, можно записать, но вам нужно знать, к каким другим регистрам доступ к ним, чтобы сделать их. Скорее всего, они просто являются частным блоком вспышки, которая также может содержать другую информацию, которая недоступна вне MCU.
У MCU должны быть специальные блоки вспышки, чтобы удерживать внутренний загрузчик, хотя я полагаю, что они могут быть частью матрицы; Но если бы я проектировал MCU с собственным внутренним SW, мне было бы очень соблазнить поместить этот код в какую -то личную вспышку.
Конечно, это означало бы, что каждый чип должен быть прошит, но я предполагаю, что каждый чип должен иметь свой идентификатор, если только у него не есть код магии, который первым запускает, который вызывает данные об окружающей среде для генерации идентификатора - и это звучит чревато проблемами, если только устройство Содержит выделенный генератор случайных чисел на основе шумного резистора и т. Д
ZMEMW16
Пн 25 июля 2016 г., 21:52
Не могли бы вы просто сделать это на уровне пластины?
Если они могут генерировать запрограммированный EPROM/EFUSE, то серийный номер не может быть проблемой.
SRP
Если они могут генерировать запрограммированный EPROM/EFUSE, то серийный номер не может быть проблемой.
SRP
Ахулл
Пн 25 июля 2016 г., 22:01
Уникальный идентификатор, вероятно, запрограммирован на этапе тестирования. В конце концов, все остальные элементы системы нуждаются в тестировании (ОЗУ, вспышка, периферийные устройства и т. Д.) поэтому дополнительная процедура для установки серийного числа не будет существенно повлиять на время тестирования.
Rogerclark
Пн 25 июля 2016 г., 11:02 вечера
Ахулл написал:Уникальный идентификатор, вероятно, запрограммирован на этапе тестирования. В конце концов, все остальные элементы системы нуждаются в тестировании (ОЗУ, вспышка, периферийные устройства и т. Д.) поэтому дополнительная процедура для установки серийного числа не будет существенно повлиять на время тестирования.
Ахулл
Вт 26 июля 2016 г., 7:09
Rogerclark написал:Ахулл написал:Уникальный идентификатор, вероятно, запрограммирован на этапе тестирования. В конце концов, все остальные элементы системы нуждаются в тестировании (ОЗУ, вспышка, периферийные устройства и т. Д.) поэтому дополнительная процедура для установки серийного числа не будет существенно повлиять на время тестирования.
Саймонф
Вт 26 июля 2016 г. 16:52
Мадиас написал:Хм. Мое первое размышление об уникальном идентификаторе - настройка сети NRF24L01, и каждый узел является идентификатором, поэтому вам не нужно думать о разных именах узлов. Я просто надеюсь, что «наш» STM32F01 действительно * уникальные *, а не китайские клоны с тем же идентификатором
Александрос
Сб, 07 октября 2017 г., 21:26
Можно ли изменить уникальный идентификатор устройства программно? Я имею в виду замененную оборотную
Martinayotte
Солнце 8 октября 2017 г. 14:30
Неа !
Александрос
Солнце 8 октября 2017 г. 22:10
Большой!
victor_pv
Солнце 8 октября 2017 г. 11:43
Если я помню прямо, есть несколько писать один раз, так что вы можете запрограммировать свой собственный идентификатор.
Не могу вспомнить это наверняка.
Не могу вспомнить это наверняка.
Дэнниф
Пн, 09 октября 2017 г. 11:58 утра
Я использую макрос, чтобы сделать все это:
#define U_ID ((const unsigned short *) 0x1FFFF7E8) //U_ID95..0, referenced via U_ID[0], ..., U_ID[5]
Александрос
Сб 14 октября 2017 г. 11:02
Привет, добрый день, чтобы все
Я хотел бы кое -что спросить о FlashSize STM32F103CB
На основании демонстрационного кода Roger, предоставленного в первом сообщении, я получил размер 64K Flash
Теперь смешная часть.
(Я установил вариант Arduino IDE: STM43F103CB 64K, как я должен)
У меня есть эскиз, в котором используется 97% размера вспышки. , Я натолкнул немного дополнительного нездового кода, чтобы добраться до максимального размера, поэтому я получил это красивое MSG
область «ПЗУ» переполнена 5604 байтами
Поэтому я изменил вариант Arduino IDE: STM32F103CB с 64к на 128 тыс., И я сделал это
И это сработало.
Я также проверяю его с очень большим массивом со значениями, которые проверяли один за другим в цикле и вернули мне правильные результаты..
Вопрос в том, является ли это нормальным дежавиором? Чип включает в себя 128K Flash ?? И почему я получил 64K от демо -кода?
Я хотел бы кое -что спросить о FlashSize STM32F103CB
На основании демонстрационного кода Roger, предоставленного в первом сообщении, я получил размер 64K Flash
Теперь смешная часть.
(Я установил вариант Arduino IDE: STM43F103CB 64K, как я должен)
У меня есть эскиз, в котором используется 97% размера вспышки. , Я натолкнул немного дополнительного нездового кода, чтобы добраться до максимального размера, поэтому я получил это красивое MSG
область «ПЗУ» переполнена 5604 байтами
Поэтому я изменил вариант Arduino IDE: STM32F103CB с 64к на 128 тыс., И я сделал это
И это сработало.
Я также проверяю его с очень большим массивом со значениями, которые проверяли один за другим в цикле и вернули мне правильные результаты..
Вопрос в том, является ли это нормальным дежавиором? Чип включает в себя 128K Flash ?? И почему я получил 64K от демо -кода?
Дэнниф
Сб 14 октября 2017 г. 13:42
Это обсуждалось в N -й степени. Многие из этих чипов имеют больше вспышки, больше eEPROM, больше функций, чем указанные в таблице данных и в регистрах на устройстве.
Это нормально, поскольку они широко распространены. Это не нормально в том смысле, что они не соответствуют таблицу данных.
Это нормально, поскольку они широко распространены. Это не нормально в том смысле, что они не соответствуют таблицу данных.
victor_pv
Сб 14 октября 2017 г., 19:03
На самом деле, если MCU «STM32F103CB», как вы написали, это должно иметь 128 КБ в соответствии с спецификациями.
STM32F103C8 (примечание - это число 8, а не верхний чехол B), как предполагается, имеет только 64 КБ.
Так что, если у вас есть CB с 128 КБ, вы точно находитесь в спецификациях.
Если у вас C8 с 128 КБ, то, как указано Дэнниф.
STM32F103C8 (примечание - это число 8, а не верхний чехол B), как предполагается, имеет только 64 КБ.
Так что, если у вас есть CB с 128 КБ, вы точно находитесь в спецификациях.
Если у вас C8 с 128 КБ, то, как указано Дэнниф.
Алоис
Чт 29 марта 2018 г., 17:40
[Кешавадк - Пн 25 июля 2016 г., 7:00 утра] - Могу ли я узнать, почему идентификатор устройства начинается с адреса 0x1ffff7e8 и почему он должен быть увеличен 2 за четыре раза. Как 0x1ffff7e8+0x02, 0x1ffff7e8+0x04, 0x1ffff7e8+0x04Я сравнил серийный номер клона ST-Link на основе STM32F103C8T6 и уникального идентификатора.
0x1ffff7e8+0x08
Уникальный идентификатор-FF4966E5549896667164724, а серийный номер ST-Link-49ff6e066689495524471667.
Это такое же число, но в другом формате.
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
void PrintHex8(uint8_t data) // prints 8-bit data in hex with leading zeroes
{
if (data < 0x10) {
Serial.print("0");
}
Serial.print(data, HEX);
}
void loop() {
// put your main code here, to run repeatedly:
uint16 *flashSize = (uint16 *) (0x1FFFF7E0);
uint16 *idBase0 = (uint16 *) (0x1FFFF7E8);
uint16 *idBase1 = (uint16 *) (0x1FFFF7E8 + 0x02);
uint32 *idBase2 = (uint32 *) (0x1FFFF7E8 + 0x04);
uint32 *idBase3 = (uint32 *) (0x1FFFF7E8 + 0x08);
Serial.print("Flash size is ");
Serial.print(*flashSize );
Serial.println("k");
Serial.print("Unique ID is ");
Serial.print(*(idBase0), HEX);
Serial.print(*(idBase1), HEX);
Serial.print(*(idBase2), HEX);
Serial.println(*(idBase3), HEX);
Serial.print("Device ID is ");
byte* bytes = (byte*) idBase0;
for (int i = 0; i < 12; i++) {
PrintHex8(bytes[i]);
}
Serial.print(" -> ");
for (int i = 0; i < 11; i++) {
PrintHex8(bytes[i]);
Serial.print("-");
}
PrintHex8(bytes[11]);
Serial.println();
Serial.println();
delay(5000);
}
Zoomx
Пт 30 марта 2018 г., 17:34
Кажется, что каждая пара байтов заменяется.
victor_pv
Пт 30 марта 2018 г., 22:32
Могу поспорить, что один из них читается Byte Byte, а другой - как uint16_t и uint32_t, так что из -за эндосии первые две пары поменяются, а затем следующие две группы или четыре заменяются.
И обмениваться байтами, вы можете использовать инструкцию Arm Rev. Теперь я не знал, что есть встроенный для оборота, но просто проверил, есть ли встроенный, и, очевидно, есть: есть:
И обмениваться байтами, вы можете использовать инструкцию Arm Rev. Теперь я не знал, что есть встроенный для оборота, но просто проверил, есть ли встроенный, и, очевидно, есть: есть:
Serial.print("Unique ID is ");
Serial.print(__builtin_bswap16(*(idBase0)), HEX);
Serial.print(__builtin_bswap16(*(idBase1)), HEX);
Serial.print(__builtin_bswap32(*(idBase2)), HEX);
Serial.println(__builtin_bswap32(*(idBase3)), HEX);
Efftek
Сб 25 августа 2018 г., 17:05
я’M Желаю нескольким модулям, подключенным к моему ПК через Ethernet. Хотя я выиграл’это использую MAC -адрес, мне все еще нужно создать один. Могу ли я использовать 48 байтов из этого идентификационного номера в качестве MAC -адреса, а не изобретать их? Я знаю я’D все еще должен назначать отдельные IP -адреса.
Ура, Стив.
Ура, Стив.
Моду
Четверг 30 августа 2018 г., 11:01
Да, особенно если вы ставите идентификатор в последовательном виде, который выводит ваше необходимое количество цифр для Mac.
Efftek
Сб 01 сентября 2018 г., 20:21
Я обнаружил, что могу использовать идентификационный номер в качестве Mac, при условии, что я установил первый байт на что -то вроде 0xea. Если я этого не сделаю, то это не работает.
Это мой код
Это мой код
#include
#include
byte *id5 = (byte *) (0x1FFFF7EC);
byte *id4 = (byte *) (0x1FFFF7EC+0x01);
byte *id3 = (byte *) (0x1FFFF7EC+0x02);
byte *id2 = (byte *) (0x1FFFF7EC+0x03);
byte *id1 = (byte *) (0x1FFFF7EC+0x04);
byte mac[] = { 0xEA, *id1, *id2, *id3, *id4, *id5 };
unsigned int localPort = 5000;
EthernetServer server(localPort);
SPIClass mSpi(2); //USING SPI2 PB12-PB15
void setup()
{
Serial.begin(115200);
delay(1000);
Ethernet.init(mSpi, PB12);
Ethernet.begin(mac);
Serial.print("IP Address assigned ");
Serial.println(Ethernet.localIP());
Serial.print("MAC assigned ");
for(int i=0; i<5; i++)
{
Serial.print(mac[i], HEX);
Serial.print("-");
}
Serial.println(mac[5], HEX);
server.begin();
}