这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
icore3l_arm_47 [2020/12/03 16:30] zgf |
icore3l_arm_47 [2020/12/05 08:46] zgf 移除 |
||
---|---|---|---|
行 95: | 行 95: | ||
{{ :icore3l:icore3l_arm_hal_47_3.png?direct |}} | {{ :icore3l:icore3l_arm_hal_47_3.png?direct |}} | ||
=== 2.协议层 === | === 2.协议层 === | ||
- | CAN的位时序以及同步: | + | * **CAN的位时序以及同步:** |
* 由于CAN属于异步通讯,没有时钟信号线,那么节点间就需要约定好波特率进行通讯。同时,为实现正确的总线电平采样,确保通讯正常,由此引出“位时序”的概念。 | * 由于CAN属于异步通讯,没有时钟信号线,那么节点间就需要约定好波特率进行通讯。同时,为实现正确的总线电平采样,确保通讯正常,由此引出“位时序”的概念。 | ||
* **位时序的组成:** | * **位时序的组成:** | ||
* CAN协议将每一个数据位的时序分解成4段,即:SS段、PTS段、PBS1段、PBS2段,这4段加起来就是一个CAN数据位的长度。而分解后的最小时间单位是Tq,一个完整的位由8~25个Tq组成。如下图是总线电平下每个位分解。 | * CAN协议将每一个数据位的时序分解成4段,即:SS段、PTS段、PBS1段、PBS2段,这4段加起来就是一个CAN数据位的长度。而分解后的最小时间单位是Tq,一个完整的位由8~25个Tq组成。如下图是总线电平下每个位分解。 | ||
{{ :icore3l:icore3l_arm_hal_47_4.png?direct |}} | {{ :icore3l:icore3l_arm_hal_47_4.png?direct |}} | ||
- | * SS段:称为同步段,用于使总线上的各个节点同步,要求有一个跳变沿位于此段内,该段的长度为1Tq; | + | * **SS段:**称为同步段,用于使总线上的各个节点同步,要求有一个跳变沿位于此段内,该段的长度为1Tq; |
- | * PTS段,称为传播时间段,用于补偿网络内的物理延时,它是信号在总线上传播时间,输入比较器延时和输出驱动器延时之和的两倍,该段长可以为1~8Tq; | + | * **PTS段:**称为传播时间段,用于补偿网络内的物理延时,它是信号在总线上传播时间,输入比较器延时和输出驱动器延时之和的两倍,该段长可以为1~8Tq; |
- | * PBS1段,称为相位缓冲段,主要用来补偿变压阶段的误差,它的实际长度在重新同步的时候可以加长,该段大小可以为1~8Tq; | + | * **PBS1段:**称为相位缓冲段,主要用来补偿变压阶段的误差,它的实际长度在重新同步的时候可以加长,该段大小可以为1~8Tq; |
- | * PBS2段,称为另一个相位缓冲段,也是用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长,该段大小可以为2~8Tq。 | + | * **PBS2段:**称为另一个相位缓冲段,也是用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长,该段大小可以为2~8Tq。 |
* **通讯的波特率:** | * **通讯的波特率:** | ||
* 总线上的各个通讯节点只要约好1个Tq的时间长度以及每一个数据位占据多少个Tq,就可以确定CAN通讯的波特率。 | * 总线上的各个通讯节点只要约好1个Tq的时间长度以及每一个数据位占据多少个Tq,就可以确定CAN通讯的波特率。 | ||
行 130: | 行 130: | ||
* **控制段** | * **控制段** | ||
* r1和r0为保留位,默认置为显性,它最主要的是由4位组成的DLC段,MSB先行,DLC段表示的数字为0~8。 | * r1和r0为保留位,默认置为显性,它最主要的是由4位组成的DLC段,MSB先行,DLC段表示的数字为0~8。 | ||
- | 数据段 | + | * **数据段** |
* 为数据帧的核心内容,它是节点要发送的原始信息,由0~8个字节组成,MSB先行。 | * 为数据帧的核心内容,它是节点要发送的原始信息,由0~8个字节组成,MSB先行。 | ||
- | CRC段 | + | * **CRC段** |
* 为保证报文的正确传输,CAN的报文包含了一段15位的CRC校验码,若检验出错则向发送节点反馈出错信息,利用错误帧请求它重新发送。CRC计算一般由CAN控制器硬件完成,而出错时处理由软件控制最大的重发数。在CRC校验码之后,有一个CRC界定符,为隐性,将CRC校验码与后面的ACK段分隔开。 | * 为保证报文的正确传输,CAN的报文包含了一段15位的CRC校验码,若检验出错则向发送节点反馈出错信息,利用错误帧请求它重新发送。CRC计算一般由CAN控制器硬件完成,而出错时处理由软件控制最大的重发数。在CRC校验码之后,有一个CRC界定符,为隐性,将CRC校验码与后面的ACK段分隔开。 | ||
* **ACK段** | * **ACK段** |