- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AUTOSAR架构的CANInterface
CAN interface
CAN Interface,顾名思义,CAN接口模块,位于下层的CAN设备驱动(CAN Driver,CAN收发器驱动)和上层的通讯服务层(CAN传输协议层,Pdu Router等)之间,如下图1所示。
图1 AUTOSAR CAN Layer Model,引自[1]
引自[1]:CAN接口模块由所有与CAN硬件无关的任务组成,这些任务属于相应ECU的CAN通讯设备驱动程序。这些功能在CAN接口模块中执行一次,以便底层CAN设备驱动程序只专注于访问和控制相应的特定CAN硬件设备。CAN接口模块满足PDU路由器和上层通信Com模块的主控制流和数据流要求:发送请求处理、发送确认/接收指示等。它的数据处理和通知API是基于CAN L-SDU,而用于控制和模式处理的API提供了一个与CAN控制器相关视角。
对于CAN Driver来说,与上层模块通讯的唯一接口就是CAN接口模块,通过这个模块可实现我们熟知的3个ECU通讯功能:
CAN通讯,通过接口层到PDU Router模块;(路径:CanDrv--CanIf--PduR--Com)
UDS服务,通过接口层到CANTp模块;(路径:CanDrv--CanIf--CanTp--PduR--Dcm)
XCP服务,通过接口层到XCP模块。(路径:CanDrv--CanIf--XCP)
图2 通讯功能相关模块
本文关注的是CAN通讯功能,继续采用上篇文章menghuyouyou:CAN通讯系列--AUTOSAR架构的CAN Driver6 的思路来介绍CAN接口模块。
考虑到本文主要基于参考[1]而来,不打算对某些细节展开说明,将主要介绍CAN发送和接收相关的函数。若真有需要研究CAN通讯在CAN接口模块的具体实现,则肯定需要对实现细节一一研究,比如上篇文章提到的CAN接收和发送的前提条件有哪些,是什么。接下来我们来CAN接口模块的发送和接收操作:
1
?发送操作
由前面内容可知,发送时,PduR模块调用CanIf_Transmit函数,然后CanIf_Transmit函数再去调用Can模块的Can_Write函数。
图3 经Can Interface的发送过程
文档对CanIf_Transmit函数的定义和描述如下:
图4 CanIf_Transmit函数的定义,引自[1]
这个函数两个输入参数,由TxPduId可解析出相应的CAN控制器和Hth,具体如何实现解析的,后文会解释;PduInfoPtr包含数据的长度和内容两个信息,即要发送的数据。关于这个函数大致的动作描述如下:
图5 CanIf_Transmit的动作说明,引自[1]
注意:如果Can_Write函数返回CAN_BUSY,即发送拒绝,CanIf可以什么都不做,也可以尝试存储一条新的PDU或发送请求到发送缓存器中;如果发送成功,Can模块将通过调用CanIf_TxConfirmation通知Can接口模块,有两种调用方式:一种是采用轮询模式,如下图6,另一种则是采用中断模式,如下图7。
图6 经Can Interface的轮询模式发送确认
图7 经Can Interface的中断模式发送确认,引自[1]
文档对CanIf_TxConfirmation函数的定义如下,使用Id形式与上层确认发送成功。
图8 CanIf模块的确认函数定义,引自[1]
这个函数将根据输入的CanTxPduId进行处理:首先确认功能(CAN通讯?UDS服务?XCP服务);然后根据输入的CanTxPduId查询获得已映射的TxPduId,最后再调用上层模块的User_TxConfirmation函数,如图9所示。
图9 PduR模块的确认函数定义,引自[1]
这里不确定具体哪个模块,而使用User,这样就使得软件通用性好。从上可知:CAN通讯,User选择为PduR模块; UDS服务,User选择为CanTp模块; XCP服务,User选择为XCP模块。
以上就是发送操作的大致过程,更多具体细节详见[1]。
2?
接收操作
由前面内容可知,接收时,Can模块将调用Can接口模块的CanIf_RxIndication函数,然后再调用PduR_RxIndication函数,如下图10所示。
图10 经Can Interface的的接收通知,引自[1]
文档对CanIf_RxIndication函数的定义如下:
图11 CanIf模块的通知函数定义,引自[1]
这个函数参数有Mailbox和PduInfoPtr,这两者包含Hrh, CanId, DLC和data这些信息。概括地讲,该函数包含的动作有:
当CanIf_RxIndication函数执行完上述动作后,将调用User_RxI
您可能关注的文档
最近下载
- 《泌尿系统感染》课件.pptx VIP
- 部编人教版六年级上册《道德与法治》知识点考点归纳总结.pdf VIP
- 实习经历对学生专业技能发展的助推力教学研究课题报告.docx
- 【新教材】2025-2026学年湘美版(2024)美术二年级上册全册教案(教学设计).pdf
- 在线网课知道知慧《战舰与海战》单元测试答案.pdf VIP
- 二年级语文上册词语表常用字词字帖人教版同步字帖描红拼音组词.pdf VIP
- 现行国标图集04S519隔油池图集.pdf VIP
- 道依茨BF6M2012系列发动机零件图册.pdf VIP
- 电大《行政管理》专科毕业论文.pdf VIP
- 基于深度学习的YOLO目标检测综述.pptx VIP
文档评论(0)