目录
介绍
一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信
它基于消息传递协议,设计之初在车辆上复用通信线缆,以降低铜线使用量,后来也被其他行业所使用
CAN拥有了良好的弹性调整能力,可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外,消息的传递不基于特殊种类的节点,增加了升级网络的便利性
物理层
- 一个CAN控制器
- 一般MCU提供,stm32内部提供了一个can控制器
- 一个CAN收发器
- 收发器一般需要专门芯片提供,例如PD1050S收发器芯片
- 发数据
- 控制器把要发送的二进制编码通过CAN_Tx线发送到收发器
- 收发器会把逻辑电平信号转化为差分信号,通过差分信号线CAN_High和CAN_Low线输出到CAN总线网络
- 收数据
- 收发器把总线上的CAN_High和CAN_Low信号转化成普通的逻辑电平信号
- 通过CAN_Rx输出到控制器中
差分信号
差分传输是一种信号传输的技术,差分传输在这两根线上都传输信号,这两个信号的振幅相同,相位相反,简单来说就是一高一低,互相相反
信号接收端比较这两个电压的差值来判断发送端发送的逻辑状态,插值为-0.5--0.05表示0,插值为1.5--3表示1
在电路板上,差分走线必须是等长、等宽、紧密靠近、且在同一层面的两根线。
总线网络
当CAN线上接入多个设备时,就构成了CAN总线网络,根据接法不同,总线网络分2种
- 闭环总线网络
- 速度快,距离近
- 速度快,距离近
- 开环总线网络
- 速度慢,距离远
- 速度慢,距离远
协议层
CAN的 帧/报文 种类
特点:
- CAN总线是广播类型的总线
- 这意味着所有节点都可以侦听到所有传输的报文
- 无法将报文单独发送给指定节点
- 所有节点都将始终捕获所有报文
- 但是CAN硬件能够提供本地过滤功能,让每个节点对报文有选择性地做出响应
- CAN使用短报文 – 最大实用负载是94位
- 可以认为报文是通过内容寻址,也就是说,报文的内容隐式地确定其地址
- CAN总线上有5种不同的报文类型
- 数据帧,远程帧,错误帧,过载帧,帧间隔
数据帧
- 数据帧是最常见的报文类型,用于发送单元向接收单元发送数据
- 有标准格式与扩展格式。标准格式有11位标识符,扩展格式有29位标识符
- 仲裁段
- 标识符位
- 长度为11位,ID10~ID0,按照10-0的顺序进行传输
- 是一个动能性的地址,CAN接收器通过标识符来过滤数据帧,表示自己的id
- 不同节点的标识符是不能相同的
- 远程发送请求位
- 用于区分该帧是数据帧还是远程帧
- 显性信号为0表示数据帧,远程帧为1
- ssr位
- 替代RTR,隐性信号
- ide位
- 表示扩展帧还是标准帧
- rtr位
- 表示数据帧还是远程帧
- 标识符位
- 控制段
- ide位
- 区分标准格式与扩展格式
- 显性电平时表示标准格式
- 隐性电平时表示扩展格式
- R1位RO位
- 保留位
- DLC
- 表示报文中的数据段含有多少个字节
- 表示报文中的数据段含有多少个字节
- ide位
- 数据段
- 发送的数据,高位先行
- crc段
- 校验码
- 用于校验传输的正不正确
- 硬件自动生成
- 界定符
- 隐性位,表示校验码的结束
- 校验码
- ACK段
- 确认位
- 隐性位
- 接收端收到正确的CRC校验位后,把这一位置为显性位
- 界定符
- 隐性位,表示与后面的帧结束隔开
- 确认位
远程帧(遥控帧)
- 远程帧用于接收单元向具有相同id的发送单元请求发送数据
- 有标准格式与扩展格式。标准格式有11位标识符,扩展格式有29位标识符
- 与数据帧相比没有数据段
- DLC都为0
- 其他和数据帧一样
错误帧
- 错误帧当检测出错误时向其他单元通知错误的帧
- 由硬件自动完成的,没有办法用软件来控制
过载帧
- 过载帧并不常用,因为当今的CAN控制器会非常智能化地避免使用过载帧
- 由硬件自动完成的,没有办法用软件来控制
帧间隔
- 用于将数据帧及遥控帧与前面的帧分离开来的帧
- 由硬件自动完成的,没有办法用软件来控制
总线仲裁
发送接收特点:
- CAN总线处于空闲状态的时候,最先发送消息的单元获得发送权
- 多个单元同时开始发送时,从仲裁段(报文id)的第一位开始进行仲裁
- 连续输出显