当前位置: 首页 > news >正文

鹰潭网站建设做百度移动网站

鹰潭网站建设,做百度移动网站,大诚设计网站建设,网站打开慢如何优化通讯协议之路主要分为两部分#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN#xff1b;视频会发布在bilibili(UID:399951374) 序、… 通讯协议之路主要分为两部分第一部分从理论上面讲解各类协议的通讯原理以及通讯格式第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN视频会发布在bilibili(UID:399951374) 序、个人理解 can通信属于异步半双工通信can通信支持多设备通信通讯设备ECU通过can收发器接入到can通信网络中can通信网络中将接入网络进行通讯的设备称之为节点can同行采用多主多从的方式通讯在通讯协议中的各个节点中每个节点都可以充当信号的发送者也可以充当信号的接收者can通信网络中接入的节点会拥有个人专属的设备识别码默认是11位识别码对应着节点的通信优先级节点优先级具有下面规则0越多优先级越高0在的位数越高优先级越高can通信原理将单片机发送出来的TTL电平转化为差分信号CAN_HIGH和CAN_LOWcan通信中差分信号差值HIGH-LOW决定着逻辑信号 差分信号差值为2V为逻辑0显性信号差分信号差值为0V为逻辑1隐性信号 can通信采用双绞线同时传输具有强干扰性因此低速can通信传输距离可达1000m can协议在通讯过程中具有五类传输数据帧类型最后共同组成can通信五类的数据传输格式。下图为数据传输的过程。空闲状态当总线连续表现为11个位的隐形电平(高电平)工作状态 起始位一位逻辑0识别码11位识别码起片选作用同时对多个设备的通信优先级进行判断。RTR位1位区分该通信格式为数据帧或远程通信帧。0为数据帧1为远程通信帧控制码6位 IDE位1位区分该协议的识别码为标准格式或拓展格式空闲位1位预留位为逻辑0DLC(Data Link Control)决定后面数据码的程度DLC为四位对应8个选项0001对应1个字节八位1000对应8个字节64位下图DLC为0001因此后续数据码为8位数据码传输数据长度有前面的DLC码决定CRC码16位循环冗余校验位 CRC校验码15位设备接受段根据数据计算出CRC位如果计算结果和接收到的CRC不一致说明数据存在问题就会重新发送一次数据帧CRC界定符1位逻辑1用于将后续数据隔开ACK码2位 ACK确认槽发送端发送的是逻辑1接收端回复逻辑0表示应答ACK界定符1位逻辑1用于将后续数据隔开结束位7位逻辑1表示数据帧传输结束 1. 总体概述 1.1 基本概念 CAN 是 Controller Area Network 的缩写以下称为 CAN是 ISO 国际标准化的串行通信协议。在北美和西欧CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线并且拥有以 CAN 为底层协议专为大型货车和重工机械车辆设计的 J1939 协议。 1.2 通讯方式  回顾前面学到的 RS232 IIC SPI RS485 等通信 UART(Universal Asynchronous Receiver Transmitter通用异步收发器/异步串行通信口)是一种通用的串行数据总线用于异步通信支持全双工。它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范即UART是异步串行通信口的总称。 IIC总线协议I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。 SPI总线协议SPI是串行外设接口Serial Peripheral Interface的缩写。SPI是一种高速的全双工同步的通信总线并且在芯片的管脚上只占用四根线节约了芯片的管脚同时为PCB的布局上节省空间提供方便正是出于这种简单易用的特性如今越来越多的芯片集成了这种通信协议。 RS232接口缺陷: (1)接口的信号电平值较高( /-12V)易损坏接口电路的芯片。 (2)传输速率较低在异步传输时波特率为20Kbps。 (3)接口使用一根信号线和一根信号返回线而构成共地的传输形式这种共地传输容易产生共模干扰所以抗噪声干扰性弱。 (4)传输距离有限最大传输距离标准值为50英尺实际上也只能用在50米左右。 RS485是对RS232的改进特点包括: ①接口电平低不易损坏芯片。RS485的电气特性:逻辑“1”以两线间的电压差为(2 ~ 6)V表示逻辑“0”以两线间的电压差为-(2~6)V表示。接口信号电平比RS232降低了不易损坏接口电路的芯片。 ②传输速率高。10米时RS485的数据最高传输速率可达35Mbps在1200m时传输速度可达100Kbps。 ③抗干扰能力强。RS485接口是采用平衡驱动器和差分接收器的组合抗共模干扰能力增强即抗噪声干扰性好。 ④传输距离远支持节点多。RS485总线最长可以传输1200m以上(速率≤100Kbps)一般最大支持32个节点如果使用特制的485芯片可以达到128个或者256个节点最大的可以支持到400个节点。 CAN总线通信系统是串行通信的一种要优于RS485总线是目前比较常用的一种工业总线如汽车的电气部分就采用CAN总线实现通信。 与I2C、SPI等具有时钟信号的同步通讯方式不同CAN通讯并不是以时钟信号来进行同步的它是一种异步半双工通讯。同步即在同一个时钟驱动下数据通信半双工即接受与发送不能同时进行 1.3 为什么使用CAN? 汽车工业蓬勃发展汽车的电子控制单元逐渐增多。各电控单元之间的信号交换导致汽车线束的级数增加复杂粗大的线束与汽车有限的布线空间之间矛盾越来越突出繁多的线束导致电气系统可靠性下降同时增加了重量。 CAN总线将汽车内部各电控单元之间连接成一个局域网络实现了信息的共享大大减少了汽车的线束如下面的示意图 比如上图中每个部分的多个器件都挂载在CAN总线上一个CAN总线上的所有器件通讯速率必须相同各个部分再汇集到网关由网关分配实现各个不同速率的部分之间通讯这样就很方便轻松实现了对汽车整体电控部分的检测与控制。 在汽车、工业控制领域数据通信的稳定性和正确性要求极高因为设备的工作环境既有振荡、高温、辐射等各种不定因素那不是一般的通信协议能够满足的。除此之外CAN通信还有许多优秀的特点比如多主控制、故障封闭功能等非常适用于工控领域方面将在下文再提。 1.4 CAN的协议及组成 CAN协议经过ISO标准化后有两个标准ISO11898标准和IS011519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准闭环而IS011519-2是针对通信速率为125Kbps以下的低速通信标准开环。 Kbps总线的通信速率指的是位速率。或称为比特率和波特率不是一回事表示的是单位时间内通信线路上传输的二进制位的数量其基本单位是 bps 或者 b/s (bit per second)。 CAN的组成一般有两种方式 1CPU与CAN控制器集成到一起、再外接CAN收发器 2另一种是CPU与CAN控制器分开的使用的时候需要配置CAN接口电路比较麻烦。 STM32中就是采用第一种方式将CAN接口集成在芯片内使用的时候再外接CAN收发器顾名思义可发送可接收常用的有TJA1050或者82C250。 CAN收发器是用于TTL电平与差分电压信号相互转换的TTL电平即单片机引脚直接提供的电平逻辑0代表低电平逻辑1代表高电平而差分电压信号则为固定的电压值。  2. 上帝视角看CAN的通讯过程 以ISO11898 标准的高速、短距离闭环网络为例总线最大长度为 40m通信速度最高为 1Mbps。在 CAN 总线的起止端有一个 120Ω的终端电阻是用来来做阻抗匹配以减少回波反射。 2.1 数据传输原理实现 由上图可知CAN通信是通过两根线完成的 * 一条是黄色的CAN_High *一条是绿色的CAN_Low 按照定义 CAN_High - CAN_Low 0.5V 时候为隐性的逻辑信号表现为逻辑1即高电平。CAN_High - CAN_Low  0.9V 时候为显性的逻辑信号表现为逻辑0即低电平。 由上图可知 没有数据发送或者发送数据0时两条线的电平一样都为2.5V两条线的电压差小于0.5V当发送数据1时CAN_High电压升高CAN_Low电压降低两条线电压差大于0.9V时认为数据为逻辑0 所以CAN使用的是差分信号差分信号稳定性更好因为即使环境问题导致CAN_High电压发送变化则CAN_L也会发送同等变化两者做差即可抵消由于这个环境引起的变化。 隐性、显性之间存在天然的优先级特性显性逻辑0的优先级比隐性逻辑1高该优先级的特性可以用来进行多主机的仲裁 在总线上显性电平具有优先权只要有一个节点输出显性电平总线上即为显性电平。而隐形电平则具有包容的意味只有所有的单元都输出隐性电平总线上才为隐性电平显性电平比隐性电平更强 上图为CAN的收发器CAN_Rx和CAN_Tx分别是从MCU中接出来的引脚比如MCU要发送一个逻辑1则只要将CAN_Tx设置为1经过CAN收发器转换CAN_High和CAN_Low 线上的电压均为 2.5v即传到总线的电压差 Vh-Vl0V总线上的状态则就是逻辑1。同样当CAN_High和CAN_Low 读取到 CAN总线电压分别3.5V和1.5V即压差为2V经过收发器转换MCU则可通过CAN_Rx读取到信号0。 2.2 通信的整个过程 那么是如何通过一个节点的MCU向总线上那么多节点中的某个节点进行发送信息的一个节点又是如何知道某个信息是发给自己的或者不是发给自己的这里或许让你想起 IIC 中以地址方式进行主从点对点的通信但其实在CAN中并无地址的概念。 少了像IIC中的SCL地址线、SPI中的片选信号线简洁的物理层决定了 CAN 必然要配上一套更复杂的协议。如何用一个信号通道实现同样、甚至更强大的功能呢答案是对数据或操作命令进行打包。 2.2.1 空闲状态 先规定空闲状态所谓的空闲状态就是指没有节点正在传输数据的时候 在CAN协议中当总线上的上出现连续的11位隐性电平两根线电压差小于0.5V表示总线就处于空闲状态。 也就是说对于任意一个节点而言只要它监听到总线上连续出现了11位隐性电平那么该节点就会认为总线当前处于空闲状态。 怎么让总线连续出现11位隐形电平呢由于显性电平的高优先级特性必须所有CAN主机都连续发送11个隐性电平或者不发送时总线才能出现连续11个隐性电平即处于空闲状态 所以现在可以先简单地理解为需要在总线一开始工作的时候所有节点都输出隐性电平已知在一次传输时该节点输出显性电平则在传输完成后该节点再输出隐性电平即可这样就能将总线在无数据传输时保持空闲状态。真实的实现过程比较复杂这里仅作为暂时理解后面会继续提到 2.2.2 开始数据传输 每次发送数据前节点都会监听总线的状态如果总线状态为空闲时它就会立即向总线上发送自己的数据这个数据里不仅有数据还有本身的ID信息或者其他的控制指令应称为数据包(数据帧)也叫做报文。当报文被传输到其它节点时只要这些节点按格式去解读就能还原出原始数据。 报文: 在原始数据段的前面加上传输起始标签、片选(识别)标签、控制标签在数据的尾段加上 CRC 校验标签、应答标签和传输结束标签。类似这样的数据包就被称为 CAN 的数据帧。为了更有效地控制通讯CAN 一共规定了 5 种类型的帧帧也称为报文。 数据帧是在 CAN 通讯中最主要、最复杂的报文它以一个显性位(逻辑 0)开始以 7 个连续的隐性位(逻辑 1)结束。在它们之间分为仲裁段、控制段、数据段、CRC 段和 ACK 段以标准数据帧为例。 域段 域段名 位宽:bit 描述 帧起始 SOFStart Of Frame 1 数据帧起始标志固定为1bit显性b0 仲裁段 IdentifyID 11 本数据帧的 ID 信息 ID 信息的作用① 如果同时有多个节点发送数据时作为优先级依据仲裁机制② 目标节点通过 ID 信息来接受数据验收滤波技术 RTR Remote Transmission Request BIT 1 RTR标识是否是远程帧0数据帧1远程帧在数据帧里这一位为显性(b0) IDE Identifier Extension Bit 1 IDE用于区分标准格式与扩展格式在标准格式中 IDE 位为显性‘b0在扩展格式里 IDE 位为隐性’b1 R0 保留位 1 1bit保留位固定为1b0 DLC data length 4 由 4 位组成MSB 先行高位先行它的二进制编码用于表示本报文中的数据段含有多少个字节DLC 段表示的数字为0到8若接收方接收到 9~15 的时候并不认为是错误 数据段 data 0~64 据帧的核心内容它由 0~8 个字节(0 ~ 64位)组成MSB 先行 CRC段 CRC 15 段用于检查帧传输错误发送方以一定的方法计算包括帧起始、仲裁段、控制段、数据段接收方以同样的算法计算 CRC 值并进行比较如果不同则会向发送端反馈出错信息重新发送计算和出错处理一般由 CAN 控制器硬件完成或由软件控制最大重发数。 CRC界定符 1 CRC 界定符用于分隔的位为隐性位(1b1)主要作用是把CRC 校验码与后面的 ACK 段间隔起来 ACK 槽 ACK slot 1 在 ACK 槽位中发送端发送的为隐性位而接收端则在这一位中发送显性位以示应答发送 ACK/返回 ACK这个过程使用到回读机制即发送方先在 ACK 槽发送隐性位后回读到的总线上的电平为显性0发送方才知道它发送成功了不用重发 ACK界定符 1 在 ACK 槽和帧结束之间由 ACK 界定符间隔开为隐性位 帧结束 EOF 7 由发送端发送 7 个隐性位表示结束 比如总线上有3个节点节点1设置ID为000101 00010节点2验收滤波ID表中有节点1的ID号而节点3中的验收滤波ID表中没有节点1的ID号节点1向节点2发送1字节的信息。 报文信息0 000101 00010  0 0 0 0001 0101 1000 XXXXXXXXXXXXXXX 1 1 1 1111111 通过总线发送时在ID信息发送阶段只有节点2才能收到总线上的数据因为节点3的验收滤波ID表中没有节点1的ID号 在报文发送到ACK槽时会等待并回读节点2的反馈从节点2的角度看此时总线为空闲状态当验证CRC正确则向总线发送显性电平接着当节点1回读到显性电平才会继续发送剩下的EOF 以上只是简单的理解实际传输的过程比这个复杂许多下文继续。 2.2.3 仲裁机制 运用到线与机制和回读机制 以上只是节点1主动发送数据但是万一节点1和节点2同时向节点3发送数据的时候如何判定先后呢采用非破坏性位仲裁机制即对各个消息的标识符即ID号进行逐位仲裁比较如果某个节点发送的消息仲裁获胜那么这个节点将获取总线的发送权仲裁失败的节点则立即停止发送并转变为监听接收状态。 从上文可知显性的优先级高于隐性即仲裁比较的就是哪个ID中的0多0最多的那个就可以获得发送权比如 000000 00010 就比 000000 00011 的优先级要高仲裁的过程由硬件实现同时要注意仲裁段除了报文 ID 外还有 RTR、IDE、SRR 位在拓展模式中下文价绍也就是说当ID全都一样时会继续比较接下来的几位。 至于如何做到“0多即胜”可以理解为一种回读和线与机制即显性能够将隐性覆盖将自己要比较的位与总线上的状态相与只有线与的结果与本身一致时仲裁才能够通过。 其实在报文发送上去的过程采用的是广播的方式在节点1和节点2总裁的同时总线上所有的节点都能够监听到它们的ID号只不过也在同时进行验收滤波只有监听到的ID号存在ID表中该节点才会选择继续监听后面的报文。 2.2.4 位时序 以上已经基本解决了CAN通信的基本问题可以思考一下由于 CAN 没有时钟信号线而且它的报文中并没有包含用于同步的标志要怎么做才能对总线的电平进行正确的采样呢比如我节点1发送3个位出去了节点2应该在什么时候接收才能保证此时此刻它所接收到的就是第3位或者接收到的电平是正确的 CAN中提出了位同步的方式来确保通讯时序。 位时序的主要知识点 CAN总线通讯协议的每一个数据帧可以看作一连串的电平信号每一个电平信号代表一位一个字节8位的位所以一帧中包含了很多个位由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。 一位又分为4段 同步段SS、传播时间段PTS、相位缓冲段 1PBS1、相位缓冲段 2PBS2。分解后最小的时间单位是 Tq而一个完整的位由 8~25 个 Tq 组成。 1 位分为 4 个段每个段又由若干个 Tq 构成这称为位时序。1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等可以任意设定位时序。通过设定位时序多个单元可同时采样也可任意设定采样点。 SS 段(SYNC SEG)同步段比如当总线上出现帧起始信号(SOF)时其它节点上的控制器根据总线上的这个下降沿对自己的位时序进行调整把该下降沿包含到 SS 段内这样根据起始帧来进行同步的方式称为硬同步。其中 SS 段的大小为 1Tq。总线上信号的跳变沿被包含在节点的 SS 段的范围之内则表示节点与总线的时序是同步的采样点采集到的总线电平即可被确定为该位的电平。 PTS 段(PROP SEG)传播时间段这个时间段是用于补偿网络的物理延时时间包括发送单元的输出延迟、总线上信号的传播延迟、接收单元的输入延迟这个段的时间为以上各延迟时间的和的两倍。大小可以为 1~8Tq。 PBS1 段(PHASE SEG1)相位缓冲段主要用来补偿边沿阶段的误差它的时间长度在重新同步的时候可以加长。 PBS1 段的初始大小可以为 1~8Tq。 PBS2 段(PHASE SEG2)另一个相位缓冲段也是用来补偿边沿阶段误差的它的时间长度在重新同步时可以缩短。 PBS2 段的初始大小可以为 2~8Tq。 对于PBS段而言当信号边沿不能被包含于 SS 段中时可在此段进行补偿以及可以吸收时钟误差 SJW (reSynchronization Jump Width)重新同步补偿宽度即在重新同步的时候PBS1 和 PBS2 段的允许加长或缩短的时间长度SJW 加大后允许误差加大但通信速度下降。SJW 为补偿此误差的最大值即每一次误差补偿都不能超过这个值14Tq。 CAN 的同步分为硬同步和重新同步 硬同步在帧起始信号时同步总线上所有器件的位时序无法确保后续一连串的位时序都是同步的。 重新同步:在检测到总线上的时序与节点使用的时序有相位差时(即总线上的跳变沿不在节点时序的 SS 段范围)通过延长 PBS1 段或缩短 PBS2 段来获得同步。 采样点 读取总线电平的时刻并将读到的电平作为位值的点。位置在 PBS1 结束处。 延长/缩短PBS段来达到同步 PTSPBS1小而PBS2加大时采样点前移PTSPBS1大而PBS2减小时采样点后移。 同步过程 在硬同步阶段当节点检测到本身SS段并不在总线电平下降沿跳变处节点则会把自己的位时序中的 SS 段平移至总线出现下降沿的部分后面三段也跟着上去以获得同步。可以理解为节点在检测到帧起始信号时才开始“设置段” 在重新同步阶段利用普通数据位的高至低电平的跳变沿来同步(帧起始信号是特殊的跳变沿)。重新同步与硬同步方式相似的地方是它们都使用 SS 段来进行检测同步的目的都是使节点内的 SS 段把跳变沿包含起来。重新同步的方式分为超前和滞后两种情况以总线跳变沿与 SS 段的相对位置进行区分下面举例设SJW为2Tq。 ① 相位超前节点从总线的边沿跳变中检测到它内部的时序比总线的时序相对超前 2Tq这时控制器在下一个位时序中的 PBS1 段增加 2Tq 的时间长度使得节点与总线时序重新同步。 ② 相位相位滞后节点从总线的边沿跳变中检测到它的时序比总线的时序相对滞后 2Tq这时控制器在前一个位时序中的 PBS2 段减少 2Tq 的时间长度获得同步。 理解上面重新同步过程时需要知道前一次SS到下一次SS之间的长度是可伸展的暂时称之为 L 当检测到前一次SS出现得太快还没等到下降沿到来这就是相位超前了如果不把 L 缩短一点那么下一次SS将也会超前。缩短 L 的方法就是调整 PBS 的长度这个过程由CAN控制器完成即(新的PBS长度 当前 PBS长度-SJW)。 2.2.5 一次数据传输的例子 比如总线上有3个节点节点1设置ID为000100 00110节点2设置ID为000100 00111节点3验收滤波ID表中有节点1和节点2的ID号节点1和节点2同时向节点3发送1字节的信息。 总线空闲节点1和节点2同时发送帧起始信号3个节点同时调整位时序硬同步节点1和节点2开始仲裁两者同时向总线发送第一位0同时回读总线状态与本身状态相与得0两者第1位仲裁均通过一直持续到第9位1两者同时向总线发送1同时回读总线状态得1两者第9位仲裁均通过直到第11位当两个节点回读总线状态与本身状态相与时总线得显性将隐性屏蔽即总线状态为显性则节点1得0与本身状态相同而节点2得0与本身状态不同此时节点1仲裁胜利节点2放弃发送请求从第1位仲裁到第11位仲裁得同时节点1向其他节点广播了本身的ID当然节点1本身也接收到节点2的ID信息因此节点2和节点3也都收到了节点1的ID信息只不过节点2对节点1不敢兴趣因而选择了忽略节点1后续的信息节点3则开始接收节点1的数据从硬同步之后每当节点1和节点2发出一个仲裁位三个节点的CAN控制器都在检测本身的位时序与总线位时序是否一致当有相位超前或者滞后时则自动进行位时序的重新同步。在后续的报文传送中亦是如此。 3. CAN总线协议层的详细介绍 CAN 协议经 ISO 标准化后有 ISO11898 标准和 ISO11519-2 标准两种。ISO11898 和 ISO11519-2 标准对于数据链路层的定义相同但物理层不同。  在阅读完上文后对CAN总线中的一个极其重要的知识点需要搞明白回读机制。 指的是节点在向总线上发送报文的过程中同时也对总线上的二进制位进行“回读”。通过这种机制节点就可以判断出本节点发出的二进制位与总线上当前的二进制位是否一致。  3.1 帧的种类  帧类型 帧用途 数据帧 用于发送单元向接收单元传送数据的帧。 遥控帧 用于接收单元向具有相同 ID 的发送单元请求数据的帧。 错误帧 用于当检测出错误时向其它单元通知错误的帧。 过载帧 用于接收单元通知其尚未做好接收准备的帧。 帧间隔 用于将数据帧及遥控帧与前面的帧分离开来的帧 另外数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11 个位的标识符Identifier: 以下称 ID扩展格式有 29 个位的 ID。 3.1.1 数据帧  关于数据帧的标准格式各个位的介绍可以查看本文的【2.2.2节】在数据帧的拓展格式中与标准格式不同处在于 仲裁段为 29 位多出的SRR 位(Substitute Remote Request BIT)用于替代标准格式中的 RTR 位。SRR 位为隐性位由于 RTR 在数据帧为显性位所以在两个 ID 相同的标准格式报文与扩展格式报文中标准格式的优先级较高控制段中的 r1 和 r0 一样都为保留位默认设置为显性位扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18扩展 ID 由 ID17 到 ID0 表示。基本 ID 和标准格式的 ID 相同。禁止高 7 位都为隐性。禁止设定基本 ID1111111XXXX 3.1.2 遥控帧 接收单元向发送单元请求发送数据所用的帧。遥控帧由 6 个段组成。遥控帧没有数据帧的数据段。举个例子车钥匙需要知道车门的状态一个远程帧过去车门把自己的状态发回来了。 遥控帧与数据帧的不同之处 遥控帧的 RTR 位为隐性位没有数据段没有数据段的数据帧和遥控帧可通过 RTR 位区别开来遥控帧的数据长度码以所请求数据帧的数据长度码表示 3.1.3 错误帧 用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。 (1) 错误标志 错误标志包括主动错误标志和被动错误标志两种。 ① 主动错误标志6 个位的显性位。 ② 被动错误标志6 个位的隐性位。 (2) 错误界定符 错误界定符由 8 个位的隐性位构成。 (3)错误标志之后还有0~6个错误标志重叠部分 处于主动错误状态的节点检测到错误时会发送主动错误标志6个连续显性位会违反位填充规则和位场的固定形式进而造成其它节点也检测到错误并发送错误标志。所有节点所发送的显性序列叠加组成错误标志重叠部分错误标志重叠部分的长度在6-12个显性位之间。 对主动错误和被动错误的通俗理解 首先建议把广泛使用的“主动错误”和“被动错误”概念换成“主动报错”和“被动报错”。 1.主动报错站点 只要检查到错误它立即“主动地”发出错标识。所谓“出错标识“它本身就是一个“错误的位序列”(连续的6 个显性位不满足CAN协议的“最多5个连续的同性位”要求)目的是“主动地”告诉大家:即使你们没有发现“刚才我已发现”的错误现在我“以身作则”出错啦!你们该看到这个错误了吧! 2.被动报错站点 如果检查到错误它只能干瞪眼“被动地”等别人(主动报错站点)报错等待的时候它可不能去动总线直到识别出由主动报错站点发出的“错误的位序列”它才松了一口气:有人正式报错了!然后他就可以去竞争总线该干啥干啥。 错误帧这里看不明白没关系后文会有详细介绍  3.1.4 过载帧 过载帧是接收节点向总线上其它节点报告自身接收能力达到极限的帧可以理解为接收节点Node_A接收报文的能力达到极限了于是Node_A就会发出过载帧来告诉总线上的其它节点包括发送节点我接收节点Node_A已经没有能力处理你们发来的报文了。过载帧由过载标志和过载界定符构成。 (1) 过载标志 6 个位的显性位。 过载标志的构成与主动错误标志的构成相同。 (2) 过载界定符 8 个位的隐性位。 过载界定符的构成与错误界定符的构成相同。 3.1.5 帧间隔  帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧数据帧、遥控帧、错误帧、过载帧分开。过载帧和错误帧前不能插入帧间隔。  (1) 间隔 3 个位的隐性位。 (2) 总线空闲 隐性电平无长度限制0 亦可。 本状态下可视为总线空闲要发送的单元可开始访问总线。 (3) 延迟传送发送暂时停止 8 个位的隐性位。 只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。 3.2 位填充 为防止突发错误而设定CAN协议中规定当相同极性的电平持续五位时则添加一个极性相反的位。填充位的添加和删除是由发送节点和接收节点完成的CAN-BUS只负责传输不会操纵信号。 对于发送节点而言 在发送数据帧和遥控帧时对于SOF~CRC(除去CRC界定符) 之间的位流相同极性的电平如果持续5位那么在下一个位插入一个与之前5位反型的电平 对于接收节点而言 在接收数据帧和遥控帧时对于SOF~CRC(除去CRC界定符)之间的位流相同极性的电平如果持续5位那么需要删除下一位再接收。如果这个第 6 个位的电平与前 5 位相同将被视为错误并发送错误帧。 3.3 错误的种类 位错误Bit Check Error节点将自己发送到总线上的电平与同时从总线上回读到的电平进行比较如果发现二者不一致那么这个节点就会检测出一个位错误。 有三种例外情况不属于位错误 ① 在仲裁区节点向总线发送隐性位却回读到显性位不认为是位错误这种情况表示该节点仲裁失败 ② 在ACK槽节点向总线发送隐性位却回读到显性位不认为是位错误这种情况表示该节点当前发送的这一帧报文至少被一个其它节点正确接收 ③ 该节点发送被动错误标志节点Node_A向总线发送连续六个隐性位被动错误标志却回读到显性位不认为是位错误。因为被动错误标志是六个连续的隐性位所以在总线上按照线与机制有可能这六个连续隐性位被其它节点发送的显性电平“吃掉” ACK错误Acknowledgment Error按照CAN协议的规定在一帧报文数据帧或者遥控帧发出之后如果接收节点Node_B成功接收了该帧报文那么接收节点Node_B就要在该帧报文ACK槽对应的时间段内向总线上发送一个显性位来应答发送节点Node_A。这样发送节点Node_A就会在ACK槽时间段内从总线上回读到一个显性位。  当发送节点Node_A在ACK槽时间段内没有回读到显性位那么发送节点Node_A就会检测到一个ACK应答错误。这表示没有一个节点成功接收该帧报文。 填充错误Fill Error帧起始到CRC之间接收节点检测到有6个连续相同的位电平时也就是违反5位相同位插入1位相反位的“位填充”原则。 CRC错误发送节点Node_A在发送数据帧或者遥控帧时会计算出该帧报文的CRC序列。接收节点Node_B在接收报文时也会执行相同的CRC算法如果接收节点Node_B计算出的CRC序列值与发送节点Node_A发来的CRC序列值不一致那么接收节点就检测到一个CRC错误。 格式错误在一帧报文发送时如果在必须发送预定值的区域内检测到了非法值即与任何一种帧格式都不符CAN报文中有预定值的区域包括 数据帧和遥控帧的CRC界定符、ACK界定符、EOF 错误帧界定符 过载帧界定符 3.4 错误通知 在检测到错误之后检测到错误的节点就要发送错误帧到总线上来通知总线上的其他节点。 3.4.1 节点错误状态 对于错误界定节点存在如下三种状态 主动错误 错误标志由6个连续的显性位组成这种连续的6个显性位与常规的填充位和其它帧固定格式不相同正因为如此硬件才容易区别被动错误 被动错误标志由6个连续的隐性位组成当发送结束后处于被动错误状态的节点在下一次再次发送时之前需要等待一些额外时间。总线关闭 处于总线关闭状态的节点不允许发送和接收任何形式的帧报文。且只能通过用户请求进行恢复。 3.4.2 错误状态的转换 一个CAN节点在什么情况下处于主动错误状态什么情况下处于被动错误状态呢 在CAN节点内有两个计数器发送错误计数器TEC和接收错误计数器REC 错误界定并非是依据错误的类型去界定CAN节点的错误状态而是依据错误计数器【TEC/REC】的值来界定CAN节点的错误状态当该节点检测到错误后内部REC/TEC计数器会相应的增加基于REC/TEC的值判定节点状态。 需要注意的是这两个计数器计得不是收发报文的数量也不是收发错误帧的数量。TEC和RCE计数值的变化是根据下表的规定来进行的。 节点错误状态的转换就是一个 “量变”到“质变” 的过程 主动错误状态【REC 初步可判定该节点相对稳定可靠该错误计数很可能是由于某个节点异常导致的那么其他节点很可能也会触发该错误那么允许该节点破坏CAN总线的异常报文并告知其他节点 节点检测到一个错误就会发送带有主动错误标志的错误帧因为主动错误标志是连续六个显性位所以这个时候主动错误标志将会“覆盖”掉总线上其它节点的发送而之前在CAN总线上传输的报文就被这“六个连续显性位”破坏掉了。 如果发出主动错误帧的节点是发送节点这个情况下就相当于刚刚发送的那一帧报文我发错了现在我破坏掉它发送主动错误帧你们不管收到什么都不算数 如果发出主动错误帧的节点是接收节点这个情况就相当于刚刚我收报文的时候发现了错误不管你们有没有发现这个错误我现在主动站出来告诉大家这个错误并把这一帧报文破坏掉发送主动错误帧刚才你们收到的东西不管对错都不算数了。 被动错误状态【REC128 或TEC128】 节点发送错误帧的次数较多初步可判定该节点相对不可靠该错误计数很可能是由于自身节点问题导致即该错误很可能仅有该节点才有对于其他节点而言是可以正常交互的总线不信任该节点提供的错误标识将不允许破坏总线数据那么允许该节点发送错误帧“6个连续隐性位”至CAN总线仅告知其他节点异常 如果发出被动错误帧的节点为报文的发送节点那么在发送被动错误帧之后刚刚正在发送的报文被破坏并且该节点不能在错误帧之后随着连续发送刚刚发送失败的那个报文。随之而来的是帧间隔并且连带着8位隐性位的 “延迟传送” 段这样总线电平就呈现出连续11位隐性位总线上的其它节点就能判定总线处于空闲状态就能参与总线竞争。 此时如果该节点能够竞争成功那么它就能接着发送如果竞争不能成功那么就接着等待下一次竞争。这种机制的目的正是为了让其它正常节点处于主动错误优先使用总线。 总线关闭状态【TEC255】 一个处于被动错误状态的节点仍然多次发送被动错误帧使该节点转为总线关闭态 该节点不能向总线上发送报文也不能从总线上接收报文整个节点脱离总线。等到检测到128次11个连续的隐性位时TEC和REC置0重新回到主动错误状态。 由于存在实现方式的不同CAN总线关闭状态存在只允许用户请求恢复和检测到128个11位连续的隐性位时自恢复两种不同的恢复形式。 如果总线上只有一个节点该节点发送数据帧后得不到应答TEC最大只能计数到128即这种情况下节点只会进入被动错误状态而不会进入总线关闭状态。 3.4.3 错误帧的发送 按照CAN协议的规定 发生位错误、填充错误、格式错误、ACK错误时则在错误产生的那一位的下一位开始发送错误帧。 发生CRC错误时紧随ACK界定符后的位发送错误帧。 错误帧发送完成后总线空闲时自动重发出错的数据帧。 3.4.4 仲裁机制与位时序 仲裁存在于当同时有多个节点竞争总线发送权时关键词是同时比如节点1和节点2两者同时向总线发送一个位是同时发送的总线只是导线理解成自带线与功能如果节点1发送的是1节点2发送的是0线与后总线的状态则为0 与此同时这里运用到回读机制即节点发送位的同时会回读总线的状态并与自身相比较可知节点1本身状态与总线状态一致则节点1仲裁胜利。可查阅本文【【2.2.3节】】 理解位时序重点在于同步分为硬同步和重新同步在重新同步中通过设置SJW来调整PBS段的长度PBS1增长PBS2缩短以达到调整一个位中Tq的个数即长度。可查阅本文【【2.2.4节】】 关于波特率的计算 总线上的各个通讯节点只要约定好 1 个 Tq 的时间长度以及每一个数据位占据多少个Tq就可以确定 CAN 通讯的波特率。例如假设1Tq1us而每个数据位由 19 个 Tq 组成则传输一位数据需要时间 T(1bit) 19us从而每秒可以传输的数据位个数为1x10^6/19 52631.6 (bps)这个每秒可传输的数据位的个数即为通讯中的波特率。 3.4.5 举个栗子 【位错误】举例情况1 设总线上所有节点处于主动错误状态当一个发送节点监控到总线上的位数值与发送的位数值不一致时检测为位错误并发送主动错误标志6个连续的显性位接收节点接收到发送节点发送的6个连续的显性位时会检测为位填充错误也会发送主动错误标志发送节点发送完主动错误标志后开始监控总线是否为隐性位当总线为隐性位时开始发送错误界定符8个连续的隐性位当接收节点发送完主动错误标志后开始向总线发送错误界定符 等待错误帧发送完成总线空闲后发送节点重新发送出错的报文. 由于发送节点发送6个连续的显性位会破坏位填充规则触发接收节点发送主动错误标志发送节点和接收节点的结合是形成错误标志叠加部分的原因。 【位错误】举例情况2 假设发送节点处于被动错误状态接收节点处于主动错误状态当发送节点监控到总线上的位数值与发送的位数值不一致时检测为位错误并发送被动错误标志6个连续的隐性位接收节点接收到发送节点发送的6个连续的隐性位时会检测为位填充错误并会发送主动错误标志发送节点发送完被动错误标志后开始监控总线是否为隐性位当总线为隐性位时开始发送错误界定符8个连续的隐性位接收节点发送完主动错误标志后开始监控总线是否为隐性位当总线为隐性位时开始发送错误界定符8个连续的隐性位 3.5 CAN的特性总结 1 多主控制 在总线空闲时所有单元都可以发送消息多主控制而两个以上的单元同时开始发送消息时根据标识符Identifier 以下称为 ID决定优先级。ID 并不是表示发送的目的地址而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜被判定为优先级最高的单元可继续发送消息仲裁失利的单元则立刻停止发送而进行接收工作。 2 系统的柔软性 与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时连接在总线上的其它单元的软硬件及应用层都不需要改变。 3 通信速度较快通信距离远。最高 1Mbps距离小于 40M最远可达 10KM速率低于 5Kbps。 4 具有错误检测、错误通知和错误恢复功能。所有单元都可以检测错误错误检测功能检测出错误的单元会立即同时通知其他所有单元错误通知功能正在发送消息的单元一旦检测出错误会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止错误恢复功能。 5 故障封闭功能。CAN 可以判断出错误的类型是总线上暂时的数据错误如外部噪声等还是持续的数据错误如单元内部故障、驱动器故障、断线等。由此功能当总线上发生持续数据错误时可将引起此故障的单元从总线上隔离出去。 6 连接节点多。CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度可连接的单元数增加提高通信速度则可连接的单元数减少。
http://www.hkea.cn/news/14569165/

