![[AutoSar]BSW_Com017 COM模块介绍(一)](http://pic.xiahunao.cn/yaotu/[AutoSar]BSW_Com017 COM模块介绍(一))
目录关键词平台说明一、COM 所处架构位置二、COM 的功能概述三、Functional Specification3.1 AUTOSAR COM basis function3.2 Signal Gateway3.2.1 Signal routing requirements3.2.2 Routing of signal groups3.2.3 Routing latency for normal Signal Gateway3.2.4 Gateway routing timeout3.3 Signal Processing3.4 Transmission of a Signal3.5 Transmission of a Signal Group3.6 Transmission Mode Selector3.7 Explicit Transmission Mode State Switch3.8 Transmit Signal Filters3.9 Minimum Send Distance of an I-PDU3.9.1 Minimum Send Distance only for Direct Send Triggers3.10 Transmission Deadline Monitoring3.11 Replication of Signal Transmission Requests3.12 Reception of a Signal3.13 Reception of a Signal Group3.14 Array-based access of SignalGroups3.15 Dynamic DLC3.16 Reception Deadline Monitoring3.17 Invalidation Mechanism3.18 Signal Reception Filtering3.19 Signal Status Information update-bit3.20 Gateway Description Routing3.21 Large I-PDUs3.22 Dynamic length signals关键词嵌入式、C语言、autosar、OS、BSW平台说明项目ValueOSautosar OSautosar厂商vector EB芯片厂商TI 英飞凌编程语言CC编译器HighTec (GCC)autosar版本4.3.1回到总目录缩写描述MDTMinimum Delay TimerTMSTransmission Mode Selector一、COM 所处架构位置位于服务层。二、COM 的功能概述AUtosar COM 是基于ISO 17356-4:2005 OSEK/VDX Communication (COM)而来。主要用于上层SWC,RTE与下层PDUR的信号mapping、signal组合、滤波对NM通知等。三、Functional Specification3.1 AUTOSAR COM basis functionCOM模块需要可实现以下功能以下功能可根据需求配置如果在其他特定模块中已经实现可通过配置disable该功能1.将接收到的网络消息(在一个I-PDU内)映射到多个消息数据对象(1:n分割机制)。2.内部消息到多个消息数据对象的映射(1:n拆分机制)。3.将仅本地发送的消息映射到外部发送消息对象和内部接收消息对象(1:n分割机制)4.M: 1发送;将来自多个发送者的消息映射到一个相同的消息对象。5.通知机制TASK, FLAG和EVENT。6.启动和停止周期性消息。7.NM接口。8.发送端滤波。9.Network-order message回调。10.值符号的转换。11.最小传输时间间隔。12.拆包和组包信号和信号组。13.字节顺序转换。14.信号失效机制。15.更新位信号状态信息16.动态长度信号。17.信号传输请求的复制。18.接收和传输截止时间的监控。19.I-PDU的处理。3.2 Signal GatewayAUTOSAR COM模块提供一个集成的信号网关以1:n的方式转发信号和信号组。信号网关允许信号和信号组从一个Rx I-PDU路由到一个或多个Tx I-PDU。为了减少中断运行时间信号路由在Com_MainFunctionRouteSignals()中在任务级别执行。由于信号可以通过COM单独访问因此可以在路由时改变i - pdu的信号布局。此外还可以改变路由信号的字节对齐方式并为Tx信号和I-PDU指定任何可用的传输属性。3.2.1 Signal routing requirements为了允许在两个信号之间进行路由必须满足关于Rx和Tx信号兼容性的几个要求:应用程序数据类型必须相等.Rx信号的比特数不能大于Tx信号的比特数.当路由字节数组(应用程序数据类型为uint[8])时字节数必须相等.如果一个Tx信号在多个路由关系中使用(n(Rx):1(Tx)路由)运行时路由关系必须是互斥的以保证数据的一致性。3.2.2 Routing of signal groups信号组从Rx I-PDU到Tx I-PDU路由一致。为了保证信号的数据一致性要求Tx信号组的所有信号都用一个Rx信号组的信号填充。如果没有给出信号组路由是不可能的。不要求Rx信号组的所有信号都路由到Tx信号组。这允许将Rx信号组路由到具有较少组信号的Tx信号组.3.2.3 Routing latency for normal Signal Gateway最大路由延迟受多种因素的影响COM无法保证延迟。在估计路由延迟时必须考虑以下因素:COM(主)函数的循环次数Tx I-PDU的最小延迟时间Tx I-PDU的传输方式和周期时间Tx信号传输方式和滤波器设置由底层引起的延迟(如总线访问延迟时间)其他因素如中断事件可能延迟路由执行3.2.4 Gateway routing timeout基本Tx-I-PDU的网关路由超时描述了两个路由事件引用同一个Tx-I-PDU之间在超时之前的最大时间间隔。如果路由超时则停止Tx-I-PDU的循环传输。如果该Tx-I-PDU发生网关映射事件则重新启动PDU的循环传输。3.3 Signal Processing每个Pdu都有ComIPduSignalProcessing参数该参数可以有值IMMEDIATE or DEFERRED.IMMEDIATE :1.通知函数 在Com_TxConfirmation()或Com_RxIndication()函数中被调用。2.带有IMMEDIATE信号处理的被触发信号的传输将在各自的Com_MainFunctionTx()的下一次调用中被触发。DEFERRED:1.通知函数在Com_MainFunctionRx()或Com_MainFunctionRx()的下一个调用周期中被调用。2.信号处理DEFERRED的I-PDU中包含的信号值将在各自的Com_MainFunctionRx()中在任务级别上更新。3.4 Transmission of a Signal为了请求信号的传输上层使用API Com_SendSignal。在执行可选参数检查后COM用新的信号值更新I-PDU并检查信号的传输属性是否需要直接传输。如果是则设置一个标志稍后在COM层的发送部分的循环主函数中计算该标志。Tx I-PDU必须分配给Com_MainFunctionTx直接传输和周期传输的i - pdu的传输过程如下图所示。周期传输会在下个Com_mainfunctionTX 的时候发送更新的数据5直接传输在同一个周期更新的值B会被A覆盖。所以如果上层更新信号过快会被覆盖掉。MIXED 混合传输结合了上述两种类型。3.5 Transmission of a Signal GroupAUTOSAR COM提供信号组以一次性地发送多个信号。映射到一个信号组的信号称为group signals它们之间应该是有联系的。为了保证group signals的一致性每个信号组都有一个阴影缓冲区。要请求传输具有多个组信号的group signals必须遵循以下API调用顺序/* Update the group signal values in the shadow buffer */Com_SendSignal(GroupSignal1,SigBuffer1);Com_SendSignal(GroupSignal2,SigBuffer2);/* Copy the shadow buffer to the Tx buffer */Com_SendSignalGroup(SignalGroupA);注意事项为了保证整个信号组的数据一致性一个信号组的完整传输(连续调用’Com_SendSignal’和’Com_SendSignalGroup’)不能被同一信号组的另一个传输请求或’Com_InvalidateSignalGroup’的调用中断。3.6 Transmission Mode SelectorAUTOSAR COM允许为每个I-PDU配置两种不同的传输模式(ComTxModeTrue和ComTxModeFalse)。仅根据映射到该I-PDU上的信号的滤波状态来选择在特定时间点有效的I-PDU的传输模式。如果映射到特定I-PDU的任何信号的滤波器的计算结果为TRUE则该I-PDU以传输模式TRUE传输。当映射到该I-PDU的所有信号的滤波器的值为FALSE时该IPDU使用传输模式FALSE。如果映射到特定I-PDU的所有信号都没有分配滤波器则传输模式计算为TRUE并且永远不会改变。3.7 Explicit Transmission Mode State Switch通过调用Com_SwitchIpduTxMode API可以显式地切换每个Tx I-PDU的配置传输模式(TRUE/FALSE)。如果请求的传输模式与当前激活的传输模式不同则立即激活新的传输模式。3.8 Transmit Signal Filters可以选择性地为每个发射信号分配一个信号滤波器。发射信号的滤波器只用于传输模式的选择但发射信号的值永远不会被过滤掉。支持以下过滤器:mask, x, min和max的值可以为每个过滤器配置. F_Always (TRUE) F_Never (FALSE) F_MaskedNewDiffersMaskedOld ((new_valuemask) ! (old_valuemask)) F_MaskedNewEqualsX ((new_valuemask) x) F_MaskedNewDiffersX ((new_valuemask) ! x) F_MaskedNewIsOutside ((new_valuemin) || (maxnew_value)) F_MaskedNewIsWithin ((minnew_value) (new_valuemax))3.9 Minimum Send Distance of an I-PDU在COM规范中定义了一种可选机制通过为I-PDU引入最小发送距离来实现总线负载的划分。这个概念也在Tx主函数中处理.混合传输方式示例如下图所示。请注意由于最小发送距离循环传输可以延迟但基本周期不修改。直接传输用红色实箭头表示。3.9.1 Minimum Send Distance only for Direct Send Triggers如果ComEnableMDTForCyclicTransmission参数设置为false则只考虑基于事件的传输的最小延迟时间它可以由Com_InvalidateSignal(), Com_InvalidateSignalGroup(),Com_SendSignal(), Com_SendSignalGroup(), Com_SendSignalGroupArray() or Com_TriggerIPDUSend().发起.下图表明循环传输不会结束最小延迟时间。在循环传输之后直接触发基于事件的传输尽管最小延迟还没有过去。紧接着在比较中第二个基于事件的传输请求被配置的最小延迟时间延迟因为第一个基于事件的传输已经重新加载了延迟计数器。3.10 Transmission Deadline Monitoring对于Tx i - pdu提供了截止日期监控机制来检测底层传输机制的故障。支持两种不同的变体:Normal Mode:如果COM触发了I-PDU的发送则观察I-PDU的发送请求到下一个Tx确认(Com_TxConfirmation())之间的时间。例如发送请求由Com_SendSignal()、Com_TriggerIPduSend()或循环触发器给出。None Mode:对于由总线接口调度表(例如LIN调度表)触发的i - pdu观察两个连续Tx确认之间的时间(Com_TxConfirmation())。“None Mode”适用于两种传输模式都配置为None的Tx I-PDU。当I-PDU对应的I-PDU组启动并在传输确认时重新加载时定时器启动。如果这个定时器还没有运行这个时候一个触发事件例如Com_TriggerIPduSend()也将启动定时器。如果设置为Normal Mode在调用Com_SendSignale或者Com_SendSignaleGtoup的时候开始计时器如果在Confirmation前超时则触发notification functions。如下图所示如果设置为None Mod超时计时器由Com_IPduGroupControl()启动收到confirmation 后重置定时器如果两个confirmation 间超时则触发notification functions。3.11 Replication of Signal Transmission RequestsAUTOSAR COM提供了一个可选功能为上层的一个发送请求复制传输请求到下层。下层接收上层的一个发送请求。如果将ComTxModeNumberOfRepetitions属性配置为大于0的值(对于DIRECT或MIXED传输模式)则只要在上层发送请求后调用该I-PDU的“n 1”确认COM就会使用可配置的ComTxModeRepetitionPeriodFactor循环地触发Tx IPDU的传输。如下图所示N 2 重复复制发送了两次3.12 Reception of a Signal为了接收信号上层使用API Com_ReceiveSignal。该业务发送的信号值包含在该信号的最新I-PDU中。由于信号处理上下文依赖于相应Rx IPDU的配置所以直到下一次调用相应的Com_MainfunctionRx时最新的信号值才可用。信号的接收过程通常与I-PDU的接收是异步的。但是可以在接收通知回调中调用Com_ReceiveSignal。调用com_receivessignal总是返回最后接收到的信号值如果超时发生并且Rx数据超时动作被设置为REPLACE则返回初始值即使相应的I-PDU组停止。3.13 Reception of a Signal GroupAUTOSAR COM提供signal groups 用于一次性接收多个signals。signals映射到一个signal groupssignal之间通常是由联系的说人话就是同一类signal放在一个signal group。为了确保组信号值的一致性为每个信号组提供阴影缓冲区。由于信号处理上下文依赖于相应Rx IPDU的配置所以直到下一次调用相应的Com_MainfunctionRx时最新的信号组值才可用。注意为了保证整个信号组的数据一致性一个信号组的完整接收(Com_ReceiveSignalGroup和Com_ReceiveSignal的连续调用)不能被同一信号组的另一个接收请求中断。/* Copy the Rx buffer to the shadow buffer */Com_ReceiveSignalGroup(SignalGroupA);/* Get the group signal values from the shadow buffer */Com_ReceiveSignal(GroupSignal1,SigBuffer1);Com_ReceiveSignal(GroupSignal2,SigBuffer2);3.14 Array-based access of SignalGroupsArray-based access of SignalGroups 作为 替换Transmission of a Signal Group 和Reception of a Signal Group的方式可以不用对Group中的Signals单独处理。调用Com_ReceiveSignalGroupArray和Com_SendSignalGroupArray API用于发送和接收基于uint8数组的SignalGroup。使用Array-based 后 group 打包和拆包的资源消耗就没了SignalGroup的进一步处理留给API的调用者。但是为了允许快速处理必须满足以下先决条件:1.只支持固定大小的数据类型。2.SignalGroup必须在包含的I-PDU中按字节对齐。3.SignalGroup不能被其他信号打断。4.Transmission Mode Selector只能选择ALWAYS, NEVER, MASKED_NEW_EQUALS_X和MASKED_NEW_DIFFERS_X。要激活此功能请打开全局COM配置开关ComEnableSignalGroupArrayApi必须启用。此外只有SignalGroups ComSignalGroupArrayAccess被active才允许array-based access。注意如果Array-based access of SignalGroups 经过了signal gateway由于signal gateway需要解包分组信号上述基于阵列表示的优点将消失。3.15 Dynamic DLCCOM会评估从底层接口给出的SDU的DLC的实际长度以支持接收具有可变长度的Rx i - pdu。分为两种情况:1.实际收到的DLC大于等于静态配置的PDU长度仅处理与静态配置的PDU长度相同的SDU负载数据。信号的内容可以被正常处理。2.实际收到的DLC小于静态配置的PDU长度仅处理实际收到的DLC长度的PDU数据。信号的内容可以被正常处理。会导致信号异常。如果配置的更新位不包含在实际接收到的有效载荷中则信号被处理就像设置了更新位一样。3.16 Reception Deadline Monitoring对于Rx信号和信号组提供截止时间监控机制检测其他ecu的故障。可以为每个信号和信号组配置超时时间但是只能单独监视具有配置的更新位的信号和信号组。对于没有配置更新位的信号和信号组应用基于I-PDU的超时。如果发生超时COM是否调用超时通知并将信号值替换为配置的初始值是可配置的。如果Rx超时值与初始值不同可以使用“Rx Data Timeout Substitution Value”参数配置Rx超时值。3.17 Invalidation Mechanism在发送端可以为每个信号和组信号配置一个无效值该值由COM无效api设置以表明应用程序不能提供任何有效的信号值。对于信号组所有的组信号应立即失效因为组信号以一致的方式相关。因此如果一组信号无效则整个信号组无效。在接收端COM根据配置的无效值检查接收到的信号和组信号的值。如果检测到无效值COM提供以下操作:1.无效的值被信号的初始值所替换然后进行正常的信号处理2.调用配置的无效通知并且无效值不存储在内部COM缓冲区中3.对于信号组将检查所有组信号的无效值。如果至少有一个组信号无效则对该信号组的所有组信号执行无效操作。3.18 Signal Reception Filtering可以对Rx信号和组信号配置滤波算法过滤掉特定的信号值。如果滤波器算法被评估为FALSE则整个信号处理被抑制。因此信号数据不存储在内部COM缓冲区中并且不调用已配置的通知函数。对于信号组如果所包含的任何组信号的至少一个已配置的滤波算法被求值为TRUE则执行信号处理。只有当所有滤波算法的值都为FALSE时信号组才会被过滤掉。3.19 Signal Status Information update-bit对于信号和信号组可以配置更新位来指示自信号在总线上的最后一次传输以来信号值是否已被应用程序更新。在发送端更新位在Com_SendSignal或Com_SendSignalGroup的上下文中设置。由于更新位在值更新后只能在总线上出现一次因此更新位必须根据下层的发送行为清除。每个Tx I-PDU可配置 update-bit。如果下层在发送上下文中复制了I-PDU负载则在COM触发I-PDU的发送后更新位将被直接清除。如果下层请求通过调用Com_TriggerTransmit解耦的I-PDU负载则更新位将在此上下文中被清除。接收ECU检查与信号或信号组相关的更新位的状态如果没有设置更新位则禁止完整的信号处理。在功能良好的网络中如果信号值发生了变化则应该始终设置更新位。3.20 Gateway Description Routing描述路由是一种基本的路由模式在这种模式下一个传入的Rx- I-PDU的一部分被复制到1…n个目的tx -I-PDU中而不需要对其内容进行进一步的解释和处理。在这种模式下可以绕过正常的信号处理路径从而减少路由事件延迟。3.21 Large I-PDUs大的I-PDU是指大到无法装入底层通信协议的单个L-PDU的PDU。一个大的I-PDU必须将ComIPduType配置为TP并且将通过传输协议发送/接收。在接收端COM总是保存一个大I-PDU中包含的信号的有效值。在传输端当一个大的I-PDU传输正在进行时COM将通过调用api: Com_SendSignal, Com_SendSignalGroup和Com_SendDynSignal返回COM_BUSY。注意对于较大的i - pdu, ComTxIPduClearUpdateBit上下文只能配置为confirm。3.22 Dynamic length signals动态长度信号是ComSignals或ComGroupSignals, ComSignalType配置为UINT8_DYN。动态长度信号的取值范围为0 ~配置的ComSignalLength。动态长度信号必须包含在ComIPduType配置为TP的I-PDU中动态长度信号必须放置在I-PDU的末尾。允许为动态长度信号配置更新位。在这种情况下更新位必须位于动态长度信号的前面。使用API Com_ReceiveDynSignal接收动态长度信号使用API Com_SendDynSignal发送动态长度信号。动态长度信号必须放置到字节边界并且必须具有信号的端序OPAQUE。在接收端唯一支持的ComFilterAlgorithm是ALWAYS而在发送端动态长度信号和组信号支持ComFilterAlgorithms ALWAYS和NEVER。此外ComTransferProperties TRIGGERED_ON_CHANGE和TRIGGERED_ON_CHANGE_WITHOUT_REPETITION不支持动态长度信号和组信号。Com Optimizations 和状态机等后面续上。。。。[AutoSar]BSW_Com018 COM模块介绍二回到总目录