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

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

12 hours ago, jcxz said:

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

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

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

12 hours ago, jcxz said:

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

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

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

 

12 hours ago, jcxz said:

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

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

 

 

 

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

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


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

2 часа назад, pokk сказал:

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

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

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

Цитата

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

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

Цитата

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

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

Цитата

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

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

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


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

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 это вилами по воде.

 

 

 

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


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

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

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

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

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


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

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.

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


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

On 5/23/2019 at 1:33 PM, jcxz said:

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

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

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


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

3 hours ago, pokk said:

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

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

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


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

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

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

 

 

 

 

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

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


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

12 minutes ago, pokk said:

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

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

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


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

4 часа назад, pokk сказал:

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

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

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

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

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

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


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

19 minutes ago, jcxz said:

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

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

 

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


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

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

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

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

 

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

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

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

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


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

1 minute ago, jcxz said:

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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