1.CAN
CAN简介
主流通信协议对比
名称 | 引脚 | 双工 | 时钟 | 电平 | 设备 | 应用场景 |
UART | TX、RX | 全双工 | 异步 | 单端 | 点对点 | 两个设备互相通信 |
I2C | SCL、SDA | 半双工 | 同步 | 单端 | 多设备 | 一个主控外挂多个模块 |
SPI | SCK、MOSI、MISO、SS | 全双工 | 同步 | 单端 | 多设备 | 一个主控外挂多个模块(高速) |
CAN | CAN_H、CAN_L | 半双工 | 异步 | 差分 | 多设备 | 多个主控互相通信 |
CAN硬件电路
CAN电平标准
•CAN总线采用差分信号,即两线电压差(VCAN_H-VCAN_L)传输数据位
•高速CAN规定:
电压差为0V时表示逻辑1(隐性电平)
电压差为2V时表示逻辑0(显性电平)
•低速CAN规定:
电压差为-1.5V时表示逻辑1(隐性电平)
电压差为3V时表示逻辑0(显性电平)
两线收紧,没有电压差,是默认状态,所以称为隐性。两线张开产生电压差,是需要设备干预的状态,所以称为显性。
因为电路约定成俗的习惯,默认状态高电平1,所以默认的隐性电瓶就和逻辑1绑定,显性和0绑定 显性跟隐性同时出现时,总线显示出显性电瓶状态。
高速CAN加闭合的终端电阻,有利于总线快速回归到隐性电平,也就是相等的电平,回归隐形电瓶快,传输速度就快,低速CAN总线回归隐性电瓶慢,传输速度自然慢
两根线的隐性电平不相等,如果是闭合回路的话,就会强制拉紧两根线上的电平使他们相等,这与低速can的设计理念两根线默认隐形电平不相同相违背。
CAN收发器 – TJA1050(高速CAN)
和S不用管
如果TXD给1,则不会对总线进行任何操作,总线呈现默认的隐性电瓶1。如果TXD悬空,则默认也是给1。如果TXD给零,则驱动器会把CAN_H拉高,CAN_L拉低,输出显性电瓶0。如果t xd一直给零出错了,则显性超时,收发器为主动释放CAN总线
2.CAN总线帧格式
1.数据帧
裁优先级原则,这一位必须给隐性1)
2.遥控帧
•遥控帧无数据段,RTR为隐性电平1,其他部分与数据帧相同
相当于就是先遥控帧之后,再数据帧。
3.错误帧
•总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” ,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备
4.过载帧
•当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失
5.帧间隔
•将数据帧和远程帧与前面的帧分离开
6.位填充
•位填充规则:发送方每发送5个相同电平后,自动追加一个相反电平的填充位,接收方检测到填充位时,会自动移除填充位,恢复原始数据
•位填充作用
√ 增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能精确掌握数据采样时机
√ 将正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性
√ 保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲(CAN规定,当连续11个
隐性1后,默认为空闲)
3.波形实例
•标准数据帧,报文ID为0x555,数据长度1字节,数据内容为0xAA
•标准数据帧,报文ID为0x666,数据长度2字节,数据内容为0x12, 0x34