Присматриваемся к одноплатникам на RISC-V, обзор модуля Sipeed Lichee RV на процессоре Allwinner D1

Одноплатные компьютеры на RISC-V процессоре сравнительно новое веяние. Поднебесная активно работает над снижением зависимости от западных информационных систем и технологий, именно поэтому новая открытая архитектура RISC-V одна из ключевых ставок Китая. Для продвижения в массы китайский чипмейкер Allwinner  на базе ядра Alibaba/T-Head Xuantie C906 RISC-V разработал процессор Allwinner D1 и упрощенную модификацию Allwinner D1s. На сегодня разработано несколько одноплатников на RISC-V процессоре, и в первенство по массовости вырвалась компания Sipeed с модульным компьютером Система-на-Модуле Lichee RV с 512 Мб ОЗУ всего за $16.90, работающим на Linux. Разработчик может спроектировать несущую плату для данного модуля, добавив необходимые периферийные устройства и разъемы. В результате получится решение максимально подготовленное для себя. Данный модуль предназначен для создания интеллектуальных информационных систем, терминалов, роботов, и т.д. В первой части рассмотрим архитектуру процессора, возможности модуля, дистрибутивы, программное обеспечение. Во второй части детально рассмотрим порты и интерфейсы для программирования, напишем программы на Python и C#.

Архитектура RISC-V

Sipeed Lichee RV

Архитектура RISC-V предоставляет открытую и гибкую систему машинных инструкций, позволяющую создавать микропроцессоры для различных задач, не ограничивает сферы использования (включая военную промышленность), и при этом не требует отчислений (royalties). RISC-V позволяет создавать полностью открытые SoC и процессоры. На базе спецификаций RISC-V компании и сообщества под свободными лицензиями (BSD, MIT, Apache 2.0) разрабатывают несколько десятков вариантов микропроцессорных ядер, SoC. Архитектура RISC-V поддерживается GNU/Linux (присутствует начиная с Glibc 2.27, binutils 2.30, gcc 7 и ядра Linux 4.15), FreeBSD и OpenBSD, многие пакеты доступные для архитектуры x86 и ARM уже перекомпилировы под новую архитектуру RISC-V.

Разработкой связанной с RISC-V занимаются различные китайские компании. Среди них выделяется компания Alibaba/T-Head предоставив миру, в открытый доступ ядра C906 и C910. На базе этих ядер можно самостоятельно разработать свой процессор (SoC) и начать массовое производство. Открытый доступ к документации ядра процессора облегчает разработку программного обеспечения и портирование необходимых драйверов.

Схемы, описания аппаратных блоков на языке Verilog, симулятор и сопутствующая проектная документация опубликованы на GitHub под лицензией Apache 2.0. Отдельно опубликованы адаптированные для работы с чипами XuanTie версии компиляторов GCC и LLVM, библиотека Glibc, инструменты Binutils, загрузчик U-Boot, ядро ​​Linux, middleware с интерфейсом OpenSBI (RISC-машины-V Supervisor Binary Interface), платформа для создания встраиваемых систем на базе Linux Yocto Project, а также патчи для запуска Android. Ядра OpenE902, OpenE906, OpenC906 и OpenC910, доступны на GitHub под лицензией Apache 2.0.

Чип XuanTie C910 наиболее мощный из доступных на сегодняшний момент, выпускается по 12-нм техпроцессу в 16-ядерном варианте с тактовой частотой 2,5 ГГц. Производительность чипа в тесте Coremark достигает 7,1 Coremark/МГц, что превосходит процессоры ARM Cortex-A73. Всего Alibaba разработала 11 различных чипов RISC-V, из которых уже выпущено более 2,5 млрд экземпляров, и компания работает над созданием экосистемы для дальнейшего продвижения архитектуры RISC-V не только для IoT-устройств, но и для других типов вычислительных систем.

Процессор Allwinner D1 на RISC-V архитектуре

Ядро XuanTie C906 предназначено для высокоэнергоэффективных систем, для которых не требуется высокая производительность. Alibaba обещает дополнительную поддержку, включая предоставление SDK без каких либо финансовых отчислений.

Однако те, кто заинтересован в разработке SoC на базе данных ядер, должны помнить, что они были созданы до ратификации некоторых стандартов RISC-V, в частности, векторных расширений. В результате разработанные ядра технически не полностью соответствуют текущей спецификации RISC-V и разработчики ядра Linux уже высказывали опасения по поводу того, как C906, будет поддерживаться в основной ветке Linux ядра. Идет речь о соответствие ядра XuanTie C906 спецификации векторных расширений (RISC-V Vector Extension) версии v0.7.1 от 2019 г. , в то время как ратифицирован окончательный вариант версии 1.0 от 20 сентября 2021.

Sipeed Lichee RV
Возможности процессора Allwinner D1 на ядре XuanTie C906

