关于AUTOSAR的底层驱动、平台OS、平台应用、RTE、应用软件这些和VxWorks653很相似,就不多赘述了。
此处说一下AUTOSAR独有的网络通讯规范和网络管理模块NM
一、AUTOSAR COM
AUTOSAR COM是AUTOSAR标准的一部分,它是从OSEK COM标准的基础上发展而来的。AUTOSAR COM提供了一种标准化的访问汽车通讯系统和ECU(Electronic Control Unit)通讯的方式,提出了一个在不同速率的总线网络之间进行数据交换的方法。它为汽车控制单元应用软件提供了一个统一的通信环境,为内部和外部通信定义了公共的软件通信接口和行为,增强了应用软件模块的可移植性。
依据AUTOSAR的描述,这个跟IMA的RDIU很类似。实现不同数据协议和速率的数据的相互装换,然后发向目的ECU。
AUTOSAR COM提供了基本的通信服务,它有明确的上层模块RTE(Runtime Environment)和下层模块PDU Router。
在发送过程中,应用层调用COM层提供的信号或信号组发送函数,根据配置,信号或信号组的数据经过字节顺序转换后被更新到I-PDU(Interaction Layer Protocol Data Unit)中相应的位置中。AUTOSAR COM规范中同一I-PDU可以设置两种发送模式,对其中各信号的传输模式条件进行计算,I-PDU选择其中一种发送模式进行发送。然后启动发送死限监控,调用PduR_ComTransmit()函数将I-PDU发送到底层。
在接收过程中,当底层接收到I-PDU时,底层将调用COM层提供的指示函数Com_RxIndication(),取消并重启接收死限监控,将I-PDU的数据从底层拷贝到COM中。调用信号或信号组的接收函数后,该I-PDU中的信号或信号组将经过字节顺序转换、符号扩展和接收过滤后,数据被拷贝到应用层。
通信系统核心模块的实现
通信系统主要实现信号或信号组的收发功能,以下主要介绍信号发送的实现。首先简要介绍一下AUTOSAR COM中特有的传输模式切换。
传输模式切换
AUTOSAR COM规范定义了4种信号传输模式:
直接/N次传输模式
周期传输模式
混合传输模式
None传输模式。
在AUTOSAR COM规范中允许为每个I-PDU静态配置两种不同的传输模式。
在AUTOSAR COM规范中通过传输模式切换,来选择I-PDU中的其中一种传输模式进行传输。
首先使用过滤机制判断I-PDU中各信号的发送模式条件,同时更新I-PDU中的信号;
再通过各信号的判断结果来计算该I-PDU的TMS(transmission mode selector)。若至少有一个C( Si,IPDUk)为True,则TMS为True;若所有C(Si,IPDUk)都为False,则TMS为False。其中C(Si,IPDUk)为传输模式条件该条件与IPDUk中的信号Si相关。
下面通过一个用例简要说明传输模式的切换。
用例中进行周期传输和直接/N次传输之间的切换(N=3)。
根据I-PDU的传输配置,当TMS(transmission mode selector)判断为真时,设置传输模式为周期传输,反之为直接/N次传输。上层给定值V=a(此时TMS判断为真),进行周期传输;当值V更新为b时(此时TMS判断为假),进行直接/N次传输模式,传输三次。由图3可知,随着V值的更新该I-PDU的传输模式在这两种传输模式之间切换。
信号发送的实现
首先根据该信号的相关配置,判定其是内部消息还是外部消息。
对于内部发送,直接将信号数据复制到接收信号数据区,并执行通知操作;
对于外部发送,若该信号发送属性为触发,则该信号所属的I-PDU将立即发送(除非该I-PDU发送模式为周期传输模式),若该信号发送属性为延迟,则不进行传输,发送时,信号经过字节顺序转换后数据被复制到I-PDU中,同时设置相关更新位信息,然后根据该I-PDU的TMS切换传输模式,进行传输并设置启动相关定时器。各传输模式的传输过程与OSEK COM中大致相同。
信号接收的实现
首先判定是内部信号还是外部信号。
对于内部接收,直接将信号数据复制到接收信号数据区;
对于外部接收,首先判断对于的I-PDU组是否启动,若启动,返回E_OK,否则返回COM_STOP,取消并重启该I-PDU的相关死限监控定时器,将数据复制到I-PDU数据区,I-PDU中的信号经过字节书序转换、符号扩展和过滤机制后,复制到接收信号数据区,再执行通知操作,通知上层软件调用相关API函数接收信号。
二. 网络管理NM
这里的NM主要是针对Can协议的网路管理。
AUTOSAR CanNM的核心思想主要归纳为以下两条:
1. 如果节点需要保持通信,则节点需要周期的发送NMPDUs,否则停止发送NMPDUs
2. 如果总线上的所有节点不需要使用总线,那么总线上过了一段时间没有NMPDUs时,则会进入Bus-Sleep Mode。
工作模式和状态
CanNm一共有三个工作模式
1. Network Mode
2. PrepareBus-Sleep Mode
3. Bus-Sleep Mode
模式的改变应该通过回调函数通知上层。
下面单独说每种模式
(1)Network Mode
Network Mode又包括三个内部状态
1. Repeat Message State
2. Normal Operation State
3. Ready Sleep State
①Repeat Message State
这个模式被用来确保从Bus-Sleep or Prepare Bus-Sleep到Network Mode的节点被总线上面其他节点发现。这个状态可以用来检测总线上的节点。
当进入Repeat Message State时,节点应该开始传送NMPDUs。
在Repeat Message State时,当NM-Timeout Timer溢出,CanNm模块应该重载Timer。
CanNm模块应该在Repeat Message State 下保持一段时间,这段时间可以通过CANNM_REPEAT_MESSAGE_TIME来进行配置。
当离开Repeat Message State的时候,如果节点需要通信,则进入Normal Operation State;如果节点不需要通信,则进入Ready Sleep State。并且清空Repeat Message Bit。
②Normal Operation State
这个状态可以保持总线处于唤醒状态。从Ready sleep state进入这个状态的时候应该发送NMPDUs。
在Normal Operation State当NM-Timeout Timer溢出,CanNm模块应该重载Timer。
如果节点不需要使用通信,则网络应该被释放,节点应该进入Ready Sleep State。
如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。
③ReadySleep State
这个状态是为了如果本节点已经准备释放总线,而其他节点还需要使用总线的时候,在这个状态下等待其他总线上的节点进入Perpere Bus-Sleep Mode。进入这个状态之后,CanNm模块应该停止NMPDUs的传送。
如果NM-Timeout Timer溢出,节点将会进入Prepare Bus-Sleep Mode。
如果该节点需要使用总线,则节点进入Nomal Operation State。
如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。
(2)PrepareBus-Sleep Mode
这个状态是为了等待总线上的所有节点能够在进入Bus-Sleep Mode之前,有时间停止节点的active状态如清空队列中为发送的报文。在Prepare Bus –Sleep Mode下,所有节点都静默下来。
当节点进入PrepareBus Mode时,应该通知上层应用。通过配置CANNM_WAIT_BUS_SLEEP_TIME参数,可以改变节点在PrepareBus-Sleep Mode停留的时间,在这段时间之后节点将会进入其他状态。
在Prepare Bus-Sleep Mode下面接收到NMPDU或者被上层应用请求通信时,节点将进入Network Mode中的Normal operation State。
(3)Bus-SleepMode
Bus-Sleep Mode的目的是当没有消息被传送的时候可以减少能量的消耗。在Bus-Sleep Mode下面,节点可以被唤醒(如本地唤醒源和CAN线唤醒源)。CANNM_TIMEOUT_TIME+CANNM_WAIT_BUS_SLEEP_TIME两个参数在整个总线上面的节点都应该时一样的配置,保证了总线上的节点能够统一的进行休眠。
当进入Bus-Sleep Mode时候,应该通知上层应用。
在Bus-Sleep Mode下,如果成功接收到NMPDU,CAN NM模块应该调用Nm_NetworkStartIndication。
如果CanNm_PassiveStartUp被调用,则CAN NM模块进入Network Mode 中的Repeat Message State。
---------------------
作者:cococenstar
来源:CSDN
原文:https://blog.csdn.net/cococenstar/article/details/84096689
版权声明:本文为博主原创文章,转载请附上博文链接!