HPM62xx: первые шаги
Микроконтроллер HPM6280
Сегодня речь пойдет о микроконтроллере HPM6280, пусть не самом быстром, но крайне интересном.
HPM6280 имеет два ядра архитектуры RISC-V (Andes D45 с набором команд RV32-IMAFDCP + расширенный набор инструкций от Andes, направленный на увеличение производительности и плотности кода) с максимальной тактовой частотой до 600 МГц.
На каждое ядро приходится до 32 КБ кэша инструкций/данных и до 256 КБ L1 + дополнительно 256+32 КБ оперативной памяти общего назначения и 4 Кб OTP на микросхему. HPM6280 не имеет встроенной энергонезависимой памяти, однако в линейке HPM62xx есть микроконтроллеры HPM6284 и HPM6264, имеющих на борту 4 МБ Flash.
Синтетические тесты показывают вычислительную мощность на уровне 3390 баллов CoreMark при 1710 DMIPS. Ядро достигает 5.67 CoreMark/Mhz (для сравнения: Cortex-M7 достигает 5.29 CoreMark/Mhz, новейший Cortex-M85 — 6.28 CoreMark/Mhz). Если взять в расчет оценку конкурентов, таких как STM32G474 (569 CoreMark/213 DMIPS) и STM32H743 (2020 CoreMark/856 DMIPS), — виден существенный запас по производительности.
Структурная схема микроконтроллера HPM6280
С точки зрения периферии HPM6280 может похвастаться интерфейсами UART (9 шт.), SPI (4 шт.), I2C (4 шт.), LIN (4 шт.), CAN FD (4 шт.), USB HS (с интегрированным PHY). Присутствует интерфейс для подключения внешней памяти (Q-/OctoSPI NOR FLASH, совместимый с HyperBUS).
К одному из ключевых достоинств микроконтроллера можно отнести модуль генерации сигналов управления, в состав которого входят 4 восьмиканальных таймера высокого разрешения (два из которых могут генерировать сигналы с разрешением 100 пикосекунд, а два — с разрешением 2,5 наносекунд), два многоступенчатых программируемых логических массива PLA и продвинутая система генерации событий.
Аналоговая подсистема включает в себя 3 АЦП (c частотой опроса до 2 MSPS при разрешении 16 бит и до 4 MSPS при разрешении 12 бит), 4 компаратора и 2 ЦАП (12 бит, 2 MSPS).
Аппаратная подсистема шифрования может работать с AES/SM4/SHA/SM3, существует возможность исполнения шифрованного кода с декодированием на лету.
В качестве целевой ниши производитель предполагает использование HPM62xx в силовой и преобразовательной электронике, системах управления ЧПУ и робототехники.
Таким образом, микроконтроллеры семейства HPM6280 по периферии занимают нишу между STM32G4×4 (c HRTIM и большим количеством специализированных аппаратных блоков) и STM32H7. По количеству каналов управления (32 однополярных канала ШИМ либо 16 комплементарных, половина из которых работают с разрешением до 100 пикосекунд), — микросхема не уступает конкурентам от STM (G4/H7) или TI (TMS320F2xxxx).
Теоретически периферия должна позволять реализовывать преобразовательную технику сложных топологий (в том числе многофазные DC/DC преобразователи), а также схемы управления бесколлекторными электродвигателями.
По состоянию на ноябрь 2023 года стоимость микроконтроллера HPM6280 в розничной продаже составляет порядка 40 юаней, отладочной платы — 298 юаней.
Отладочная плата HPM6200EVK
Отладочная плата HPM6200EVK идеологически похожа на отладки типа Nucleo от STM: на печатной плате установлен микроконтроллер, присутствует программатор (на базе FTDI 2232H), пара пользовательских кнопок, движковый переключатель выбора режима загрузки, светодиод, разъем USB, а остальное — выведено на штыревые разъемы (с шагом 2.54 мм) и пару SMA (куда выходят сигналы ЦАП и HRPWM).
Структурная схема отладочной платы HPM6200EVK
Внешний вид HPM6200EVK
Два 40-контактных штыревых разъема по распиновке соответствуют таковым, используемым на отладочной плате ART-Pi от RT-Thread.
На разъем Motor Control выведены 3 пары комплементарных сигналов ШИМ (PWM_WH/ PWM_WL, PWM_VH/PWM, PWM_UH/PWM_UL), контакты для подключения квадратурного энкодера (QEI_A, QEI_B, QEI_Z) , а также каналы АЦП для замера напряжения системной шины (ADC_BUS), опроса токовых шунтов (ADC_IW, ADC_IV, ADC_IU) и вспомогательных каналов замера напряжений (ADC_B, ADC_C, ADC_D).
QSPI flash память MX25L12833FM имеет на борту 16 МБ памяти и может быть использована в режиме исполнения кода execute-in-place (XIP).
SDK + полезные утилиты
Для ускорения разработки встраиваемого программного обеспечения для микроконтроллера производителем предоставляется пакет программного обеспечения и исходных кодов, который после предварительной регистрации может быть скачан на официальном сайте.
Помимо непосредственно SDK архив включает в себя собранную версию тулчейна (по состоянию на конец 2023 года это RISCV GCC rv32imac-ilp32-multilib-win версии 11.1), OpenOCD, а также генератор проектов, вспомогательные скрипты и утилиты типа cMake и ninja.
Содержимое SDK для микроконтроллеров HPM
В SDK кроме инструкций по сборке проектов и документации на драйвера можно найти:
hpm_sdk\bords...
— макроопределения и кой, специфичный для отладочных плат;hpm_sdk\drivers...
— низкоуровневый HAL для периферии;hpm_sdk\middleware...
— стеки (в том числе портированные версии fatfs, lwip, cherryusb…), RTOS (azure_rtos, FreeRTOS, microros, ucos_iii), тест производительности (coremark), примеры работы с математическими библиотеками hmp_math и пр.hpm_sdk\samples...
— примеры работы периферии (в поддиректории\drivers
) и тестовые проекты (например, демонстрирующие возможности микроконтроллера в задачах dsp, motor_ctrl, memstress и т.д.).hpm_sdk\soc...
— аппаратно специфичные файлы для микроконтроллеров HPM.
В случае необходимости актуальные версии SDK, исходные коды тулчейна и OpenOCD могут быть скачаны с официальных репозиториев HPMicro: https://github.com/hpmicro.
Генерация первого проекта, запуск кода
Для генерации проектов HPM предлагает утилиту HPM SDK Project generator.
Окно генератора проектов для HPM
Для корректной работы утилиты в поле SDK ENV PATH
необходимо указать путь к используемой версии SDK. В выпадающем списке BOARDS
необходимо выбрать модель отладочной платы, которую вы собираетесь использовать (в нашем случае hpm6200evk
). В выпадающем списке SAMPLES
необходимо выбрать проект, который мы хотим сгенерировать. В выпадающем поле TYPE
необходимо выбрать тип образа, который будет генерироваться (XIP, DEBUG, зашифрованный и т.д.) . Поле BUILD PATH
указывает место где будет сгенерирован проект.
В случае необходимости выбрать версию компилятора, SDK или утилит — утилита может быть переключена в режим настроек ADVANCED.
После завершения настроек для генерации необходимо нажать на кнопку GENERATE PROJECT. Для того чтобы открыть сгенерированный проект в IDE нужно нажать на кнопку Open project with IDE…
В качестве IDE для работы со сгенерированными проектами по умолчанию производитель предлагает использовать Segger Embedded Studio для RISC-V.
Сгенерированный проект не требует каких-либо дополнительных настроек, собирается и отлаживается без как-либо проблем.
В связи с тем, что продукция HPMicro интегрирована с решениями от SEGGER, — IDE заработала без каких-либо приключений и костылей.
Функционал IDE является типовым для программного обеспечения подобного рода: есть возможность использовать пошаговую отладку, отслеживать состояние стека вызовов, просматривать регистры ядра и периферии, выводить или принимать данные с терминала, смотреть фрагменты кода в дизассемблированном виде. По быстродействию среда разработки не уступает STM CUBE: IDE или Keil.
Запуск программы в SEGGER Embedded Studio (for RISC-V)
Запуск программы gpio на HPM6200EVK. При нажатии на пользовательскую кнопку меняется состояние включения светодиода.
Настройка Visual Studio: Code для работы с микроконтроллерами HPM
Настройка Visual Studio: Code для работы с микроконтроллерами семейства HPM62xx мало чем отличается от настройки для других семейств микроконтроллеров.
Ниже будет описана процедура настройки под операционную систему Windows 10, но все используемые для компиляции и отладки инструменты являются кроссплатформенными, и могут также быть запущены под Linux или MacOS.
Руководство предполагает что вы уже имеете опыт настройки VS: Code для работы с микроконтроллерами. С более обстоятельным руководством (на китайском языке) можно ознакомиться здесь.
До установки необходимо убедиться в корректной установке следующего программного обеспечения:
Для корректной сборки и последующей отладки аппаратного обеспечения необходимо установить и настроить следующие зависимости:
Настроим систему сборки.
Добавить в переменные среды
GNURISCV_TOOLCHAIN_PATH
(путь где расположен компилятор для RISC-V) иHPM_SDK_BASE
(путь где расположен SDK).Проверяем корректность настройки тулчейна и системы сборки.
mkdir build
cd build
cmake -G Ninja -DBOARD=hpm6200evk -DCMAKE_BUILD_TYPE=debug ..
ninjaВ случае если были корректно установлены все необходимые для сборки и компиляции утилиты — проект должен собраться без ошибок.
Переходим к Visual Studio: Code. Для удобной работы понадобятся расширения CMake Tools и Cortex-Debug (несмотря на название, плагин корректно работает и с микроконтроллерами архитектуры RISC-V).
Создаем в VSC новое рабочее пространство (File → Save Workspace As…). Через кнопку »Open folder» добавляем в рабочее пространство SDK.
Копируем пример проекта (например, GPIO) из папки
hpm_sdk\samples\drivers\gpio
(по месту расположения SDK) в папку нашего рабочего пространства.Через контекстное меню
Add Folder To Workspace...
добавляем папку gpio в текущее рабочее пространство.
Настройка launch.json и settings.json
Настраиваем конфигурацию CMake в
settings.json
и конфигурацию запуска вlaunch.json
.
settings.json:
{
"cmake.configureArgs": [
"-DBOARD=hpm6200evk" //cmake file for HPM6200EVK
],
"cmake.defaultVariants": {
"buildType": {
"choices": {
"flash_xip": { //buildType - flash_xip
"short":"flash_xip",
"long":"Build for - flash",
"buildType": "flash_xip"
}
}
}
}
}
settings.json (для OpenOCD):
{
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"executable": "${workspaceFolder}/build/output/demo.elf",
"showDevDebugTimestamps": true,
"name": "HPM_dapDebug",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"configFiles": [
"[путь расположения SDK]\\sdk_env-v1.2.0\\hpm_sdk\\boards\\openocd\\probes\\ft2232.cfg",
"[путь расположения SDK]\\sdk_env-v1.2.0\\hpm_sdk\\boards\\openocd\\soc\\hpm6280-single-core.cfg",
"[путь расположения SDK]\\sdk_env-v1.2.0\\hpm_sdk\\boards\\openocd\\boards\\hpm6200evk.cfg"
],
"svdFile": "${workspaceRoot}/svd/HPM6280.svd",
"liveWatch": {
"enabled": true,
"samplesPerSecond": 4
},
...
}
]
}
На этом этапе настройку VSC для работы с HPM можно считать законченной. Проект можно собирать и отлаживать.
Проект для HPM6200EVK успешно запущен и отлаживается в Visual Studio: Code
При использовании OpenOCD и плагина Cortex-Debug функционал не уступает SEGGER: Embedded Studio.
Единственным нюансом является некорректная работа в режиме disassembly
— Cortex-Debug не интерпретирует машинные коды RISC-V в ассемблер, что осложняет анализ скомпилированного кода или отладку ассемблерных вставок. Для углубленной работы с ассемблером для RISC-V эффективнее будет использовать специализированные инструменты типа Ghidra
или radare2
.
Заключение
В заключение хочется сказать что микроконтроллер HPM6280 оставил приятные ощущения, а его поддержка со стороны производителя (в ключе предоставления HAL/SDK, пользовательских руководств, Errata и Appnote) достаточно серьёзна. Разработчики портировали большое число популярных стеков и операционных систем реального времени. Кроме того, судя по пресс-релизам HPMicro не собирается останавливаться на достигнутом, и планирует развивать свою экосистему как в сторону ультрабюджетных (HPM5301), так и в сторону высокопроизводительных решений.
В дальнейшем я планирую разобраться с работой аппаратных блоков HPM6280, проверить изменения в размере кода и быстродействии при использовании компилятора nds-gcc, а также попробовать реализовать какой-нибудь pet project на микроконтроллере от HPM.
Спасибо за внимание.
Если вы решите углубленно заняться изучением железа на ядрах RISC-V в целом и микроконтроллеров HPM в частности, — присоединяйтесь к нашему уютному сообществу в Telegram: t.me/riscv_mcu.
Буду рад ответить на ваши вопросы в комментариях.