Кто-то любит пирожки, а кто-то - нет.
Если вдруг хочется написать свой бутлоадер или встроенный самообновлятор ПО, то непременно нужно уметь перезаписывать флеш-память.
Микроконтроллеры STM32 предоставляют такую возможность, впрочем, как и все современные микроконтроллеры.

читать дальше

<< Предыдущее Следующее >>

@темы: arm, программизмы, электроника, stm32f4discovery, stm32

Комментарии
30.01.2014 в 17:50

И, если хотите вдруг делать обновлятор
Спасибо большое за статью! Есть необходимость сделать собственный обновлятор. Я уже побаловался стиранием и записью во флешь и действительно ВСЕ работает вплоть до того что можно стереть свою же собственную прошивку своими руками! Вот только я одного не понял: Как же сделать свой обновлятор, если после стирания нулевого сектора, где хранится программа, МК уже ничего больше делать не может??? Если будет время и желание напишите пожалуйста мне на почту: [email protected] Спасибо!
06.03.2014 в 11:53

Хорошая стать. Неплохо было бы ещё упомянуть про то, что для хранения настроек нужно выделить область памяти, которая не будет использоваться для кода, иначе при сохранении настроек можно затереть программу.
06.03.2014 в 12:43

Кто-то любит пирожки, а кто-то - нет.
Гость, да уж. Потому лучше брать далёкие страницы и ограничить область флеша в скрипте линкёра, будто его меньше, чем есть на самом деле. =)

Да и вообще хранить настройки в какой-нибудь внешней фрамке.
07.03.2014 в 12:02

Лучше конечно брать начальные страницы - они поменьше. Такая память хороша для того, чтобы один раз что-то настроить и не менять больше =).

Почему-то не получается писать по 2 байта... запись по 4 идёт как по маслу, а при записи по 2 флеш остаётся чистым, хотя FLASH_CR настроил правильно.
07.03.2014 в 12:10

Кто-то любит пирожки, а кто-то - нет.
Гость, что в статусе ошибки?) Там команда, по-моему, должна быть непременно STRH (чтоб именно 2 байта пихалось единовременно)...
07.03.2014 в 12:59

В статусе PGPERR.
В FLASH_CR записано 0x00000101.
Что за команда такая?
07.03.2014 в 13:05

Кто-то любит пирожки, а кто-то - нет.
Гость, ассемблерная, я про то, что одной записью должны быть 16 бит записаны.

А вы как записываете по два байта? Похоже на то, что совсем неправильно: PGPERR: Programming parallelism error. Set by hardware when the size of the access (byte, half-word, word, double word) during the program sequence does not correspond to the parallelism configuration PSIZE (x8, x16, x32, x64).
07.03.2014 в 13:23

использовал Ваш немного переделанный код:


сейчас сделал вот так:



и заработало.
наверно,из-за этого: u32 *D = (u32*)Address; потом пытаюсь в 4 байта писать - контроллер и ругается.
07.03.2014 в 13:34

Кто-то любит пирожки, а кто-то - нет.
Гость, да, второй вариант правильный — пишем 16 бит одной пачкой.

В первом варианте брались 16 бит, расширялись до 32 (тип D 32 битный) и записывались такой посылкой. Естественно, это флешу не нравилось, а если б и нравилось, всё равно было бы неправильно.
07.04.2014 в 17:33

Пробовал Ваш код, всё работает. Огромное спасибо. Есть к вам один вопрос, если установлен READ OUT PROTECTION c первым уровнем, как в таком случае делать обновление прошивки. Потому что стирание секторов, а также запись в флешь перестала работать. Буду очень благодарен за ответ.
11.04.2014 в 17:13

Кто-то любит пирожки, а кто-то - нет.
Гость, в рефмане написано:
«When the read protection Level 1 is set:
– No access (read, erase, program) to Flash memory or backup SRAM can be
performed while the debug feature is connected or while booting from RAM or
system memory bootloader. A bus error is generated in case of read request.
– When booting from Flash memory, accesses (read, erase, program) to Flash
memory and backup SRAM from user code are allowed.»

Т.е. чтение и запись отключаются, если происходит запуск с отладочным прибором или из системного бутлоадера.
11.04.2014 в 21:47

Огромное спасибо за ответ, я понял так что если есть срой обновлятор софта то защитить апаратно от считывания прошивки нельзя. Или я не прав, есть какие-то варианты? Если есть какая-то возможность, то опишите пожалуйста. Я думаю не только мне это будет интересно.
11.04.2014 в 23:47

Кто-то любит пирожки, а кто-то - нет.
Гость, почему же нельзя?

Если отладчиком прочитать нельзя да через системный бутлоадер тоже, то доступ к флешу только через вашу программу. А там уж как напишете. Можно только запись сделать, да ещё и с шифрованием...
11.04.2014 в 23:47

Кто-то любит пирожки, а кто-то - нет.
Гость, почему же нельзя?

Если отладчиком прочитать нельзя да через системный бутлоадер тоже, то доступ к флешу только через вашу программу. А там уж как напишете. Можно только запись сделать, да ещё и с шифрованием...
11.04.2014 в 23:47

Кто-то любит пирожки, а кто-то - нет.
Гость, почему же нельзя?

Если отладчиком прочитать нельзя да через системный бутлоадер тоже, то доступ к флешу только через вашу программу. А там уж как напишете. Можно только запись сделать, да ещё и с шифрованием...
12.04.2014 в 11:55

Я сделал саму прошивку с шифрованием и мой бутлоадер её раскодирует, но у меня проблема стереть нужные сектора и сделать в них запись. Это вообще както возможно. Например снять защиту в самом теле бут лоадера, прошить новый софт, а потом опять поставить защиту. Но я боюсь что когда сниму защиту то сотрётся вся память. Сам бутлоадер я расположил в конце памяти, мне так удобнее, хотя логичнее было б его сделать в начале. У меня обновление происходит при помощи выбора файла и его загрузки в внешнюю флешь память, а от туда я перезаписываю его в флешь проца, предварительно передав управление в бутлоадер который и делает перезапись.
У меня ещё вопрос, как из самой програмы проверить стоит ли зашита и включить её?
12.04.2014 в 13:04

Кто-то любит пирожки, а кто-то - нет.
Гость, отключать ничего не надо. На первом уровне азрешена работа с флешем, коли и запустились из него.

Мм, прочитать байт опций? Не помню, можно ль его записывать или нет (да можно, наверное)
14.04.2014 в 10:56

На первом уровне у меня и не стирается и не пишется флешь. По этому и спрашивал, что надо изменить чтоб работало. При снятой защите всё работает и стирается и пишется. И подскажите пожалуйста в каком регистре смотреть стоит ли защита и в каком регистре её установить.
Я иногда писать Вам не могу, пишет что "Администратор запретил вам публиковать ссылки в коментариях", хотя в моих сообщениях никаких ссылок нет.
PS: Я очень благодарен, что Вы не оставили меня без внимания.
14.04.2014 в 11:07

Кто-то любит пирожки, а кто-то - нет.
Гость, отладчик подключён? Бутлоадер?
Насчёт байт опций посмотрите в рефмане таблицу "Table 15. Description of the option bytes (STM32F405xx/07xx and STM32F415xx/17xx)" — там всё начинается с байта защиты.

Не знаю о.о Я о таком нитчего не знаю, ни о ссылках, ни о запрете. Может, это сайта админы знают.