Процессор Allwinner D1 основан на ядре Alibaba/T-Head XuanTie C906 64-bit RISC-V ISA, работает на частоте 1 ГГц, содержит 5-ступенчатый конвейер, кеш 64KB для инструкций и данных, контроллер прерываний и 128-bit шину AXI 4.0. Максимально поддерживаемый объем ОЗУ составляет 2 Гб DDR3. Компания Allwinner добавила в процессор DSP HiFi4, ускоритель G2D для 2D графики и декодирования видео. Это позволяет выводить видео H.265/H.264 с качеством 1080p@60fps (или 4K@30fps), и кодировать JPEG/MJPEG (CSI/CVBS) до 1080p@60fps. Как и другие SoC RISC-V на сегодняшний день, в нем отсутствует 3D-графический процессор (GPU). Для видео вывода доступны интерфейсы: RGB LCD до 1080p@60fps, LVDS до 1080p@60fps, 4-lane MIPI DSI до 1080p@60fps, HDMI V1.4 до 4K@30fps, CVBS OUT с поддержкой NTSC и PAL. Техпроцесс изготовления составляет 22 нм.

Sipeed Lichee RV
Структурная схема процессора Allwinner D1

Модуль Sipeed Lichee RV

Форм-фактор платы Sipeed Lichee RV это модуль SoM (System-on-Module) с двойным разъемом M.2. На плате размещена память 512 МБ DDR3, порт USB-C OTG, слот для карт MicroSD и разъем для подключения SPI дисплея. На разъем M.2 выведены интерфейсы HDMI, MIPI-DSI, RGB/MCU display, RGMII, audio, SDIO, GPIO, и другие. Размер платы составляет 46,2 x 25 мм (1,8″ x 1″) питается от источника питания в 5V, потребление составляет 500 мА.

Sipeed LicheeRV Allwinner D1 RISC-V
Детальное рассмотрение Lichee RV

Sipeed LicheeRV Allwinner D1 RISC-V
Вид сверху и снизу платы Lichee RV

Спецификация Sipeed Lichee RV:
 Процессор: SoC – Allwinner D1 single-core XuanTie C906 64-bit RISC-V processor @ 1.0 GHz with HiFi4 DSP, G2D 2D graphics accelerators.
 Оперативная память: 512MB DDR3 memory @ 792 MHz.
 Пользовательская память: слот для MicroSD карт.
 Видео: опционально дисплей диагональю 1.14 дюйма на SPI интерфейсе.
 GPU: поддержка только ускорения 2D, пост-обработка Allwinner SmartColor 2.0, поддержка деинтерлейсинга, аппаратный ускоритель G2D.
 USB: порт USB Type-C OTG.
 Отладка(Debugging): 4-pin UART разъем для Serial Console, USB ADB debugging.
 Разное: индикатор подачи питания, FEL кнопка.
 GPIO и программируемые интерфейсы: разъем 2x M.2 B-key edge для контактов ввода/вывода интерфейсов: HDMI, MIPI DSI, RGB, Ethernet, Audio, SDIO, GPIO и т.д.
 Питание: 5V/0.5A через порт USB-C.
 Размер: 43.2 x 25 мм.

Возле разъема USB-C располагается интерфейс UART предназначенный для отладки запуска операционной системы, по умолчанию контакты не припаяны.

Продается по цене $16.90, что существенно дешевле аналогичной платы Nezha SBC. Доступно два варианта платы, только модуль Lichee RV D1 (вариант licheeRV D1) и с 1.14 дюймовым дисплеем на SPI интерфейсе (вариант licheeRV D1 Suit).

Sipeed LicheeRV Suit Allwinner D1 RISC-V
Sipeed Lichee RV с дисплеем на SPI интерфейсе aka «Sipeed LicheeRV Suit»

Дополнительный дисплей 1.14″ 135×240 SPI LCD работает на контроллере Sitronix ST7789V (Datasheets). Драйвер включен в основную ветку ядра Linux, раздел FBTFT для использования RGB порта. Так же существует версия драйвера TinyDRM.

Терминал Lichee RV 86 Panel на базе Lichee RV

Sipeed Lichee RV
Lichee RV 86 Panel

Для разработчиков информационных систем компания Sipeed разработала Starter kit терминал Lichee RV 86 Panel предназначенный для систем управления, например для умного дома. Терминал оборудован 4-дюймовым IPS Touch LCD экраном, двумя MEMS микрофонами и небольшим динамиком, Ethernet RJ45 разъемом, 2.4G Wi-Fi + BT модулем, 2×8 pin GPIO 2.54 мм. Корпус сделан из SLA пластика на 3D-принтере. Поддерживается WAFT (WebAssembly Framework для вещей).

Sipeed Lichee RV

Основные элементы и разъемы несущей платы для Lichee RV 86 Panel

Видео о Lichee RV 86 Panel:

Несущая плата Lichee RV Dock для Sipeed Lichee RV

Форм-фактор платы Lichee RV подразумевает подключение к несущей плате с разводкой периферийных устройств и линий электропитания. В конце прошлого года Sipeed выпустила несущую Dock-плату с разводкой контактов GPIO шагом 2.54 мм, разъемом HDMI и USB, опционально устанавливается модуль Wi-Fi.

