Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT

в 13:06, , рубрики: ARM Cortex-M7, armv7-m, FC7300F8MDT, FC7300x, FC7x, J-Link, Jenkins, multicore, RISC
Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 1

Пролог

Каких только микроконтроллеров мне не приходилось программировать: AVR, STM8, MSP430x, STM32, NXP (LPC2148), Xilinx MicroBlaze, MDR32, ESP32, MIK32, SPC58NNx, сс26x2, NRF53, Artery AT32, YTM32. Теперь вот МК компании FlagChip FC7300x. В сумме 15 семейств микроконтроллеров.

FC7300F8MDT - это семейство микроконтроллеров компании FlagChip as FlagShip. Внутри FC7300F8MDT три ARM Cortex-M7 процессора с архитектурой armv7-m. Это не просто ещё один микроконтроллер. Это System-on-a-Chip (SoC)

Постановка задачи

Настроить GCC ToolChain, научиться собирать, прошивать и отлаживать прошивки для микроконтроллера FC7300F8MDT.

Создать минималистический тестировочный проект в котором будет мигающий LED, работающий системный таймер, прерывания, UART-CLI и модульные тесты.

Определения

cross compliler - это когда на одной процессорной архитектуре собирают программу для абсолютно другой процессорной архитектуры. Например на x86_64 собирают прошивку для ARM Cortex-M7. Дело в том, что персональный компьютер - это по сути универсальный вычислитель и ему абсолютно всё равно какие программы и для чего собирать.

архитектура (architecture) - представление структуры элементов или нечто, что позволяет опознать строительные блоки их границы и интерфейсы и включает назначения требований для этих строительных блоков. архитектура - структура какого-либо сложного объекта и взаимосвязь элементов внутри между собой.

SDK ( software development kit — комплект для разработки программного обеспечения) — набор инструментов для разработки программного обеспечения, объединённый в одном пакете, обычно содержит комплект необходимых исходников, статических библиотек, компилятор, отладчик, иногда — интегрированную среду разработки.
Обычно зависят от комбинации аппаратного обеспечения и операционной системы.

Target устройство- то что мы программируем. В нашем случае Target устройство это MCU FC7300F8MDT.

GDB server — это компьютерная программа, которая позволяет удаленно по USB+JTAG отлаживать программатором прошивки. Работая на host PC GDB сервер позволяет GNU отладчику подключаться сокетом. Исполняемый файл, который должен отлаживаться, находиться на целевой системе (target), в то время как исходный код и копия двоичного файла, который должен отлаживаться, находятся на локальном компьютере разработчика (host).

Что надо из оборудования?

Оборудование

Назначение

1

Учебно-тренировочная электронная плата с MCU FC7300F8MDT2P176T1A

Целевая платформа

2

Программатор Segger J-link V11-G

Чтобы запрограммировать микроконтроллер

3

Шлейф 20 пин для JTAG разъёмов

чтобы соединить электронную плату и программатор

4

Кабель USB-A -- USB-B длинной 1 2 метра

чтобы соединить LapTop и программатор

5

LapTop

для сборки прошивки

6

Лабораторный блок постоянного напряжения UTP1306

чтобы подать электропитание на плату

7

Кабель 220 AC для лабораторного блока питания

чтобы подать питание на блок питания

8

Набор перемычек в шлейфе гнездо-гнездо

для работы с отладочной платой

Программатор выглядит как черная пластмассовая коробочка.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 2

Технические характеристики можно почитать тут

Технические характеристики

--Поддержка CPU с ядрами ARM7/9/11, Cortex-A5/A7/A8/A9, Cortex-M0/M1/M3/M4/M7, Cortex-R4, Microchip PIC32 and Renesas RX100/ RX200/ RX610/ RX621/ RX62N/ RX62T/ RX630/ RX631/ RX63N;
--Поддержка SWV/ SWO (Serial Wire Viewer/ Serial Wire Output);

Пояснение по индикации отладчика J-link

Индикация

