как запрограммировать флэш-память STM32 с использованием openOCD и gdb

Я использую ключ Olimex ARM-USB-OCD с openOCD и GDB для программирования и отладки stm32f103 micro. IDE, которую я использую, взята с компакт-диска Olimex dev-kit и использует eclipse ganymede.

Я могу загрузить небольшую программу в ОЗУ и без проблем выполнить код.

Теперь у меня есть программа гораздо большего размера, которая не помещается в ОЗУ (всего 20 КБ), поэтому я хотел бы запустить ее с флэш-памяти (128 КБ).

Я изменил сценарий компоновщика, указав, что программный код должен находиться во флэш-секции (адрес 0x8000000), но GDB не может загрузить программу.

(gdb) 
20 load main.out
&"load main.out\n"
load main.out
~"Loading section .text, size 0xb0e6 lma 0x8000000\n"
Loading section .text, size 0xb0e6 lma 0x8000000
&"Load failed\n"
Load failed

Что мне сделать, чтобы GDB загрузил программу во флеш-память?


person mksuth    schedule 10.01.2011    source источник


Ответы (1)


Думали ли вы о перепрошивке напрямую с помощью openocd? Я делаю это в аналогичной настройке, но с микроконтроллером ARM7.

 openocd -f flash.cfg

Вот мой flash.cfg

set CHIPNAME at91sam7x512

source [find interface/olimex-arm-usb-ocd.cfg]
source [find target/at91sam7sx.cfg]

init    
halt

flash probe 0
flash probe 1

flash erase_sector 0 0 15
flash erase_sector 1 0 15

flash write_image my-image.elf

at91sam7 gpnvm 0 set
at91sam7 gpnvm 1 set
at91sam7 gpnvm 2 set
shutdown

Материал GPNVM специфичен для Atmel SAM7, но я думаю, что этот сценарий должен дать вам хорошую отправную точку для создания версии STM32. Вначале Openocd может немного сбивать с толку, но документация хороша и ее стоит прочитать (http://openocd.berlios.de/). Текущая стабильная версия (0.4.0) довольно старая, поэтому, если у вас возникнут проблемы, загрузите последний исходный код и скомпилируйте свой собственный.

person GT.    schedule 14.01.2011
comment
В итоге я пошел по этому пути и, наконец, все заработало. Я использовал openOCD для записи разделов .text и .data во флэш-память, а затем скопировал раздел .data в ОЗУ в начале моей функции main (). - person mksuth; 17.01.2011