При небольших размерах 65 x 40 мм (2.56″ x 1.57″) несущая плата Lichee RV Dock включает в себя модуль Realtek RTL8723DS беспроводной связи Wi-Fi 4 (802.11b/g/n) и Bluetooth 4.2, порт HDMI с поддержкой вывода 4K@30fps, порт USB Type-A, 40-контактный разъем GPIO частично совместимый с аналогичным разъемом на Raspberry Pi 3, и различные разъемы включая возможность подключения динамиков. Присутствует RGB светодиод и кнопка сброса (reset).

Спецификация платы Lichee RV Dock:
Система на модуле (System on Module или SOM): модуль Lichee RV на базе RISC-V процессора Allwinner D1@1 GHz, 512MB DDR3.
Пользовательская память: опционально SPI память.
 Видео: HDMI порт с поддержкой видео до 4K@30fps, опционально RGB интерфейс с поддержкой видео до  720p@30fps через модуль «Display Shell», опционально MIPI DSI интерфейс с поддержкой видео до  1080p@60fps через модуль «Display Shell».
 Связь:  опционально беспроводной модуль Realtek RTL8723DS с поддержкой Wi-Fi 4 (802.11b/g/n) и Bluetooth 4.2. На плате размещена встроенная SMT антенна и разъем IPEX для подключения внешней антенны.
 Звук: 3 Вт усилитель вывода на динамики, 1x аналоговый электретный микрофон, поддержка микрофонного массива Mic Array R6 (включает шесть микрофонов) через плату расширения, подключается на разъем 30P FPC.
 USB: порт USB Type-A, дополнительно еще один порт USB-C OTG на самом модуле Lichee RV.
 Разное: светодиод RGB на микросхеме WS2812, кнопка сброса (reset key), пользовательская кнопка (user key, ADC).
 Expansions Header: разъем 40-pins с шагом 2,54 мм частично совместимый с Raspberry Pi включая GPIOs, I2C/TWI, SPI, UART, PWM.
 Размер: 65 x 40 мм.

После установки основного модуля Lichee RV в Lichee RV Dock, плата очень походит на Raspberry Pi Zero.

Lichee RV Dock
Sipeed Lichee RV Dock с подключенной платой Lichee RV

Lichee RV Dock
Sipeed Lichee RV Dock без платы Lichee RV

Lichee RV Dock
Размещение основных модулей и разъемов на плате

Lichee RV Dock RTL8723DS
Модуль беспроводной связи Realtek RTL8723DS

Sipeed Lichee RV
Sipeed Lichee RV Dock, вид снизу

В официальном магазине Sipeed  доступно несколько вариантов приобретения платы. Можно купить плату Dock вместе с основным модулем Lichee RV и без него. Если желаете выбрать другой Wi-Fi модуль, то доступен вариант платы Dock без напаянного модуля Realtek RTL8723DS. Доставка в РФ осуществляется службой Hongkong Post. Для надежности продавец упаковывает товар в твердую картонную коробку. Для более простой работы рекомендуется приобретать Dock с модулем Wi-Fi в связи с возможностью сразу из коробки подключить плату к сети Интернет для установки и обновления ПО.

Видео о Sipeed Lichee RV Dock:

Распиновка

Разъем GPIO на 40-pins с шагом 2,54 мм частично совместим с аналогичным разъемом Raspberry Pi, так же присутствую линии питания на 3.3V и 5V, но некоторые выводы GND не соответствуют выводам на Raspberry Pi.

Выведены интерфейсы: 1x TWI, 1x SPI, 6x PWM, 4x UART, MIPI DSI, RGB, LVDS.

Для отладки используется интерфейс UART0, контакты PB8 — UART0_TX и PB9 — UART0_RX.

Lichee RV Dock pinout diagram
Распиновка Lichee RV Dock

Дополнительные модули

На плате Lichee RV Dock специально выведен разъем 30P FPC для подключения массива микрофонов Mic Array R6. Данный модуль предназначен для создания интеллектуальных голосовых систем.

Lichee RV Dock
Mic Array R6

Плата Display Shell подключается к Lichee RV Dock на 40-pins разъем GPIO. Предоставляет разводку FPC разъемов для подключения LCD панелей по RGB и MIPI DSI включая сенсорные. На субъективный взгляд бесполезная вещь т.к. разводку под конкретную LCD панель придется делать самостоятельно.

Lichee RV Dock
Плата Display Shell для Lichee RV Dock

Операционные системы

Из операционных систем поддерживаются:

  • Tina Linux на базе OpenWrt;
  • Debian Desktop;
  • Linux с поддержкой среды Alibaba WAFT (WAFT — это Framework для AIOT, созданный компанией Alibaba на основе WebAssembly и собственного механизма рендеринга).

Часть образов опубликовано на сайте разработчика Sipeed /LICHEE/D1/Lichee_RV/SDK/image, другая на Mega.nz.

