MIK32 АМУР - первый российский RISC-V микроконтроллер со встроенной криптозащитой
Данная инструкция подходит для ОС Linux, проверена работоспособность на Ubuntu 24.04
Общие характеристики отладочной платы
- RISC-V архитектура
- 32 МГц рабочая частота
- Часы RTC
- Рабочее напряжение 3.3 В
- 2 Светодиода на плате (0.9 0.10)
- Одна пользовательская кнопка на плате (1.15)
Установка IDE
Разработчик предлагает программировать амур через Visual Studio Code с надстройкой PlatformIO с ядром, специфичным для самого микроконтроллера
Установка Visual Studio Code
При помощи магазина приложений Ubuntu загрузите приложение под названием "Code"
Установка PlatformIO
Откройте ваш Visual Studio Code и перейдите на вкладках справа в раздел расширения/extensions (Ctrl+Shift+X)
В появившемся окне, в строке поиска найдите PlatformIO и установите его
После установки PlatformIO в панели слева экрана появится значок PlatformIO (голова муравья)
Установка ядра для MIK32-АМУР
Перейдите по ссылке https://github.com/MikronMIK32/mik32-platformio/releases
Загрузите архив "mik32-platformio-v0.4.0.zip" (или более новой версии)
Распакуйте этот архив в загрузках. Найдите там папки packages и platforms, а затем перенесите их в Домашняя папка/.platformio (иногда система скрывает папки, начинающиеся с точки, нажмите Ctrl+H, чтобы показать их)
Эти папки должны совместиться с уже существующими папками platforms и packages
Где найти примеры?
Примеры от разработчиков собраны по адресу: https://github.com/MikronMIK32/mik32-examples
Для удобства все их можно скачать
Blink HAL_EEPROM HAL_System_Time CHANGELOG.md HAL_EEPROM_to_SPIFI HAL_Timer16 HAL_ADC Hal_I2C_Master HAL_Timer16_IRQ HAL_ADC_IRQ Hal_I2C_Master_IRQ HAL_Timer32 HAL_Blink Hal_I2C_Slave HAL_Timer32_IRQ HAL_Blink_IRQ Hal_I2C_Slave_IRQ HAL_Timer32_PWM HAL_Blink_SPIFI HAL_OTP HAL_TSENS HAL_CRC32 Hal_RTC HAL_TSENS_IRQ HAL_Crypto Hal_RTC_IRQ HAL_USART HAL_DAC HAL_SCR1_Timer HAL_USART_DMA HAL_DMA_Crypto HAL_SCR1_Timer_IRQ HAL_USART_IRQ HAL_DMA_I2C_Master HAL_SPIFI_QuadSPI HAL_USART_Modem HAL_DMA_I2C_Slave HAL_SPIFI_QuadSPI_DMA HAL_WDT HAL_DMA_Memory_Memor_IRQ HAL_SPIFI_SingleSPI HAL_WDT_IRQ HAL_DMA_Memory_Memory HAL_SPI_Master README.md HAL_DMA_SPI_Master HAL_SPI_Master_IRQ SPIFI HAL_DMA_SPI_Slave HAL_SPI_Slave SPIFI_Quad HAL_DMA_Timer32 HAL_SPI_Slave_IRQ SSD1306
Открываем пример
В Visual Studio Code нажмите файл > октрыть папку
Выберите папку примера и нажмите открыть
В первый раз будут загружаться инструменты для работы с RISC-V размером около 1 ГБ. Дождитесь завершения процесса загрузки, отображаемого в левом нижнем углу экрана
Управление правами для использования FTDI - адаптера
Добавьте себя в группу dialout
usermod -a -G dialout USER
Разрешите использование FTDI - устройств без root-доступа:
Создайте файл /etc/udev/rules.d/ecp5.rules с содержимым:
SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="6010", MODE="0666"
После этих операций нужно перезагрузить ваш компьютер
Выбор памяти для исполнения программ
На плате есть 2 перемычки, которые выбирают тип памяти, откуда выполнится программа. Таблица расшифровки положений расположена на плате рядом
- EEPROM - многократно записываемая постоянная память внутри микроконтроллера
- RAM - исполнение из оперативной памяти. Стирается после отключения питания. Отлично подходит для отладки программ
- SPIFI - многократно записываемая постоянная память, распаянная в виде микросхемы DD4
Конфигурационный файл platformio.ini
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:mik32v2]
platform = MIK32
board = mik32v2
framework = framework-mik32v2-sdk
; board_debug.ldscript = ram
Этот файл есть у каждого проекта в PlatformIO
Для нас важно, чтобы параметр board был установлен правильно (mik32v2 на данный момент)
Параметр board_debug.ldscript устанавливает память, куда будет загружена программа. Принимает: eeprom ram spifi
Самая простая программа Blink
#include <mik32_memory_map.h>
#include <pad_config.h>
#include <gpio.h>
#include <power_manager.h>
#include <wakeup.h>
#define PIN 9
void InitClock()
{
PM->CLK_APB_P_SET |= PM_CLOCK_APB_P_UART_0_M | PM_CLOCK_APB_P_GPIO_0_M | PM_CLOCK_APB_P_GPIO_1_M | PM_CLOCK_APB_P_GPIO_2_M; // включение тактирования GPIO
PM->CLK_APB_M_SET |= PM_CLOCK_APB_M_PAD_CONFIG_M | PM_CLOCK_APB_M_WU_M | PM_CLOCK_APB_M_PM_M; // включение тактирования блока для смены режима выводов
}
int main()
{
InitClock(); // Включение тактирования GPIO
PAD_CONFIG->PORT_0_CFG &= ~(0b11 << (2 * PIN)); // Установка вывода 9 порта 0 в режим GPIO
GPIO_0->DIRECTION_OUT = 1 << PIN; // Установка направления вывода 9 порта 0 на выход
while (1)
{
GPIO_0->OUTPUT ^= 1 << PIN; // Установка сигнала вывода 9 порта 0 в противоположный уровень
for (volatile int i = 0; i < 1000000; i++) ; // 1 мс = 2000 проходов этого пустого цикла
}
}
Загрузка
В правом верхнем углу окна есть кнопка загрузить (стрелочка) или скомпилировать (галочка)
Создание нового проекта
Перейдете в PlatfromIO на панели слева
В меню Quick Access на панели слева снизу нажмите PIO Home > Open
Нажмите New Project в средней части экрана
Распиновка
На данный момент нет актуальной распиновки для этой платы, поэтому нужно соотносить с распиновкой аналогичной отладочной платы: