Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сохранить серийный номер в памяти.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Jenya7
Мне нужно сохранить серийный номер в памяти.
В data блоке я понятно не могу. В code блоке тоже - данные потеряются при перепрошивке. Но в code блоке имеется SRAM сектор который как мне кажется non-volatile. Я прилепил картинку с памятью. Что вы посоветуете?
Сергей Борщ
Цитата(Jenya7 @ Jan 29 2015, 09:28) *
В data блоке я понятно не могу. В code блоке тоже - данные потеряются при перепрошивке.
При перепрошивке чем? Если для перепрошивки используется свой загрузчик, то серийный номер может располагаться в том же секторе и быть защищенным от записи вместе с загрузчиком. Любая *RAM хранит данные только пока есть питание.
Jenya7
Цитата(Сергей Борщ @ Jan 29 2015, 12:51) *
При перепрошивке чем? Если для перепрошивки используется свой загрузчик, то серийный номер может располагаться в том же секторе и быть защищенным от записи вместе с загрузчиком. Любая *RAM хранит данные только пока есть питание.

а как вставить серийник в hex файл?
я прошиваю утилитой SEGGER J-FLASH ARM.
ViKo
Размышляю над тем же. Пока выдаю уникальный номер микронтроллера (32 бита из 96), но эти цифры во-первых, громадные (даже старшие биты не нулевые, не знаю, как они свой номер генерируют), во вторых, не совпадают с номером на задней панели прибора.
У меня есть внешняя SPI-flash память, могу в нее записывать при настройке-регулировке, с помощью настроечных функций, недоступных пользователю. Также можно и внутреннюю память программировать, только задать номер нужно.
Jenya7
Цитата(ViKo @ Jan 29 2015, 13:25) *
Размышляю над тем же. Пока выдаю уникальный номер микронтроллера (32 бита из 96), но эти цифры во-первых, громадные (даже старшие биты не нулевые, не знаю, как они свой номер генерируют), во вторых, не совпадают с номером на задней панели прибора.
У меня есть внешняя SPI-flash память, могу в нее записывать при настройке-регулировке, с помощью настроечных функций, недоступных пользователю. Также можно и внутреннюю память программировать, только задать номер нужно.

я прошиваю утилитой SEGGER J-FLASH ARM. там есть возможность указать start address и end address. может можно начать не с нулевого адреса а на свободное место прошить серийник?

скажем я начинаю програмировать не с первого сектора а со второго. а в первый я записываю серийник. я понимаю что теряется 512 байт но что делать. селяви.
demiurg_spb
Утилита srecord вам в помощь.
И прошивайте чем хотите.
arhiv6
Jenya7, да, можно так делать. Единственный минус - для записи участок памяти надо стереть, стирается она секторами по 4кб. Например, можно использовать последний сектор flash хранения номера. Подробнее тут.
Jenya7
Цитата(demiurg_spb @ Jan 29 2015, 13:38) *
Утилита srecord вам в помощь.
И прошивайте чем хотите.

что то не нашел такую.
Сергей Борщ
Цитата(Jenya7 @ Jan 29 2015, 10:04) *
а как вставить серийник в hex файл?
Можно использовать srecord. Да в конце концов вы же программист - напишите простую консольную программу, которая считывает hex, добавляет в него серийный номер и записывает обратно.
Jenya7
Цитата(arhiv6 @ Jan 29 2015, 13:38) *
Jenya7, да, можно так делать. Единственный минус - для записи участок памяти надо стереть, стирается она секторами по 4кб. Например, можно использовать последний сектор flash хранения номера. Подробнее тут.

проблема в том что запись во флэш нужно будет разместить в коде. и на каждом рестарте будет писаться серийник во флэш.
ViKo
Осенило. Недавно обсуждалось, как с защитой STM32 работать. Там же есть еще OTP память. И в Кейле для нее свой алгоритм программирования. Осталось только задать серийный номер. Каждый раз компилировать проект... Не сложно, компилируются только измененные файлы.
Сергей Борщ
Цитата(Jenya7 @ Jan 29 2015, 10:52) *
что то не нашел такую.
Как вам это удается???

Нажмите для просмотра прикрепленного файла
Jenya7
Цитата(Сергей Борщ @ Jan 29 2015, 13:52) *
Можно использовать srecord. Да в конце концов вы же программист - напишите простую консольную программу, которая считывает hex, добавляет в него серийный номер и записывает обратно.

