转载自CSDN,原文地址:https://blog.csdn.net/wordwarwordwar/article/details/79405894?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.highlightwordscore&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.highlightwordscore二、远程帧 通过发送远程帧,总线的节点发出远程帧,请求以前发送给它数据帧的节点再发送一遍。具体发送哪个数据帧,由远程帧的标识符决定。 与数据帧类似,远程帧也有标准格式和扩展格式,而且都由6个不同的位场组成:帧起始、仲裁场、控制场、CRC场、应答场、帧结尾。 与数据帧相反,远程帧的RTR位是“隐性”的。它没有数据场,数据长度代码DLC的数值是不受制约的(可以标注为容许范围0~8里的任何数值),此数值是相应于数据帧的数据长度代码。远程帧结构如图所示: 远程帧结构 三、错误帧 错误帧由两个不同的场组成,第一个场是不同节点提供的错误标志(Error Flag)的叠加,第二个场是错误界定符。 为了能正确地终止错误帧,“错误认可”的节点要求总线至少有长度为3个位时间的总线空闲。因此,总线的载荷不应为100%。错误帧结构如图: 错误帧结构(图中统一起见出错帧改为错误帧) (1) 错误标志,有两种形式的错误标志:激活错误标志 和 认可错误标志 “激活错误”标志由6个连续的“显性”位组成; “认可错误”标志由6个连续的“隐性”的位组成,除非被其他节点的“显性”位重写。 (2) 错误界定符,错误界定符包括8个“隐性”的位。 错误标志传送了以后,每一个节点就发送一个“隐性”的位,并一直监视总线直到检测出一个“隐性”的位为止,然后就开始发送其余7个“隐性”位。 四、过载帧 过载帧(Overload Frame)包括两个位场:过载标志 和 过载界定符,其结构如图: 过载帧结构图 有三种过载的情况会引发过载标志的传送: 接收器的内部情况,需要延迟下一个数据帧和远程帧。 在间歇(Intermission)的第1和第2字节检测到一个“显性”位。 这里有个间歇的概念。我们可以讲讲。间歇属于帧间空间的一部分。它包含三个隐性位。间歇期间,所有的站不允许传送数据帧或远程帧。它唯一要做的就是标示一个过载条件。 如果CAN节点在错误界定符或过载界定符的第8位(最后一位)采样到一个显性位,节点会发送一个过载帧。该帧不是错误帧,错误计数器不会增加。 (1)过载标志(Overload Flag) 过载标志由6个“显性”的位组成。过载标志的所有形式和“激活错误”标志的一样。 (2)过载界定符(Overload Delimiter) 过载界定符包括8个“隐性”的位。 五、帧间空间 数据帧(或远程帧)与先行帧的隔离是通过帧间空间实现的,无论此先行帧类型如何(数据帧、远程帧、错误帧、过载帧)。 帧间空间包括间歇、总线空闲的位场。如果“错误认可”的节点已作为前一报文的发送器,则其帧间空间除了间歇、总线空闲外,还包括称作“挂起传送”(暂停发送)(Suspend Transmission)的位场。 对于不是“错误认可”的节点,或作为前一报文的接收器的节点,其帧间空间如图: 非 “错误认可”帧间空间 对于作为前一报文发送器的“错误认可”的节点,其帧间空间如图: “错误激活”帧间空间 (1)总线空闲(Bus Idle) 总线空闲的时间是任意的。只要总线被认定为空闲,任何等待发送报文的节点就会访问总线。在发送其他报文期间,有报文被挂起,对于这样的报文,其传送起始于间歇之后的第一个位。 总线上检测到的“显性”的位可被解释为帧的起始。 (2)挂起传送(Suspend Transmission) “错误认可”的节点发送报文后,节点就在下一报文开始传送之前或总线空闲之前发出8个“隐性”的位跟随在间歇的后面。 如果与此同时另一节点开始发送报文(由另一节点引起),则此节点就作为这个报文的接收器。 最后用脑图总结: 再来几张实物图: CAN总线接收芯片 CAN总线控制器芯片 标准数据帧波形捕获 扩展数据帧波形捕获 |
|