Перейти к содержанию
    

STM32F051C8T6 96 битный уникальный ID

Считываю UID процессора следующим способом

 

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 ... Я что то делаю не так? Больше всего смущает компонента равная нулю...

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В мануале сказано: id[0] - это X и Y координаты чипа на пластине, id[1] - номер пластины в партии и номер партии (в кодировке ASCII), id[2] - продолжение номера партии (в кодировке ASCII). Не оч. понятно, что значит "в кодировке ASCII" (пишите им письма), но вроде бы ничего особо страшного не видно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я что то делаю не так? Больше всего смущает компонента равная нулю...

ID[0] = 0х00350043, 0х00310043, 0х00360043, 0х00220043 очень похожи на BCD-значения координат чипов на подложке.

ID[1] = 0х(41)(36)(57).0A = A6W.10 - очень похоже на ACSII-имя партии и номер подложки в партии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ТО есть уникальность есть или ее нет? X и Y могут совпасть, а id[2] == 0 ?

У вас все МК с одной пластины. Отличаются X и Y.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ТО есть уникальность есть или ее нет?

Уникальность есть. Во всяком случае, заявленный процесс это гарантирует. Ну а дальше возможен "человечески фактор", контрафакт и т.д., но это другая история.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уникальность есть. Во всяком случае, заявленный процесс это гарантирует. Ну а дальше возможен "человечески фактор", контрафакт и т.д., но это другая история.

 

согласно последним данным id[2] у всех моих четырех чипов тоже одинаковый и равен 0x20323336

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот мой F429. Это я к тому, что нулей там нет. Но это, видимо, у Вас нормально, мне кажется. Ну нули и нули, что тут такого.

image.png

Изменено пользователем Arlleex

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот мой F429. Это я к тому, что нулей там нет. Но это, видимо, у Вас нормально, мне кажется. Ну нули и нули, что тут такого.

image.png

в предыдущем сообщении я уже казал что не нули., а нечто очень пожее на Ваш случай. Нули были из за высокого уровня оптимищзации, компилятор просто отменял считывание третьего слова UID.

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нули были из за высокого уровня оптимищзации

Все же не из-за оптимизации:

volatile const uint32_t* STM32_UID = (uint32_t*)0x1FFFF7AC;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в предыдущем сообщении я уже казал что не нули., а нечто очень пожее на Ваш случай. Нули были из за высокого уровня оптимищзации, компилятор просто отменял считывание третьего слова UID.

Семён Семёныч! Ну и да, товарищи уже намекнули, что volatile здесь более, чем уместен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С чего это вдруг компилятор отказался читать non-volatile переменную?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С чего это вдруг компилятор отказался читать non-volatile переменную?

Он не отказывается ее читать, просто иногда он считает, что имеет полное представление о ее содержимом на стадии компиляции

и выкидывает целые куски кода из соображений оптимизации. Однажды включил LTO и многое перестало читаться верно,

дикие "volatile const" для некоторых данных пришлось с умом дописывать. Для себя вывел правило, если в переменную заносит

значение что-то в обход компилятора, то volatile поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Он не отказывается ее читать, просто иногда он считает, что имеет полное представление о ее содержимом на стадии компиляции

и выкидывает целые куски кода из соображений оптимизации. Однажды включил LTO и многое перестало читаться верно,

дикие "volatile const" для некоторых данных пришлось с умом дописывать. Для себя вывел правило, если в переменную заносит

значение что-то в обход компилятора, то volatile поможет.

В моем случае, видимо, причина была в том, что данная переменная после получения значения, нигде не использовалась.

Поэтому компилятор посчитал себя вправе ее не вычислять...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...