STM32复习笔记(二十三) —— CAN协议A
1.线路连接
1)使用 CAN 收发器将 CAN_Tx and CAN_Rx 信号转换为差分信号传输,总线两端须分别并联接1个120 Ω 电阻,构成闭环网络,通信速率最高 1Mbps
2)使用 CAN 收发器将 CAN_Tx and CAN_Rx 信号转换为差分信号传输,每根总线须分别串联1个2.2 KΩ 电阻,构成开环网络,通信速率最高 125Kbps
“显性”电平 与 “隐性”电平 类似于 I2C 总线 低电平 and 高电平,“显性”电平优先
2.报文传输
帧类型
数据帧,数据 远程帧,请求发送具有同一识别符的数据帧 错误帧,总线错误时发出 过载帧,在先行的 and 后续的数据帧 (or 远程帧) 之间提供附加的延时
数据帧 (or 远程帧) 通过帧间空间与前述各帧分开
1)数据帧
帧起始 仲裁段 控制段 [数据段] CRC段 应答段 帧结束,其中[数据段]长度可以为0 帧起始,由1个“显性”位组成
仲裁段,由 IDENTIFIER and RTR-Bit 组成
IDENTIFIER,11位长度,高位 (ID-10) 先行,7个最高位 (ID-10 - ID-4) 必须不能全为“隐性”
RTR BIT,远程传输请求位,在数据帧中必须为“显性”位,远程帧中必须为“隐性”位 控制段,由4位DATA LENGTH CODE and 2位保留位,共 6个位组成
保留位,必须被作为“显性”发送
DATA LENGTH CODE,指出数据字节数量 DATA LENGTH CODE 编码 (d-“显性” r-“隐性”),数据段最多8字节 数据段,最多8字节,每字节8位,高位先行
CRC段,由 CRC SEQUENCE and CRC DELIMITER 组成
CRC SEQUENCE,CRC序列
CRC DELIMITER,在 CRC SEQUENCE 之后,由1个“隐性”位组成 应答段,由 ACK SLOT and ACK DELIMITER,共2个位组成
发送 station 发送2个“隐性”位,接收器正确接收到有效的信息后,在 ACK SLOT 期间响应1个“显性”位作为应答
ACK SLOT,接收到匹配 CRC SEQUENCE 的所有 stations 将在发送器的 ACK SLOT “隐性”位响应“显性”位作为应答
ACK DELIMITER,在ACK SLOT 之后,必须为“隐性”位,因此,ACK SLOT 被两个“隐性”位包围 (CRC DELIMITER and ACK DELIMITER)
帧结束,每个数据帧 and 远程帧被由7个“隐性”位组成的标志序列分隔 2)远程帧
A station acting as a RECEIVER for certain data can initiate the transmission of the respective data by its source node by sending a REMOTE FRAME.
帧起始 仲裁段 控制段 CRC段 应答段 帧结束
RTR BIT,远程传输请求位,远程帧中必须为“隐性”位,在数据帧中必须为“显性”位
没有数据段,DATA LENGTH CODE 是独立的,可以在允许范围 (0 - 8) 内取任意值,无影响
RTR BIT “显性”为数据帧,RTR BIT “隐性”为远程帧 3)帧间空间
DATA FRAMEs and REMOTE FRAMEs 通过帧间空间从 preceding frames (无论是什么类型,数据帧,远程帧,错误帧,过载帧) 分开,而 OVERLOAD FRAMEs and ERROR FRAMEs,multiple OVERLOAD FRAMEs 不被帧间空间分开
帧间空间,由 INTERMISSION and BUS IDLE 组成,对于“error passive”stations 已经作为前一消息的发送器,还包括 SUSPEND TRANSMISSION
对于不是“error passive”的 stations,或者此 stations 已经作为前一消息的接收器,帧间空间包括 INTERMISSION and BUS IDLE 对于“error passive”stations 已经作为前一消息的发送器,帧间空间包括 INTERMISSION and BUS IDLE and SUSPEND TRANSMISSION INTERMISSION,由3个“隐性”位组成
在 INTERMISSION 期间不允许任何 station 传输数据帧 or 远程帧,唯一要做的是发送一个过载条件
BUS IDLE,空闲的时间长度是任意的
只要总线被认定为空闲,任何等待发送消息的 station 就会访问总线,在发送其他消息期间,有消息被挂起,对于这样的消息,其传送起始于 INTERMISSION 之后的第1个位
总线上检测到的“显性”的位可被解释为帧的起始
SUSPEND TRANSMISSION,“error passive”stations 发送消息后,站就在下一消息开始传送之前或总线空闲之前发出8个“隐性”的位跟随在 INTERMISSION 的后面,若与此同时另一 station 开始发送消息 (由另一 station 引起),则此 station 就作为这个消息的接收器
3.位定时要求
标称位速率,为一理想的发送器在没有重新同步的情况下每秒发送的位数量
标称位时间,标称位速率的倒数 (1/标称位速率),即发送一个位所需的时间
由 同步段 and 传播时间段 and 相位缓冲段1 and 相位缓冲段2 组成 同步段 (SYNC_SEG),用于同步总线上不同的节点,这一段内要有一个跳变沿
传播段 (PROP_SEG),用于补偿网络内的物理延时时间,它是总线上输入比较器延时和输出驱动器延时总和的两倍
相位缓冲段1 and 相位缓冲段2 (PHASE_SEG1 and 2),用于补偿边沿阶段的错误,这两个段可以通过重新同步加长或缩短
采样点 (SAMPLE POINT),是读总线电平并解释各位值的一个时间点,采集点位于相位缓冲段1 (PHASE_SEG1)
信息处理时间 (INFORMATION PROCESS TIME),是一个以采样点作为起始的时间段,采集点用于计算后续位的位电平
时间份额 (TIME QUANTUM),是派生于振荡器周期的固定时间单元,存在有一个可编程的预分频器,取值范围为1 - 32 及之间的整数
以最小时间份额为起点,时间份额的长度为
时间份额 = m * 最小时间份额 (m 为预分频器值)
时间段的长度 (Length of Time Segments)
同步段为1个时间份额 传播段可设置为 1,2,…,8 个时间份额 相位缓冲段1可设置为 1,2,…,8 个时间份额 相位缓冲段2为相位缓冲段1和信息处理时间之间的最大值 信息处理时间小于或等于2个时间份额
一个位时间总的时间份额值可以设置在 8 - 25 的范围
同步 (SYHCHRONIZATION)
硬同步 (HARD SYHCHRONIZATION)
硬同步后,内部的位时间从同步段重新开始,因此,硬同步强迫由于硬同步引起的沿处于重新开始的位时间同步段之内
重新同步跳转宽度 (RESYHCHRONIATION JUMP WIDTH)
重新同步的结果,使相位缓冲段1增长,或使相位缓冲段2缩短,相位缓冲段加长或缩短的数量有一个上限,此上限由重新同步跳转宽度给定,重新同步跳转宽度应设置于1和最小值之间 (此最小值为4,PHASE_SEG1)
时钟信息可以从一位值转换到另一位值的跳变中得到,后续位有固定的最大数值,其数值相同,这个属性提供了总线单元在帧期间重新和位流同步的可能性,(这里有一个属性,即,只有后续位的一固定最大值才具有相同的数值,这个属性使总线单元在帧期间重新同步于位流成为可能,可用于重新同步的两个过渡过程之间的最大长度为29个位时间)
一个沿的相位误差,由相关于同步段的沿的位置给出,以时间份额量度,相位误差定义如下
e = 0 如果沿处于同步段里 e > 0 如果沿位于采集点之前 e < 0 如果沿处于前一个位的采集点之后
重新同步
当引起重新同步沿的相位误差的幅值小于或等于重新同步跳转宽度的设定值时,重新同步和硬同步的作用相同,当相位错误的量级大于重新同步跳转宽度时 如果相位误差为正,则相位缓冲段1被增长,增长的范围为与重新同步跳转宽度相等的值 如果相位误差为负,则相位缓冲段2被缩短,缩短的范围为与重新同步跳转宽度相等的值
同步的原则
硬同步和重新同步都是同步的两种形式,遵循以下规则
1)在一个位时间里只允许一个同步 2)仅当采集点之前探测到的值与紧跟沿之后的总线值不相符合时,才把沿用作于同步 3)总线空闲期间,有一“隐性”转变到“显性”的沿,无论何时,硬同步都会被执行 如果仅仅是将“隐性”转化为“显性”的沿用作于重新同步使用,则其他符合规则1和规则2的所有从“隐性”转化为“显性”的沿可以用作为重新同步,有一例外情况,即,当发送一“显性”位的节点不执行重新同步而导致一“隐性”转化为“显性”沿,此沿具有正的相位误差,不能作为重新同步使用
|