datasheet

【CAN高阶】带您认识ISO11898-4:时间触发通讯

2018-04-09来源: ZLG致远电子关键字:CAN

CAN总线通讯发展的过程中,为了兼容实时操作系统,是否也有与之对应的实时通讯网络协议呢?


ISO11898之前3个部分的解读提高了对传统CAN网络的理解,无论是高速CAN还是低速CAN,亦或者是最基础的物理层定义都进行了详细的阐述。传统的CAN网络总线通讯基本都是事件触发的,当同时有许多信息需要传输时可能会造成总线过载,为了避免这种现象,传统CAN网络采用仲裁机制按信息优先级进行传输。

blob.png

图 1  新能源汽车CAN总线透视图


显然,传统分布式的CAN网络如果能用于实时操作系统(基于时间触发调度而非事件触发),对于系统的兼容性和综合集成性将大有提高,但问题是我们如何才能将并非同样遵从时间调度的两者结合起来呢?


一、时间触发CAN


1、概述


时间触发CAN是建立在标准CAN上的高层协议,它会对网络中所有节点通讯进行同步调度,也就是每个节点在一个固定的时间里发送信息,这样就不用再对信息进行优先级仲裁,由于每个节点分配到的时间是固定的,所以还可以预判整个网络的延迟时间。


2、要实现这样的时间触发CAN通讯有两种方式


方式一:用于周期信息传输;

方式二:支持全局系统时间传输。


3、几个重要概念


基本周期:两个参照帧之间的时间被称为一个基本周期,基本周期由数个时间窗组成;


参照帧:开始一个基本周期的数据帧,为网络提供一个全局时间,其作用就好像格林尼治时间之于世界时间一样,用以同步所有节点的时间;


时间窗:系统矩阵里为传输信息分配的时间段,包括仲裁时间窗、自由时间窗和专用时间窗,见图2。


blob.png

图 2 一个周期内的数个时间窗


所谓的时间触发就是上面已经分配好的的数据从左到右按顺序发送,下面介绍一下这三种时间窗


专用时间窗(Exclusive Windows):用来传输特殊的周期信息,这些消息不会参与总线竞争,是置身事外的一个记录员角色;


仲裁时间窗(Arbitrating Windows):CAN节点在总线不是空闲的时候是不能传输消息的,而在时间触发CAN的仲裁时间窗里可以安排网路内的几个节点同时发送报文,不过没有重发功能;


自由时间窗(Free Windows):保留用作系统扩展,可以配置成增加节点的仲裁时间窗或专用时间窗,相当于机动部队;


blob.png

图 3  系统矩阵


上图的系统矩阵有4个基本周期,一个基本周期可由不同类型、长度的时间窗组成,矩阵的纵列也叫做传输阵,传输阵里的时间窗有相同的长度但是可以拥有不同类型。


二、接收和发送


明确完了概念,我们接下来了解时间触发CAN是如何接收和发送信息的。


1、信息的发送

2、信息发送触发器


在时间触发CAN网络里,节点发送的信息由信息发送触发器控制。信息发送触发器会显示信息是由系统矩阵里面的哪个时间窗以及怎么来进行传输的。


所以信息发送触发器有多个功能组,一是信息正确性判断,二是发送的时间标示,三是判断传输阵里的发送位置,四是重发因数,一个信息发送触发器的触发条件满足时,即使信息的传输出错导致信息失效时它也将立即启动。


blob.png

图 4 举例一个专用信息的发送触发器


上图是一个专用信息D的信息发送触发器,它表述了在系统矩阵里第三个基本周期的第五个时间窗(专用窗)发送,周期偏差为0,重发因素为2。


三、信息的接收


1、信息接收触发器


在时间触发CAN里,信息的接收是由信息接收触发器控制的,信息接收触发器的构成与上述的信息发送触发器一样,信息接收触发器的时标会在信息接受完成后确定时间点。


2、参照帧的发送


3、信息接收触发器


参照帧发送触发器是一个特殊的信息发送触发器,它只存在于备用的时间主节点里。在严格的时间触发网络中,只用唯一的一个参照帧发送触发器来确保参照帧的周期发送,只要时间到了,参照帧就会被发送。


而在事件同步的基本周期系统中会有两个参照帧发送触发器,其中一个参照帧发送触发器按系统矩阵基本周期定时发送,另一个作为后备,在事件同步异常时重新发送参照帧。


四、时间主节点初始化和错误处理


1、时间主节点初始化概念


