目录
1、概述
2、规范时序
2.1、Transmit request (single CAN Driver)
2.2、Transmit request (multiple CAN Drivers)
2.3、Transmit confirmation (interrupt mode)
2.4、Transmit confirmation (polling mode)
2.5、Transmit confirmation (with buffering)
2.6、Transmit Cancelation
2.7、Trigger Transmit Request
2.8、Receive indication (interrupt mode)
2.9、Receive indication (polling mode)
2.10、Read received data
2.11、Start CAN network(非常重要)
2.12、BusOff notification
2.13、BusOff recovery
1、概述
参考规范,少部分自己的总结。时序图怎么去看,请查看文章
UML时序图浅析https://mp.csdn.net/mp_blog/creation/editor/129421206
2、规范时序
2.1、Transmit request (single CAN Driver)
单个驱动的时候注意组合片段alt里面的虚线,当busy的时候,需要把L-PDU存放在transmit buffer里面。
2.2、Transmit request (multiple CAN Drivers)
多路CAN的时候,不能并行执行,选择CAN A的话就无法选择CAN B,说白了,multiple CAN Drivers就是signal CAN Drivers的集合体。
伪代码如下:
If(can = a)
{
If(hardwareobject = free)
{
Copy L-PDU;
}
else
{
Insert L-PDU in transmit buffer();
}
}
else if(can = b)
{
If(hardwareobject = free)
{
Copy L-PDU;
}
else
{
Insert L-PDU in transmit buffer();
}
}
2.3、Transmit confirmation (interrupt mode)
注意下面一个点就好了
2.4、Transmit confirmation (polling mode)
注意一下图红框里面的函数,POLLING模式发送需要调用此函数,单独的Can_Write()在POLLING模式下不起作用。
2.5、Transmit confirmation (with buffering)
疑问点:这个是针对static can 的吗?
此图参考文档《AUTOSAR_SWS_CANInterface.pdf》 P138
2.6、Transmit Cancelation
这个其实不复杂,就是图画的太复杂,注意里面的组合片段有opt
2.7、Trigger Transmit Request
多调用了接口
CanIf_TriggerTransmit(Std_ReturnType,PduIdType, PduInfoType*)
2.8、Receive indication (interrupt mode)
2.9、Receive indication (polling mode)
2.10、Read received data
读取数据的时候是上层做的操作,注意以下几个函数的操作
2.11、Start CAN network(非常重要)
这个是CAN的启动时序,怎么一步一步的把CAN给开启,
注意函数:
CanIf_ControllerModeIndication(Controller,ControllerMode).
CAN控制器处于STOPPED(停止)模式,CAN控制器转换非常快,因此在转换请求期间调用模式指示。
2.12、BusOff notification
注意事项
重置传输队列以避免在CAN控制器重新启动后传输旧的LPDU。
2.13、BusOff recovery
Busoff的恢复机制,注意以下,必须在Stopped模式下才可以逐步到start,注意一定要复位传输序列,更要复位CAN Controller。