Все дальнейшие работы выполнялись на образе 20211230_LicheeRV_debian_d1_hdmi_8723ds.7z (1,07 ГБ). Данный образ построен на Debian и предназначен для использования вместе с Lichee RV Dock, поддерживается вывод видео по HDMI и Wi-Fi чип 8723ds.

Для загрузки прошивки на microSD карту (минимальный размер 16 Гб) необходимо использовать специализированную программу PhoenixCard, интерфейс который выполнен на китайском языке. Если в вашей версии Windows не добавлен китайский язык, то скорее всего кнопки и метки будут без надписей. Но на самом деле это не проблема, все предельно просто, вот документация на китайском языке.

Sipeed Lichee RV
Программа записи прошивки PhoenixCard

Первое, выбираем распакованный образ в формате *.img. Второе, выбираем второй пункт меню. Третье, нажимаем на первую кнопку из трех доступных и ждем 15 минут в не зависимости от размера исходного образа.

Подключение по UART

Если для взаимодействия с системой у вас нет возможности подключить экран по HDMI интерфейсу, то используя простой USB-TTL UART конвертер можно решить эту задачу. Для этого необходимо подключить контакты RX, TX, GND конвертера к соответствующим контактам Dock платы. Для примера, подключим конвертер на базе чипа CH340G.

Sipeed Lichee RV
Схема подключения USB-TTL UART конвертера

Для подключения удобно использовать терминал MobaXterm. Выберем появившийся COM порт в операционной системе, выставим скорость 115200 bps, и в терминале появится загрузочный экран:

Sipeed Lichee RV
Загрузочный экран Lichee RV

Debian. Настройка Wi-Fi и оборудование

После подачи питания по умолчанию загрузится графическая оболочка LXDE. Для авторизации необходимо указать: логин — sipeed или root, пароль — licheepi. Для удаленного доступа по SSH и UART входите в систему под именем sipeed. Выполним команды  uname -a  и  lsb_release -a .

Результат выполнения:

root@sipeed:~# uname -a
Linux sipeed 5.4.61 #217 PREEMPT Thu Dec 30 06:50:31 UTC 2021 riscv64 GNU/Linux
root@sipeed:~# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye

Образ построен на Debian 11 (bullseye), ядро Linux 5.4.61.

Sipeed Lichee RV
Запуск утилиты neofetch

Первым делом подключимся к сети Интернет, для этого включим Wi-Fi сеть, кнопка «Пуск» > Preferences > Connman Settings. Включаем модуль Wi-Fi и подключаемся к беспроводной сети.

Sipeed Lichee RV
Вызов менеджера подключения Wi-Fi в Debian

Выберем беспроводную сеть Wi-Fi и подключимся к ней.

Sipeed Lichee RV
Подключение к Wi-Fi сети

Откроем свойство подключения сети и включим автоподключение при запуске системы.

Sipeed Lichee RV
Включение автоподключения к сети Wi-Fi

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

USB устройства клавиатура, мышь, хабы USB 2.0 и 3.0 поддерживаются без проблем. Вывод списка устройств утилитой  inxi :

root@sipeed:~# inxi -Fc0
System:
  Host: sipeed Kernel: 5.4.61 riscv64 bits: 64 Console: pty pts/3
    Distro: Debian GNU/Linux 11 (bullseye)
Machine:
  Type: RISCV System: sun20iw1p1 details: N/A
CPU:
  Info: single core model: N/A variant: riscv bits: 64 type: UP
  Speed: N/A min/max: N/A core: No per core speed data found.
Graphics:
  Device-1: sunxi-disp driver: disp v: N/A
  Device-2: sunxi-hdmi driver: allwinner,sunxi_hdmi v: N/A
  Display: server: Moba/X 1.20.11 driver: loaded: fbdev
    resolution: 1920x1080
  OpenGL: renderer: llvmpipe (LLVM 11.0.1 128 bits) v: 4.5 Mesa 20.3.5
Audio:
  Device-1: simple-audio-card driver: sunxi_audio_card
  Device-2: sunxi-daudio driver: sunxi_daudio
  Device-3: simple-audio-card driver: sunxi_audio_card
  Device-4: sunxi-hdmiaudio driver: sunxi_hdmiaudio
  Device-5: sunxi-hdmi driver: allwinner,sunxi_hdmi
  Sound Server-1: ALSA v: k5.4.61 running: yes
  Sound Server-2: PulseAudio v: 14.2 running: yes
Network:
  Message: No RISCV data found for this feature.
  IF-ID-1: sit0 state: down mac: 00:00:00:00
  IF-ID-2: wlan0 state: up mac: xx:xx:xx:xx:xx:xx
  IF-ID-3: wlan1 state: down mac: xx:xx:xx:xx:xx:xx
Drives:
  Local Storage: total: 29.72 GiB used: 3.05 GiB (10.3%)
  ID-1: /dev/mmcblk0 vendor: SanDisk model: SD32G size: 29.72 GiB
