|
|
  |
STM32 bootloader, написание собственного бута |
|
|
|
Sep 21 2012, 16:10
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(Almaz1988 @ Sep 21 2012, 18:57)  А IAP-команды переводятся же в ассемблерный код при компилляции? Это ведь не отдельный язык программирования. нет, конечно в разные регистры заносятся команда, номер начального сектора, конечного сектора, адрес блока данных вызывается IAP, адрес которого заранее известен из еще одного регистра читается результат операции какая разница, каким языком это дело описать? а вот требования к выполнению IAP (как то - отключить PLL, например, или вызов IAP не из области FLASH) нужно выполнять обязательно
|
|
|
|
|
Sep 22 2012, 12:13
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(toweroff @ Sep 21 2012, 19:10)  а вот требования к выполнению IAP (как то - отключить PLL, например В UM10398 Chapter 26: LPC111x/LPC11Cxx Flash programming firmware PLL не упоминается (или я не нашёл). Ссылку приведёте? Цитата(toweroff @ Sep 21 2012, 19:10)  вызов IAP не из области FLASH В примере от NXP функции IAP вызываются из flash. Наверняка потому, что из bootloader не использует прерываний. В случае испоользования прерываний таблицу векторов и обработчики нужно поместить в RAM или запрещать прерывания на время стирания/записи flash.
|
|
|
|
|
Mar 2 2013, 07:01
|
Группа: Новичок
Сообщений: 3
Регистрация: 10-01-11
Пользователь №: 62 117

|
Здравствуйте! Просьба откликнуться кто в теме. Пишу загрузчик для своего приложения (IAR 6.40, STM32F103VET). Как можно в процессе линковки вставить размер образа по конкретному адресу? Это точно можно сделать, тому пример пост Сергея Борща :
'У меня при сборке приложения линкер сразу за таблицей векторов вписывает размер образа, чтобы загрузчик мог просчитать контрольную сумму загруженного приложения (и только его, не учитывая свободную память).'
|
|
|
|
|
Mar 3 2013, 06:27
|
Группа: Новичок
Сообщений: 3
Регистрация: 10-01-11
Пользователь №: 62 117

|
Спасибо за ответы. Пробовал следовать советам официальной техподдержки IAR http://supp.iar.com/Support/?note=62709&from=note+65473а именно пункта Alternative solution using checksum-start and checksum-end markers Всё отлично, есть константы с адресами начала и конца проекта, считается CRC32, только в Нех файл значение CRC не заносится категорически, вместо него там нули. А в дизассемблере нормальное значение. Пока не победил это.
|
|
|
|
|
Dec 11 2014, 08:55
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 28-10-11
Пользователь №: 68 026

|
Хочу сделать загрузку прошивки через веб, но неполучается, не запускается основная программа. Делаю на основе проекта с STM32CubeF4, LwIP_IAP. Манеул к этому проекту http://www.st.com/st-web-ui/static/active/.../DM00103145.pdfСреда Keil uVision, мк STM32f4 ------------------------------------------ В бутлоадере выставил начальный адрес с которого будет стартовать основная программа #define USER_FLASH_FIRST_PAGE_ADDRESS 0x08020000 В основной программе изменил начальный адресс 0x08020000 В основной программе изменил смещение для таблици векторов #define VECT_TAB_OFFSET 0x20000 ------------------------------------------ После загрузки прошивок, доходит до Jump_To_Application(); и все, дальше тишина. Переменная JumpAddress = 0x080201A5 if (((*(__IO uint32_t*)USER_FLASH_FIRST_PAGE_ADDRESS) & 0x2FFE0000 ) == 0x20000000) { JumpAddress = *(__IO uint32_t*) (USER_FLASH_FIRST_PAGE_ADDRESS + 4); Jump_To_Application = (pFunction) JumpAddress; __set_MSP(*(__IO uint32_t*) USER_FLASH_FIRST_PAGE_ADDRESS); Jump_To_Application(); } Основная программа начинается с адреса 0x08020000 смотрел через STM32 ST-LINK Utility На скринах без смещения с со смещением, данные совпадаю, отличие только адресами. В чем может быть причина? Спасибо.
Эскизы прикрепленных изображений
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|