AutoSAR CANTP总结

    科技2023-12-21  321

    AutoSAR CANTP

    AutoSAR CANTPOverview配置与服务CANTP配置PDUR服务CANIf服务 功能给上层的接口init & shutdowncommunication service 给下层的接口(CanIf)内部行为N_SDU 接收N_SDU 发送Buffer策略 常见用例的序列图收到单帧但提供的buffer不足成功接收SF N_PDU请求SF N_SDU

    AutoSAR CANTP

    Overview

    CANTP用来组装分段CAN I-PDUs。 COM和DCM模块通信协议是不一样的,由PDUR根据I-PDU ID来决定用哪个协议,PDUR也会决定传输协议是否使用。PDUR相当于一个网关,比例1:1 CANTP根据N-PDU ID来只处理SF FF CF FC, CANIf要确定是将I-PDU转发到CANTP或者PDUR

    CAN TP职责:

    组装、分段数据来收发,取消收发流控检测分割会话时的错误

    配置与服务

    CANTP配置

    SDU个数/ID通信方向/类型(全/半双工)/寻址方式标准帧,扩展帧

    PDUR服务

     PduR_CanTpRxIndication  PduR_CanTpStartOfReception  PduR_CanTpCopyRxData  PduR_CanTpCopyTxData  PduR_CanTpTxConfirmation

    CANIf服务

     CanIf_Transmit

    功能

    给上层的接口

    init & shutdown

    communication service

    CanTp_Transmit() 允许上层异步传数据,传完会通知上层N_SDU的传输结果

    CanTp_CancelTransmit() 取消意味着丢弃 UseCase: 由于接到另外一个优先级更高的诊断协议而取消传输 使能feature由CanTpTc决定 如果调用cancellation,之后要调用 PduR_CanTpTxConfirmation返回E_NOT_OK

    给下层的接口(CanIf)

    CanTp_TxConfirmation()

    CanIf调用通知CANTP传输结果 在超时N_As后,CANTP还没收到confirm,或者CanTp_TxConfirmation返回E_NOT_OK,都要丢弃对应的会话

    CanTp_RxIndication()

    CanIf调用通知CANTP收到新帧

    内部行为

    上下传输的时候,CANTP采用事件触发

    N_SDU 接收

    当收到了SF or FF,

    CanTp_RxIndication 用来存寻址方式用于初始化与上层的连接PduR_CanTpStartOfReception来通知上层PDUR,上层会锁住留下buffer用于接收,CANTp会给TpSduInfoPtr,内容存在这里面

    当收到CF时, 3. CanTp_RxIndication 要检查寻址信息和FF中存的值比较

    当收到FF或者最后一个CF时, 4. CANTp要在调用PduR_CanTpStartOfReception or PduR_CanTpCopyRxData前开始N_Br计时 【SWS_CanTp_00166 未完待续。。】

    接收一帧N_SDU 49Bytes,上层报告了一个25Bytes的有效buffer 举例:

    N_SDU 发送

    高层要发送,调用CanTp_Transmit告诉低层NSDUId和要被发送的N-SDU Tx总长度

    发送一帧50Bytes举例

    Buffer策略

    CanTp是没有缓存能力的,N_SDU不会在内部copy,N_PDU也不会在内部组装,CANTp直接进入PduR, DCM, or COM用 PduR_CanTpCopyTxData() or PduR_CanTpCopyRxData()来操作,所以为了保持数据的一致性,上层需要锁住内存区域。 当发送buffer锁住时,就不能再写入;当接收buffer锁住时,不能读写。

    常见用例的序列图

    收到单帧但提供的buffer不足

    PduR_CanTpStartOfReception 其实就是通知上层,PDU总长度,申请提供足够有效的buffer。

    成功接收SF N_PDU

    告诉高层N_PDU总长度,申请buffercopy data到buffer里面copy完成,indication上层ok

    请求SF N_SDU

    【未列举完,待续。。】

    Processed: 0.011, SQL: 8