Частота, Hz

Значение

зеленый, мигает

10

инициализация отладчика

Зеленый, мигает

Когда отладчик работает, индикатор временно гаснет при выполнении команды. Таким образом, скорость мигания определяется скоростью интерфейса целевой платы. В низкоскоростных интерфейсах индикатор выключается на более длительный период, чем в высокоскоростных интерфейсах.

Устойчивый зеленый

0

Отладчик инициализирован и находится в состоянии ожидания.

Зеленый, 10 мс

1

Эта функция будет активирована, когда эмулятор будет находиться в режиме ожидания более 7 секунд.

Оранжевый 

0

целевая плата находится в состоянии сброса

Красный, мигает

1

В симуляторе обнаружена серьезная ошибка, которая не должна возникать при нормальных условиях.

На столе разработчика надо соединить оборудование как показано на схеме

Connection for firmware update

Connection for firmware update

Что надо из документов?

Исходниками любой разработки являются официальные документы.

Название дока

количество страниц

Revision

Пояснение

1

FC7300Fxx Product Brief (флаер)

10

?

Флаер на микроконтроллер FC7300F8MDT

2

Схемотехника электронной платы

NDA

NDA

Чтобы понимать с какой стороны следует подходить к электронной плате

3

ARMv7-M Architecture Reference Manual.

858

?

Спецификация ядра ARMv7-M: карта адресов ,регистры ядра, ISA

4

ARM Cortex-M7 Processor Technical Reference Manual

145

?

Спека на процессорные ядра

5

FC7300 Data Sheet

71

A1

Сокращенный даташит на

6

FC7300 Cloking Diagram

1

V1.3

Дерево распределения тактирования

7

FC7300 Security User Guide

38

--

8

FC7300 Reference Manual

2179

Rev 1.1

Полная спека на семейство FC7300

9

FC7300 Errata Sheet

34

4.2

Реестр известных ошибок в кристалле FC7300

10

FC7300 Demo Board User Manual

16

1.1

Текстовое описание учебно - тренировочной электронной платы от производителя

11

FC7300F8MDT Pinout_V1.1.xlsx

4

1.1

Таблица PIN_MUX

12

J-Link / J-Trace User Guide Document: UM08001 Software Version: 6.18

367

6.18

Спека на программатор и набор утилит из набора J-link

13

FC_IDE User Guide

31

Rev.2.0

Инструкция настройки пошаговой отладки в Eclipse IDE

Что касается datasheet-ов, то их просто так не скачать. Только флаер. При попытке скачать спеку сайт просит связаться с организацией. К слову, таблица FC7300F8MDT Pinout_V1.1.xlsx вложена в reference manual. Получается FC7300 Reference Manual.pdf является, как бы ещё и архивом. Такое бывает в документации для Automotive микроконтроллеров и у других производителей (STm).

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 4

Что надо из софтвера?

#

Программа или исходники

Версия

Пояснение

0

JDK

17.0.1 2021-10-19 LTS

Виртуальная машина Java

1

Eclipse IDE

2022-03 (4.23.0)

Текстовый редактор

2

Arm GNU Toolchain

10.3.1 20210824

Cross-компилятор

3

Build Tools (GNU Make)

4.4.1

Система сборки. Утилита для управления вызовами других утилит в правильной последовательности согласно скрипту в makefile.

4

SEGGER JLink_7.52b

7.52b

PC утилиты-прошивальщики

5

SEGGER Ozone

V3.26

Пошаговый отладчик. Отладочный сервер.

6

Flagchip SDK

V2_3_2

базовые исходники от производителя MCU

11

CMSIS

Системный код от компании ARM для управления ядром ARM Cortex-M7

7

The Eclipse Embedded CDT (не обязательно)

Плагин для автоматического генерирования GNU Make скриптов системы сборки Cи кода

8

FlagChip MCAL

Код для высокоуровневого программного доступа ко всем подсистемам микроконтроллера

9