когда то давно мы писали такую утилиту, еще на делфи4. но это было давно я все забыл, сейчас начинать вникать в hex формат, парсить его...лучше уж srecord вопрос где его есть? sm.gif
Сергей Борщ
Цитата(ViKo @ Jan 29 2015, 10:54) *
Там же есть еще OTP память.
"Если контроллер не указан - значит AVR STM32"? wink.gif У автора, судя по краю надписи на снимке экрана, какой-то другой.
Jenya7
Цитата(Сергей Борщ @ Jan 29 2015, 13:56) *

это у меня гугл заглючил. sm.gif


Цитата(Сергей Борщ @ Jan 29 2015, 13:59) *
"Если контроллер не указан - значит AVR STM32"? wink.gif У автора, судя по краю надписи на снимке экрана, какой-то другой.

у меня EFM32TG842 - всю кровь мне попортил
Сергей Борщ
Кстати, на всякий случай, этот пример вставляет 2-байтовый серийный номер 1234 в файл firmware.hex начианая с адреса 0x08000FFE:
Код
srec_cat -address-length=4 '(' firmware.hex -intel -exclude 0x08000FFE 0x08001000 ')' -generate 0x08000FFE 0x08001000 -leconstant 1234 2 -o firmware.hex -intel


Jenya7
Цитата(Сергей Борщ @ Jan 29 2015, 14:08) *
Кстати, на всякий случай, этот пример вставляет 2-байтовый серийный номер 1234 в файл firmware.hex начианая с адреса 0x08000FFE:
Код
srec_cat -address-length=4 '(' firmware.hex -intel -exclude 0x08000FFE 0x08001000 ')' -generate 0x08000FFE 0x08001000 -leconstant 1234 2 -o firmware.hex -intel

большое спасибо. я думаю это именно то что нужно
ViKo
Цитата(Сергей Борщ @ Jan 29 2015, 11:59) *
У автора, судя по краю надписи на снимке экрана, какой-то другой.

Ага.
А для себя только что нашел в ST-Link Utility
Цитата
When the Memory data zone displays device memory contents, any modification is
automatically applied to the chip. You can modify user Flash memory, RAM memory and
peripherals registers.
For the STM32 F2 and STM32 F4 devices, you can modify the OTP area directly from the
memory data zone.

А еще есть STM32 ST-LINK Utility command line interface (CLI), но что-то пока не получается с ним... пока не время.
Jenya7
вообщем решили так - на производстве будут зашивать серийник в свободный флеш а я по этому адресу буду читать.
MiklPolikov
У ST есть программа stvp
Она позволяет при программировании записывать серийник по заданному адресу, автоматически его инкрементировать при каждой прошивке и т.д.
Vasily_
У каждого камня от STM есть свой уникальный серийный номер прошитый на заводе.
megajohn
Цитата(Vasily_ @ Feb 9 2015, 12:22) *
У каждого камня от STM есть свой уникальный серийный номер прошитый на заводе.


дык автор указал что, у него EFM

и зачем советуют Srecord если JFlash сам умеет ?
Нажмите для просмотра прикрепленного файла

demiurg_spb
Цитата(megajohn @ Feb 9 2015, 12:32) *
и зачем советуют Srecord если JFlash сам умеет ?
Каждый кулик своё болото хвалит...
Да и апологетам GNU не с руки советовать всякие "шняги".
Другое деле консоль: make, srecord, openocd, avrdude...
Повторюсь, инструментарий это дело вкуса, ну и ещё, наверное, показатель профессионализма.
Зачем изучать всякие разные тулзы, когда можно изучить хорошо что-то одно и применять это для различных платформ и на различных платформах, что тоже немаловажно.
Сергей Борщ
Цитата(megajohn @ Feb 9 2015, 11:32) *
зачем советуют Srecord если JFlash сам умеет ?
Если бы не советовали - вопрошавший две недели ждал бы ответа про JFlash. Не часто пользователи JFlash заходят sm.gif
Jenya7
Цитата(Сергей Борщ @ Feb 9 2015, 18:46) *
Если бы не советовали - вопрошавший две недели ждал бы ответа про JFlash. Не часто пользователи JFlash заходят sm.gif

он у меня програмировать не хочет - просить лайсенс. sad.gif
A. Fig Lee
Цитата(Jenya7 @ Feb 9 2015, 11:15) *
он у меня програмировать не хочет - просить лайсенс. sad.gif

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