Jump to content

    

Продублировать значение Flash в несколько секций.

1 hour ago, jcxz said:

Это в каких МК?

STM32F4

Share this post


Link to post
Share on other sites
12 hours ago, jcxz said:

Убрать FTP из бутлоадера. Поместить его в "основное приложение". А буту оставить только его настоящие функции. И не надо будет никуда IP-адрес передавать.

Обсуждали это уже тут тыщу раз.

У меня нету столько ОЗУ, что бы принять всю новую прошивку, а потом пошить её, так что прошиваю по мере приема образа прошивки. 
 

12 hours ago, jcxz said:

А дефолтные настройки хранятся не в какой-то области флешь, а в самой программе

А как в вашем случае происходит запись серийного номера или что-то типа него ?  Я его устанавливаю через WEB под паролем (пользователю это не видно и не доступно)

И заношу серийный номер в дефолтную область, что бы если основные настройки будут не валидны, то полностью все восстановиться + серийник 

 

12 hours ago, jcxz said:

И не надо будет никуда IP-адрес передавать. 

Я уже думаю сделать что бы по переходу в бут (перезагрузке)  внешнему TCP/IP  не дергать  reset, тогда ip останется там.

 

 

 

Edited by pokk

Share this post


Link to post
Share on other sites
2 часа назад, pokk сказал:

У меня нету столько ОЗУ, что бы принять всю новую прошивку, а потом пошить её, так что прошиваю по мере приема образа прошивки.

ОЗУ для этого не нужно. Можно использовать любую память: хоть внешнюю flash, хоть внутреннюю flash.

Используете ОЗУ, а не боитесь что во время обновления дёрнется питание (или по другой причине будет рестарт ПО) и потеряется IP-адрес переданный в бутлоадер и устройство превратится в кирпич?

Цитата

А как в вашем случае происходит запись серийного номера или что-то типа него ?  Я его устанавливаю через WEB под паролем (пользователю это не видно и не доступно)

Серийный номер у меня находится во внутренней flash. В первом секторе. Вместе с MAC и другими данными, записываемыми однократно при изготовлении устройства. И записываться может или вместе с первоначальной прошивкой или по отдельности тем же программатором (по SWD или UART). Это можно (и нужно) делать автоматически без всяких веб-интерфейсов и без ручного ввода (предпочтительно).

Цитата

И заношу серийный номер в дефолтную область, что бы если основные настройки будут не валидны, то полностью все восстановиться + серийник

Зачем серийный номер восстанавливать? Он по идее должен храниться в немодифицируемой области. Зачем его хранить вместе с изменяемыми настройками??? У вас там какая-то куча всего намешана.... :wacko2:

Цитата

Я уже думаю сделать что бы по переходу в бут (перезагрузке)  внешнему TCP/IP  не дергать  reset, тогда ip останется там.

А если ресет дёрнется сам? Если этот ваш "внешний IP" (не знаю что это такое) сам его потеряет в процессе? Если в этот момент перезагрузится роутер, который раздаёт инет? ...или ещё чего?

Share this post


Link to post
Share on other sites
4 minutes ago, jcxz said:

ОЗУ для этого не нужно. Можно использовать любую память: хоть внешнюю flash, хоть внутреннюю flash.

Внешней нету, есть только внутренняя,  это как сначала пишем в отдельную область а после перезагрузки в boot копирует от туда в основное ПО? 

 

9 minutes ago, jcxz said:

Зачем его хранить вместе с изменяемыми настройками???

Не с изменяемыми настройками а с дефолтными.

10 minutes ago, jcxz said:

У вас там какая-то куча всего намешана.... :wacko2:

В принципе да =) , для сохранение всех перемененных во Flash создал структуру,  и вся работа с сохранением идет через её,  вот в ней все и находиться и серийник и IP и калибровочные константы. 

17 minutes ago, jcxz said:

А если ресет дёрнется сам? Если этот ваш "внешний IP" (не знаю что это такое) сам его потеряет в процессе? Если в этот момент перезагрузится роутер, который раздаёт инет? ...или ещё чего? 

На  это думаю сделать проверку, был ли он проинициализирован (wiznet w5500), и считать с него, если он потерял IP, то вбить дефолтный. Но да алгоритм проверки потерял не потерял IP это вилами по воде.

 

 

 

Share this post


Link to post
Share on other sites
11 минут назад, pokk сказал:

Внешней нету, есть только внутренняя,  это как сначала пишем в отдельную область а после перезагрузки в boot копирует от туда в основное ПО? 