Windows драйвер для переходника USB-UART на основе ASIC CH340 (CH340SER.exe)

Для появление COM-порта в OS Windows

11

SEGGER J-Link Configuration

V7.52b

Для проверки версии программатора

12

JFlashLite.exe

V7.52b

GUI утилита для загрузки прошивки в Target устройство

14

JFlash.exe

CLI утилита для загрузки прошивки в Target устройство

13

JLinkGDBServerCL.exe

V7.52b

Отладочный GDB сервер связи с MCU

15

arm-none-eabi-gdb.exe

10.3-2021.10

Отладочный клиент

10

Tera Term (или PyTTY)

4.105

Терминал последовательного порта.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 5

Что касается SDK, MCAL, то это тоже просто так не скачать. При попытке скачать сорцы сайт просит связаться с организацией.

Внутри микроконтроллера FC7300F8MDT2P176T1A вот такая архитектура

 FC7300 block diagram

FC7300 block diagram

Фаза 1: Установить драйверы для переходника с USB на UART.

После установки операционная система должна увидеть что появился виртуальный COM порт.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 7

Фаза 2: Установить драйвер для программатора J-link

При подключении программатора в диспетчере устройств должно появиться новое USB устройство: J-link driver. General

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 8

Driver

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 9

Вкладка Details показывает, что это USB устройство: VID: 1366, PID: 0101, REV: 0100, Provider: Segger, Service: jlink,

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 10

Events

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 11

Фаза 3: Установить виртуальную машину Java

Это нужно для двух целей. Первое - чтобы завелся текстовый редактор Eclipse, 2- чтобы завелся локальный сервер сборки Jenkins.

Фаза 4: Установить программу текстового редактора Eclipse IDE (печатная машинка)

Так как любая программа это прежде всего текст, то надо установить какой-нибудь текстовый редактор.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 12

Предлагаю Eclipse IDE for C/C++ Developers так как у него весьма удобные HotKeys. Для ускорения написания кода.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 13

Плюс в Eclipse очень приятное синее выделение.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 14

Еще Eclipse мгновенно запускается. Как по мне качество текстового редактора определяется тем как часто вам приходится пользоваться мышкой. В хорошем текстовом редакторе мышка вообще не нужна. Eclipse один из таких текстовых редакторов. Установить Eclipse IDE for C/C++ Developers можно отсюда
https://www.eclipse.org/downloads/packages/

Установка заключается в распаковке скаченного архива в удобное место. В ОС Windows можно устанавливать Eclipse в корень диска С. Программа запускается с помощью исполняемого файла eclipse.exe, который находится в распакованной папке. 

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 15

При первом запуске Eclipse надо выбрать рабочую папку (workspace). В этой папке Eclipse будет по умолчанию создавать проекты.

После установки Eclipse надо сразу установить некоторые полезные плагины. Заходим в Help -> Install New Software , выбираем All Available sites и отмечаем все плагины которые имеют в своем имени такие слова как J-Link, OpenOCD, Debugging, ARM, Embedded, GCC. Это пригодится позже для пошаговой отладки кода в Eclipse .

На всякий случай можно установить плагин для автоматического генерирования make скриптов. Называется этот плагин The Eclipse Embedded CDT. Надо зайти в Help -> Eclipse Marketplace -> Installed прописать https://marketplace.eclipse.org/content/eclipse-embedded-cc

Название Eclipse плагина

приоритет

1

Embeddede C/C++ J-link Debugging

желательно

2

Embeddede C/C++ OpenOCD Debugging

может пригодится

3

Embeddede C/C++ Arm Cross Compiler

может пригодится

4

Eclipse Embedded CDT

может пригодится

Во время установки выглядит это примерно так

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 16

После установки плагинов Eclipse предложит перезагрузиться.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 17

Настройка проекта в Eclipse

Настройки текстового редактора содержатся в файлах .project, .cproject. Важно снять галочку с пункта Makefile generation. В поле Build location прописать относительный путь к папке, которая содержит Makefile.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 18

