前言
最近在研究autosar通信协议栈的时候发现对ipdu的trigger transmit很是疑惑,产生了以下几个问题:
(1)com模块的ipdu的trigger发送和canif或者can模块的trigger发送一样吗?
(2)怎么通过canif模块发送trigger ipdu?
(3)哪个模块完成can trigger ipdu的判断?
(4)请说明can ipdr的trigger transmit的整个过程?
(5)lin ipud和can ipdu的trigger transmit有何异同?
本文先梳理一遍can、lin报文的发送过程,然后回答这些问题。
autosar 通信服务-com模块概念详解
autosar 通信服务-pdu router
autosar can通信协议栈分析(3)-canif
can通信协议栈分析(1)-can driver
正文
1.can报文ipdu的发送过程
1.1 com模块发送ipdu
在com模块中,周期报文通过com_mainfunctiontx周期调度函数发送,事件触发型报文通过com_triggeripdusend通信服务接口发送。无论是com_mainfunctiontx还是com_triggeripdusend最后都是调用pdur模块的pdur_comtransmit来发送报文,且传入到pdur模块的pduinfo->sdu数据buffer指针不为null。
1.2 pdur模块发送ipdu
强调com模块过来的can ipdu->sdu一定不为null是因为它会影响报文的发送方式(1.3章节详解)。pdur模块对于com模块的can ipdu直接调用canif_transmit发送,canif收到ipdu发送请求后直接调用candriver的接口发送报文,copy data到cancontroller发送。
pdur模块的pdurestpdu配置容器提供了pdurdestpdudatprovision配置参数来配置每一个发送报文是直接发送还是触发式发送。
note: 在etas的集成配置环境isolar中这个参数无论配置成啥都不影响pdur模块的配置代码。个人认为这个pdur模块对于can报文的发送都是直接调用canif_transmit,确实不需要这个参数,所以到底是isolar有问题还是确实这个参数不影响代码的生成还有待研究。
1.3 canif模块发送ipdu
canif模块提供caniftrggertransmitsupport配置参数来配置canif模块是否支持trigger方式发送报文。
canif为每一tx ipdu提供了caniftxpdutriggertransmit的配置参数。如果该报文的上层发送模块是pdur模块且配置了该参数为true,这在pdur模块就是生成pdur_caniftriggertransmit的函数。
1.3.1 direct发送
canif模块的canif_transmit接口函数本身并不会判断传入的ipdu是否是需要trigger发送(仅仅会做一些det的检测),而是直接调用can_write来发送ipdu,由can模块通过传入的ipduinfo->sdu是否为null来确定是direct发送还是trigger发送ipdu。
如果是ipduinfo->sdu不为null,则为direct发送方式,can_write直接完成copy data into controller完成报文的发送。
1.3.2 trigger发送
如果是ipduinfo->sdu为null,则为trigger发送方式,can_write --> canif_triggertransmit --> pdur_caniftriggertransmit --> com_triggertransmit完成ipduinfo->sdu into controller的数据拷贝,也就是所谓的trigger数据发送。
1.4 can模块发送ipdu
can模块提供cantriggertransmitenable配置参数来配置是否使用trigger transmit功能。can模块完成ipdud最终的trigger发送。
2.lin报文ipud的发送过程
2.1 com模块发送ipdu
com模块统一了所有ipud的处理方式,和1.1节完全一样。
2.2 pdur模块发送ipdu
2.2.1 lin偶发帧sporadic frame发送
lin报文的周期发送是通过调度表实现的,而lin调度表存在于linif模块,linif模块在周期调用调度表的时候通过callback的方式实现ipdu的trigger transmit,也就是向上获取到sdu数据,然后调用lin_sendframe发送报文。调度表中的报文都是需要周期发送处理的报文,对于偶发sporadic frame的发送,com --> pdur -->canif_transmit中设置发送flag,实现偶发帧发送。
2.2.2 lin非偶发帧sporadic frame发送
2.3 linif模块发送ipdu
linif模块实现lin调度表中报文的周期发送,且所有报文都是通过调用pdur模块的pdur_triggertransmit的callback函数完成sdu数据的获取。
linif模块的liniftxpdu配置容器中提供了liniftxtriggertransmitul的配置参数,但是这个参数依赖于linifusertxul参数,如果linifusertxul配置为pdur,则liniftxtriggertransmitul参数不管有无配置,则一定为pdur_triggertransmit,也就是pdur模块一定会生成一个pdur_triggertransmit配置callback函数。
2.4 lin模块发送ipdu
lin模块没有trigger transmit的判断,提供lin_sendframe的接口即可。
3.问题回答
问题1:com模块的ipdu的trigger发送和canif或者can模块的trigger发送一样吗?
答:com模块的ipdu的trigger发送和canif或者can模块的trigger发送不一样。
com模块的trigger transmit是某个事件触发是调用com_triggeripdusend发送ipdu,但是无论是com的周期发送com_mainfunctiontx还是com_triggeripdusend发送ipdu,都是调用pdur_comtransmit,而pdur->canif->can对于com来的ipdu都是统一以direct的方式直接copy data到can controller。
canif模块本身不做ipdu是否需要trigger transmit的判断,而是直接将ipudinfoptr传递给can模块,can模块中通过ipduinfoptr->sdu是否为null来绝对是使用direct的方式还是trigger transmit/也就是向上调用callback后set buffer来发送报文。
问题2:怎么通过canif模块发送trigger ipdu?
答:canifuser(可以自定义一个模块,或者是其他模块)在调用canif_transmti发送报文的时候传入的ipduinfoptr->sdu == null同时can模块需要enable trigger transmit就可以实现can ipdu使用canif模块trigger transmit。
问题3:哪个模块完成can trigger ipdu的判断?
答:candriver模块。
问题4:请说明can ipdr的trigger transmit的整个过程?
答:candriver模块通过判断canif模块传入的ipduinfoptr-sdu为null且can模块enbale了trigger transmit后调用canif_triggertransmt -> pdur_triggertransmt -> com_triggertransmt完成copy data into controller的数据拷贝操作,之后通过can发送报文。
问题5:lin ipdu和can ipdu的trigger transmit有何异同?
答:
相同点:ipdu的trigger transmit都是最后调用com_triggertransmit函数实现的。
不同点:lin ipdu如果是非偶发帧(sporadic frame)在通过调度表发送时都是使用trigger transmit分方式发送的且com -> pdur对lin ipdu的发送无影响;而can ipdu的周期发送主要是通过com -> pdur向下传递ipduinfoptr通过direct方式发送的。
小米推出小米人体传感器 2,支持联动智能家电
一加6T出厂就会预装Android P的操作系统
村田推出6轴3D MEMS惯性力传感器
逸飞激光闯关科创板IPO
一看就会的顺序控制指令的应用案例
CAN、LIN报文的发送过程详解
DS1307在太阳能电池控制装置中的应用
光通信技术:光纤通信系统发展编年史
华为Mate30 RS保时捷设计即将发布搭载麒麟990芯片支持两种组网方式
从近1400篇机器学习文章中精选Top10,入选率0.7%!
高分子透气不透水材料可快速平衡密封腔体气压
由太赫兹光波相关新闻谈音圈马达与之关系
台式电脑检修一则
iOS 17正式发布,成史上最小更新
微软Copilot庆周年,欧盟聚力云计算,东芝新电池快马加鞭
如何为系留无人机设计高效的模块化供电网络
长飞光纤光缆股份有限公司选购我司HS-TH-3500炭黑含量测试仪
电容式感测技术在电玩游戏当中是如何应用的
为啥无线显示器不流行
运营商所宣传的4G+和volte有着什么样的联系