目录
传送门==>《AUTOSAR黑神话之总目录(持续更新)_大表哥汽车人的博客-优快云博客》
LPDU的接收
SWS_Can_00279,LPUD的接收,需要CAN模块调用RX回调函数CanIf_RxIndication,参数MaiBox中应包括:ID,Hoh,抽象的CANIF ControllerId;参数PduInfoPtr应包括:数据长度,LSDU缓冲的指针。
SWS_Can_00423,对于扩展帧,CAN模块应转换ID到标准格式,因为CANIF不知道接收到的CAN报文是标准帧还是扩展帧,接受到的CAN报文ID的MSB需要当作“1”来作为CAN扩展帧的掩码。
SWS_Can_00396,RX中断服务或轮询模式下的Can_MainFunction_Read都应调用CanIf_RxIndication回调函数。
SWS_Can_00060,数据映射到内存:收到的第一个字节为数组的元素0,收到的最后一个字节为元素7或63(CANFD)
如果CAN硬件缓冲内部表达有别于AUTOSAR定义,需要CAN模块提供合适的SDU缓冲给上层模块。
SWS_CAN_00501,CanDrv应标明收到的报文时传统的CAN报文还是CANFD报文,这在Can_IdType中有所描述。
接收数据一致性
为了防止接收报文的丢失,一些控制器通过一组硬件对象组成FIFO,同时其他一些控制器有能力去配置另一个同属性的硬件对象来作为“影子缓冲”,在主硬件对象忙时才介入。
SWS_CAN_00489,CAN驱动应支持控制器FIFO,FIFO的尺寸由“CanHwObjectCount”进行配置。
SWS_CAN_00490,不支持FIFO的控制器应有“影子缓冲”的机制,当主硬件对象忙时,附加的硬件对象才接手。硬件对象的数量通过“CanHwObjectCount”来配置。
SWS_Can_00299,如果RX缓冲不能被CAN硬件进行保护(锁住)以防止被新接收的报文所复写,那么CAN模块在接收之后应拷贝LSDU到一个“影子缓冲”。
SWS_Can_00300,如果CAN硬件不是全局可访问的,那么CAN模块应拷贝LSDU到一个“影子缓冲”中。
完整的RX过程(包含拷贝到目标层,例如COM)在RX中断中或Can_MainFunction_Read中完成。
SWS_Can_00012,须保证ISR或Can_MainFunction_Read都不可被自己所打断。
如果硬件没有配置为接收后“锁定”,那么有可能硬件缓冲会被新接收的报文所复写,那么CAN控制器应该检测到一个“复写”(overwrite)事件。
如果硬件配置为接收后“锁定”,那么新到达的报文可能会被抛弃掉,这种情况下,CAN控制需检测到一个“溢出”(overrun)事件。
SWS_Can_00395,如果默认错误检测使能,那么CAN模块应在检测到“复写”或“溢出”事件后上报一个CAN_E_DATALOST错误。
提示:
系统设计人员应保证报文接收(中断或轮询)的运行时间与系统中最快的接收相关。