1、CAN
【简介】
CAN 是 Controller Area Network 的缩写,是 ISO 国际标准化的串行通信协议。
高速CAN的通信速率为125kbps~1Mbps,属于闭环总线,总线长度≤40m;低速CAN的通信速率为10~125kbps,属于开环总线,总线长度可达1000m。
【注】波特率是指单位时间内传送二进制数据的位数,单位用bps(位/秒)表示,记作波特。
比特率是异步串行通信有效数据的传输速率,即单位时间内传送二进制有效数据的位数。
CAN总线电平在高速CAN下,显性电平为逻辑0,此时CAN_H(3.5V)和CAN_L(1.5V)两根线上的电位差为2V,隐性电平为逻辑1,此时CAN_H(2.5V)和CAN_L(2.5V)两根线上的电位差为0V。
【信号传输】
(发送过程) CAN控制器将CPU传来的信号转换为逻辑电平, CAN控制器将CPU传来的信号转换为逻辑电平。
(接受过程)CAN接收器将CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。
<总线空闲>当总线上出现连续的11位隐性电平,那么总线就处于空闲状态。
<总线仲裁>当多个节点同时向总线发送消息时,总线对各个消息的标识符(即ID号)进行逐位仲裁 。如果某个节点发送的消息仲裁获胜,那么这个节点将获取总线的发送权,仲裁失败的节点则立即停止发送并转变为监听(接收)状态。
【通信帧】CAN总线笔记(2)-CAN通信的数据帧与遥控帧 - 知乎 (zhihu.com)
(数据帧)包括帧起始、仲裁段(ID)、控制段、数据段、CRC段、ACK段和帧结束
(遥控帧)包括帧起始、仲裁段(ID)、控制段、CRC段、ACK段和帧结束
[帧起始]SOF,恒为显性电平,即逻辑0,帧起始标志着CAN总线有电位差,开始有报文传输。
[仲裁段]用来判定一帧报文优先级的依据,仲裁段中的ID号是实现报文过滤机制的基础。
仲裁过程(ID):回读机制(用来判定一帧报文优先级的依据,仲裁段中的ID号是实现报文过滤机制的基础)和线与机制(在总线上,显性位0能够覆盖隐性位1。)
发送请求位(RTR):在数据帧中,RTR位恒为显性位0,在遥控帧中,恒为隐性1。保证数据帧优先级高于遥控帧。
[控制段]包括标识符扩展位IDE,保证在前11位ID号相同的情况下,标准帧的优先级一定高于扩展帧;保留位r0和r1(扩展帧);四个字节的DLC,指示了数据段中的字节数,如果为遥控帧,表示该遥控帧对应的数据帧的数据段的字节数。
[数据段]包含8个字节的数据,从MSB(最高位)开始输出。
[CRC段]包含据多项式生成的CRC值,即CRC校验序列和CRC界定符。
[ACK段]包含ACK槽和ACK界定符两个位。发送节点在ACK段发送两个隐性位,即发送方发出的报文中ACK槽为隐性1;接收节点在接收到正确的报文之后会在ACK槽发送显性位0,通知发送节点正常接收结束。
[帧结束]表示该帧报文的结束,由7个隐性位构成。
【屏蔽滤波】
为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。
为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。
2、多线程实现TCP通信