Как стать автором
Обновить

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

Уровень сложностиПростой
Время на прочтение20 мин
Количество просмотров1K

«Если вручную писать Make скрипты, то абсолютно Все микроконтроллеры программируются одинаково.»

Пролог

Каких только микроконтроллеров мне не приходилось программировать: AVR, STM8, MSP430x, STM32, NXP (LPC2148), Xilinx MicroBlaze, MDR32, ESP32, MIK32, SPC58NNx, сс26×2, 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.

Создать минималистический тестировочный проект в котором будет мигающий Heartbeat 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).

GDB клиент — эта консольная утилита, которая получает *.elf файл, связывается по сокету с GDB сервером и позволяет делать пошаговую отладку.

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

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

Назначение

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

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

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

Что касается самого MCU, то мне попался FC7300F8MDT2P176T1B2402FG34P.

FC7300F8MD T2P176T1B 2402FG34P в натуре
FC7300F8MD T2P176T1B 2402FG34P в натуре

Если расшифровывать маркировка, то получается однокристальный компьютер (SoC) в ASIL-D исполнении, трех ядерный ARM Cortex-M7, с частотой до 300MHz, 8MByte on-chip Flash, с 176 pin-ами, заточённый в LQFP корпусе выдерживающий до +125 градусов Цельсия. Это основное.

FC7300F8MDT2P176T1B2402FG34P
FC7300F8MDT2P176T1B2402FG34P

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

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

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

--Поддержка 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).

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

#

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

Версия

Пояснение

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

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

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

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

 FC7300 block diagram
FC7300 block diagram

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

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

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

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

Driver

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

Events

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

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

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

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

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

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

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

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

При первом запуске 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

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

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

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

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

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

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

После этого инициировать сборки можно горячей клавишей 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.10\bin

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

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

Фаза 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 устанавливается как обычная win программа прямо из gcc-arm-none-eabi-10.3-2021.10-win32.exe файла

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

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

и тут

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

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

C:\Program Files (x86)\GNU ARM Embedded Toolchain\10 2021.10\bin\

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

Самый классический способ сборки программ на С(ях) это, конечно же, Make файлы. Не перестаю удивляться насколько элегантна сборка программ из make. В 197x программировали по настоящему достойные люди. Поэтому и появились такие утилиты‑шедевры как make, grep, find, sort и прочее. Благодаря 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.

Чтобы дать компилятору понять, что мы работаем именно с ядром ARM Cortex-M7 надо явно подать соответствующие ключи для указания целевой архитектуры ( -mcpu=cortex-m7 -march=armv7e-m -mthumb). Тут же обычно включают FPU (-mfpu=fpv5-sp-d16 -mfloat-abi=hard). Вот так:

$(info CORTEX_SELECT_MK_INC=$(CORTEX_SELECT_MK_INC) )
ifneq ($(CORTEX_SELECT_MK_INC),Y)
    CORTEX_SELECT_MK_INC=Y

    CORE_CUSTOM_DIR = $(CORE_DIR)/cortex_m7
    INCDIR += -I$(CORE_CUSTOM_DIR)

    # $(error CORE_CUSTOM_DIR=$(CORE_CUSTOM_DIR))

    SOURCES_C += $(CORE_CUSTOM_DIR)/cortex_m7_driver.c

    OPT += -DHAS_ARM
    OPT += -DHAS_CORTEX_M7
    OPT += -DHAS_CORTEX_M

    ifeq ($(NVIC),Y)
        include $(CORTEX_M7_DIR)/nvic/nvic.mk
    endif

    MICROPROCESSOR += -mcpu=cortex-m7 
    MICROPROCESSOR += -march=armv7e-m
    MICROPROCESSOR += -mthumb  
    
    ifeq ($(FPU),Y)
        #OPT += -D__FPU_PRESENT=1
        #OPT += -D__FPU_USED=1
        MICROPROCESSOR += -mfpu=fpv5-sp-d16
        MICROPROCESSOR += -mfloat-abi=hard
    else
        MICROPROCESSOR += -mfloat-abi=soft
    endif

    ifeq ($(SYSTICK),Y)
        # $(error SYSTICK=$(SYSTICK))
        include $(CORE_CUSTOM_DIR)/systick/systick.mk
    endif
        
    ifeq ($(DIAG),Y)
        ifeq ($(CORTEX_M7_DIAG),Y)
            OPT += -DHAS_CORTEX_M7_DIAG
            SOURCES_C += $(CORE_CUSTOM_DIR)/cortex_m7_diag.c
        endif
    endif
    
    ifeq ($(CLI),Y)
        ifeq ($(CORTEX_M7_COMMANDS),Y)
            #$(error CORTEX_M7_COMMANDS=$(CORTEX_M7_COMMANDS))
            OPT += -DHAS_CORTEX_M7_COMMANDS
            SOURCES_C += $(CORE_CUSTOM_DIR)/cortex_m7_commands.c
        endif
    endif
