CAN总线协议(Controller Area Network),控制器局域网总线,是德国BOSCH(博世)公司研发的一种串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。
CAN通讯是异步通讯,没有时钟信号线来保持信号接收同步,是半双工通信,无法同时发送与接收,在同一时刻,只能有一个节点发送数据,其余节点都只能接收数据。它有CAN_HIGH与CAN_LOW两条信号线组成。
闭环总线网络
ISO11898标准,闭环、短距离、高速、最高速度可达1Mbps,最长距离40m。
开环总线网络
ISO11519-2标准,开环、传输距离远、最高速度125Kbps,最远距离1km。
CAN总线信号----差分信号
CAN总线上信号表现为电压形式,通过CAN_H和CAN_L线上的电位差来表示CAN信号。
显性电平比隐形电平优先级要高(逻辑0比逻辑1优先级高)
ISO11898(高速)CAN的差分信号
不同标准的CAN信号差
CAN协议的波特率与位同步
由于CAN通讯协议并没有时钟信号线,所以各个节点之间要约定好特定的波特率进行通讯,特别的时候我们还需要使用位同步。
位时序:
位时序就是一个数据位的时序,位时序的大小=1/波特率
位时序分解图
波特率的计算:
CAN协议帧
CAN有5中协议帧类型,分别是数据帧、遥控帧、错误帧、过载帧、间隔帧。
数据帧 |
发送单元想接收单元传输数据的帧 |
遥控帧 |
接收单元向具有相同ID的发送单元 请求数据的帧 |
错误帧 |
当检测到错误时,向其他单元通知错误的帧 |
过载帧 |
通知其他发送端元:本节点没没做好接受准备 |
间隔帧 |
将数据帧及遥控帧与前面的帧分开 |
数据帧分为标准帧和扩展帧,下图是数据帧的类型及结构:
帧起始:有单个显性位组成,总线空闲时,发送节点发送起始帧,其他接收节点同步于该帧起始位。
帧结束:由7个连续的隐性位组成。
仲裁段:
CAN-bus没有规定节点的优先级,但通过仲裁段 帧ID规定了数据帧的优先级。根据CAN2.0标准版本不同,帧ID分为11位和29位两种。标准ID为11位,扩展ID为29位。
标准ID的仲裁段由 11位ID + 1位RTR组成。RTR是远程帧发送标识位,RTR为显性表示此帧为数据帧,为隐性表示此帧为远程帧。
扩展ID的冲裁段由 11位ID + 1位SRR + 1位IDE + 18位ID + 1位RTR 组成。SRR是远程帧请求位。IDE是标识符扩展位,IDE为显性表示该帧为标准数据帧,为隐性表示该帧为扩展数据帧。
仲裁方式:
假设节点A、B、C都发送都发送了标准数据帧,他们竞争总线的过程如下图所示:
仲裁机制
从该过程得出结论:帧ID值越小,优先级越高。
控制段:
控制段共6位。
标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成。
扩展帧控制段则由保留位r1、r0和DLC组成。保留位用隐性电平填充。
数据段:
一个数据帧传输的数据量为0-8个字节。传输时MSB先传输。
CRC段:
由CRC校验值+1位CRC界定符组成。CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。一般情况下,CRC校验由CAN控制器的硬件完成,不需要由mcu的软件代码实现。
ACK段:
由ACK值+1位ACK界定符组成。当一个 接收节点 接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平。(所以数据帧里的ACK 是接收节点的)
标签:总线,笔记,ID,发送,CRC,基础知识,数据,节点 From: https://www.cnblogs.com/Kim-blog/p/17981712