Milk-V DuoS之使用Arduino开发
Arduino 是一个很流行的开源硬件平台,具有简洁性、易用性和开放性等优点。它提供了丰富的库函数和示例代码,使得即使对于没有编程经验的人来说,也能够快速上手。同时,Arduino 社区非常活跃,您可以轻松地获取到各种项目教程、文档和支持。
Milk-V Duo 系列已经支持 Arduino 开发,您可以直接使用 Arduino IDE,进行简单的配置后即可使用。
Duo 系列 CPU 采用大小核设计,Arduino 固件运行在小核中,大核负责与 Arduino IDE 通讯,接收 Arduino 固件并将其加载到小核中运行。同时,大核中的 Linux 系统也是正常运行的。
另外,Duo 系列开发板已经支持可视化编程软件 VISUINO
安装及配置Arduino开发环境
下载Arduino IDE
下载最新版的 Arduino IDE 目前最新的是v2.3.6: [Arduino IDE](https://www.arduino.cc/en/software/)
配置支持Duo的开发环境
打开 Arduino IDE,在 File 菜单中选择 Preferences,在 Settings 标签中的 Additional boards manager URLs 内添加 Duo 最新的配置文件地址,目前最新的是v0.2.6:
https://github.com/kubuds/sophgo-arduino/releases/download/v0.2.6/package_sg200x_index.json

配置好之后在 Tools 菜单中选择 Board,打开 Board Manager,搜索 SG200X,点击 INSTALL。

这里需要花点时间,处理编译链等配置工作,请耐心等待。
因为没有搭梯子,尝试了很多次都不行,中途下载失败,特别是最大的那个编译链:xpack-riscv-none-elf-gcc-13.2.0-2-darwin-x64.tar.gz,后面采用的离线下载的办法,从上面的package_sg200x_index.json配置文件中获取到下载地址, 先断点续传将包下载到本地,然后将包放到Arduino下载包的缓存目录下:C:\Users\用户名\AppData\Local\Arduino15\staging\packages。
开发环境安装完成后就可以写点简单代码来测试下了。
在 DuoS 中测试点亮板载 LED
烧写支持Arduino的固件
Duo 的 SD 卡系统需要烧录支持 Arduino 的固件,请在 最新 Release (https://github.com/milkv-duo/duo-buildroot-sdk/releases/) 的固件中下载前缀为 arduino 的固件。
目前只有 V1 版本镜像支持Arduino,这里我下载烧录的镜像是:
arduino-milkv-duos-sd-v1.1.4.img
烧录完成,开机默认蓝色LED会闪烁,并会虚拟出来一个串口设备,在电脑上设备管理器可以看到这个。
类似前面的,需要将大核 Linux 中 LED 闪烁的脚本禁用,为后面用小核 Arduino 点灯Demo做准备,执行下面的命令并重启 DuoS:
mv /mnt/system/blink.sh /mnt/system/blink.sh_backup && sync
开始点灯Demo
在 Arduino IDE 主界面点击 Select Board,再点击 Select Other Board and Port
搜索 "duo",Duo 选择 DuoS Dev Module,端口中选择对应的串口(即新增的虚拟串口)后点确定。
在 Arduino IDE 的 File 菜单中依次打开 Examples -> 01.Basics -> Blink 测试程序,该程序功能实现的是 Arduino 设备板载 LED 闪烁,DuoS 中也是支持的。
注:
在编译下载代码之前,请确保您的计算机中安装了 python 环境,并正确的配置了环境变量,缺少 python 环境可能造成代码无法编译和下载。
若您无法下载固件到开发板,请您首先检查 pyserial 是否安装,若没有安装,您可以执行 pip install pyserial 来安装。
若您在安装 pyserial 后仍不能将代码上传到开发板,请检查您的计算机中是否安装了 serial ,同时安装 pyserial 和 serial 可能造成固件无法下载,请您执行 pip uninstall serial 将 serial 卸载。
直接点 Upload 按钮进行测试:
此时,可以看到 DuoS 板载的 LED 间隔1秒闪烁。
参考
https://milkv.io/zh/docs/duo/getting-started/arduino