Visionfive 开发板通过 gpio 控制 led 灯

visionfive 是赛昉科技推出的一款开发板,使用的处理器是他们自家研发的惊鸿 7100(JH7100),这是一颗 risc-v 架构的处理器,双核 U74,U74 对标的是 ARM 的 Cortex-A55 。

写入镜像

这块板子的系统运行和树莓派一样,需要先将系统镜像写入内存卡,再插到板子上来运行。目前官方提供的只有 Fedora 这个发行版,可以在 GitHub 上找到下载链接。

https://github.com/starfive-tech/Fedora_on_StarFive

下载完是一个特殊的压缩格式,zst,我搜了一下

当前这种 ZST 格式是一种 压缩文件 ,是由 ZStandard 研发,作为一种 ZStandard压缩文件使用,此文件流行程度是 50 分(0-100满分)。

还得使用专门的工具才能解压,稍微麻烦了点。工具在这里有提供

https://rvspace.org/en/Product/VisionFive/Technical_Documents/VisionFive_Single_Board_Computer_Quick_Start_Guide

点击网页左侧的 Flashing Fedora OS to a Micro-SD Card 可以快速达到。

我是在 win10 进行操作的,将下载好的解压工具,从压缩包里解压出来,和 zst 文件放在一起。

此时在这个文件夹里的空白处,一只手按住键盘上的 shift 键,另一只手按一下鼠标的右键,在此处打开 powershell,就可以快速在当前文件夹打开一个命令行窗口。(此处我的 powershell 是自己升级过的,系统自带的是没有带 preview 的。)

执行这条命令就可以解压了

./zstd.exe -d Fedora-riscv64-jh7100-developer-xfce-Rawhide-20211226-214100.n.0-sda.raw\.zst -o Fedora-riscv64-jh7100-developer-xfce-Rawhide-20211226-214100.n.0-sda.raw

解压出来的文件差不多 13G,可以使用写盘工具将它写入内存卡中,例如 etcher。

开机

之后将内存卡插入开发板,使用 HDMI 线连接显示器,通电开机,便可进入 Fedora 了。

默认的用户名是 riscv

密码是 starfive

这台设备的桌面体验,我感觉还是比较差的,毕竟没有 GPU,而已本身也只是双核而已,所以桌面体验会有一些卡顿。很快我就放弃用鼠标来控制它了,我选择在电脑上通过 ssh 开控制它。

如何通过 gpio 控制 LED 灯?

通过这个网页,我们可以了解到这块板子的 GPIO 信息

https://rvspace.org/en/Product/General/StarFive_40-Pin_GPIO_Header_User_Guide

准备一颗 LED 灯,一头连接 34 号的 GND,一头连接 40 号的 GPIO0

在终端里进行如下的操作(需要 root 身份来执行)

cd /sys/class/gpio
echo 448 > export
cd gpio448
echo out > direction
echo 1 > value

这样便可以点亮 LED 灯

如果想熄灭它,只需执行

echo 0 > value

官方文档里的这个表格非常重要,刚才我们控制 GPIO0,操作的是 448,如果现在我们想控制 GPIO4,从表格可以查到是 452,那么只需将刚才的 448 换成 452 即可让 GPIO4 输出高电平。

dts sys Pin Name Num Num Pin Name sys dts
3.3V Power 1 2 5V Power
i2c1 i2c-1 GPIO48 (I2C SDA) 3 4 5V Power
i2c1 i2c-1 GPIO47 (I2C SCL) 5 6 GND
494 GPIO46 7 8 GPIO14 (UART TX) ttyS0 uart3
GND 9 10 GPIO13 (UART RX) ttyS0 uart3
492 GPIO44 11 12 GPIO45 PWM2
470 GPIO22 13 14 GND
468 GPIO20 15 16 GPIO21 469
3.3V Power 17 18 GPIO19 467
spi2 spidev0.0 GPIO18 (SPI MOSI) 19 20 GND
spi2 spidev0.0 GPIO16 (SPI MISO) 21 22 GPIO17 465
spi2 spidev0.0 GPIO12 (SPI SCLK) 23 24 GPIO15 (SPI CE0) spidev0.0 spi2
GND 25 26 GPIO11 (SPI CE1) spidev0.0 spi2
457 GPIO9 27 28 GPIO10 458
456 GPIO8 29 30 GND
454 GPIO6 31 32 GPIO7 (PWM0) PWM0
PWM1 GPIO5 (PWM1) 33 34 GND
451 GPIO3 35 36 GPIO4 452
449 GPIO1 37 38 GPIO2 450
GND 39 40 GPIO0 448

对此我写了一个 Python 脚本,作用是监控哔哩哔哩上面是否有人给我发私信,也就是我是否有未读消息,如果有的话,则点亮 LED 灯。而当我看完消息后,脚本检测到目前没有未读消息了,则会将 LED 灯熄灭。

脚本已放在 GitHub 上面,有兴趣的朋友可以参考一下。

6 Likes

what does this link do ?

some information …

this link use to get messege from bilibili( a video website like youtube )