- 物联网
- 机器人
- 嵌入式
【免费下载链接】gobot
Golang framework for robotics, drones, and the Internet of Things (IoT)
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-configTinker 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 | 排针 |
|---|---|---|
ff420000 | pwm0 | pin 32 |
ff420010 | pwm1 | pin 33 |
ff420020 | pwm2 | 已激活但仅供内部使用,不可用于排针 |
ff420030 | pwm3 | pin 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)
相关推荐
RIOT-OS 中的 ESP32 SoC 外设资源与引脚配置详解(GPIO / ADC / DAC / I2C / PWM / SDMMC / SPI / Timer / UART / JTAG)
RIOT OS 中的 ESP32 SoC 外设资源与引脚配置详解(GPIO / ADC / DAC / I2C / PWM / SDMMC / SPI / Ti
物联网嵌入式操作系统实时系统RIOT 外设自检指南:使用 Peripheral Selftest Shield 全面测试 ADC/GPIO/I2C/PWM/SPI/UART
RIOT 外设自检指南:使用 Peripheral Selftest Shield 全面测试 ADC/GPIO/I2C/PWM/SPI/UART 导读 本文基于
物联网嵌入式操作系统实时系统在 Wio Terminal 上接入 ArduCam OV2640 摄像头:基于 SPI/I2C 的图像采集实战
在 Wio Terminal 上接入 ArduCam OV2640 摄像头:基于 SPI/I2C 的图像采集实战 本篇技术指南以开源课程仓库 IoT For B
教程文档教育物联网嵌入式
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考