☰
Gobot 在 ASUS Tinker Board 2 上的接入指南:RK3399 平台的 GPIO/I2C/PWM/SPI 配置与实战
2026/10/6 7:27:40 网站建设 项目流程
  • 物联网
  • 机器人
  • 嵌入式

【免费下载链接】gobot

Golang framework for robotics, drones, and the Internet of Things (IoT)

项目地址:https://gitcode.com/gh_mirrors/go/gobot
点击查看免费下载

Tinker Board 2 是华硕基于 Rockchip RK3399 处理器(arm64 架构)推出的单板 SoC 计算机,板载 GPIO、I2C、PWM、SPI、1-Wire、MIPI CSI 与 MIPI DSI 等接口。本文以 platforms/asus/tinkerboard2/README.md 为主线,结合仓库中 adaptor.go、pinmap.go 与两个可直接参考的示例,完整讲解如何在 Armbian 系统上安装配置环境、用 Gobot 驱动 Tinker Board 2 的引脚,并解决 I2C 与 PWM 的常见坑点。读完本文,你将掌握从编译、部署到调试 GPIO、I2C、PWM 的完整闭环。

平台概览

Tinker Board 2 使用 Rockchip RK3399 芯片,属于 64 位 ARM 平台(arm64),因此交叉编译时与 Tinker Board(RK3288,armv7)的参数完全不同。板载接口包括:

  • GPIO:通过板载 40-pin 排针引出,程序中使用板身上印刷的引脚编号(如 "7"、"32");
  • I2C:提供 i2c-6、i2c-7、i2c-8 三路可用总线;
  • PWM:由 pwm0、pwm1、pwm2、pwm3 四个 PWM 控制器驱动,其中三个可映射到排针;
  • SPI:spidev1.x 与 spidev5.x 两路可用;
  • 1-Wire、MIPI CSI / DSI:板载接口,1-Wire 走 sysfs 设备路径。

在仓库中,Tinkerboard2Adaptor内嵌了tinkerboard.Adaptor,因此继承了模拟引脚(analog pins)的定义——thermal_zone0与thermal_zone1两个热区温度节点,其映射定义在 platforms/asus/tinkerboard/pinmap.go#L46-L50,这也是示例tinkerboard2_yl40.go之外另一条可用的"模拟输入"通道。

安装与系统配置

Gobot 主框架的安装方式请参照仓库根目录的 README.md。官方文档中明确测试过的操作系统是Armbian(Debian 版本),参见 platforms/asus/tinkerboard2/README.md。

系统级配置步骤在 Tinker Board 2 的文档中直接沿用了 Tinker Board 的说明,分为以下几项,且只需在板卡上配置一次,之后无需重复。

系统访问与基础配置

最简单的方式是通过 SSH 登录板卡,使用 Armbian 自带的交互式配置界面:

sudo apt install armbian-config sudo armbian-config

Tinker Board 2 的文档特别建议直接使用sudo armbian-config完成基础系统设置。修改配置后需要重启生效:

sudo reboot

启用硬件驱动

并非所有硬件驱动默认启用。可以查看 Armbian 的启动配置,确认当前启用的接口:

cat /boot/armbianEnv.txt # 部分系统为 /boot/config.txt

用vi或nano修改该文件即可调整 overlay:

sudo vi /boot/armbianEnv.txt

启用 GPIO

为 GPIO 创建系统组,并将当前用户加入该组(TinkerOS 下还需添加 udev 规则,完整规则内容见 Tinker Board 的配置章节):

sudo groupadd -f --system gpio sudo usermod -a -G gpio <user>

启用 I2C

同样创建i2c系统组并加入用户,TinkerOS 下需要为 I2C 设备添加 udev 权限规则(规则全文见 Tinker Board 的 I2C 章节):

sudo groupadd -f --system i2c sudo usermod -a -G i2c <user>

注意:Tinker Board 文档中的usermod示例写的是追加到gpio组,从上下文看 I2C 场景应追加到i2c组,实操时请按你实际需要授权的组名调整。配置完成后重启,即可运行使用 GPIO 与 I2C 的 Gobot 程序。

快速上手:引脚编号与基础驱动

Gobot 程序使用的引脚编号,应当与板卡本体上印刷的丝印编号一致。最基础的用法(以 LED 为例):

r := tinkerboard2.NewAdaptor() led := gpio.NewLedDriver(r, "7")

NewAdaptor()的构造逻辑与可选参数定义在 adaptor.go,支持以下选项(参照注释整理):

可选参数作用
adaptors.WithGpioSysfsAccess()改用传统 sysfs 驱动而非默认的 character device(cdev)驱动
adaptors.WithSpiGpioAccess(sclk, ncs, sdo, sdi)用 GPIO 代替/dev/spidev#.#模拟 SPI
adaptors.WithGpiosActiveLow(pins...)对指定引脚反转电平行为
adaptors.WithGpiosPullUp / WithGpiosPullDown(pins...)为指定引脚设置内部上下拉电阻
其余 PWM 相关选项见adaptors.NewPWMPinsAdaptor说明

从源码看,Tinkerboard2Adaptor会自动装配五个子系统:

  • DigitalPinsAdaptor:基于gpioPinDefinitions(定义于 pinmap.go)翻译排针编号;
  • PWMPinsAdaptor:基于pwmPinDefinitions映射 PWM 通道;
  • I2cBusAdaptor:默认总线号为7(对应排针 27、28),合法总线号由校验器限制为[6, 7, 8];
  • SpiBusAdaptor:默认spidev1.0(排针 19、21、23、24),合法总线为[1, 5],默认模式 0、8 bit、最高速率 500000;
  • AnalogPinsAdaptor:继承自 tinkerboard 的thermal_zone0/1。

