使用CAN Utilities对CAN接口进行测试
Linux系统通过SocketCAN层提供CAN支持,使得可以使用类似操作socket API函数来操作CAN总线,具体关于SocketCAN说明请见这里。
/*ip –details查看CAN总线状态*/
root@freescale /$ ip -details link show can0
2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 1000
link/can
can <TRIPLE-SAMPLING> state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
bitrate 500000 sample-point 0.866
tq 133 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1
flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1
clock 30000000
/* ip -details -statistics 查看工作状态*/
root@freescale /$ ip -details -statistics link show can0
2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 1000
link/can
can <TRIPLE-SAMPLING> state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
bitrate 500000 sample-point 0.866
tq 133 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1
flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1
clock 30000000
re-started bus-errors arbit-lost error-warn error-pass bus-off
0 0 0 1 0 0
RX: bytes packets errors dropped overrun mcast
28630768 3578846 0 0 0 0
TX: bytes packets errors dropped carrier collsns
7178744 897343 0 0 0 0
root@freescale /$
FlexCAN接口发送接收测试
root@freescale /$ candump can0
interface = can0, family = 29, type = 3, proto = 1
<0x00201000> [8] 00 00 00 00 00 00 00 00
<0x08701008> [8] 18 00 08 04 00 00 01 00
通过C程序操作CAN总线示例
a). 首先同样需要使用ip link命令配置CAN接口bitrate并使能接口,这里同样在Colibri iMX6上面使用can1接口,同时Apalis iMX6上面使用can0接口。
b). 测试c程序代码请见如下:
代码
./ 程序执行包含两个变量,第一个变量为”-r”或者”-s”来制定接收或者发送,第二个变量为所要测试的CAN bus,如”can0”。
利用SocketCAN可以非常方便的在Linux下使用CAN总线,另外CAN总线也支持同时发送并接收,这里就不做演示了