Что происходит на фоне, когда mbed CLI мигает чипом?

Хотя не все детали имеют отношение к этому вопросу, я все же перечислю свою настройку:

Чтобы скомпилировать мой код и перенести двоичный файл в чип, я выполняю следующую команду в моем терминале cmd:

> mbed compile -t GCC_ARM -m NUCLEO_F746ZG --flash

Я получаю следующий вывод:

...

+------------------+-------+-------+-------+
| Module           | .text | .data |  .bss |
+------------------+-------+-------+-------+
| [fill]           |   130 |     4 |    10 |
| [lib]\c.a        | 24965 |  2472 |    89 |
| [lib]\gcc.a      |  3120 |     0 |     0 |
| [lib]\misc       |   252 |    16 |    28 |
| mbed-os\drivers  |   658 |     4 |   100 |
| mbed-os\features |    74 |     0 | 12556 |
| mbed-os\hal      |  2634 |     4 |    66 |
| mbed-os\platform |  2977 |     4 |   270 |
| mbed-os\rtos     | 15887 |   168 |  5989 |
| mbed-os\targets  | 16013 |     4 |  1052 |
| source\main.o    |   244 |     4 |    84 |
| Subtotals        | 66954 |  2680 | 20244 |
+------------------+-------+-------+-------+
Total Static RAM memory (data + bss): 22924 bytes
Total Flash memory (text + data): 69634 bytes

Image: .\BUILD\NUCLEO_F746ZG\GCC_ARM\nucleo_f746zg_demo.bin
[mbed] Detected "NUCLEO_F746ZG" connected to "E:" and using com port "COM10"
        1 file(s) copied.

Меня особенно интересуют последние строки, где происходит фактическое мигание чипа:

Image: .\BUILD\NUCLEO_F746ZG\GCC_ARM\nucleo_f746zg_demo.bin
[mbed] Detected "NUCLEO_F746ZG" connected to "E:" and using com port "COM10"
        1 file(s) copied.

Из предыдущего опыта (до появления mbed CLI) я знаю, что происходит много операций по прошивке двоичного файла на чип. Например, мне пришлось запустить openocd, передать ему файл конфигурации программиста (например, stlink-v2-1.cfg) и файл конфигурации целевой платы (например, nucleo_f746zg.cfg). Наконец, мне пришлось передать двоичный файл в openocd через Telnet-сеанс или GDB-сеанс. Здесь все подробно описано: как использовать GDB (Gnu Debugger) и OpenOCD для отладки микроконтроллеров - с терминала?

Глядя на перепрограммируемый чип mbed CLI, я запутался. Что происходит на заднем плане? Mbed CLI тайно использует openocd для подключения к чипу? Или, возможно, pyOCD? Или как-то иначе?

2 ответа

Решение

mbed-cli является открытым исходным кодом, вы можете найти репозиторий здесь. Если вы ищете "def compile_", вы найдете конкретный код того, что происходит при запуске mbed compile,

mbed-cli использует mbed-ls для определения вашей платы и htrun для ее прошивки. htrun имеет множество плагинов для копирования на разные платы, включая pyocd, но в самом простом случае он просто копирует на диск, обнаруженный с помощью mbed-ls.

Я не пробовал все из них, но первая и, безусловно, поддерживаемые mbed платы с ядрами отображаются как виртуальный флэш-накопитель, и вы просто копируете файл.bin, никакой реальной магии в него со стороны хоста, никакого другого программного обеспечения, кроме что операционная система уже имеет в отношении монтажа USB-накопителей. На этих платах есть заголовок отладки, и если нет, то для тех, кого я знаю, mcu, который управляет отладочной частью, я называю отладкой mcu, тогда есть тестируемый mcu или демонстрационный, который вы купили доска для игры. Как правило, mbed были arm и есть интерфейс swd (jtag-ish), отладочный mcu, скорее всего, использует этот интерфейс.

openocd - это всего лишь один инструмент, который знает протокол SWD, но это не означает, что они должны запускать openocd на mcu. Вы можете написать свое собственное программное обеспечение для bit bang или поговорить с чипом ftdi, чтобы использовать mpsse или другое решение для генерации переходов протокола SWD на этой шине.

В простейшем случае микропрограммное обеспечение для конкретной системной платы только должно знать, что один stm32, который она программирует, не должно знать больше этого, но один swd является несколько универсальным и может иметь смысл иметь более универсальную микропрограмму отладки mcu.

Теперь эти NUCLEO и другие отладочные mcus STM32 также говорят на stlink, который отделен от прошивки и выглядит как флэшка. Stlink - протокол, который хост может использовать, чтобы попросить mcu отладки сделать что-то, точно так же, как mpsse - это набор протоколов / инструкций, который вы используете, чтобы попросить некоторые части ftdi сделать что-то для вас (немного по-другому, но в принципе говорят на одном протоколе с прокси-агент, который делает что-то для вас).

Возможно, этот mbed cli просто скопировал для вас файл, который вы могли бы сделать сами. Или, может быть, речь идет о каком-то другом протоколе. Первые mbeds были основаны на частях NXP, а не ST, и, следовательно, не имеют протокола stlink на внешнем интерфейсе. У них была / есть только что скопированная копия двоичного файла, которую, как я помню, кто-то видел в блоге, поэтому, возможно, они наняли этого человека или позаимствовали этот проект с открытым исходным кодом.

Хотя песочница mbed может быть отличной, я рекомендую вам попробовать другие варианты, сначала mbed для сборки двоичного файла, затем скопируйте его, mbed для сборки и, возможно, openocd через stlink, чтобы записать его во флэш-память. Части ST и NXP традиционно имели загрузчик, который поддерживал бы протокол UART, вы можете попробовать это, так как это то, что вы, скорее всего, использовали бы, или swd, чтобы получить чип на плате, если вы работали над каким-то продуктом, построенным вокруг или которые использовали такие чипы, но не были какой-то доской для хобби / eval, как ядро. Я также рекомендую пробовать baremetal без библиотек, просто прочитайте руководство, я нахожу, что это проще, чем библиотеки, YMMV, также ST имеет по крайней мере один набор своих собственных библиотек. Я думаю, что они переходят к программным решениям, возможно, попробуйте оба или попробуйте новый, так как другой потеряет поддержку.

Вы также можете получить спецификацию SWD, и есть github и другие открытые проекты, которые могут помочь, взять вашу доску для ядер и разработать программу на одном mcu для общения с другим (mcus имеет gpio, что делает его простым способом побить, вы можете немного бить часть ftdi или делать что-то другое, не нужно использовать mcu) и попытаться изучить / понять сам этот протокол. Пока он используется всеми кортексами-мс.

Существует также протокол USB, такой как stlink, который нажимается рукой, более новые панели запуска MSP432 используют его или поддерживают. Сам протокол stlink в этом отношении.

В любом случае, я отклоняюсь от ядра через (отладочный) usb, у него есть протокол stlink и я использую флэш-накопитель, так что инструменты mbed, вероятно, используют один из них, вероятно, последний, так как stlink, вероятно, не найден в не-st продуктах. Весьма вероятно, что mcu для отладки использует swd для программирования mcu разработки / демонстрации, не знаю, как еще это было бы.

Другие вопросы по тегам