Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F051C8T6 96 битный уникальный ID
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
nanorobot
Считываю UID процессора следующим способом

CODE
uint32_t id[3];
const uint32_t* STM32_UID = (uint32_t*)0x1FFFF7AC;
id[0] = STM32_UID[0];
id[1] = STM32_UID[1];
id[2] = STM32_UID[2];

константа 0x1FFFF7AC из документации. получаю id[2] всегда равно 0. id[1] одинаково для всех чипов(4 штуки) и равно 0х4136570A. И лишь id[0] слегка отличаются, причем большая
часть битов равна 0. Например 0х00350043, 0х00310043, 0х00360043б 0х00220043 ... Я что то делаю не так? Больше всего смущает компонента равная нулю...
scifi
В мануале сказано: id[0] - это X и Y координаты чипа на пластине, id[1] - номер пластины в партии и номер партии (в кодировке ASCII), id[2] - продолжение номера партии (в кодировке ASCII). Не оч. понятно, что значит "в кодировке ASCII" (пишите им письма), но вроде бы ничего особо страшного не видно.
adnega
Цитата(nanorobot @ May 30 2018, 19:55) *
Я что то делаю не так? Больше всего смущает компонента равная нулю...

ID[0] = 0х00350043, 0х00310043, 0х00360043, 0х00220043 очень похожи на BCD-значения координат чипов на подложке.
ID[1] = 0х(41)(36)(57).0A = A6W.10 - очень похоже на ACSII-имя партии и номер подложки в партии.
nanorobot
Цитата(adnega @ May 30 2018, 22:35) *
ID[0] = 0х00350043, 0х00310043, 0х00360043, 0х00220043 очень похожи на BCD-значения координат чипов на подложке.
ID[1] = 0х(41)(36)(57).0A = A6W.10 - очень похоже на ACSII-имя партии и номер подложки в партии.

ТО есть уникальность есть или ее нет? X и Y могут совпасть, а id[2] == 0 ?
adnega
Цитата(nanorobot @ May 30 2018, 21:22) *
ТО есть уникальность есть или ее нет? X и Y могут совпасть, а id[2] == 0 ?

У вас все МК с одной пластины. Отличаются X и Y.
scifi
Цитата(nanorobot @ May 30 2018, 21:22) *
ТО есть уникальность есть или ее нет?

Уникальность есть. Во всяком случае, заявленный процесс это гарантирует. Ну а дальше возможен "человечески фактор", контрафакт и т.д., но это другая история.
nanorobot
Цитата(scifi @ May 30 2018, 23:37) *
Уникальность есть. Во всяком случае, заявленный процесс это гарантирует. Ну а дальше возможен "человечески фактор", контрафакт и т.д., но это другая история.


согласно последним данным id[2] у всех моих четырех чипов тоже одинаковый и равен 0x20323336
Arlleex
Вот мой F429. Это я к тому, что нулей там нет. Но это, видимо, у Вас нормально, мне кажется. Ну нули и нули, что тут такого.
nanorobot
Цитата(Arlleex @ May 31 2018, 01:04) *
Вот мой F429. Это я к тому, что нулей там нет. Но это, видимо, у Вас нормально, мне кажется. Ну нули и нули, что тут такого.

в предыдущем сообщении я уже казал что не нули., а нечто очень пожее на Ваш случай. Нули были из за высокого уровня оптимищзации, компилятор просто отменял считывание третьего слова UID.
aaarrr
Цитата(nanorobot @ May 30 2018, 23:25) *
Нули были из за высокого уровня оптимищзации

Все же не из-за оптимизации:
Цитата
volatile const uint32_t* STM32_UID = (uint32_t*)0x1FFFF7AC;
scifi
Цитата(nanorobot @ May 30 2018, 23:25) *
в предыдущем сообщении я уже казал что не нули., а нечто очень пожее на Ваш случай. Нули были из за высокого уровня оптимищзации, компилятор просто отменял считывание третьего слова UID.

Семён Семёныч! Ну и да, товарищи уже намекнули, что volatile здесь более, чем уместен.
ViKo
С чего это вдруг компилятор отказался читать non-volatile переменную?
adnega
Цитата(ViKo @ May 31 2018, 07:25) *
С чего это вдруг компилятор отказался читать non-volatile переменную?

Он не отказывается ее читать, просто иногда он считает, что имеет полное представление о ее содержимом на стадии компиляции
и выкидывает целые куски кода из соображений оптимизации. Однажды включил LTO и многое перестало читаться верно,
дикие "volatile const" для некоторых данных пришлось с умом дописывать. Для себя вывел правило, если в переменную заносит
значение что-то в обход компилятора, то volatile поможет.
nanorobot
Цитата(adnega @ May 31 2018, 10:01) *
Он не отказывается ее читать, просто иногда он считает, что имеет полное представление о ее содержимом на стадии компиляции
и выкидывает целые куски кода из соображений оптимизации. Однажды включил LTO и многое перестало читаться верно,
дикие "volatile const" для некоторых данных пришлось с умом дописывать. Для себя вывел правило, если в переменную заносит
значение что-то в обход компилятора, то volatile поможет.

В моем случае, видимо, причина была в том, что данная переменная после получения значения, нигде не использовалась.
Поэтому компилятор посчитал себя вправе ее не вычислять...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.