CAN
前置知识
差分信号
差分信号又称差模信号,与传统使用单根信号线电压表示逻辑的方式有区别,使用差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑0和逻辑1。
CAN总线
CAN(Controller Area Network)是 ISO国际标准化的串行通信协议。主要用于工业级联网和嵌入式系统,支持多设备联网;
CAN总线上可以挂载多个通讯节点,节点之间的信号进过总线传输,实现节点间通讯;
CAN 通讯节点由一个 CAN 控制器及 CAN 收发器组成,控制器与收发器之间通过CAN_Tx 及CAN_Rx 信号线相连,收发器与 CAN 总线之间使用 CAN_High 及 CAN_Low信号线相连。其中 CAN_Tx 及 CAN_Rx 使用普通的类似 TTL 逻辑信号,而 CAN_High 及CAN_Low 是一对差分信号线,使用差分信号;
当 CAN 节点需要发送数据时,控制器把要发送的二进制编码通过 CAN_Tx 线发送到收发器,然后由收发器把这个普通的逻辑电平信号转化成差分信号,通过差分线CAN_High 和 CAN_Low 线输出到 CAN 总线网络。而通过收发器接收总线上的数据到控制器时,则是相反的过程,收发器把总线上收到的 CAN_High 及 CAN_Low 信号转化成普通的逻辑电平信号,通过 CAN_Rx 输出到控制器中。
接口说明
C1201载板上的CAN接口
接口实验
CAN内回环通信实验
实验步骤
1.启用CAN内核驱动
加载CAN相关的内核模块,为后续配置做准备。
sudo modprobe can
sudo modprobe can_raw
sudo modprobe mttcan
2.配置CAN接口为内回环模式
关闭接口
sudo ip link set down can0
配置波特率并启用内回环:将接口的比特率设置为500kbps,并开启内回环模式
sudo ip link set can0 type can bitrate 500000 loopback on
配置完成后,重新启用接口
sudo ip link set up can0
3.验证接口状态 检查 can0接口的详细状态,确认内回环模式已成功启用
ip -details link show can0
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
link/can promiscuity 0 minmtu 0 maxmtu 0
can <LOOPBACK> state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
bitrate 500000 sample-point 0.870
tq 20 prop-seg 43 phase-seg1 43 phase-seg2 13 sjw 1
mttcan: tseg1 2..255 tseg2 0..127 sjw 1..127 brp 1..511 brp-inc 1
mttcan: dtseg1 1..31 dtseg2 0..15 dsjw 1..15 dbrp 1..15 dbrp-inc 1
clock 50000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 parentbus platform parentdev c310000.mttcan
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
can0接口已启用,物理链路正常;link/can promiscuity 0
链路类型:CAN;
混杂模式关闭;can <LOOPBACK> state ERROR-ACTIVE (berr-counter tx 0 rx 0)
已启用内回环模式,数据会直接在控制器内部环回,无需物理连接外部设备;
CAN总线处于正常工作状态;
tx 0 / rx 0:收发错误计数器 = 0;bitrate 500000 sample-point 0.870
波特率为500k;
采样点87%;
4.进行回环测试
在终端1中运行 candump命令,监听 can0接口上的数据:
candump can0
在终端2中,使用 cansend命令向 can0接口发送一条测试消息
cansend can0 123#DEADBEEF
5.观察与验证
执行发送命令后,几乎同时,在终端一的 candump界面中,会看到一行接收到的数据。
数据发送后,立即被本机成功接收,整个CAN软件通路工作正常
can0 123 [4] DE AD BE EF