RK3568开发板外设测试指南:从按键到CAN总线

📅 2026/7/15 11:19:03 👁️ 阅读次数 📝 编程学习
RK3568开发板外设测试指南:从按键到CAN总线

1. HZ-RK3568开发板外设测试概述

拿到一块新的开发板,第一件事就是全面测试它的各项外设功能是否正常。HZ-RK3568作为一款基于Rockchip RK3568处理器的开发板,集成了丰富的外设接口和功能模块。本文将带您逐步完成按键、LED、存储和CAN总线等核心外设的测试流程。

RK3568处理器采用四核Cortex-A55架构,主频可达2GHz,集成了Mali-G52 GPU和0.8TOPS NPU,外设方面支持多种接口标准。开发板上将这些接口以实用的形式引出,包括:

  • 4个用户可编程按键(ADC按键)
  • 2个状态指示灯LED
  • eMMC 5.1存储
  • 双路CAN 2.0B控制器
  • 多个USB、UART、SPI、I2C等标准接口

测试这些外设不仅能验证开发板的基本功能,也是后续开发的重要基础。我们将从简单的按键、LED测试开始,逐步深入到存储性能测量和CAN总线通信测试。

2. 按键功能测试与实现原理

2.1 测试步骤详解

开发板上有多个物理按键,除电源键外,其余按键都可通过软件检测状态。测试步骤如下:

  1. 通过串口终端登录开发板系统(默认使用调试串口,波特率1500000)
  2. 在终端输入测试命令:
    HZ_keytest
  3. 依次按下开发板上的各个按键(不包括POWER_ON键)
  4. 观察终端输出的按键状态变化:
    key 1 pressed key 1 released key 2 pressed ...
  5. 测试完成后,按Ctrl+C退出测试程序

2.2 底层实现机制

这些按键在硬件设计上采用了ADC检测方案,相比GPIO按键有以下优势:

  • 节省GPIO资源:多个按键共享一个ADC通道
  • 支持按键组合检测:通过不同分压值识别组合按键
  • 防抖处理:在驱动层实现硬件防抖

软件层面,HZ_keytest工具通过读取/sys/bus/iio/devices/iio:deviceX/in_voltageY_raw节点获取ADC原始值,经过以下处理流程:

  1. 定期采样(典型间隔20ms)
  2. 数值滤波(中值滤波+均值滤波)
  3. 电压值计算(参考电压1.8V,12位ADC精度)
  4. 按键状态判断(预设电压阈值)
  5. 事件上报(通过input子系统)

2.3 测试注意事项

  • 按键灵敏度问题:如果发现按键响应不灵敏,可能是阈值设置不合理,可以通过调整/sys/class/input/inputX/下的阈值参数优化
  • 组合键检测:某些开发板支持组合键,需要查看原理图确认分压网络设计
  • 长按识别:标准测试程序可能不包含长按检测,需要自行扩展功能

3. LED控制与状态监测

3.1 LED测试完整流程

开发板上有两个可编程LED(LED1和LED2),测试步骤如下:

  1. 查看系统识别到的LED设备:

    ls /sys/class/leds/

    正常应显示类似输出:

    led1 led2
  2. 查看LED2的当前触发模式:

    cat /sys/devices/platform/leds/leds/led2/trigger

    输出显示可用模式和当前模式([]括起):

    [none] rfkill-any rfkill-none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock mmc3 mmc1 timer heartbeat gpio default-on mmc0 rfkill0 rfkill1 rfkill2 rfkill4
  3. 修改LED2触发模式为heartbeat(心跳模式):

    echo heartbeat > /sys/devices/platform/leds/leds/led2/trigger
  4. 观察LED2状态变化,应与LED1同步呈现"快闪两次-暂停"的循环模式

3.2 LED子系统深度解析

Linux LED子系统提供了丰富的控制方式,主要包含以下功能:

触发模式

  • heartbeat:系统运行状态指示(快闪表示活跃)
  • timer:定时闪烁(频率可调)
  • mmc0/mmc1:存储活动指示
  • default-on:常亮
  • none:手动控制模式

手动控制: 当触发模式设为none时,可以通过以下命令控制:

echo 1 > /sys/class/leds/led2/brightness # 点亮 echo 0 > /sys/class/leds/led2/brightness # 熄灭

亮度调节: 对于支持PWM调光的LED:

echo 50 > /sys/class/leds/led2/brightness # 50%亮度

