报名了赛昉RISC-V单板计算机星光派的试用,第一批完美错过,非常幸运的是,第二批中选,一直期待中。
等到六月一日,终于收到了心心念念的六一礼物,超级开心,我也是个大孩子。
一、开箱
这个包装盒很小巧,说明板子也很小巧。
包装盒上面的设计风格,科技感非常强,也预示着这款RISC-V单板计算机非凡的身手。
关于介绍的话,就不多说了,官方介绍很丰富,其他人也会介绍不是。
拿到手之后,直入正题,第一时间拆包,看看到底长啥样。
正面结构非常紧凑,没有一丝多余,接口也非常丰富。
背面非常干净,只有SD卡,一些密密麻麻小小的元器件,和圆润的焊点。
转到前面看看,丰富的接口一览无余,包括:
- PMIC音频接口
- 四个USB接口
- 1个HDMI接口
- 1个有线网口
- 1个Type-C接口
转到后面,可以看到:
- 2 x MIPI-CSI 接口
- RST和BOOT按键
- DEBUG引脚
- POE引脚
- 40针GPIO接口
- MIPI-DSI 接口
看完了板子的模样,我拿出了珍藏的其他几块板子,一起对比了一下:
个头明显比其他两块板子要打一下,谁叫咱接口多呢。
二、系统
看完了板子,下面就是跑起来了。
这块板子,目前已经有了众多Linux发行版的支持。
从官方社区 昉·星光各操作系统移植情况整理 - 昉·星光 (中文论坛) - RVspace Forum 了解到可用的系统:
一番尝试,最后,选择了熟悉的Debian。
下载地址:Index of /riscv/iso (asklinuxinfo.xyz)
选择 Debian_sid_linux_kernel_5.17.0-rc4.tar.xz 即可。后续有更新版本,选择对应的新版本。
三、烧录
下载的系统镜像包,是一个xz压缩文件,解压后有10G大小。
在Windows系统中,用解压工具解压即可。
在macOS或者Linux下,用下面的命令解压:tar -xvjf Debian_sid_linux_kernel_5.17.0-rc4.tar.xz
解压后,得到Debian_sid_linux_kernel_5.17.0-rc4.img
文件,用于烧录到SD卡。
烧录到SD卡的工具,可以图形化的balenaEtcher
,在Windows和macOS、Linux下面均可使用:
下载地址为:balenaEtcher - Flash OS images to SD cards & USB drives
因为镜像大小有10G,所以实际使用中,准备一张至少32G的手机SD卡,以防空间不足。
然后,参考下图操作即可:
烧录的时间,根据SD卡的速度而定,我这边用了两分钟。
如果是在Linux或者maxOS下面,还可以使用dd命令烧录。
Linux系统dd烧录:
sudo fdisk -l
sudo dd if=./Debian_sid_linux_kernel_5.17.0-rc4.img of=/dev/disk2 status=progress bs=1M
macOS gdd烧录:
diskutil list
brew install coreutils
sudo gdd if=./Debian_sid_linux_kernel_5.17.0-rc4.img of=/dev/disk2 status=progress bs=1M
以上命令中的SD卡设备/dev/disk2,请根据你的系统上的实际情况确定。
烧录成功后,即可把SD卡放置到板子背面的SD卡插槽中,准备启动了。
四、启动
启动前,需要先用USB2TTL,将板子连接到电脑,参考官方快速入门指南,可以了解到,具体连线如下:
再使用Mobaxterm、Putty或者SecureCRT,通过USB2TTl的串口,进行串口终端连接。
注意,板子没有上电,也是可以连接的,只是没有信息而已。
关于串口驱动、Putty设置等,请查看“昉·星光单板计算机快速入门指南.pdf”,下载地址:
(昉·星光快速入门指南 - 中文版正式上线 - 赛昉科技)
如果使用的是Linux或者macOS,官方还推荐使用minicom进行连接。
因为我使用的是macOS,所以我直接在命令行下面使用我更熟悉的screen命令连接的:screen /dev/tty.wchusbserial1420 115200
连接后,再使用Type-C线,把板子的Type-C接口连接到电脑,就能正常启动,在串口终端中就能看到启动信息了。
正常启动后,会提示Login登录,默认的用户为root,密码为root,登录进去后,就能开心的玩起来。
五、点灯
启动板子以后,第一件事情,就是点灯了。
通过官方提供的“赛昉科技40-Pin GPIO Header用户手册.pdf”可以了解,40针GPIO口的具体定义:
为了方便连接,我选用了GPIO0、GPIO2、GPIO4、GND,其对应的关系:
- GPIO0:序号40,sys编号452
- GPIO2:序号38,sys编号450
- GPIO4:序号36,sys编号448
- GND:序号34
sys编号,表示这个引脚,在系统/sys/class/gpio
中对应的编号。
把这三个引脚,接到红绿灯模块上,把GND连接好,就可以开始点灯可。
在Linux下面,可以直接使用shell脚本,操作/sys/class/gpio
下对应的GPIO挂载点(sys编号)进行简单的GPIo输入输出操作,常用的指令如下:
cd /sys/class/gpio
echo sys编号 > export
echo out > sys编号/direction
echo 0 > sys编号/value
echo 1 > sys编号/value
echo in > sys编号/direction
cat sys编号/value
我使用的是红绿灯模块,所以写了一个小脚本,来分别点亮单个LED,到2个LED,到3个LED,再到闪烁,具体脚本如下:
#!/bin/bash
cd /sys/class/gpio
gpio0=448
gpio2=450
gpio4=452
for gpio_pin in $gpio0 $gpio2 $gpio4
do
if [[ $(ls | grep -c "gpio$gpio_pin") -eq 0 ]];then
echo $gpio_pin > export
echo out > gpio$gpio_pin/direction
fi
done
set_led(){
pin=$1
echo $2 > gpio${!pin}/value
}
set_led_on(){
set_led $1 1
}
set_led_off(){
set_led $1 0
}
set_led_off_all(){
set_led_off gpio0
set_led_off gpio2
set_led_off gpio4
}
for i in $(seq 0 100)
do
set_led_off_all
set_led_on gpio0
sleep 1
set_led_off_all
set_led_on gpio2
sleep 1
set_led_off_all
set_led_on gpio4
sleep 1
set_led_off_all
set_led_on gpio0
set_led_on gpio2
sleep 1
set_led_off_all
set_led_on gpio2
set_led_on gpio4
sleep 1
set_led_off_all
set_led_on gpio4
set_led_on gpio0
sleep 1
set_led_on gpio0
set_led_on gpio2
set_led_on gpio4
sleep 1
status=0
for j in $(seq 0 5)
do
if [[ $status -eq 0 ]];then
set_led_off_all
status=1
else
set_led_on gpio0
set_led_on gpio2
set_led_on gpio4
status=0
fi
sleep 0.2
done
done
红绿灯模块的具体效果,可以查看下面的视频: