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 перемычки, которые выбирают тип памяти, откуда выполнится программа. Таблица расшифровки положений расположена на плате рядом

  1. EEPROM - многократно записываемая постоянная память внутри микроконтроллера
  2. RAM - исполнение из оперативной памяти. Стирается после отключения питания. Отлично подходит для отладки программ
  3. 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 в средней части экрана

Распиновка

На данный момент нет актуальной распиновки для этой платы, поэтому нужно соотносить с распиновкой аналогичной отладочной платы: