Zig Blinky 示例

功能说明

该示例演示如何在 Zig 中通过 arcs.Gpio 打开设备、配置输出引脚并周期性翻转板载 LED。它是一个典型的“设备 HAL + 定时休眠”入门示例,适合快速理解 Zig 侧如何访问 ARCS SDK 的 GPIO 设备框架。

硬件连接

该示例使用 gpiob 设备,不同板型的 LED 引脚和有效电平如下:

板型

LED

GPIO

有效电平

arcs_evb

板载 LED

PAD_B[9] / GPIOB 9

高电平

venusa_rd_evb

D134 RGB LED 红色通道 (PA14_LEDR)

TF_D1 / SDIO_DAT1 / GPIOB 13

低电平

venusa_rd_evb 需用跳帽短接 J47 5-6,将 PA14_LEDR 连到 TF_D1。RGB LED 与 TF_D1/TF_D2/TF_D3 共用信号,运行示例前应拔出 TF 卡,且不能同时启用 SDMMC。

示例步骤

  1. 初始化 Zig 日志系统

  2. 打开 gpiob 设备

  3. 按板型选择 LED 引脚和初始熄灯电平

  4. 循环调用 toggle() 翻转 LED

  5. 通过 arcs.sleep(500) 控制闪烁节奏

  6. 输出结束日志并返回

编译

重要提示:编译前需要先确认当前示例支持的目标板型,然后将板型标识传给 -DBOARD。请按以下方式选择:

  1. 确认示例限制:查看当前示例 README 中的硬件连接和注意事项,确认是否限定板型。

  2. 参考示例配置:查看相关示例目录下的 sample.yaml,确认支持的板型。

  3. 填写板型标识:SDK 内置板型的标识为 boards/ 下的目录名。例如实际使用的板型目录为 boards/<板型名称>/,则编译参数填写为 -DBOARD=<板型名称>

在 SDK 根目录执行编译,并将命令中的 <示例路径><板型名称> 替换为实际值。

Linux 使用 build.sh

# 通用命令
./build.sh -C -S samples/<示例路径> -DBOARD=<板型名称>

# 示例:使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb

Windows PowerShell 使用 build.ps1

# 通用命令
.\build.ps1 -C -S samples/<示例路径> -DBOARD=<板型名称>

# 示例:使用 arcs_evb 开发板
.\build.ps1 -C -S samples/<示例路径> -DBOARD=arcs_evb

Note

确保已安装对应平台的工具链和 ListenAI 开发工具包。Windows 环境请先执行 .\env.ps1 或直接使用 .\build.ps1 自动加载环境。

注意事项-DBOARD 填写的是板型标识,不是芯片系列名称。如果示例有板型专用配置或额外编译参数,以示例 README 中的说明为准。

建议将示例路径替换为:

./build.sh -C -S samples/libraries/zig/blinky -DBOARD=arcs_evb

烧录

编译完成后,使用 SDK tools/burn 目录下的 cskburn 工具烧录固件。请先根据目标板型和当前示例确定芯片系列、串口设备、烧录地址和固件路径。

Linux:

# 通用命令
./tools/burn/cskburn -C <芯片系列> -s <串口设备> -b 3000000 <烧录地址> <固件路径>

# 示例:使用 arcs_evb 开发板
./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs

Windows PowerShell:

# 通用命令
.\tools\burn\cskburn.exe -C <芯片系列> -s <串口号> -b 3000000 <烧录地址> <固件路径>

# 示例:使用 arcs_evb 开发板
.\tools\burn\cskburn.exe -C arcs -s COM7 -b 3000000 0x0 .\build\arcs.bin

Note

烧录参数说明

  • -s /dev/ttyUSB0 / -s COM7:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是 /dev/ttyUSB0/dev/ttyACM0 - 可通过 ls /dev/tty* 命令查看可用串口设备 - Windows 系统:通常是 COM7COM8 等,可在“设备管理器”的“端口”中查看 - 不同开发板或 USB 转串口芯片可能使用不同的设备名

  • -b 3000000:烧录波特率(3Mbps)

  • 0x0:烧录起始地址

  • build/arcs.bin / .\build\arcs.bin:编译生成的固件路径

  • -C arcs:芯片类型

注意事项

  • 确保开发板已正确连接到电脑

  • 如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口

预期输出

串口中可看到类似日志:

=== Zig Blinky Demo ===
Calling zig_blinky_main()...
Blinky starting — opening gpiob...
gpiob opened successfully
LED pin 13 configured as active-low output
LED ON  (toggle #0)
LED OFF (toggle #1)
...
Blinky done — 20 toggles completed
=== Zig Blinky PASSED ===

上述引脚日志为 venusa_rd_evb 输出;arcs_evb 会显示引脚 9 和 active-high。同时对应板载 LED 会持续闪烁约 10 秒。

在 CI 真机验证中,样例通过条件以串口出现 Blinky done 为准,而不是依赖人工观察 LED 现象。 该行由 Zig 侧直接同步输出,紧随其后的 === Zig Blinky PASSED === 由 C 侧异步日志打印, 是样例运行的最后一行,不适合作为 CI 判定标志。

核心 API

API

说明

arcs.Gpio.open()

打开 GPIO 设备

gpio.configOutput()

配置输出引脚

gpio.toggle()

翻转输出电平

arcs.sleep()

毫秒级休眠

关键代码

var gpio = arcs.Gpio.open("gpiob") catch return -2;

const is_active_low = active_low != 0;
gpio.configOutput(led_pin, .{ .init_high = is_active_low }) catch return -3;

var count: u32 = 0;
while (count < 20) : (count += 1) {
    gpio.toggle(led_pin) catch return -4;
    arcs.sleep(500);
}

注意事项

  • 引脚共用: VenusA 的 RGB LED 与 TF/SDMMC 共用 SDIO 信号,两者不能同时使用

  • 电平极性: Arcs LED 高电平点亮,VenusA RGB LED 低电平点亮

  • 覆盖范围: 示例主要验证 Zig GPIO HAL 的基础可用性,不覆盖输入、中断等高级模式