3.3 实际应用技巧

  • 诊断用途:可以配置不同LED表示系统不同状态(如网络连接、服务运行等)
  • 性能考虑:避免设置过高频率的闪烁模式,会增加系统负载
  • 电源管理:在电池供电场景下,可以考虑降低LED亮度或减少活动指示
  • 自定义触发:可以通过编写内核模块实现更复杂的触发逻辑

4. eMMC存储性能测试与分析

4.1 完整测试流程

  1. 测试写入性能(创建500MB测试文件):

    dd if=/dev/zero of=/test bs=1M count=500 conv=fsync

    注意观察输出中的速度信息,如:

    524288000 bytes (524 MB, 500 MiB) copied, 5.12345 s, 89 MB/s
  2. 重启开发板后测试读取性能:

    dd if=/test of=/dev/null bs=1M

    典型输出:

    524288000 bytes (524 MB, 500 MiB) copied, 3.45678 s, 155 MB/s
  3. 测试完成后清理测试文件:

    rm /test

4.2 测试原理与参数解读

关键参数说明

  • bs=1M:设置每次读写的块大小为1MB(影响IOPS和吞吐量)
  • count=500:测试500个块,总大小500MB
  • conv=fsync:确保数据完全写入物理存储(避免缓存影响)

性能影响因素

  1. 文件系统类型:ext4通常比F2FS有更好的顺序读写性能
  2. 块大小设置:较大块(如1M)测顺序吞吐,较小块(如4K)测随机IOPS
  3. 缓存机制:conv=fsync绕过页面缓存,反映真实写入性能
  4. eMMC规格:RK3568支持eMMC 5.1,理论带宽最高400MB/s

4.3 进阶测试方法

随机IO性能测试

# 4K随机读 fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=128M --runtime=60 --time_based --group_reporting # 4K随机写 fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k --numjobs=4 --size=128M --runtime=60 --time_based --group_reporting

混合负载测试

fio --name=mixed --ioengine=libaio --rw=randrw --bs=4k --numjobs=4 --size=1G --runtime=120 --time_based --group_reporting --rwmixread=70

实际应用建议

  • 关键数据写入考虑使用fsync()O_SYNC标志
  • 频繁小文件操作建议使用F2FS文件系统
  • 大文件顺序读写可以适当增大IO块大小(如1MB)

5. CAN总线通信测试与实践

5.1 完整测试流程

  1. 配置CAN接口参数(波特率500kbps):

    ip link set can0 type can bitrate 500000 ip link set can1 type can bitrate 500000
  2. 启用CAN接口:

    ifconfig can0 up ifconfig can1 up
  3. 物理连接:

    • 使用杜邦线连接CAN0和CAN1接口:
      • CAN0_H(端子2)连CAN1_H(端子6)
      • CAN0_L(端子1)连CAN1_L(端子5)
  4. 在另一个终端启动CAN数据接收:

    candump can0
  5. 在第一个终端发送测试数据:

    cansend can1 5A1#11.22.33.44.55.66.77.88 cansend can1 5A1#40.45.4A.4F.50
  6. 观察接收终端应显示:

    can0 5A1 [8] 11 22 33 44 55 66 77 88 can0 5A1 [5] 40 45 4A 4F 50

5.2 CAN通信技术细节

报文格式解析

  • 5A1:11位标准帧ID(十六进制)
  • #:分隔符
  • 11.22...:数据字节(十六进制,点号可省略)

关键配置参数

  • 比特率:常用125kbps、250kbps、500kbps、1Mbps
  • 采样点:通常设置为75%-80%
  • 模式:可选loopback(测试)、silent(监听)等

错误检测与处理

  • 使用ip -details link show can0查看错误计数器
  • 常见错误:
    • 总线关闭(bus-off)
    • 帧错误
    • CRC错误
  • 错误恢复策略:
    ip link set can0 type can restart-ms 100

5.3 实际应用开发建议

性能优化

  • 合理设置接收缓冲区大小:
    echo 1000 > /sys/class/net/can0/rx_queue_len
  • 使用SocketCAN的高效API:
    struct can_filter rfilter = { .can_id = 0x123, .can_mask = CAN_SFF_MASK }; setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));

调试技巧

  • 使用candump -l can0记录通信数据到文件
  • 使用canbusload can0 500000监控总线负载
  • 使用cansniffer -c can0彩色显示变化的报文

安全注意事项

  • 重要控制指令应使用安全帧ID范围
  • 关键数据应添加校验字段
  • 考虑实现心跳机制监测节点在线状态