Настроить параллельную сборку, чтобы ускорить цикл ToolChain(а). Это делается во вкладке Behavior

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 19

После этого инициировать сборки можно горячей клавишей Ctrl+B.

Если же Вы захотите генерировать Make файлы автоматически, то Вам придется явно указать Eclipse-у путь к ToolChain и к путь к Build tools.

Указать путь до ранее установленного Arm GNU Toolchain Window -> Preferences -> MCU -> Global Arm Toolchains Paths -> Toolchain Folder: <локальный путь>gcc-arm-none-eabi-10.3-2021.10bin

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 20

Указать путь до ранее установленного GNU Make Window -> Preferences -> MCU -> Global Build Tools Paths -> Build Tools Folder: <локальный путь>gnumake-win64-v.4.4.1bin

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 21

Указать путь до ранее установленного SEGGER J-Link Window -> Preferences -> MCU -> Global SEGGER J-Link Paths -> Executable: JLinkGDBServerCL.exe
-> Folder: C:Program FilesSEGGERJLink_V7_52b

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 22

Фаза 5: Установить Cross-компилятор ARM GNU Toolchain

Нужен ToolChain: препроцессор (cpp), компилятор ASM(as), компилятор С (gcc),компилятор С++(g++), компоновщик(ld), отладчик(gdb). Нужны binutils(ы) для диагностики полученных артефактов(nm, size, readelf), архиватор статических библиотек(ar), и прочее. Это основные утилиты, которые и делают всю работу по превращению исходников (*.с, .h) в артефакты (.hex .bin .map .elf .out файлики).

ToolChain следует брать с официального сайта
https://developer.arm.com/downloads/-/gnu-rm#:~:text=The%20GNU%20Arm%20Embedded%20Toolchain,Arm%20Cortex%2DR%20processor%20families.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 23

Toolchain устанавливается как обычная win программа прямо из gcc-arm-none-eabi-10.3-2021.10-win32.exe файла

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 24

Проверка, что установилось. Вот полный комплект GCC ARM. Всего 32 утилиты.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 25

Как же make файл узнает, что нужен именно этот toolchain? Ведь их может быть установлено несколько в разные папки. Ответ прост. Надо прописать адрес toolchain в переменной Path. А старый путь просто дропнуть.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 26

и тут

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 27

Каждый свой шаг надо проверять. Как проверить, что терминал cmd находит ToolChain? Откройте cmd из любой папки и наберите arm-none-eabi-gcc.exe –v

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 28

Версия должна отобразиться в соответствии с версией скаченного дистрибутива. ToolChain может находится примерно по такому адресу:

C:Program Files (x86)GNU ARM Embedded Toolchain10 2021.10bin

Фаза 6: Установить систему сборки кода GNU Make

Самый классический способ сборки программ на С(ях) это, конечно же, Make файлы. Не перестаю удивляться насколько элегантна сборка программ из make. В 197x программировали по настоящему достойные люди. Поэтому и появились такие утилиты-шедевры как makegrepfindsort и прочее. Благодаря Make файлам  можно управлять модульностью сборок программных компонентов по-полной. Мгновенно, одной строчкой включать и исключать сотни файлов одновременно для сотен сборок. Это даже не снилось таким GUI как IAR с Keil, где приходится протирать дыры в коврике для мышки, чтобы сделать то, что в make делается одной строчкой в *.mk файлике.

Сборка прошивок из make - считается высшим пилотаже программирования на С(ях).

Вот минимальный набор утилит для процессинга Make файлов.

Утилита

Назначение

make

build automation tool

sh

Unix shell interpreter

realpath

вычислитель арифметики надо путями

tee

перенаправление логов

busybox

a software suite that provides several Unix utilities

echo

Echo the STRING(s) to standard output.

cp

Copy SOURCEs to DEST

mkdir

Create DIRECTORY

rm

Remove (unlink) FILEs

Фаза 7: Подготовка и разбор исходного кода из SDK.