Partition:
  ID-1: / size: 7.75 GiB used: 3.05 GiB (39.4%) fs: ext4 dev: /dev/mmcblk0p7
Swap:
  Alert: No swap data was found.
Sensors:
  Message: No sensor data found. Is lm-sensors configured?
Info:
  Processes: 96 Uptime: 1h 10m Memory: 491.8 MiB used: 238.3 MiB (48.5%)
  Shell: Bash inxi: 3.3.12

Дополнительный дисплей 1.14″ 135×240 SPI LCD

Небольшой дисплей используется в образе licheerv_d1_1.14lcd_ub2004.tgz. Вначале его не удалось запустить из-за допущенной ошибки Sipeed в инструкции к записи образа на карту памяти. После общения с Sipeed, удалось решить проблему и запустить дисплей, классно выглядит и прекрасно работает:

Sipeed Lichee RV LCD

Sipeed Lichee RV LCD
Lichee RV SPI LCD

Видео работа дисплея Lichee RV 86 SPI LCD:

Sipeed Lichee RV
Две платы с RISC-V процессором, Lichee RV и MCU ESP32-C3-32S

Работа с беспроводной сетью

Сеть Wi-Fi полноценно не работает. При вызове команды  iwconfig  сообщается, что интерфейсы wlan0 и wlan1 не поддерживают Wi-Fi.

Результат выполнения команды:

root@sipeed:~# sudo iwconfig
wlan0     no wireless extensions.
wlan1     no wireless extensions.
lo        no wireless extensions.
sit0      no wireless extensions.

Подключение к Wi-Fi с помощью wpa_supplicant не увенчалось успехом, хотя на странице Sipeed LicheeRV указано, что это должно работать. Bluetooth на данный момент не поддерживается.

Пара слов об утилиты nmtui для подключения к Wi-Fi сети

Для подключения к Wi-Fi сети из консоли, не используя графическую оболочку, используется удобная утилита nmtui (пакет network-manager) с возможностью подключения к Wi-Fi сети в интерактивном режиме, без ручной правки конфигурационных файлов. Так это работает в Armbian. Но в Lichee RV после перезагрузки системы, Debian автоматически не подключается к настроенной Wi-Fi сети через утилиту nmtui, поэтому загрузку LXDE придется оставить.

RGB светодиод

RGB светодиод на микросхеме WS2812 включен в конфигурацию, управляется с помощью виртуальной файловой системы Sysfs. По пути  /sys/class/leds  располагаются три устройства: sunxi_led0b, sunxi_led0g, sunxi_led0r. Задавая свойство  brightness  от 0 до 255 каждого цвета RGB можно задать итоговый цвет. Включим фиолетовый цвет, по модели RGB, для этого необходимо задать свойства (128, 0, 255). Выполним команды:

$ echo 128 > /sys/class/leds/sunxi_led0r/brightness
$ echo 0 > /sys/class/leds/sunxi_led0g/brightness
$ echo 255 > /sys/class/leds/sunxi_led0b/brightness

Sipeed Lichee RV
Включение RGB светодиода на Sipeed Lichee RV Dock

GPIO, I2C, SPI

Для управления контактами GPIO используется библиотека Libgpiod. В отличие от Armbian, в репозитории размещен пакет последней версии (версия 1.6), поэтому установим данную библиотеку командой:

$ sudo apt-get update
$ sudo apt-get install -y libgpiod-dev gpiod   

После этого выполним команду gpiodetect для вывода списка существующих чипов GPIO, метки и количество линий

Результат выполнения:

root@sipeed:~# gpiodetect
gpiochip0 [2000000.pinctrl] (224 lines)
Результат выполнения команды gpioinfo
root@sipeed:~# gpioinfo
gpiochip0 - 224 lines:
        line   0:      unnamed       unused   input  active-high
        ...
        line  31:      unnamed       unused   input  active-high
        line  32:      unnamed       kernel   input  active-high [used]
        line  33:      unnamed       kernel   input  active-high [used]
        line  34:      unnamed       unused   input  active-high
        ...
        line  39:      unnamed       unused   input  active-high
        line  40:      unnamed       kernel   input  active-high [used]
        line  41:      unnamed       kernel   input  active-high [used]
        line  42:      unnamed       kernel   input  active-high [used]
        line  43:      unnamed       kernel   input  active-high [used]
        line  44:      unnamed       unused   input  active-high
        ...
        line  63:      unnamed       unused   input  active-high
        line  64:      unnamed       kernel   input  active-high [used]
        line  65:      unnamed       unused   input  active-high
        ...
        line 139:      unnamed       unused   input  active-high
        line 140:      unnamed       unused  output  active-high
        line 141:      unnamed       unused   input  active-high
        line 142:      unnamed       kernel   input  active-high [used]
        line 143:      unnamed       unused  output  active-high
        line 144:      unnamed       unused  output  active-high
        line 145:      unnamed       kernel   input  active-high [used]
        line 146:      unnamed       unused   input  active-high
        ...
        line 159:      unnamed       unused   input  active-high
        line 160:      unnamed       kernel   input  active-high [used]
        line 161:      unnamed       kernel   input  active-high [used]
        line 162:      unnamed       kernel   input  active-high [used]
        line 163:      unnamed       kernel   input  active-high [used]
        line 164:      unnamed       kernel   input  active-high [used]
        line 165:      unnamed       kernel   input  active-high [used]
        line 166:      unnamed         "cd"   input  active-high [used]
        line 167:      unnamed       unused   input  active-high
        ...
        line 191:      unnamed       unused   input  active-high
        line 192:      unnamed       kernel   input  active-high [used]
        line 193:      unnamed       kernel   input  active-high [used]
        line 194:      unnamed       kernel   input  active-high [used]
        line 195:      unnamed       kernel   input  active-high [used]
        line 196:      unnamed       kernel   input  active-high [used]
        line 197:      unnamed       kernel   input  active-high [used]
        line 198:      unnamed       kernel   input  active-high [used]
        line 199:      unnamed       kernel   input  active-high [used]
        line 200:      unnamed       kernel   input  active-high [used]
        line 201:      unnamed       kernel   input  active-high [used]
        line 202:      unnamed "wlan_hostwake" input active-high [used]
        line 203:      unnamed       unused   input  active-high
        line 204:      unnamed "wlan_regon"  output  active-high [used]
        line 205:      unnamed       unused  output  active-high
        line 206:      unnamed "fts_irq_gpio" input active-high [used]
        line 207:      unnamed "fts_reset_gpio" output active-high [used]
        line 208:      unnamed       unused   input  active-high
        line 209:      unnamed       unused   input  active-high
        line 210:      unnamed     "bt_rst"  output  active-high [used]
        line 211:      unnamed       unused   input  active-high
        ...
        line 223:      unnamed       unused   input  active-high
Результат выполнения команды: cat /sys/kernel/debug/gpio
root@sipeed:~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-223, parent: platform/2000000.pinctrl, 2000000.pinctrl:
 gpio-166 (                    |cd                  ) in  hi IRQ
 gpio-202 (                    |wlan_hostwake       ) in  hi
 gpio-204 (                    |wlan_regon          ) out hi
 gpio-206 (                    |fts_irq_gpio        ) in  hi IRQ
 gpio-207 (                    |fts_reset_gpio      ) out hi
 gpio-210 (                    |bt_rst              ) out lo

В продолжение поста займемся программированием и работой с аппаратными интерфейсами, но для этого потребуется сформировать образ операционной системы с помощью SDK на последней версии ядра Linux.

BSP SDK

Информации об BSP SDK немного, предлагается загрузить архив достаточно большого размера (9.66 Гб) для формирования образа, дополнительно доступен на Docker Hub zepan/d1compile. Как работать с SDK сказано ссылка1, ссылка2, ссылка3.

От разработчика процессора Allwinner доступна регистрация (по e-mail, китайский номер мобильного телефона не требуется) на сайте open.allwinnertech.com в качестве разработчика. Заполняем форму регистрации, и получаем доступ к SDK.

Sipeed Lichee RV
Allwinner SDK Page

На странице whycan.com/t_6440.html собрана документация об аппаратных интерфейсах на китайском языке, в формате PDF.

Использование RISC-V процессоров в обучение

Одноплатный компьютер Sipeed Nezha 64bit на процессоре XuanTie C906 RISC-V используется для обучения в информационных дисциплинах Норвежским университетом естественных и технических наук (NTNU).

Sipeed Lichee RV
Одноплатный компьютер Sipeed Nezha Allwinner D1

Норвежский университет естественных и технических наук является университетом мирового класса, подготавливает высококлассных специалистов с сильными техническими и академическими знаниями в области нефтяных и морских технологий, физиологии и медицины, химической инженерии, электротехники и электроники, производства и инженерии качества. Морская инженерия университета занимает второе место в мире. В 2021 году NTNU занял 101–150 место в мировом рейтинге университетов мира за 2019 год. Пять выпускников NTNU получили Нобелевские премии. Для сравнения МГУ имени М.В. Ломоносова занимает 97 место, второе место по России Санкт-Петербургский государственный университет — 301-400 место.

Профессор Michael Engel подробно рассказывает как работают операционные системы на примере запуска (портирования) ОС xv6 MIT под архитектуру RISC-V, а именно запуск на одноплатнике Sipeed Nezha.

Sipeed Lichee RV
Sipeed Nezha в программе курса

ОС xv6 — это операционная система предназначенная для использования в обучение студентов, разработана Массачусетским технологическим институтом (MIT) для курса «Инженерия операционных систем» (код 6.828).

В отличие от систем Linux или BSD, ОС xv6 очень проста и может быть изучена всего за один семестр. Весь программный код составляет немного более 8000 строк, но он по-прежнему включает важные концепции и организационные структуры Unix.

