|
STM32 flash, помогите разобраться |
|
|
|
May 30 2014, 07:34
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
В документации написано что шина данных FLASH памяти у STM32 128-ми битная. Но при этом в коде startup, где идет инициализация переменных в ОЗУ, копирование идет по 4 байта (32 бита) инструкции Код ... ldr r3, [r3, r1] str r3, [r0, r1] adds r1, r1, #4 ... У ST есть AppNote EEPROM emulation in STM32F10x microcontrollers, где при чтении из FLASH (виртуальной EEPROM) копируются 16-ти битные данные Код /** * @brief Returns the last stored variable data, if found, which correspond to * the passed virtual address * @param VirtAddress: Variable virtual address * @param Data: Global variable contains the read variable value * @retval Success or error status: * - 0: if variable was found * - 1: if the variable was not found * - NO_VALID_PAGE: if no valid page was found. */ uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data) Как же все-таки читается FLASH? А если мне надо только один байт прочитать из FLASH ?
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
 |
Ответов
|
Jul 1 2014, 11:15
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(ViKo @ Jul 1 2014, 07:13)  Да, можно разместить "прошивальщик" в конце flash, например. И не трогать этот сектор никогда. Нет, прошивальщик должен всегда стартовать по нулевому аддрессу, с рестарта. Иначе смысл теряется. А вот программа может быть где угодно
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
Jul 1 2014, 11:25
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(ViKo @ Jul 1 2014, 14:18)  По нулевому адресу расположена таблица startup. Таблица векторов прошивальщика. Приложение со своей собственной таблицей может располагаться где угодно. При старте запускается прошивальщик, он проверяет целостность приложения, переключает VTOR на вектора приложения (для Cortex-M0 копирует вектора приложения в ОЗУ и делает ремап), грузит указатель стека из векторов приложения и передает управление на вектор Reset приложения. Приложение может отсутствовать вообще (или быть испорченным, недозаписанным), в этом случае прошивальщик весело мигая светодиодом ожидает новую прошивку для приложения, записывает ее и делает рестарт. После рестарта прошивальщик проверяет целостность... (далее читать с начала).
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 1 2014, 11:34
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Сергей Борщ @ Jul 1 2014, 14:25)  При старте запускается прошивальщик, он проверяет целостность приложения, переключает VTOR на вектора приложения (для Cortex-M0 копирует вектора приложения в ОЗУ и делает ремап), грузит указатель стека из векторов приложения и передает управление на вектор Reset приложения. А если приложение целое, но хочу зашить новую прошивку? Чем подтолкнуть? А целостность как определить - CRC посчитать? А размеры кода откуда узнать, хранить во flash, рядом с CRC? В конце flash сектора большие, по 128 KB (речь идет про STM32F20x). Значит, загрузчик надо расположить в начальных секторах, или в OTP (страшно!).
|
|
|
|
|
Jul 1 2014, 11:48
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(ViKo @ Jul 1 2014, 14:34)  А если приложение целое, но хочу зашить новую прошивку? Чем подтолкнуть? Я делаю программный сброс из приложения. А загрузчик после обновления делает сброс по собаке. При старте загрузчика проверяю источник сброса и если он программный - ухожу на обновление, если нет - проверяю целостность и запускаю приложение. Цитата(ViKo @ Jul 1 2014, 14:34)  А целостность как определить - CRC посчитать? Да, тем более что у STM32 есть и аппаратный расчет CRC и DMA. Цитата(ViKo @ Jul 1 2014, 14:34)  А размеры кода откуда узнать, хранить во flash, рядом с CRC? Я размер храню сразу после области векторов приложения. У меня его туда линкет прописывает: Код .text : { _image_start = .; KEEP(*(.isr_vector))
LONG((_image_end - _image_start) / 4); /* application size, in 4-byte words */ .................... } > TEXT
.data : { . = ALIGN(4); _sdata = .; /* start of .data label */ *(.ramfunc) *(.ramfunc.*) *(.data) *(.data.*) . = ALIGN(4); _edata = .; /* end of .data label */ } > RAM AT > TEXT _sidata = LOADADDR(.data); /* start of initialized data label */
.crc : { . = . + 4; /* reserve space for CRC */ _image_end = .; } > TEXT Цитата(ViKo @ Jul 1 2014, 14:34)  Значит, загрузчик надо расположить в начальных секторах, или в OTP (страшно!). Разумеется в начальных секторах. Чтобы всегда, после заливки чего угодно он всегда стартовал первым и имел возможность залить другое приложения. Я предусматриваю одну из свободных ног для принудительного запуска загрузчика - если залито приложение, которое хотя и целое, но тем не менее нерабочее, то сняв питание, закоротив эту ногу и подав питание снова, я из кирпича получаю готовое к обновлению устройство.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 1 2014, 13:16
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Сергей Борщ @ Jul 1 2014, 14:48)  Я предусматриваю одну из свободных ног для принудительного запуска загрузчика - если залито приложение, которое хотя и целое, но тем не менее нерабочее, то сняв питание, закоротив эту ногу и подав питание снова, я из кирпича получаю готовое к обновлению устройство. И вчём смысл такого решения, если всё равно необходимо будет разобрать всё устройство (что порой бывает не просто), чтобы добраться до платы с процессором. Там уже что ножку коротить, что программатор подключить, особой разницы нету.
|
|
|
|
Сообщений в этой теме
dimka76 STM32 flash May 30 2014, 07:34 aaarrr Цитата(dimka76 @ May 30 2014, 15:44) Как ... May 30 2014, 07:41 scifi Цитата(dimka76 @ May 30 2014, 15:44) В до... May 30 2014, 09:37 dimka76 Спасибо всем ответившим.
Цитата(scifi @ May ... May 30 2014, 14:23  AHTOXA Цитата(dimka76 @ May 31 2014, 00:33) Код ... May 31 2014, 01:07   dimka76 Цитата(AHTOXA @ May 31 2014, 09:17) У вас... Jun 1 2014, 04:39 ViKo Цитата(scifi @ May 30 2014, 12:37) Кстати... Jul 1 2014, 10:00  scifi Цитата(ViKo @ Jul 1 2014, 14:00) Если мож... Jul 1 2014, 10:10 Golikov A. регистр SL - это стэк лимит, а вот зачем в него ч... May 30 2014, 18:19 kan35 Между памятью и ядром есть прослойка в виде наприм... May 31 2014, 00:34 Haamu Чтобы не плодить новых тем, продолжу эту.
Во flash... Jun 20 2014, 05:45 Сергей Борщ Цитата(Haamu @ Jun 20 2014, 08:45) подска... Jun 20 2014, 07:35 Haamu Читал. Правда не в Programming manual, а в Referen... Jun 20 2014, 11:17 _Артём_ Цитата(Haamu @ Jun 20 2014, 15:17) Так и ... Jun 20 2014, 11:42 Сергей Борщ Цитата(Haamu @ Jun 20 2014, 14:17) пишу о... Jun 20 2014, 12:20 ViKo Как бы тогда перекинуть функцию записи в ОЗУ, и вы... Jul 1 2014, 10:18 scifi Цитата(ViKo @ Jul 1 2014, 14:18) Как бы т... Jul 1 2014, 10:22  Сергей Борщ Цитата(scifi @ Jul 1 2014, 13:22) Самый п... Jul 1 2014, 11:07 A. Fig Lee Цитата(ViKo @ Jul 1 2014, 06:18) Как бы т... Jul 1 2014, 11:06       demiurg_spb Цитата(doom13 @ Jul 1 2014, 17:16) И вчём... Jul 1 2014, 13:32        doom13 Цитата(demiurg_spb @ Jul 1 2014, 16:32) Э... Jul 1 2014, 13:41         scifi Цитата(doom13 @ Jul 1 2014, 17:41) Т.е. д... Jul 1 2014, 13:57         demiurg_spb Цитата(doom13 @ Jul 1 2014, 17:41) Т.е. д... Jul 2 2014, 08:42          doom13 Цитата(demiurg_spb @ Jul 2 2014, 11:42) О... Jul 2 2014, 08:46           demiurg_spb Цитата(doom13 @ Jul 2 2014, 12:46) Может ... Jul 2 2014, 09:11          DmitryM Цитата(demiurg_spb @ Jul 2 2014, 11:42) И... Jul 2 2014, 15:02 ViKo В секторе 0 расположить загрузчик, основную програ... Jul 1 2014, 12:15 Сергей Борщ Цитата(ViKo @ Jul 1 2014, 15:15) В сектор... Jul 1 2014, 12:22 ViKo Я последовательно соединял две независимых кнопки ... Jul 1 2014, 13:55 Golikov A. А у меня есть видеорегистратор, который виснет есл... Jul 1 2014, 15:11 Сергей Борщ Цитата(Golikov A. @ Jul 1 2014, 18:11) Но... Jul 1 2014, 15:29 ViKo А вот можно ли зайти во встроенный загрузчик в STM... Jul 2 2014, 08:55 Сергей Борщ У ST есть несколько подробных аппнотов по загрузчи... Jul 2 2014, 08:59 ViKo Цитата(Сергей Борщ @ Jul 2 2014, 11:59) У... Jul 2 2014, 09:05  scifi Цитата(ViKo @ Jul 2 2014, 13:05) Листал. ... Jul 2 2014, 09:42 Сергей Борщ Писал ответ в соседнюю тему и пришла в голову така... Jul 4 2014, 17:37 A. Fig Lee Цитата(Сергей Борщ @ Jul 4 2014, 13:37) П... Jul 4 2014, 17:57 scifi Цитата(Сергей Борщ @ Jul 4 2014, 21:37) П... Jul 4 2014, 18:39 Golikov A. Чего то я не понял бизнеса...
Хотим загрузить загр... Jul 4 2014, 18:20 Сергей Борщ Цитата(Golikov A. @ Jul 4 2014, 21:20) А ... Jul 4 2014, 18:42  A. Fig Lee Цитата(Сергей Борщ @ Jul 4 2014, 14:42) В... Jul 4 2014, 19:14 Golikov A. Ну то есть у нас штатный запуск проца на прошивку ... Jul 5 2014, 06:40 ViKo Так же можно потерять и самопальный загрузчик. Вер... Jul 7 2014, 10:10 Golikov A. ну как можно потерять самопальный загрузчик? Если ... Jul 7 2014, 13:11 ViKo Цитата(Golikov A. @ Jul 7 2014, 16:11) ну... Jul 7 2014, 13:58  A. Fig Lee Цитата(ViKo @ Jul 7 2014, 09:58) Так же, ... Jul 7 2014, 15:01 ViKo И 3 ФигЛи, несомненно, лучше одного. Не зря сообра... Jul 7 2014, 20:00 Golikov A. Вижу о космосе вы знаете по наслышке
2 из 3 - это... Jul 7 2014, 20:18 scifi Цитата(Golikov A. @ Jul 8 2014, 00:18) На... Jul 7 2014, 20:34 A. Fig Lee Цитата(Golikov A. @ Jul 7 2014, 16:18) Ви... Jul 8 2014, 01:50 Сергей Борщ А я для каждого изделия использую уникальные ключи... Jul 8 2014, 05:47 mantech Цитата(Сергей Борщ @ Jul 8 2014, 08:47) А... Jul 9 2014, 16:18 Golikov A. Для этого нужно оставить механизм старта бута. Есл... Jul 9 2014, 19:00 skripach Цитата(Golikov A. @ Jul 9 2014, 22:00) Дл... Jul 9 2014, 20:01 Сергей Борщ Тогда поделитесь сокровенным - как ваш бут отличае... Jul 9 2014, 20:39 A. Fig Lee Цитата(Сергей Борщ @ Jul 9 2014, 16:39) Т... Jul 9 2014, 20:57  demiurg_spb Цитата(A. Fig Lee @ Jul 10 2014, 00:57) А... Jul 9 2014, 21:46   A. Fig Lee Цитата(demiurg_spb @ Jul 9 2014, 17:46) С... Jul 9 2014, 22:54    demiurg_spb Цитата(A. Fig Lee @ Jul 10 2014, 02:54) В... Jul 9 2014, 23:05     A. Fig Lee Цитата(demiurg_spb @ Jul 9 2014, 19:05) У... Jul 10 2014, 01:27      Сергей Борщ Цитата(A. Fig Lee @ Jul 10 2014, 04:27) О... Jul 10 2014, 06:04       skripach Цитата(Сергей Борщ @ Jul 10 2014, 09:04) ... Jul 10 2014, 06:54        Сергей Борщ Цитата(skripach @ Jul 10 2014, 09:54) Уде... Jul 10 2014, 07:58       A. Fig Lee Цитата(Сергей Борщ @ Jul 10 2014, 02:04) ... Jul 10 2014, 11:08        Сергей Борщ Цитата(A. Fig Lee @ Jul 10 2014, 14:08) Ч... Jul 10 2014, 11:36         A. Fig Lee Цитата(Сергей Борщ @ Jul 10 2014, 07:36) ... Jul 10 2014, 14:00      Axel Цитата(A. Fig Lee @ Jul 10 2014, 04:27) О... Jul 10 2014, 06:21 scifi Уже на несколько страниц размазалось обсуждение од... Jul 10 2014, 07:44 demiurg_spb Цитата(scifi @ Jul 10 2014, 11:44) Уже на... Jul 10 2014, 08:28 Golikov A. Все таки хотелось бы еще раз поговорить про кнопку... Jul 10 2014, 08:41 Golikov A. А вот тут вдруг у меня возникло такое подозрение..... Jul 10 2014, 11:47 Axel Цитата(Golikov A. @ Jul 10 2014, 14:47) Т... Jul 10 2014, 12:02 Golikov A. Извращенная логика%...
Забавно что вы не проверяе... Jul 10 2014, 18:00 A. Fig Lee Цитата(Golikov A. @ Jul 10 2014, 14:00) И... Jul 10 2014, 18:15 Golikov A. ЦитатаКонтрольная сумма не спасает от повреждения.... Jul 10 2014, 18:56 andrewlekar Я в своём софте тоже проверяю только, что сектор н... Jul 11 2014, 06:28 Сергей Борщ Ну что ж, идем на очередной круг. Не всегда есть в... Jul 11 2014, 06:46 A. Fig Lee Цитата(Сергей Борщ @ Jul 11 2014, 02:46) ... Jul 11 2014, 11:33 adnega Я в "крупных" МК использую две области: ... Jul 11 2014, 07:39 Сергей Борщ У меня обновление на лету. Тоже шифрование. Нет не... Jul 11 2014, 09:15 andrewlekar ЦитатаИ ради чего ваши жертвы? Ради экономии 20 ба... Jul 11 2014, 09:44 Golikov A. Ага%) Есть и на этот случай история у меня из разд... Jul 11 2014, 18:31 grv Что-то пример от ST мня загоняет в ступор
это про... Oct 20 2015, 05:32 scifi Цитата(grv @ Oct 20 2015, 08:32) Зачем та... Oct 20 2015, 07:06  grv Цитата(scifi @ Oct 20 2015, 10:06) Вы, по... Oct 20 2015, 08:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|