Что из сорцов предоставляет вендор в своем SDK? Особое внимание надо уделить вот этим файликам:

Файл

Пояснение

FC7300F8M.svd

*.svd Текстовый xml файл разметки регистров. Этот файл поедает отладочный клиент, чтобы понимать, как именно следует интерпретировать битовые поля в регистрах периферии.

FC7300F8MDT_flash.ld

Настройки компоновщика

startup_FC7300F8MDx.S

Функция которая вызывается до main(). Там же список названий обработчиков прерываний.

system_init.c

Настройка системы до запуска main. Тут реализовано импровизированный memcpy, memset, отключение сторожевого таймера, включение FPU.

Конфигурирование компилятора

MICROPROCUSSOR += -mcpu=cortex-m7
MICROPROCUSSOR += -mtrumb
PREFIX = arm-none-eabi-

Тут надо стразу упомянуть, что main() вовсе не самая первая функция, которую начинает исполнять микроконтроллер при подаче электропитания. Самая первая функция это Reset_Handler в файле startup_FC7300F8MDx.S.

Последовательность

действие

1

Отключить прерывания

2

обнулить регистры общего назначения

3

прописать первое значение в указатель на верх стековой RAM памяти. (регистр sp)

4

обнулить стековую RAM память

5

вызвать функцию system_init из файла system_init.c

6

обнулить не проинициализированные переменные (bss)

7

прописать первые значение в глобальные переменные

8

разрешить прерывания

9

вызвать функцию main

10

зависнуть в бесконечном цикле JumpToSelf

Видимо чтобы сделать нам жизнь проще разработчики не стали весь startup код писать на ассемблере. То, что можно они написали на Си и вынесли в функцию system_init.

действие

1

чинит ошибки из errata

2

отключает сторожевой таймер

3

включает FPU

Фаза 8: Сборка проекта

Скорее всего у Вас будет очень много примерно одинаковых прошивок: первичный загрузчик, вторичный загрузчик, generic release (прошивка для отгрузки), generic debug, assembly_test (прошивка для схемотехников) и прочие прошивки. Чтобы уследить за всеми этими сборками надо запустить на локальном PC сервер сборки Jinkins. Про пуск сервера сборки у меня есть отдельный текст. Для сборки же проекта следует просто написать вот такой скрипт build_from_make.bat

echo off
cls

call clean_temp.bat
make clean 2>&1 | tee clean_log.txt
make all -j8 | tee build_log.txt

Про то как писать скрипты сборки на GNU Make у меня есть отдельный текст Основы по GNU Make. Jenkins выглядит просто, как сайт, на котором можно скачать собранные артефакты, для любого проекта и любой электронной платы.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 29

Я бы рекомендовал Вам организовать на своем локальном жестком диске компьютера аж 2 репозитория: workspace и release. Workspace для редактирования кода, а release для генерации release(ных) артефактов. Release репозиторий он только read only. Release репозиторий пополнять только git pull(ами). Это важно, чтобы гарантировать, что все зависимости проиндексированы и в самом деле находятся в репозитории c кодом.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 30

Фаза 9: Проверить, что программатор обнаружен утилитой Segger

Среди набора утилит присутствует программа JLinkConfig.exe (SEGGER J-Link Configuration V7.52b). Эта утилита предназначена для проверки факта подключения программатора и для обновления прошивки самого программатора. У меня утилита обнаружила изделие

Product = J-Link Vll compiled Jun 21 2023 V11.00, Nickname = SN = 601012412
USB = SN 601012412 HostFW = EmuFW = 2023 Jun 21 09:20

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 31

Фаза 10: Запись прошивки в Flash память микроконтроллера

Способ №1 JFlashLite

Прошить микроконтроллер FC7300F8MDT можно утилитой JFlashLite.exe. Это GUI утилита специально для ручной прошивки MCU. Выбираете Flagchip микроконтроллер FC7300F8MDTхXxxxT1B, интерфейс JTAG, битовую скорость 1000kHz.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 32