Благодаря высокой производительности и широкому спектру применения одноплатного компьютера Sipeed Nezha, удалось получить широкое признание в информационной отрасли, не только достигнув цели использование для разработки в различных областях, но и сделав первый шаг к тому, чтобы китайские процессоры вышли в лидерство на мировой рынок.

MangoPi MQ-Pro

Еще один интересный проект, на таком же процессоре Allwinner D1 RISC-V, от стартапа MangoPi (на момент публикации сайт не работает), одноплатный компьютер MangoPi MQ-Pro. В отличие от Lichee RV, на плате размещен 40 Pins разъем GPIO, который полностью совместимый с аналогичным разъемом на  Raspberry Pi 3. Форм фактор платы выполнен в стиле Raspberry Pi Zero, что более удобнее для DIY проектов, чем исполнение в виде модуля (SoM). Отдельно выведен разъем MIPI DSI для подключения  дисплеев с сенсорным экраном. Если вам интересно поработать с RISC-V процессором в более комфортных условиях, то лучше дождаться выпуска MangoPi MQ-Pro.

Sipeed Lichee RV
MangoPi MQ-Pro

Ориентировочная стоимость около $20 без учета доставки. Массовое производство планируется запустить 15-20 февраля, как раз после празднования Китайского Нового года. Скорее всего, где-то в марте появятся в магазинах.

«Допиливание» системы

Расширение раздела rootfs

Китайцы очень шустро делают новые платы, но с поддержкой программного обеспечения возникают некоторые сложности. Не смотря на указанные требования в размере 16 Гб для microSD, фактический размер раздела rootfs (образ  с Debian) составит 4 Гб. В отличие от Armbian, при запуске системы, раздел с rootfs не расширяется автоматически до максимального размера карты памяти. Поэтому для карты microSD объемом 32 Гб необходимо расширить раздел с rootfs.

Расширение раздела с rootfs до максимального размера карты microSD
Расширение раздела выполняется «на лету» в загруженной системе, выполним следующие шаги:

1 Шаг. Отобразим текущий список точек монтирования, командой  df -h :

В первой строке видим корень файловой системы размером всего 4 Гб.

Sipeed Lichee RV

2 Шаг. Выведем список разделов на microSD карте, командой  fdisk -l 

Sipeed Lichee RV

Подключена карта памяти объемом 30 Гб. Необходимо раздел  /dev/mmcblk0p8  удалить, а раздел  /dev/mmcblk0p7  расширить до максимального размера.

3 Шаг. Работаем с разделами утилитой  parted , выполним команду  parted /dev/mmcblk0 , затем введем команду вывода списка всех разделов p:

Sipeed Lichee RV

В первую очередь удалим раздел под номером 8, затем раздел под номером 7 (rootfs) расширим до максимального размера.

4 Шаг. Удаляем раздел под номером 8, команда  rm 8 

(parted) rm 8

5 Шаг. Расширяем раздел под номером 7, команда  resizepart 7 . Указываем точку окончания раздела на 30 Гб.

(parted) resizepart 7
End? [8642MB]? 30000

6 Шаг. Выходим из программы  parted , командой  quit 

(parted) quit

7 Шаг. Расширяем раздел  /dev/mmcblk0p7  утилитой  resize2fs , выполним команду

$ sudo resize2fs /dev/mmcblk0p7

Ход выполнения:

root@sipeed:~# resize2fs /dev/mmcblk0p7
resize2fs 1.46.2 (28-Feb-2021)
Filesystem at /dev/mmcblk0p7 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mmcblk0p7 is now 7311480 (4k) blocks long.

8 Шаг. Перезапускам систему командой,  reboot now 

9 Шаг. Повторно выводим информацию о точках монтирования командой,  df -h 

Sipeed Lichee RV

Как видим теперь раздел rootfs стал размером 28 Гб.

Обновление ключей репозитория пакетов

При обновление пакетов возникла ошибка верификации корневых ключей публичного репозитория. Выполнение команды  apt-get update  приводит к следующей  ошибке:

root@sipeed:/etc/apt# apt-get update
Get:1 http://ftp.ports.debian.org/debian-ports sid InRelease [65.1 kB]
Err:1 http://ftp.ports.debian.org/debian-ports sid InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E852514F5DF312F6
Reading package lists... Done
W: GPG error: http://ftp.ports.debian.org/debian-ports sid InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E852514F5DF312F6
E: The repository 'http://ftp.ports.debian.org/debian-ports sid InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

Проблема заключается в наличие просроченных ключей, необходимо загрузить в ручном режиме новые ключи. Для этого со страницы debian-ports-archive-keyring  загружаем DEB-пакет debian-ports-archive-keyring_2021.12.30_all.deb, копируем его на Lichee RV, используя терминал MobaXterm, и запускаем установку командой:

$ sudo dpkg -i debian-ports-archive-keyring_2021.12.30_all.deb

После обновления ключей все заработает включая обновление. Обновим систему, выполним команды:

$ sudo apt-get update
$ sudo apt-get -y upgrade

Установка дополнительных пакетов

