发表于:2008-12-08 13:05:16
楼主
CAN通信设计的方法主要有两种:一种是依靠工程经验的投票法或试错法,一种是基于系统工程技术的设计方法。试错法是通过将零部件供应商在不同项目积累的经验集成到一起的方法设计CAN通信协议。系统工程法是基于一定的理论思路,考虑通信的系统级需求对通信协议进行设计。
在试错法中,由于各个零部件供应商都是基于自己的零件的需求出发考虑对协议的需要,无法从整个系统的角度考虑零部件之间的相互影响和作用。所以将不同需求集成的结果存在潜在设计错误,而这些错误在仿真过程中难以发现,也无法通过测试的手段解决。
系统工程法则从系统级需求出发,充分考虑零部件之间的相互作用和需求,在系统层面对通信协议进行设计,因此在设计过程中可以对设计结果进行优化,并验证设计结果的正确性。下面的内容就对系统工程设计法进行详细的介绍。
CAN协议设计中的主要内容
CAN协议设计的主要内容是创建消息、分配消息优先级并确定消息的周期。下面对CAN通信的基本原理进行分析,分别说明其重要性。
CAN总线采用多主结构,CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)和按位仲裁机制决策访问总线的节点。CSMA/CA指节点在发送的同时也在监听总线,已避免冲突的发生,按位仲裁则规定了显性信号比隐性信号优先,显性信号和隐性信号同时往总线上发送时,总线上是显性信号。在本文以显性信号用“0”表示,隐性信号用“1”表示。在下面的例子,我们也用低电平表示显性信号,高电平表示隐性信号。
为了说明设计中的主要问题,下面以有3个节点的总线通信为例。如图1所示有3个节点通过CAN总线相互连接。
每个节点的内部程序决定了何时需要通过总线发送数据,消息有固定的格式。如图2所示,CAN消息由起始位SOF、ID域、control域等字段组成。其中的ID域代表了消息的优先级,在有总线竞争的时候,根据按位仲裁原理,ID小的优先级高,消息被优先发送。图3是仲裁的一个例子,假设在某一时刻,三个节点同时往外发消息,每个节点发送的消息ID(二进制格式)分别为:ID1=11001101010,ID2=11001011011,ID3=11001011001。每个节点都以发送SOF位开始,然后逐位发送ID域。不发送消息的节点,监听到SOF位后自动转为接收节点。发送节点之间的仲裁发生在ID发送的过程,发送过程中发送节点同时在监听总线上的信号,只要发送信号与监听到的信号一致,发送过程将继续,否则停止。如图所示,节点1在第6位上发送的是隐性信号,但是总线上的信号是显性信号。节点1停止发送,转为接收节点。在第10位的时候,节点2发送隐性信号,但是总线是显性信号,所以节点2又停止发送,转为接收节点。至此仲裁结束,节点3仲裁胜利,继续发送消息余下的数据位。
从这个过程可以看出,由于消息ID3优先级高,所以优先发送。ID1和ID2均需要等待下次仲裁决定是否发送。也就是说每次仲裁的结果是有的消息的发送要被延迟。
另外,CAN协议规定,消息没有发送完毕不会释放总线。因此有低优先级的消息在发送的时候,高优先级的消息也会被延迟。
延迟也是影响CAN通信性能的主要问题,如果消息延迟时间过长,将影响接收节点的功能,严重的还可能造成事故。因此CAN协议设计的重要内容之一是控制消息的延迟时间在合理水平。
而消息优先级和周期是设计中影响延迟的主要因素,合理分配ID和确定消息的周期可以对延迟进行有效控制,因此CAN协议设计的一个主要内容就是如何合理分配消息ID和确定消息的周期。创建消息也是重要的内容之一,但是对延迟的影响相对较小。
CAN协议的系统工程设计方法通过对通信中的时间进行量化,依据量化结果分析功能之间的交互关系,从而进一步创建消息、分配消息ID和确定其周期。
CAN协议系统工程设计方法
系统工程设计方法与试错法的本质区别是采用了量化的体系获取通信过程中的时间要求。图4显示的是通信的时间要求。TP是事件发生到数据准备好发送给驱动程序之间的时间间隔,TB是数据被组建成消息并准备发送到总线上之间的时间间隔,TT是实际的传输时间,TA是消息接收完毕到数据能被应用程序使用之间的时间间隔,TS是数据可以使用到实际使用之间的时间间隔。整个通信过程必须要在规定时间内完成,而这个时间就是maximum age.这个时间标志了数据发送的实时性,只要数据在这个时间范围内送到接收节点,接收节点的功能将得到实时的执行。
除了这些参数以外,完整的系统设计还需要以下信息:
●信号定义:类型、大小等;
●发送节点数据定义:收发的信号、TP和TS的定义;
●接收节点数据定义:收发的信号、TP、TS和maximum age的定义;
●拓扑结构的定义:节点之间的互联关系。
以以上数据为基础,对通信过程的实时性进行分析,计算通信中的延迟。然后根据单调速率分析法(deadline monotonic analysis),分配消息ID并设置周期。
根据系统获取的时间要求,系统计算消息的延迟并验证设计的协议是否满足这些时间要求。如果不满足时间要求,系统将自动调整消息ID和周期,直到满足所有的时间要求。
本文用Mentor Graphics公司Volcano产品线的设计工具VNA进行了实验。VNA是CAN/LIN协议的自动化设计工具,其核心思想就是采用了本文介绍的系统工程设计方法。其使用方法可以如图5所示,用户提供信号及节点定义、本文介绍的时间参数定义及项目管理定义,VNA将自动对CAN通信协议进行设计,输出通信协议规范。
其中图6是本次实验的通信系统拓扑结构,系统由三条CAN总线和两条LIN总线组成,CAN协议采用的是29位。
输入参数后,VNA自动生成通信协议,结果如图7所示。消息EMSHSC_FrP00的ID为0x04c000d,周期为10ms,计算出的延迟时间为1.734ms。
结论
系统工程设计法,采用一套量化体系描述数据收发的完整过程。明确定义这些指标,并清晰描述了系统功能的时间性要求。正因为这样,使得自动化设计协议成为可能。
根据这些量化指标,系统将自动计算消息的延迟时间,并自动调节消息的优先级和周期,以控制消息的延迟时间,保证用户提出的时间要求全部得到满足,从而实现从设计角度控制消息延迟的目的。
自动化设计协议降低了协议设计的技术门槛,特别是对于中国的整车厂,没有经验积累,这样的工具必将助力国内自主产品在总线上的研发。