Далее в поле Data File указываем путь к *.hex файлу

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 33

Надо прописать именно hex файл, чтобы Prog. addr. выставился автоматически. Такого не будет с bin файлом.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 34

Выбрав *.hex файл, нажимаем кнопку Program Device. Далее появится зелёный progress bar и прошивка запишется в SoC.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 35

Способ №2 Утилита JFlash.exe

Прошивку можно загрузить и скриптом. Для этого есть производственная утилита с названием JFlash.exe. Достаточно ей дать *.hex файл прошивки, файл конфигурации проекта для программатора *.jflash и запустить строчку в cmd. Перед вами скрипт перепрошивки flash_Jlink.bat

cls

set project_name=board_name_config_name_m
set flash_tool=JFlash.exe
set mcu_config=board_name.jflash
set artefact_hex=build%project_name%.hex

set option=
set option=%option% -openprj%mcu_config% 
set option=%option% -open%artefact_hex% 
set option=%option% -programverify 
set option=%option% -startapp  
set option=%option% -exit

%flash_tool% %option% 

При этом файл *.jflash надо синтезировать вручную, запустив утилиту JFlash в диалоговом режиме. Этот *.jflash - текстовый файл в котором прописан интерфейс (USB/TCP), битовая скорость, тип ядра процессора, путь к hex файлу, базовый адрес начала FLASH памяти и прочие метаданные.

>JFlash.exe -openprjBoardName.jflash -openBoard_Config.hex -programverify -startapp -exit

Способ №3 Прошить пошаговым отладчиком Ozone

Фаза 11: Настроить пошаговую отладку в Ozone

Пошаговую отладку можно делать в Segger Ozone. Выбираем микроконтроллер FC7300F8M и ядро.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 36

Выбираем набор регистров.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 37

Ставим JTAG, частоту и серийный номер отладчика

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 38

Указываем путь к elf файлу.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 39

Настраиваем проект отладки

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 40

F5 Download and Erаse.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 41

Ozone загрузил программу в SoC

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 42

Теперь можно отлаживать прошивку. Для этого в Ozone заложены вот такие горячие кнопки:

Hot key

Функция

Пояснение

F5

Continue

запустить прошивку на исполнение

F4

Reset

F10

Step Over

пройти строчку

F11

Step Into

зайти в функцию

Shift+F11

Step Out

выйти из функии

Ctrl + Alt + L

Load snapshot

Ctrl + Alt + S

Save Snapshot

Ctrl+F5

Halt

остановить программу

Ctrl+M

Find function

Поиск функции по имени

Во время пошаговой отладки LED на программаторе J-link мерцает. Итак, прошивка зависла. Я нажал Halt и обнаружил строчку в коде, в которой возникла загвоздка. Оказывается вызвали отправку в UART до вызова функции FCUART_Init. Вот так и работает пошаговая отладка.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 43

Фаза 12: Пуск отладочного GDB сервера на PC

Среди набора утилит от SEGGER присутствует консольный GDB Server с названием JLinkGDBServerCL. Это программа, которая запускает процесс в операционной системе для непосредственного и непрерывного взаимодействия с программатором и микроконтроллером на другом конце JTAG шлейфа. Отладочному серверу надо указать интерфейсы между PC и программатором, интерфейс между программатором и целевым МК, битовые скорости и можно принудительно переопределить настройки по умолчанию. Вот такой скрипт инициирует пуск отладочного сервера.

:: see 3.3.5 Command line options

echo off
cls

set GDB_SERVER_OPT=

::Specifies the host interface to be used to connect to J-Link. 
::Currently, USB and TCP/IP are available.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -select USB 

:: Tells GDBServer to which device J-Link is connected before the 
:: connect sequence is actually performed. 
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -device FC7300F8MDTxXxxxT1B 

::Sets the endianness of the target where endianness can either 
:: be “little” or “big”.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -endian little 

