UDS协议

1、UDS(Unified Diagnosic Services 统一诊断服务)是ISO 15765&ISO 14229定义的一种可以在不太的汽车总线(CAN&LIN)上的应用层诊断协议
    UDS应用层是ISO 14229-1

2、UDS本质上是一种服务,通过请求&响应对ECU进行测试、检测、诊断

3、UDS位于应用层,不必关心提供差错控制等功能的PCI部分

4、由于数据场较短(CAN为8Byte CAN FD为64Byte),故一条诊断命令超过数据场长度,则需要分包传输,即需要多帧传输
    ISO 15765定义多帧传输的格式:
    报文类型        CAN ID  |           CAN数据场
    --------------------------------|--------------------------------Byte[0]-------------|--------------Byte[1]------------------              
                |   [bit7~bit4] [bit3]  [bit2~0]    |
                --------------------------------|----------------------------------------|----------------------------------------------------  
    单帧        CANID   |      0000b               SF_DL    |数据
    首帧        CANID   |      0001b               FF_DL                                  | 数据
    连续帧      CANID   |      0010b               SN       |
    流控帧      CANID   |      0011b               FS       |BB                         STmin

无论是单帧还是多帧,均使用每一帧的0郝字节的高四位进行区别
    0:单帧
    1:首帧
    2:连续帧
    3:流控帧

    单帧:
    表示该帧的数据场有效字节数据<=8,不足的地方使用0xAA,0x55(增加跳变)
    对于单帧而言,0号字节的低四位[SF_DL]表示DLC(数据长度控制),说明后面有多少位有效

    发送方:
        首帧:
            FF_DL:则是代表该多帧的长度,
            当长度信息发送完成后后面的字节发送部分数据
   
        连续帧:
            SN代表该连续帧为帧序号,即该连续发出的第几帧(从1开始计数)

    接收方:
        流控帧:
        Byte[0]前四位固定为3,后四位FS表示流状态参数
            FS:0,CTS表示继续接受
            1,WT表示等待,让发送方停止,等待下一个流控帧的到来
            2,OVFLW表示溢出,当接收方接收到首帧后,判断FF-DL长度比接受放到缓冲区大时发送,随后发送方停止发送
            3,F:保留
       
        Byte[1]为BS块的大小,即接下来会发送多少帧,当BS为0时,块大小不做限制
        Byte[2]为STmin,规定了连续帧发送的最小时间间隔

5、NRC
    服务以请求+响应格式构成,当涉及到否定响应时需要知道为什么否定,故引入了否定响应(Negative Response Code)NRC

 请求格式:
    SID+SF,服务+子功能
    例如:10 01

    SID+DID(Data Identifier),服务+DID,用于读写
    例如:22 F15A

    SID_SF_DID,服务+子功能+DID,如例程服务
    31 01 FF00

    SID,仅服务号

 响应:
    肯定响应:(SID+0x40) +其它
    Q:0x10 0x01
    A:0x50 01

    否定响应:7F +服务 +NRC
    例如:
        Q:10 01
        R:7F 10 13

常见NRC:...

6、0x10服务



posted @ 2025-12-12 12:08  nonAny  阅读(0)  评论(0)    收藏  举报