endif

Тут надо стразу упомянуть, что 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

Видимо чтобы сделать нам жизнь проще разработчики FlagChip не стали весь 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 выглядит просто, как сайт, на котором можно скачать собранные артефакты, для любого проекта и любой электронной платы.

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

Фаза 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

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

Способ №1 JFlashLite

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

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

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

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

Способ №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. Чтобы Ozone увидел этот чип надо в файле JLinkDevices.xml добавить XML узлы

  <Device>
    <ChipInfo Vendor="Easyide" Name="FC7300F8M_CORE0_FromRom" JLinkScriptFile="Devices/Easyide/FC7300/FC7300_8M/FC7300_8M_core0_fromrom.JLinkScript" Core="JLINK_CORE_CORTEX_M7" WorkRAMAddr="0x21000000" WorkRAMSize="0x18000" />
    <FlashBankInfo Name="Internal flash" BaseAddr="0x01000000" MaxSize="0x800000" Loader="Devices/Easyide/FC7300/FC7300_8M/FC7300_8M_core0.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device> 
  
  <Device>
    <ChipInfo Vendor="Easyide" Name="FC7300F8M" JLinkScriptFile="Devices/Easyide/FC7300/FC7300_8M/FC7300_8M_core0.JLinkScript" Core="JLINK_CORE_CORTEX_M7" WorkRAMAddr="0x21000000" WorkRAMSize="0x18000" />
    <FlashBankInfo Name="Internal flash" BaseAddr="0x01000000" MaxSize="0x800000" Loader="Devices/Easyide/FC7300/FC7300_8M/FC7300_8M_core0.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device> 
  
  <Device>
    <ChipInfo Vendor="Easyide" Name="FC7300F8M_CORE1" JLinkScriptFile="Devices/Easyide/FC7300/FC7300_8M/FC7300_8M_core1.JLinkScript" Core="JLINK_CORE_CORTEX_M7" WorkRAMAddr="0x21000000" WorkRAMSize="0x18000" />
    <FlashBankInfo Name="Internal flash" BaseAddr="0x01000000" MaxSize="0x800000" Loader="Devices/Easyide/FC7300/FC7300_8M/FC7300_8M_core0.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device> 

  <Device>
    <ChipInfo Vendor="Easyide" Name="FC7300F8M_CORE2" JLinkScriptFile="Devices/Easyide/FC7300/FC7300_8M/FC7300_8M_core2.JLinkScript" Core="JLINK_CORE_CORTEX_M7" WorkRAMAddr="0x21000000" WorkRAMSize="0x18000" />
    <FlashBankInfo Name="Internal flash" BaseAddr="0x01000000" MaxSize="0x800000" Loader="Devices/Easyide/FC7300/FC7300_8M/FC7300_8M_core0.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device> 

Также должны быть бинарные файлы для данного микроконтроллера в папке Devices

Как только патчи добавлены, выбираем микроконтроллер FC7300F8M (это нулевой ядро).

Выбираем набор регистров Cortex-M7 (with FPU).

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

Указываем абсолютный путь к *.elf файлу.

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

F5 Download and Erаse.

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

Теперь можно отлаживать прошивку. Для этого в 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. Вот так и работает пошаговая отладка.

Фаза 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.

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

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

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

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

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

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

C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin\arm-none-eabi-gdb.exe

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

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

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

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

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

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

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

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

#

Action

Hot key

пояснение

1

Resume

F8

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

2

Terminate

Ctrl+F2

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

3

Step Into

F5

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

4

Step Over

F6

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

Фаза 14: Физический пуск прошивки

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

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

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

Эпилог

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

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

схема 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?

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программировали MCU семейства FC7300F8MDTх?
16.67% да1
83.33% нет5
Проголосовали 6 пользователей. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программировали MCU компании FlagChip?
12.5% да1
87.5% нет7
Проголосовали 8 пользователей. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программировали процессоры ARM Cortex-M7?
66.67% да4
33.33% нет2
Проголосовали 6 пользователей. Воздержавшихся нет.
Теги:
Хабы:
+11
Комментарии6

Публикации

Работа

DevOps инженер
29 вакансий

Ближайшие события