::Selects the target interface J-Link shall use to connect to the target.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -if JTAG 

::Starts J-Link Commander with a given initial speed.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -speed 2000 

::Initializes the CPU register with default values on startup.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -ir 

:: Select the port to listen for GDB clients
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -port 2331

::Select the port to listen for clients for SWO RAW output.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -swoport 2332

::Select the port to listen for clients for printf output.
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -telnetport 2333

:: Starts the GDB Server with the option to listen on localhost only 
:: This means that only TCP/IP connections from localhost are accepted) 
:: or on any IP address. 
:: To allow remote debugging (connecting to GDBServer from another PC), 
:: deactivate this option. 
:: If no parameter is given, it will be set to 1 (active).
set GDB_SERVER_OPT=%GDB_SERVER_OPT% -LocalhostOnly 

set GDB_SERVER_OPT= %GDB_SERVER_OPT% -logtofile 

set GDB_SERVER_OPT= %GDB_SERVER_OPT% -log "GdbServerLog.txt"

set GDB_SERVER_PATH=JLinkGDBServerCL.exe

call %GDB_SERVER_PATH% %GDB_SERVER_OPT%

Только во время работающего отладочного сервера можно смело подключатся к нему уже отладочным клиентом. Получается тандем консольных утилит, которые общаются между собой через TCP сокет на порту с номером 2331.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 44

Я рекомендую запускать GDB сервер именно из отдельного *.bat скрипта, чтобы у Вас всегда перед глазами был ценнейший лог сервера. В случае осечек, вы хоть сможете прочитать и понять причину осечки.

Фаза 13: Настроить GDB клиент на PC

GDB клиент - эта такая утилита, которая получает *.elf файл, связывается по сокету с GDB сервером и позволяет делать пошаговую отладку. Только и всего. Программа Ozone объединяет в себе и клиент и сервер. Однако можно запускать их и по отдельности. Это альтернативный вариант программе Ozone.

Подарок судьбы в том, что в Eclipse IDE есть плагин для работы с Segger J-link. Мы как раз его установили при настройке Eclipse . Это позволяет ассоциировать текстовый редактор и отладочный GDB клиент. Хотя ничего не мешает и отлаживаться вообще в консоли. Про это у меня есть отдельный текcт: Пошаговая GDB отладка ARM процессора из консоли в Win10

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 45

во вкладке Debugger отключаем запуск сервера.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 46

В окне GDB Client Setup прописываем абсолютный путь к GDB клиенту

C:Program Files (x86)GNU Arm Embedded Toolchain10 2021.10binarm-none-eabi-gdb.exe

Сообщаем, что GDB сервер работает на этом же компьютере, указываем порт 2331 для общения с GDB сервером.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 47

просим загружать прошивку

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 48

ставим точку останова на main

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 49

оставляем без изменений

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 50

ставим галочки

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 51

можно указать путь к файлу описания регистров

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 52

Всё готово для пошаговой отладки.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 53

в Eclipse горячие клавиши уже другие:

#

Action

Hot key

пояснение

1

Resume

F8

отпустить программу

2

Terminate

Ctrl+F2

остановить пошаговую отладку

3

Step Into

F5

зайти в функцию

4

Step Over

F6

пройти строчку

Фаза 14: Пуск UART-CLI

Пошаговая отладка медленная и нужна только в том случае, если прошивка полностью зависнет. Остальной же базовый функционал можно вполне успешно отлаживать через интерфейс командной строки (UART-CLI). Поэтому я добавил в прошивку код для запуска CLI.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 54

Подключение происходит по UART1, на битовой скорости 460800 bit/s, 8 bit в кадре, без проверки чётности, 2 стоповых бита. На всякий случай надо поставить паузу 10 ms между отправкой символов.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 55

CLI показывает, что микроконтроллер за одну секунду проворачивает суперцикл 50k+ раз!

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 56

Эпилог

Весь маршрут исходного кода можно показать на одном листке. Инструментарий вполне привычный, доступный и бесплатный.

