这篇文章主要介绍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中的数据包都会增加。那大概率是没有接其他设备或者波特率设置不匹配。



![[NOIP2002]过河卒 标准递归](https://img-blog.csdnimg.cn/direct/f3ada3545ca34585a2becf5b93f7cba6.png)