相关文章:

  • 对百度网站进行分析培训视频网站
  • 推拿网站制作小程序源码怎么导入
  • 电商网站策划源汇区建设局网站
  • 利鑫做彩票网站修改wordpress的站点地址
  • 花店电子商务网站建设课题设计福州网站建设电话
  • 网站访问流量怎么赚钱wordpress标题图标
  • 网站建立的公司wordpress邮件样式美化
  • 免费个人网站+上传定制网站开发公司排名
  • 专业建设 验收 网站南阳企业网站建设公司
  • 建设门户网站费用牙科医院网站设计怎么做
  • 如何申请自己的个人网站好看的html页面
  • 有免费的网站服务器吗优化推广网站怎么做
  • 咸阳专业网站开发哪家好企业培训公司
  • 个人主题网站设计论文2021拉新推广佣金排行榜
  • 怎么欣赏一个网站设计图在网站后台备案号怎么改
  • 网站建设导航图图库php大型网站开发
  • h5网站案例无障碍环境建设 网站
  • 网站建设公司的成本有哪些内容在网站中设置网站地图
  • 外贸仿牌网站建设做鞋子有什么好网站好
  • 珠海市外贸网站建设公司高级网站开发工程师考试题
  • 网站开发技术语言大千科技网站建设
  • 做资格核查在哪个网站中国建设银行网站查询密码是什么意思
  • 工程业绩在建设厅网站都能查到微信微网站统计
  • 孝感做网站公司游戏优化大师官网
  • 安徽省公共资源交易中心网站电商一共有什么平台
  • 长春搜索引擎网站推广线下推广引流渠道
  • 中国未来巨型空间站网站建设与开发课程内容
  • 老外做牛排的视频网站网站建设公司推荐q479185700顶上
  • node做网站后台西安企业模板建站
  • 石家庄网推公司郑州seo顾问