目录
- AUTOSAR中CAN总线数据通过COM模块收发流程
- 1、AUTOSAR中 CAN总线数据通过COM模块发送流程
- 2、AUTOSAR中 CAN总线数据通过COM模块接收流程
AUTOSAR中CAN总线数据通过COM模块收发流程
printf("欢迎关注公众号:车载嵌入式探索者,博主建立了一个车规级开发交流群,
感兴趣的朋友可以关注公众号,加个人WX:_kevin0123456789,备注:车载。")
1、AUTOSAR中 CAN总线数据通过COM模块发送流程
①、SWC
会将数据发送给RTE
层;
②、RTE
层调用COM
模块的Com_SendSignal()
函数将数据发送至COM
模块;
③、BSW
任务调度器EcuM
周期性的调用Com_MainFunctionTx()
函数,Com
模块将从其缓存器中读取需发送的数据打包成PDU格式;
④、Com
模块的Com_MainFunctionTx()
函数将调用PduR
模块的PduR_ComTransmit()
函数,将数据传给PduR
模块;
⑤、PduR
模块将不会对数据做任何处理,直接进行路由;PduR
模块路由到CAN Interface
模块,调用CanIf_Transmit()
函数,这样数据从PduR
模块传给了下层的CAN Interface
模块;
⑥、CAN Interface
模块再调用Can Driver
模块的Can_Write()
函数,将数据写入相应的寄存器;
⑦、与CAN
接收功能一样,Can_Write()
函数将访问仲裁,数据长度和数据寄存器,将数据写入。
2、AUTOSAR中 CAN总线数据通过COM模块接收流程
①、BSW
任务调度器EcuM
周期性的调用Can
模块的接收函数Can_MainFunction_Read()
函数;
②、在Can
模块Can_MainFunction_Read()
函数中检查所有潜在的新接收数据的Can
控制器;将访问CanController
(硬件)的寄存器—仲裁寄存器,数据寄存器和数据长度寄存器(保证读取数据的有效性),并读取这些寄存器的数据;即包括ID、 DLC、 SDU
;
③、数据读取结束后,这时继续调用CAN Interface
模块的CanIf_RxIndication()
函数,这样数据从CAN Driver
模块传给了上一层的CAN Interface
模块;
④、CAN Interface
模块再调用PduR模块的PduR_RxIndication()
函数,将数据传到PduR
模块;
⑤、PduR
模块路由到Com
模块,调用Com_RxIndication()
函数,将数据传到Com
模块,Com
模块将会把数据存入其缓存,供应用层软件读取使用。
printf("欢迎关注公众号:车载嵌入式探索者,博主建立了一个车规级开发交流群,
感兴趣的朋友可以关注公众号,加个人WX:_kevin0123456789,备注:车载。")