Именно так. Только со внутренней нужно быть аккуратнее: во время операций стирания/записи может быть невозможно выполнять код из flash. Это у каждого МК по-своему. И длительность этой невозможности может быть большой. Так что: если нужно чтобы что-то продолжало в это время работать (IP-стек или ещё чего), нужен или МК с dual-bank flash или перемещать весь такой код в ОЗУ.

Share this post


Link to post
Share on other sites
14 часов назад, scifi сказал:

STM32F4

В мануале на STM32F4 указано:

The contents of the Flash memory are not guaranteed if a device reset occurs during a Flash memory operation.

Вот интересно: О каком содержимом речь? Содержимое всей флешь не гарантируется или только той страницы/сектора, с которой в данный момент производится операция?

PS: Интерес чисто академический - в единственном моём текущем проекте на STM32F4 обновление делается только по SWD.

Share this post


Link to post
Share on other sites
On 5/23/2019 at 1:33 PM, jcxz said:

Серийный номер у меня находится во внутренней flash. В первом секторе. Вместе с MAC и другими данными, записываемыми однократно при изготовлении устройства. И записываться может или вместе с первоначальной прошивкой или по отдельности тем же программатором (по SWD или UART). Это можно (и нужно) делать автоматически без всяких веб-интерфейсов и без ручного ввода (предпочтительно). 

Это как вместе "с первоначальной прошивкой"? Серийный номер входит в состав  hex файла? Это для каждого устройства, заново hex файл компилировать ?   

Share this post


Link to post
Share on other sites
3 hours ago, pokk said:

Это как вместе "с первоначальной прошивкой"? Серийный номер входит в состав  hex файла? Это для каждого устройства, заново hex файл компилировать ?   

Никто не мешает автоматизировать процесс прошивки так, чтобы временный hex файл (со свежим серийным номером) генерировался каждый раз. Это же не святыня какая-то, просто hex файл. Компилировать не нужно, есть утилиты, которые могут подставить нужные байты в нужные адреса. S-record, например.

Share this post


Link to post
Share on other sites

Я уже думал в сторону, написание скрипта который модифицирует выходной hex файл добавляя в него серийный номер, но все же было интересно как это делается по уму.

А в случае перепрошивки как быть, если в серийном номере есть инкремент ?

 

 

 

 

Edited by pokk

Share this post


Link to post
Share on other sites
12 minutes ago, pokk said:

А в случае перепрошивки как быть, если в серийном номере есть инкремент ?

Написание скриптов - это тоже программирование. Там можно накодить всё, что угодно. Какую-то простейшую автоматизацию можно сделать батниками. Если нужно больше возможностей, надо задействовать интерпретатор скриптового языка. Как-то так исторически сложилось, что я широко использую gawk. Кому-то нравится питон и даже перл. В винде есть интерпретаторы visual basic и javascript. В общем, на любой вкус.

Share this post


Link to post
Share on other sites
4 часа назад, pokk сказал:

Серийный номер входит в состав  hex файла? Это для каждого устройства, заново hex файл компилировать ?   

Зачем? Просто добавить секцию .hex-файла с этим номером.

47 минут назад, pokk сказал:

А в случае перепрошивки как быть, если в серийном номере есть инкремент ?

А в чём проблема? Инкрементируете и добавляете его к .hex прошивки. Можно даже батником.

Share this post


Link to post
Share on other sites
19 minutes ago, jcxz said:

в чём проблема? Инкрементируете и добавляете его к .hex прошивки. Можно даже батником. 

Да я тут хотел больше узнать как скрипт нормально организовать, в случае если надо вернуть тот серийный номер который уже был (до обновления ПО) и менять нечего не надо. 

 

Share this post


Link to post
Share on other sites
6 минут назад, pokk сказал:

в случае если надо вернуть тот серийный номер который уже был (до обновления ПО) и менять нечего не надо. 

Его не надо стирать чтобы не "возвращать".

 

В 23.05.2019 в 09:33, jcxz сказал:

Серийный номер у меня находится во внутренней flash. В первом секторе. Вместе с MAC и другими данными, записываемыми однократно при изготовлении устройства.

Обратите внимание на "однократно".

Share this post


Link to post
Share on other sites
1 minute ago, jcxz said:

Его не надо стирать чтобы не возвращать.

А если ПО более простое где нету bootloader и прошивка идет через ST-Link Utilite как ему передать что бы он не стирал ?

Share this post


Link to post
Share on other sites
3 минуты назад, pokk сказал:

А если ПО более простое где нету bootloader и прошивка идет через ST-Link Utilite как ему передать что бы он не стирал ?

Про ST-Link не знаю - не использую. Но J-Link-у можно указать: стирать всю флешь или только по-секторно.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now