目录
a. 接线方式
b. 线路上传输信号的电平格式
d. 波特率,symbol/s
e. 异步通信
f. CAN的波特率介绍
g. 收发模式
a. 地址(CAN ID)
b. 冲突检测与避免(仲裁)
i. 冲突检测(CAN采用的)
ii. 冲突避免
c. 误码校验
d. 滤波器与掩码
e. CAN通信帧介绍
i. 帧分类:
ii. 标准数据帧格式
iii. 扩展数据帧格式
【中科大RM电控合集】小白也能看懂的CAN通信+STM32CubeMX编程_哔哩哔哩_bilibili
CAN通信相关基础知识(原理)(中科大视频总结)
1. 通信相关基础知识——分层思想
- 分层思想,不同层分工不同
- CAN通信(Controller Area Network)
- 可以理解成三层:物理信号层,链路传输层,应用数据层
- 物理信号层(数据传输的规则方式):规定了硬件电路的设计规则、用户使用的接线方式、线路上传输信号与电平格式的对应关系、波特率比特率、数据同步异步传输、 收发模式等内容
- 链路传输层(将数据准确传输到指定位置):规定了地址(CAN ID)、冲突检测与避免(仲裁)、误码校验、滤波器与掩码、该层的帧格式
- 应用数据层:被传输的数据主体
- 链路层把应用层的数据拿来,加上相关的地址、校验等信息封装;物理层把链路层的数据拿来,编码成物理信号传输出去
- CAN通信(Controller Area Network)
2. 通信相关基础知识——物理信号
a. 接线方式
- 总线接法
- CAN_H与CAN_L通过120欧姆电阻连接在一起,防止总线上传输的高频信号存在反射振铃效应导致信号不稳定、寄生电容导致信号响应速度变慢等情况(感兴趣可以看看电磁场相关的理论)
- 每个设备引出两条线,一根是CAN_H,一根是CAN_L(当然也有单线CAN但速度低我们不考虑使用);不同设备的CAN_H接到一起,CAN_L接到一起
- STM32自带CAN控制器,箭头表示收发关系,直线表示我们自行接到外部的总线
- STM32一般搭配的收发器型号为SN65HVD230
- 发送方式:把发送的数据加到CAN收发器中,由它自主控制发送,换句话说放进去就不用管了
- 接收方式:从接收队列(FIFO队列)选择接收(一旦收到数据,会产生中断,从FIFO0和FIFO1选择一个来接收)接收是FIFO先接收到的,然后产生接收中断
b. 线路上传输信号的电平格式
- 在发送和接收中,逻辑1是高电平,逻辑0是低电平
- 经过CAN收发器之后变成差分信号
- 如果单片机发送一个低电平,则 一般CAN_H 3.5v,CAN_L 1.5v,逻辑0,显性
- 如果单片机发送一个高电平,则 一般CAN_H 和CAN_L 2.5v,逻辑1,隐性
- 差分信号传输,在长距离传输时可保证信号质量(类比相对音感与绝对音感)
- 实际上0为显性信号,是因为后面仲裁是要进行与操作,0与上其他还是0,所以是显性
c. 比特率,bit/s,bps
- 每秒钟传输的二进制码元的数量
d. 波特率,symbol/s
- 每秒钟传输的有效信息码元的数量
- 举例
CAN通信中,比特率等于波特率,因为有效信息码元直接对应二进制码元十六进制字符编码中,如果一秒传输1000个字符,每个字符对应一种唯一的电平信号,那么波特率就是1000symbol/s;由于一个十六进制字符要用四位二进制编码表示,那么它的比特率就是4000bit/s
e. 异步通信
- 通过把每个比特(码元)细分时间片,不同时间片做不同的事情
- 同步段把整条总线各个设备进行同步
- 其他通信协议还有同步通信方式,比如IIC
- IIC需要统一的时钟信号给各设备用于同步
- 其他通信协议也有类似的操作,比如UART
- 相位缓冲段有两个,其中夹住的时间点就是采样时间点,硬件设备在这个时间点上对电平采样获取当前比特的状态是1或是0
- 传播段是时间占用,因为有些CAN总线时间比较长,要考虑物理信号在总线的传播时间以及CAN驱动器的处理时间,传播速度是光速的2/3,也就是2*10∧8m/s;传播段时间一般是信号在总线上传播时间的两倍
- 其他通信协议还有同步通信方式,比如IIC
f. CAN的波特率介绍
- 波特率计算公式:1/【tq*(BS1+BS2+1)】
- CAN的一位会被分层数个Time Quantum(tq),且每一位的tq可以调整以保证同步
- CAN的最高波特率是1Mbps,所以在BS1和BS2长度过小,会导致比特率高于1Mbps,出现错误
g.收发模式
常规模式(最常用)
- 向总线发送
- 从总线接收
回环模式(只发不收,发的时候给本机顺带捎一份)
- 向总线和本机发送
- 不从总线接收仅从本机接收
静默模式(对外闭嘴,只和自己发,静默)
- 不向总线发送仅向本机发送
- 从总线和本机接收
回环静默模式
- 不向总线发送,仅向本机发送
- 自收自发
- 不向总线接收,仅从本机接收
3. 通信相关基础知识——链路传输
a. 地址(CAN ID)
- 由于是广播性质的总线协议,因此用地址来说并不是十分标准
- CAN ID承担了类似于地址的功能,是一帧的标识符,一般指明是“谁发的”
- 在计算机网络中的大多数协议里,地址与一个设备或一个终端完全绑定且一定范畴内对应;
- 但CAN设备不存在一个固定的地址,而是以ID加以区分不同的帧的来源或目标
- 比如,IP地址可以在一个网络内唯一指定一个网络设备(不考虑伪造等非法的网络攻击或IP冲突等错误情况);但CANID不可以,它只对它发送的报文负责,我的设备可以发ID为0x201的报文,也可以发ID为0x202的报文,其他的设备也可以发,每个报文也可以指定不同的信息
b. 冲突检测与避免(仲裁)
- 众所周知,一根物理意义的导线上不可能同时是高电平和低电平,一条传统通信方式的链路上也不可能同时传输0和1,因此需要一定的冲突处理机制
- 冲突的处理机制主要有两种,一种是冲突检测,一种是冲突避免,CAN采用的是冲突检测冲突检测
i. 冲突检测(CAN采用的)
- 出现可能的冲突,然后解决冲突
- 此时,想发送1的设备发现,链路怎么变成0了?原来是有人也要发消息,那我闭嘴(这一步涉及了仲裁,后续结合帧内容讲述 )
- 显性电平为什么叫显性电平,高中生物都学过,当显性和隐性都存在时,一般表现为显性所以,当链路上存在设备想发送0的同时又有设备发送1的时候,链路中表现为0,因为0是显性电平
ii. 冲突避免
- 避免可能出现的冲突,扼杀在萌芽里
- 感兴趣同学可以学习计算机网络课程
c. 误码校验
- 除差分信号传输外,防止信号出错对系统产生负面作用的另一大利器
- 采用的是CRC算法(Cyclic Redundancy Check),感兴趣自行学习搜索,计算机网络课程也有讲述
- 而误码校验在链路层上减少了硬件偶然错误的信息编码被解析利用,以及仍可能存在的强干扰环境噪声导致信道电压波动很大改变电平的风险
- 差分信号在物理层上一定程度上解决了接口间信道上传输过程中环境噪声问题
d. 滤波器与掩码
- 用于配置接收设备,注意,是过滤通过,而非过滤排除机制。即符合条件的报文会接收(可能与其他滤波器不一样)
- 举例
- 一个CAN ID为0x114,如果我要配置一个滤波器只接收这个CAN ID的帧的话,就需要配置滤波器过滤目标为0x114,掩码为0x7ff(0111 1111 1111)。流程就是把掩码变成二进制01串,掩码为1的位表示与过滤目标一致,为0的位表示随意0或是1
- 一段CAN ID为0x114~0x117(0001 0001 0100~0001 0001 0111),如果我要配置一个滤波器只接收这一段CAN ID的帧的话,就需要配置滤波器过滤目标为0x114,掩码为0x7fc(0111 1111 1100)。也就是把掩码变成二进制01串,掩码与CAN ID的每一位进行与操作,与完后和过滤器目标一致,即可接收。
- 如何过滤与匹配?以CAN ID作为匹配规则。标准格式中的CANID长度为11b,也就是CANID最大为0x7ff(0111 1111 1111)
- 滤波器用于过滤出想要接收的信息,掩码Mask用于匹配想要接收的信息ID
- 举例
e. CAN通信帧介绍
- 在计算机网络上一般而言物理层叫信号,链路层叫帧,网络层叫报文,传输层叫流,再往上叫数据当然也可以统一都叫数据,这里把帧这个名字拿来用了
i. 帧分类:
- 5种,数据帧、遥控帧、错误帧、过载帧、帧间隔。后三者不用我们操心,属于硬件设备自行发送的
- 帧间隔,分割主动发送帧(数据帧和遥控帧)之间的间隔,此时间内主动发送帧不可被发送,但自动发送帧可以发送以便插入错误帧与过载帧
- 过载帧,如果某接收设备忙,无法处理较多数据,会自动发送该帧来提醒其他设备减缓数据发送速率
- 错误帧,发送硬件错误回送数据,硬件设备自行生成与接收,一般无需主动发送
- 遥控帧,该帧的ID表明请求该ID对应设备的数据,也有标准遥控和扩展遥控帧的两种,区别也是在于它们的CAN ID长度不同
- 数据帧,顾名思义发送数据。细分两种,一种是标准数据帧,一种是扩展数据,区别在于它们的CAN ID长度不同
- CAN通信一般只需要操心数据帧和遥控帧,而robomaster的比赛中一般只需要管数据帧
ii. 标准数据帧格式
iii. 扩展数据帧格式
- 相比标准数据帧,仅在仲裁段和控制段格式与电平不同
与标准数据帧格式那张图,不同颜色的代表是有更改的
绿色的代表的是一些新增的标志位
黄色的代表的是功能一样,但是内容不一样
- 遥控帧格式,相比数据帧,没有数据段,仅在RTR段电平不同
具体软件配置看 首页 CAN通信软件配置工程