Для работы с текстовыми конфигурационными файлами удобнее пользоваться не древним программами vi или nano, а нормальным редактором с поддержкой псевдографики и мыши. В состав пакета mc входит файловый менеджер Midnight Commander и текстовый редактор mcedit. Установим пакет mc и htop, командой:

$ sudo apt-get install -y mc htop usbutils

Настройка расширения экрана для LXDE

В не зависимости от диагонали подключаемого экрана, Xorg будет выводить картинку с разрешением 1080p. Но если у вас небольшой портативный LCD на 8 дюймов, то это проблема. Для задания других разрешений экрана необходимо создать конфигурационный файл с настройками для вашего монитора. Для этого необходимо создать конфигурационный файл по пути  /usr/share/X11/xorg.conf.d/99-fbdev.conf  и разместить в нем следующий фрагмент:

Файл 99-fbdev.conf
Section "Device"  
  Identifier "myfb"
  Driver "fbdev"
  Option "fbdev" "/dev/fb0"
EndSection

Section "Screen"
    Identifier    "Default Screen"
    Monitor        "Configured Monitor"
    Device        "myfb"
    DefaultDepth    24
    SubSection "Display"
        Depth    24
        Modes     "640x480" "800x600" "1024x768" "1024x600" "1280x720" "1920x1080"
    EndSubSection
EndSection

Section "InputDevice"
	Identifier	"Keyboard0"
	Driver		"keyboard"
	Option	"Floating" "off"
	Option	"XkbRules" "xorg"
	Option	"XkbModel" "pc105"
	Option	"XkbLayout" "us"
EndSection

Section "InputDevice"
  Identifier      "Mouse0"
  Driver          "evdev"
  Option          "Name" "Logitech USB Gaming Mouse"
  Option          "evBits"  "+1-2"
  Option          "keyBits" "~272-287"
  Option          "relBits" "~0-2 ~6 ~8"
  Option          "Pass"    "3"
  Option          "CorePointer"
EndSection

Section "ServerLayout"
  Identifier     "Default Layout"
  Screen 0       "Default Screen" 0 0
  InputDevice    "Keyboard0" "CoreKeyboard"
  InputDevice    "Mouse0" "CorePointer"
EndSection
В строке Modes задайте необходимые разрешения экрана, остальные параметры изменять не требуется.

Далее, необходимо выставить значение dpi. В папке домашней директории ( /root ) создаем файл  .Xresources , командой:

$ sudo mcedit /root/.Xresources

В файле размещаем единственною строку параметр:

Xft.dpi: 100

Сохраняем изменения <F2> и выходим из редактора <F10>. Перезапускаем систему и входим в под пользователем root.

После перезапуска системы, в LXDE откроем меню «Пуск» > Preferences > Monitor Settings, выберем необходимое разрешение экрана.

Sipeed Lichee RV
Выбор разрешения экрана

Итог

Поднебесная, в отличие от российских разработчиков процессоров МЦСТ и Байкал электроникс, стремится к максимальной открытости не только в виде документации по использованию, но и предоставляет открытый доступ к исходникам ядер процессора. Ставка на открытость очень сильно подкупает.

Учитывая что спецификацию RISC-V сделали буквально вчера, а на руках уже работающая плата по низкой цене, это весьма впечатляющий результат. Пока драйверов и софта под архитектуру RISC-V очень мало, но многие пакеты уже скомпилированы под новую архитектуру.

Для полноценного теста необходим нормально работающий образ операционной системы, поэтому никакие тесты скорости не выполнялись. Поэтому следующий шаг, это сборка и настройка своего образа на базе Debian или Ubuntu.

Отдельно хотелось бы отметить проект Carlos Eduardo по портированию Docker на RISC-V архитектуру с последующей сборкой пакетов для этой архитектуры. Carlos Eduardo предлагает запускать QEMU эмулятор RISC-V архитектуры на x86 машине. Для эксперимента были установлены бинарные пакеты Docker от Carlos Eduardo на Lichee RV, но демон Docker не запустился. На данный момент с помощью инструмента Buildx (при сборке указать платформу —platform linux/riscv64) собираются контейнеры не только для ARM архитектуры, но и для RISC-V архитектуры, но об этом в продолжение.

Коротко:

  • На Lichee RV образ с Debian запускается в среднем за 1 минуту;
  • Видео не воспроизводится, показывается только первый кадр, далее видео замирает;
  • Браузера нет. Пока нет порта ни Firefox, ни Chrome;
  • Что-то намудрили с запуском диспетчера LXDE, иногда система зависает при инициализации GPU. Перезагрузка не спасает, только обесточивание платы и LCD панели решает проблему;
  • Образ Debian «кривой», необходимо собирать свой;
  • Вся текущая документация на плату и SDK только на китайском языке.

Благодарю за внимание, пишите в комментариях что вы бы хотели проверить, протестировать на новом одноплатнике Sipeed Lichee RV.

Обсуждение на Habr.com

Ресурсы

Вам также может понравиться

About the Author: Anton

Programistik