• 统一诊断服务 (Unified diagnostic services , UDS) (四)


    转载来自:https://zhuanlan.zhihu.com/p/33995635 张丁

    还有个公众号汽车诊断

    这篇文章介绍一下UDS的第二类诊断服务,即Data Transmission (数据传输)。这类诊断服务包括以下SID:

    ReadDataByIdentifier (0x22)

    ReadMemoryByAddress (0x23)

    ReadScalingDataByIdentifier (0x24)

    ReadDataByPeriodicIdentifier (0x2A)

    DynamicallyDefineDataIdentifier (0x2C)

    WriteDataByIdentifier (0x2E)

    WriteMemoryByAddress (0x3D)

     

    通常,0x22和0x2E成对使用0x23和0x3D成对使用这几个服务用于诊断数据的基本读写操作。0x24,0x2A,0x2C是一些特殊操作。

    0x22和0x2E这两个服务是对以标识符(identifier)标记的数据的操作前者是读,后者是写

    UDS规定,诊断数据使用两个byte的标识符来标记,比如,0xF187用来标记ECU的零件号,0xF19E用于标记该ECU所使用的诊断文件的名字,UDS还规定了厂家可以自定义的标识符范围。这两个服务的用法很简单,下面我以读取ECU的零件号为例说明:

    22 F1 87 (读取零件号)

    62 F1 87 XX YY ZZ KK MM NN(给出零件号)

    具体每次可以使用22服务读取几个ID,每个ID的读写权限(比如在哪些session中可以读写,是否需要安全访问操作等),由厂家自定义。假设零件号这个ID是可以写入的话,则写零件号的诊断命令是:

    2E F1 87 XX YY ZZ KK MM NN(写入零件号)

    6E F1 87(给出positive response)

     

    0x23和0x3D这两个服务是对以地址信息(memoryAddress )标记的数据的操作,

    前者是读,后者是写。这个命令的格式稍微复杂一点。以0x23为例,它的诊断请求格式是:

                                    0x23服务的请求格式0x23

    第一部分固定为1个byte, 0x23;

    第二部分是格式信息,长度为1个byte,高4 bits用于指示memorySize的长度(字节数),低4 bits用于指示memoryAddress的长度(字节数)。

    比如,如果这个值为0x46,则后面的memorySize为6个byte,memoryAddress为4个byte。

    第三部分是memoryAddress信息,它的长度由第二部分的AddressAndLengthFormatIdentifier指示。

    第四部分是memorySize信息,它的长度由第二部分的AddressAndLengthFormatIdentifier指示。

    如果这条命令的格式是 23 22 xx yy aa bb,则它的含义就是,读取xx yy地址的长度为aa bb的数据。

     

    了解了0x23的用法,0x3D的用法就很好理解了,它标识memoryAddress和memorySize的方法与0x23相同,只是在诊断命令最后再加上一段需要写入的数据。

     

    0x24,0x2A,0x2C这几个特殊操作,使用场景不多,我组织组织语言,在下篇文章里简要介绍一下。

  • 相关阅读:
    放弃antd table,基于React手写一个虚拟滚动的表格
    思考:声明式编程与命令式编程
    前端入门指南(菜鸟篇-下)
    前端入门指南(菜鸟篇-上)
    centos7 磁盘管理—— lvm的使用
    Linux 用 sftp scp命令 互传文件
    linux 通过md5查找重复文件
    Linux sort uniq 命令。简单运用
    Linux sed 命令
    shell 脚本,将/etc/目录下所有的软链接文件输出
  • 原文地址:https://www.cnblogs.com/Galesaur-wcy/p/13225078.html
Copyright © 2020-2023  润新知