RK3568开发板外设测试指南:从按键到CAN总线 1. HZ-RK3568开发板外设测试概述拿到一块新的开发板第一件事就是全面测试它的各项外设功能是否正常。HZ-RK3568作为一款基于Rockchip RK3568处理器的开发板集成了丰富的外设接口和功能模块。本文将带您逐步完成按键、LED、存储和CAN总线等核心外设的测试流程。RK3568处理器采用四核Cortex-A55架构主频可达2GHz集成了Mali-G52 GPU和0.8TOPS NPU外设方面支持多种接口标准。开发板上将这些接口以实用的形式引出包括4个用户可编程按键ADC按键2个状态指示灯LEDeMMC 5.1存储双路CAN 2.0B控制器多个USB、UART、SPI、I2C等标准接口测试这些外设不仅能验证开发板的基本功能也是后续开发的重要基础。我们将从简单的按键、LED测试开始逐步深入到存储性能测量和CAN总线通信测试。2. 按键功能测试与实现原理2.1 测试步骤详解开发板上有多个物理按键除电源键外其余按键都可通过软件检测状态。测试步骤如下通过串口终端登录开发板系统默认使用调试串口波特率1500000在终端输入测试命令HZ_keytest依次按下开发板上的各个按键不包括POWER_ON键观察终端输出的按键状态变化key 1 pressed key 1 released key 2 pressed ...测试完成后按CtrlC退出测试程序2.2 底层实现机制这些按键在硬件设计上采用了ADC检测方案相比GPIO按键有以下优势节省GPIO资源多个按键共享一个ADC通道支持按键组合检测通过不同分压值识别组合按键防抖处理在驱动层实现硬件防抖软件层面HZ_keytest工具通过读取/sys/bus/iio/devices/iio:deviceX/in_voltageY_raw节点获取ADC原始值经过以下处理流程定期采样典型间隔20ms数值滤波中值滤波均值滤波电压值计算参考电压1.8V12位ADC精度按键状态判断预设电压阈值事件上报通过input子系统2.3 测试注意事项按键灵敏度问题如果发现按键响应不灵敏可能是阈值设置不合理可以通过调整/sys/class/input/inputX/下的阈值参数优化组合键检测某些开发板支持组合键需要查看原理图确认分压网络设计长按识别标准测试程序可能不包含长按检测需要自行扩展功能3. LED控制与状态监测3.1 LED测试完整流程开发板上有两个可编程LEDLED1和LED2测试步骤如下查看系统识别到的LED设备ls /sys/class/leds/正常应显示类似输出led1 led2查看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修改LED2触发模式为heartbeat心跳模式echo heartbeat /sys/devices/platform/leds/leds/led2/trigger观察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调光的LEDecho 50 /sys/class/leds/led2/brightness # 50%亮度3.3 实际应用技巧诊断用途可以配置不同LED表示系统不同状态如网络连接、服务运行等性能考虑避免设置过高频率的闪烁模式会增加系统负载电源管理在电池供电场景下可以考虑降低LED亮度或减少活动指示自定义触发可以通过编写内核模块实现更复杂的触发逻辑4. eMMC存储性能测试与分析4.1 完整测试流程测试写入性能创建500MB测试文件dd if/dev/zero of/test bs1M count500 convfsync注意观察输出中的速度信息如524288000 bytes (524 MB, 500 MiB) copied, 5.12345 s, 89 MB/s重启开发板后测试读取性能dd if/test of/dev/null bs1M典型输出524288000 bytes (524 MB, 500 MiB) copied, 3.45678 s, 155 MB/s测试完成后清理测试文件rm /test4.2 测试原理与参数解读关键参数说明bs1M设置每次读写的块大小为1MB影响IOPS和吞吐量count500测试500个块总大小500MBconvfsync确保数据完全写入物理存储避免缓存影响性能影响因素文件系统类型ext4通常比F2FS有更好的顺序读写性能块大小设置较大块如1M测顺序吞吐较小块如4K测随机IOPS缓存机制convfsync绕过页面缓存反映真实写入性能eMMC规格RK3568支持eMMC 5.1理论带宽最高400MB/s4.3 进阶测试方法随机IO性能测试# 4K随机读 fio --namerandread --ioenginelibaio --rwrandread --bs4k --numjobs4 --size128M --runtime60 --time_based --group_reporting # 4K随机写 fio --namerandwrite --ioenginelibaio --rwrandwrite --bs4k --numjobs4 --size128M --runtime60 --time_based --group_reporting混合负载测试fio --namemixed --ioenginelibaio --rwrandrw --bs4k --numjobs4 --size1G --runtime120 --time_based --group_reporting --rwmixread70实际应用建议关键数据写入考虑使用fsync()或O_SYNC标志频繁小文件操作建议使用F2FS文件系统大文件顺序读写可以适当增大IO块大小如1MB5. CAN总线通信测试与实践5.1 完整测试流程配置CAN接口参数波特率500kbpsip link set can0 type can bitrate 500000 ip link set can1 type can bitrate 500000启用CAN接口ifconfig can0 up ifconfig can1 up物理连接使用杜邦线连接CAN0和CAN1接口CAN0_H端子2连CAN1_H端子6CAN0_L端子1连CAN1_L端子5在另一个终端启动CAN数据接收candump can0在第一个终端发送测试数据cansend can1 5A1#11.22.33.44.55.66.77.88 cansend can1 5A1#40.45.4A.4F.50观察接收终端应显示can0 5A1 [8] 11 22 33 44 55 66 77 88 can0 5A1 [5] 40 45 4A 4F 505.2 CAN通信技术细节报文格式解析5A111位标准帧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 1005.3 实际应用开发建议性能优化合理设置接收缓冲区大小echo 1000 /sys/class/net/can0/rx_queue_len使用SocketCAN的高效APIstruct 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范围关键数据应添加校验字段考虑实现心跳机制监测节点在线状态