Настройка ToolChain-a для программирования MCU FlagChip FC7300F8MDT - 57

То же самое можно показать вот на такой слегка упрощенной схеме.

схема Toolchain-a версия lite

схема Toolchain-a версия lite

Итоги

Теперь ясно с какой стороны подходить к китайским микроконтроллерам FC7300x компании FlagСhip.

Удалось вручную написать make скрипт для проекта, безошибочно компилировать сборки, настроить сервер сборки, удалось прошивать микроконтроллер по JTAG, выполнять пошаговую отладку несколькими способами (Ozone и JlinkGDBServer) и даже запустить отладочный интерфейс командной строки UART-TUI.

Всё это открывает прямую дорогу для полноценной разработки на микроконтроллерах FC7300F8MDT от компании FlagChip.

Ссылки

Название

URL

1

Официальный сайт FlagChip

https://www.flagchip.com.cn/en/index.html

2

Обзор безопасных микроконтроллеров Flagchip для автомобильной электроники

https://habr.com/ru/companies/3rdman/articles/771894/

3

Флаер на семейство FC7x

https://www.flagchip.com.cn/UserFiles/upload/file/20240925/20240925134838341.pdf

4

Eclipse Embedded C/C++

https://marketplace.eclipse.org/content/eclipse-embedded-cc

5

Products-Rex series (FC7x)

https://www.flagchip.com.cn/en/ProductSeries/1/3.html

22

Пошаговая GDB отладка ARM процессора из консоли в Win10

https://habr.com/ru/articles/694708/

8

Дистрибутив текстового редактора

https://www.eclipse.org/downloads/

9

Дистрибутив Cross-компилятора

https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-win32.zip

18

Основы по GNU Make

https://habr.com/ru/articles/748162/

10

Дистрибутив утилиты для пошаговой отладки прошивки

https://www.segger.com/downloads/jlink/Ozone_Windows_V326d_x64.exe

11

FC7300Fxx Family - Multiple ARM ® Cortex ®- M7 core with lockstep, ASIL-D

https://www.flagchip.com.cn/en/Pro/3/3.html

12

Дистрибутив утилиты прошивальщика

https://www.segger.com/downloads/jlink/JLink_Windows_x86_64.exe

13

Аналитика пинов для FC7300F8MDT, PinMux, GPIO.

https://docs.google.com/spreadsheets/d/192G2AH3dGLcT8Ub25zyDtXDAN_G-5dgU/edit?gid=2095246588#gid=2095246588

14

Tera Term Home Page

https://teratermproject.github.io/index-en.html

15

Набор перемычек в шлейфе гнездо-гнездо

https://www.chipdip.ru/product0/8003829067

16

J-Link ARM V11 программатор универсальный

https://autos-sky.ru/index.php?route=product/product&product_id=524&ysclid=maz39m0hnx387222677

17

Почему Нам Нужен UART-Shell? (или Добавьте в Прошивку Гласность)

https://habr.com/ru/articles/694408/

19

Как программировать многоядерные микроконтроллеры

https://habr.com/ru/articles/527184/

21

Запуск сервера сборки Jenkins

https://habr.com/ru/articles/695978/

20

Справка про утилиты J-Link GDB Server

https://kb.segger.com/J-Link_GDB_Server#Command_line_options

Словарь

Акроним

Расшифровка

IDE

Integrated development environment,

ARM

Advanced RISC Machine

SoC

System-on-a-Chip

RISC

Reduced instruction set computer

FPU

floating-point unit

CSC

CPU System Control

MCAL

Microcontroller Abstraction Layer

SCG

System Clock Generator

GNU

GNU's Not Unix

GDB

GNU Project Debugger

USB

Universal Serial Bus

SDK

software development kit

MCU

MicroСontroller unit

OCD

Open On-Chip Debugger

Вопросы

--Чем ARM Cortex-M4 отличается от ARM Cortex-M7?

Автор: aabzel

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js