上述默认值均在 adaptor.go#L12-L20 中以常量形式给出。单元测试 adaptor_test.go 验证了默认适配器使用 cdev 访问、以及WithGpioSysfsAccess()选项能切换到 sysfs 访问模式。

如何连接与部署

Tinker Board 2 是 arm64 平台,交叉编译时使用GOARCH=arm64 GOOS=linux(对比 Tinker Board 的GOARM=7 GOARCH=arm)。在工作站上编译:

GOARCH=arm64 GOOS=linux go build -o output/ examples/tinkerboard2_yl40.go

编译完成后,用scp上传、用ssh在板卡上执行:

scp output/tinkerboard2_yl40 <user>@192.168.1.xxx:~ ssh -t <user>@192.168.1.xxx "./tinkerboard2_yl40"

仓库中提供了两个针对 Tinker Board 2 的完整可运行示例:

  • examples/tinkerboard2_yl40.go:通过i2c-7(排针 27=SDA、28=SCL)连接 YL-40 多传感器模块,周期读取温度、亮度、电位器并回写模拟输出(AOUT→AIN2 短接自测);
  • examples/tinkerboard2_direct_pin_bin_counter.go:用排针3、5、7、11四个引脚(WithGpiosActiveLow反相输出驱动共阳 LED)演示二进制计数器。

后者正好用到了 GPIO 引脚编号 "3"、"5"、"7"、"11",在 pinmap.go#L20-L26 中分别对应GPIO2_B1_I2C6_SDA、GPIO2_B2_I2C6_SCL、GPIO2_B0_TEST_CLKOUT2、GPIO2_C3_UART0_RTSN等功能复用引脚,测试标注均为 OK。

排障:I2C

文档基于"Armbian_community 25.2.0-trunk.124 bookworm"实测的结论是:

  • i2c-7(排针 27、28)默认启用;
  • i2c-8(DSI_1、DSI_2 连接器)默认启用;
  • i2c-6(排针 3、5)没有默认 overlay,需要参照其他 overlay 手动创建一个(例如复制 i2c7 的 overlay 定义并调整设备地址/别名)。

这与 adaptor.go#L66 中"合法总线号为 6、7、8"的校验逻辑一致——三条总线在驱动层面都是受支持的,缺的只是设备树 overlay。创建 overlay 并启用后,使用i2c.NewYL40Driver(board, i2c.WithBus(7))这类写法即可按指定总线号访问设备。

排障:PWM

Tinker Board 2 的 PWM 涉及设备树 overlay 激活与 sysfs 调试,按以下步骤操作。

调查当前状态

ls -la /sys/class/pwm/ total 0 drwxr-xr-x 2 root root 0 Jan 18 2013 . drwxr-xr-x 77 root root 0 Jan 18 2013 .. lrwxrwxrwx 1 root root 0 Jan 18 2013 pwmchip0 -> ../../devices/platform/ff420020.pwm/pwm/pwmchip0

在符号链接指向的设备树路径中查找以下特征,即可判断哪个 PWM 通道已启用:

设备树路径对应 PWM排针
ff420000pwm0pin 32
ff420010pwm1pin 33
ff420020pwm2已激活但仅供内部使用,不可用于排针
ff420030pwm3pin 26

激活 PWM

在 "Armbian_community 25.2.0-trunk.124 bookworm" 中,pwm0、pwm1、pwm3均没有现成 overlay,需要参照其他 overlay 创建,例如以rockchip-rk3568-hk-pwm1.dtbo为基础改写。这一定义与驱动侧一一对应:在 pinmap.go#L48-L55 中,引脚"32"(pwm0,ff420000)、"33"(pwm1,ff420010)、"26"(pwm3,ff420030)都声明了 PWM 通道映射,注释明确标注"needs to be enabled by device tree"——即驱动支持这些引脚,但必须先在设备树里激活对应 pwmchip。

激活你需要的 pwmchip 后,后续的导出、周期/占空比写入与极性切换步骤,请完全参照 Tinker Board 文档的 PWM 排障章节,其中给出了echo <period> > .../pwm0/period、echo "normal" > .../pwm0/polarity、echo <duty> > .../pwm0/duty_cycle、echo 1 > .../pwm0/enable的完整初始化顺序,以及用万用表验证 30% 占空比(3.3V × 30% ≈ 1V)的实测方法。

小结

在 Gobot 中使用 Tinker Board 2 的完整路径是:先在 Armbian 上通过armbian-config和 overlay 配置启用 GPIO/I2C/PWM,再用tinkerboard2.NewAdaptor()按板载丝印编号编程,最后以GOARCH=arm64 GOOS=linux交叉编译并scp/ssh部署。相比 Tinker Board,Tinker Board 2 最大的差异在于 arm64 架构、I2C 默认总线为 i2c-7,以及 PWM 引脚映射完全不同(32/33/26 对应 pwm0/pwm1/pwm3)。仓库中的 adaptor.go、pinmap.go 和两个示例文件是排查引脚映射问题时最直接的参考依据。

  • 物联网
  • 机器人
  • 嵌入式

【免费下载链接】gobot

Golang framework for robotics, drones, and the Internet of Things (IoT)

项目地址:https://gitcode.com/gh_mirrors/go/gobot
点击查看免费下载

相关推荐

上一篇:告别PDF阅读痛点:Jina AI Reader如何3秒解析arXiv论文核心内容
下一篇:Windows USB驱动安装的终极解决方案:libwdi完整指南 🚀

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询