MBR (mbr) wrote,
MBR
mbr

Categories:

openocd

Многие считают, что под linux нет нормальных утилит для флеширования и отладки, поэтому сидят в windows, используют проприетарные местячковые решения. На самом деле это не так. Есть очень мощный инструмент openocd. Кстати, под windows openocd тоже работает.

Openocd поддерживает множество программаторов, включая, конечно, j-link и st-link. Дефолтные скрипты написаны для, практически, всех целевых процессоров, доступных на рынке. Даже Миландр есть. Есть поддержка отладки через GDB (хотя я сам не пользуюсь) и такой уж совсем производственной штуки, как boundary scan. Openocd очень гибок - если чего-то нет, можно написать скрипт. В этом же его и минус - нужно много читать манов, чтобы запустить хоть что-то. Под катом - инструкция для быстрого старта.

Openocd для конфигурации нужно задать три параметра:

- interface. Это jtag-адаптер
- transport. jtag/swd/etc
- target. Целевая архитектура

Для многих отладочных плат уже созданы конфигурационные скрипты, поэтому достаточно указать лишь board:

openocd -f board/stm32l0discovery -c <params>

Собственно, если необходимо поменять адаптер, либо целевую архитуктуру - написание скрипта достаточно несложно. Вот простой пример:

# интерфейс stlink-v2
source [find interface/stlink-v2.cfg]

# транспорт swd
transport select hla_swd

# буфера 0x2000
set WORKAREASIZE 0x2000

# целевая архитектура - STM32 Lx, чип парсится по chip id.
source [find target/stm32l.cfg]

# аппаратный pin reset srst (для swd), интерфейс активен во время reset.
reset_config srst_only srst_nogate


Все. Могу лишь добавить, что указание флага connect_assert_srst в reset_config заставляет сначала подать сигнал reset, а затем подключить интерейс. Это очень актуально в случаях раннего bus fault, когда интерфейс не отвечает. St-flash, например, лечить такое не умел, приходилось только виндовую утилиту запускать.

Теперь про <params>. Для быстрого старта:

openocd -f board/stm32l0discovery -c "program myfile.bin 0x08000000 reset"

Шьем myfile.bin по адресу флеша 0x08000000, перезагружаем чип. Для старта - достаточно, больше в манах. Интересен также режим, когда параметры вообще не задаются, в таком случае запускается демон, к которому можно подключиться по телнету на порт 4444. Здесь можно все тоже самое, только в интерактивном режиме. Например, для старта, интересны будут:

- halt. Остановить процессор, посмотреть регистры.
- resume. Возобновить с точки остановки.
- reset. Перезапустить.
- dump_image, mwb/mwh/mww, mdb/mdh/mdw - сдампить память, регистры, записать память, регистры

Ну и на закуску сравнение производительности st-flash и openocd на мегатормозном stm32l0:

time st-flash --reset write myfile.bin 0x08000000
real    0m52.159s


time openocd -f stm32l0rad0.cfg -c "program myfile.bin 0x08000000 reset"
real    0m6.088s
Tags: embed, it, linux
Subscribe

  • Советский инженер - это звучит гордо

    Порадовался с последнего стеба vladimir_akinin над программистами. Однако в комменты выползло какое-то количество старых пердунов,…

  • Сезон 2021

    Весна началась, а значит пора новой стройки Делать пристройку в этот раз решил полностью по платформе, дабы не переломали все ноги, выходя из…

  • Антисептик

    Строительный сезон начинается, работы уже идут вовсю. Наверное, к концу марта отчитаюсь. А пока про сабж. Доску я для экономии использую обычную, не…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 17 comments

  • Советский инженер - это звучит гордо

    Порадовался с последнего стеба vladimir_akinin над программистами. Однако в комменты выползло какое-то количество старых пердунов,…

  • Сезон 2021

    Весна началась, а значит пора новой стройки Делать пристройку в этот раз решил полностью по платформе, дабы не переломали все ноги, выходя из…

  • Антисептик

    Строительный сезон начинается, работы уже идут вовсю. Наверное, к концу марта отчитаюсь. А пока про сабж. Доску я для экономии использую обычную, не…