这篇文章主要介绍can设备的调试相关信息,不具体介绍驱动的实现。
如果驱动写完,对can设备进行验证,可能会出现很多不可预见的问题。下面说说验证步骤
- 验证can设备可以使用工具can-utils。这个工具包中会有cansend candump等程序。可以直接通过candump canX去接收相关can口的数据。也可以直接通过./cansend can0 123#1122334455667788 去给对应的can口发送数据。
- 假设我们将板子的can_h和can_l 通过can分析仪连接到上位机了。但是发送和接收都没有任何反应,先确保连接正确,波特率设置正确。
- 我们进行第一步验证即回环验证。ip link set canX up type can bitrate 500000 loopback on。在通过上面的发送和接收是不是正常。如果正常那可以基本确定驱动和can控制器没问题。
- 上面验证的基础上也可以查看中断计数,查看中断计数是不是有增加。
root@localhost:~/can-utils# cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
3: 11531 11607 19389 6 GIC-0 27 Level arch_timer
7: 1586 0 0 0 GIC-0 77 Level serial
12: 221787 0 0 0 GIC-0 105 Level can0
-
如果回环正常,就是正常不能通讯,那需要检查引脚的配置,即使用的pin脚是否复用到can控制器功能引脚了。 如果复用了,需检查是否同时多个引脚复用同一功能导致冲突。如果can功能没有映射到pin脚上面去,会出现:中断计数不会增加。 ifconfig 发送数据包和接收数据包不会增加。多次执行发送会出现“write: No buffer space available”
-
如果上面也正常,还是收不到数据。可以断开phy,直接tx 连接rx,然后发送数据看看总线有没有数据。中断计数有没有增加。
记录下默认状态下(没有发送和接收数据):
电平: can_h 2.5v
电平: can_l 2.5v
下面可能跟使用芯片有关。我们芯片测试出来的:
TX 3.3V
RX 3.3V
默认为隐性。
在外不接设备时,从can口发送数据,在can_h和can_l上是有信号的。 总线上会有错误帧,持续一段时间,然后消失。
总线电阻正常为60欧,(两个终端电阻120Ω并联)。
当硬件和驱动没问题后,假如发送数据,则中断计数和ifconfig中的数据包都会增加。那大概率是没有接其他设备或者波特率设置不匹配。