虽然正常通讯建立起来时只有一个时间主节点,但在时间触发CAN中备用的时间主节点可能超过8个。系统启动时,硬件初始化,所有备用时间主节点根据优先级和等待时间可以开始尝试发送参照帧。硬件初始化后有高优先级的CAN标识符的帧同步实体(数据链路层和媒体访问控制层的执行单元)可以优先传输。


2、错误处理


CAN的失效处理遵循ISO 11898-1的规定,当帧同步实体检测到调度表有误时,会通过CAN的ISO 11898-1协议来处理。


blob.png

图 5 错误处理


关键字:CAN

编辑:冀凯 引用地址:http://www.eeworld.com.cn/qrs/article_2018040946899.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:如何保证总线信号隔离一致性?
下一篇:玩转供应链艺术,看TTI如何应对本地化需求巨变

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

CAN总线冷知识-边沿台阶是怎么来的?

你了解CAN总线波形吗?你知道是什么因素造成CAN信号不稳定的吗?本文将带你探究影响CAN波形稳定的罪魁祸首——边沿台阶。阻抗匹配是指信号源或者传输线跟负载之间达到一种适合的搭配,阻抗匹配主要为了调整负载功率和抑制信号反射;然而,阻抗不匹配的现象在CAN总线网络中随处可见;如图1所示,阻抗不匹配的将造成7个现象,其中最受关注的为上升沿和下降沿的台阶;下文将针对边沿台阶的现象做详细介绍。图1  阻抗不匹配波形解释边沿台阶是怎么出现的,如何消除,对总线有何影响;一、边沿台阶的源头在CAN总线的网络布局中,手牵手直线型拓扑是最理想最常规的布局;但是在实际现场中,经常会出现分支的现象。这里重点提一下,在计算CAN
发表于 2019-04-19
CAN总线冷知识-边沿台阶是怎么来的?

Keil仿真出现Can not read register xx while CPU is running

用jlink可以下载程序,可是在线仿真的时候总是出现:***JLink Error: Could not start CPU core. (ErrorCode: -1)**JLink Warning: CPU could not be halted***JLink Error: Can not read register 15 (R15) while CPU is running***JLink Error: Can not read register 16 (XPSR) while CPU is running。。。。。。最后发现是在程序里调用了RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO
发表于 2019-04-18

影响CAN波形稳定的罪魁祸首—边沿台阶

你了解CAN总线波形吗?你知道是什么因素造成CAN信号不稳定的吗?本文将带你探究影响CAN波形稳定的罪魁祸首——边沿台阶。阻抗匹配是指信号源或者传输线跟负载之间达到一种适合的搭配,阻抗匹配主要为了调整负载功率和抑制信号反射;然而,阻抗不匹配的现象在CAN总线网络中随处可见;如图1所示,阻抗不匹配的将造成7个现象,其中最受关注的为上升沿和下降沿的台阶;下文将针对边沿台阶的现象做详细介绍。 图1  阻抗不匹配波形解释边沿台阶是怎么出现的,如何消除,对总线有何影响;一、边沿台阶的源头在CAN总线的网络布局中,手牵手直线型拓扑是最理想最常规的布局;但是在实际现场中,经常会出现分支的现象。这里重点提一下,在计算
发表于 2019-04-18
影响CAN波形稳定的罪魁祸首—边沿台阶

CAN通信波特率与每秒收发帧数

波特率:上两图来自STM32F4XX中文参考手册波特率与帧时间计算
发表于 2019-04-12
CAN通信波特率与每秒收发帧数

STM32的CAN总线使用

本次调试使用的是珠海鼎芯科技(D-Chip)的STM32核心板。这块核心板上包含了一个CAN总线驱动器。可以很方便的同时与多个种工业设备连接通讯。STM32处理器的CAN总线有多种工作模式,本次测试的是正常模式。要在正常模式下使用首先需要初始化寄存器和使能相关的功能部件。第一步是初始化GPIO和时钟,STM32F103C的CAN总线GPIO是GPIOA_PIN_11和GPIOA_PIN_12。RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PORTA时钟                
发表于 2019-04-12

使用STM32F1xx_HAL库实现CAN通信的问题

硬件平台:处理器为STM32F103R8,板子为自设计电路板,数码管显示+CAN通信。软件开发平台:Keil V5操作系统:FreeRTOS问题描述:使用HAL硬件库实现CAN通信时,CAN中断无法进入,不能够使用中断方式进行数据的接收。CAN的发送是没有问题,寄存器也接收到了响应的数据,就是中断没有被触发。研究了一天没有搞定,现把问题放下,先改用轮训读取的方式实现。主要的代码如下:1、接收中断/*** @brief  This function handles CAN1 RX0 interrupt request.* @param  None* @retval None*/void
发表于 2019-04-12

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved