реклама на сайте
подробности

 
 
> ST32 UART bootloader (embedded), Как вытащить информацию об объеме ПЗУ?
Sergey_Aleksandr...
сообщение May 30 2012, 14:35
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 8-10-08
Из: РФ Смоленск
Пользователь №: 40 764



Стал ковырять встроенный в STM32 UART-загрузчик. Не могу понять, как вытащить из МК информацию о размере Flash.
Почитал AN2606 "STM32™ microcontroller system memory boot mode" и AN3155 "USART protocol used in the STM32™ bootloader". Скачал демонстрационную программу "Flash Loader Demonstrator". Снял лог обмена по UART. Приведу только коды команд и параметры без ACK и проверочных сумм.
Первый этап обмена
Код
1. 0x7F - инициация загрузчика и определение битрейта.
2. 0x00 -> [список поддерживаемых загрузчиком команд]
3. 0x02 -> получил Processor ID  0x0420. По AN2606 это "Mediumdensity value line" - всё верно
4. 0x02   зачем то второй раз запрос PID
5. 0x11  0x08000000  0x03 -> чтение 4 байт из начала Flash. Это Stack Pointer. Ответ 0x20000410.
6. 0x11  0x1FFFF7E0  0x1   -> чтение 2 байт из System memory со смещением 0x20 от её конца (0x1FFFF800)   Ответ 0x80 0x00

После этого этапа программа знает размер Flash (128 кБайт)

Второй этап
Код
1,2. 0x02 -> опять дважды получил Processor ID  0x0420
3. Опять прочитали 2 байта из System memory (см. п.п. 1.6)   Ответ 0x80 0x00
4. 0x00 -> Опять получили список поддерживаемых загрузчиком команд (см. п.п. 1.2)
5. 0x11  0x1FFFF7D6  0x1   -> чтение 2 байт из System memory со смещением 0x2A от её конца (0x1FFFF800)   Ответ 0x10 0x00
6. 0x11  0x1FFFF800  0x0F  -> чтение 16 байт из Option byte area (в общем прочитали все "фьюзы")


Вот, собстенно, теперь вопросы.
1. Как хост по данным п.п. 1.6 и п.п. 2.3 (0x80 0x00) понимает, что памяти на борту 128 кБайт, откуда берётся этот адрес 0x1FFFF7E0 в области System memory? Он как-то вычисляется или описан в каком-либо из AppNote?
2. Что за 2 байта читается в п.п. 2.5 по адресу 0x1FFFF7D6 в области System memory? Что это за адрес, где найти описание.
3. Зачем хосту требуется знать значение Stack Pointer (читается в п.п. 1.5)?

PS Если уже обсуждалось или описано в каком-либо мануале - ткните носом пожалуйста.

PPS По поводу вопроса №1. Это видимио число в формате Little endian 0x0080, т.е. 128. Вот он размер Flah. Толкьо что это на самом деле: размер в кБайтах или число страниц (в Value Line страница как раз 1 кБайт). Но откуда взялся этот "магический" адрес? В МК с другим размером System memory по каким адресам искать информацию о размере Flash?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01348 секунд с 7
ELECTRONIX ©2004-2016