【车载开发系列】UDS诊断—读取数据($0x22)
UDS诊断---读取数据($0x22)
- 【车载开发系列】UDS诊断---读取数据($0x22)
- 一.概念定义
- 二.报文格式
- 1)请求
- 2)肯定响应
- 3)否定响应
- 三.应用场景
- 四.注意事项
- 五.DID参数定义
一.概念定义
该服务的英文简称为ReadDataByIdentifier 。
根据ISO14119-1标准中所述,诊断服务22主要用于Client向Server(ECU)通过DID的方式读取相关的数据。这些数据可以输入输出的数字信号,模拟信号,内部数据以及其他的系统状态信息。作为诊断服务种的基础服务,可以简单理解为就是一个用于读取ECU数据的外部接口,可实时获取软件内部的相关的状态信息。概括起来就是诊断工具读取数据标识符对应的数据记录。
二.报文格式
0x22服务用于读did,客户端请求格式为 “22+did”,服务端肯定响应为“62+DID+数据”,否定响应为“7f+22+NRC码”
当客户端发送22+F186这个请求时,服务端肯定会返回当前的会话状态,
回复“62+F186+(01 or 02 or 03)”
1)请求
这里的MSB也是DID的值,在这里可以看到,读取数据服务$22是支持一条指令取得多个DID信息的。
2)肯定响应
这里的MSB也是DID的值,譬如:某协议定义了DID = 0xF190,那么这里的MSB就是0xF1和0x90;而此时Record就是服务端的VIN码
3)否定响应
否定响应SID+通过标识符读取数据请求SID+否定响应码
- 如当尝试读取F190的DID值且当前车速条件不满足,此时Client发送诊断指令"22 F1 90"请求Server读取数据,Server将会回复“7F 22 22”来告诉请求者当前读取数据的条件不满足,请再次检查读取该DID的条件。
- 当发送报文长度或者格式不对时,则Server会回复"7F 22 13";
- 当诊断请求的DID太多导致超出了传输层的限定时,则Server会回复”7F 22 14“;
- 当诊断请求DID不存在或者在当前Session中不支持时,则Server就会回复“7F 22 31”;
- 当Server在发生复位前处于security lock状态,那么此时Server则会回复"7F 22 33"
三.应用场景
- 读取当前ECU的序列号,版本号等;
- 标定成功后读取内部标定结果等;
- 读取当前ECU所处在的Session,内部状态,Snapshot Data等;
- 其他需要读取内部相关参数的场合;
- 内部测试时需要取得相关测试用状态和数据的场合
四.注意事项
- 特别需要注意的是22诊断并不存在Subfunction。
- 不光存在单个DID的读取,还可以多个DID读取,而且读取DID的个数是不受到限制的。
- 绝大多数情况下,Server针对Client的请求都会给到正响应,比如发生重启前需确保整车处于安全状态,如引擎熄火,车速不能超过3km/h等,或者为了防止不按照诊断请求格式进行请求,那么Server需要通过某种方式来告诉Client执行不成功的原因在哪里以便于调查问题直至得到正响应。
因此ISO14229-1针对所有的诊断服务提供了一种统一的诊断负响应的诊断格式:7F +SID + NRC。
五.DID参数定义
逻辑上,参数数据标识符DID代表了一个对象或者是多个对象的集合。此参数可从服务器的内存中获取。如果数标识符经过了服务动态定义数据标识符的动态定义,则既存在于固定内存中,也能存储在随机存取存储器RAM当中。
一般来说,数据定义符能够在含0x22,0x2E和0x2F在内的多个诊断服务请求中使用,数据标识符还可以用于各种诊断服务的响应中。
例如在0x19服务的子功能readDTCSnapshotRecordByDTCNumber(按照DTC编号读取DTC快照)的肯定响应中。
动态定义的数据标识符除外,虽然ECU未定义此标识符,但客户端使用服务0x2C(动态定义数据标识)可对其进行定义。
重要
无论数据标识符用于哪个服务,在固定的ECU当中,该数据标识符始终应仅代表一个对象。即具有固定大小、意义等的固定对象。
字节值 | 说明 | 描述 |
---|---|---|
0x0000-0x00FF | ISOSAEReserved | ISOSAE已保留 |
0x0100-0xA5FF | VehicleManufacturerSpecific | 由车辆制造商规定 |
0xA600-0xA7FF | ReservedForLegislativeUse | 针对法律用途保留的值 |
0xA800-0xACFF | VehicleManufacturerSpecific | 由车辆制造商规定 |
0xAD00-0xAFFF | ReservedForLegislativeUse | 针对法律用途保留的值 |
0xF180 | BootSoftwareIdentificationDataIdentifier | 启动软件识别数据标识符 |
0xF181 | applicationSoftwareIdentificationDataIdentifier | 应用软件识别的数据标识符 |
0xF182 | applicationDataIdentificationDataIdentifier | 应用程序数据识别标识符 |
0xF183 | bootSoftwareFingerprintDataIdentifier | 启动软件指纹的数据标识符 |
0xF184 | applicationSoftwareFingerprintDataIdentifier | 应用软件指纹数据标识符 |
0xF185 | applicationDataFingerprintDataIdentifier | 应用程序数据指纹标识符 |
0xF186 | ActiveDiagnosticSessionDataIdentifier | 活动诊断会话的数据标识符:报告服务器中活动诊断会话,由DiagnosticSessionType定义 |
0xF187 | vehicleManufacturerSparePartNumberDataIdentifier | 车辆制造商零配件编号数据标识符:编码格式为15 Byte ASCII,引用了车辆制造商的零配件编号 |
0xF188 | vehicleManufacturerECUSoftwareNumberDataIdentifier | 车辆制造商ECU软件编号的数据标识符:用于引用车辆制造商ECU的软件编号,由车厂定义 |
0xF189 | vehicleManufacturerECUSoftwareVersionNumberDataIdentifier | 车辆制造商ECU软件版本号的数据标识符:用于引用车辆制造商ECU的软件版本号,由车厂定义 |
0xF18A | systemSupplierIdentifierDataIdentifier | 系统供应商信息的数据标识符:引用系统供应商的名称和地址信息 |
0xF18B | ECUManufacturingDateDataIdentifier | ECU制造日期的数据标识符:引用ECU服务器的制造日期 |
0xF18C | ECUSerialNumberDataIdentifier | ECU序列号的数据标识符:引用ECU的序列号 |
0xF18D | supportedFunctionalUnitsDataIdentifierVehicleManufacturerKitAssemblyPartNumberDataIdentifier | 受支持的功能单元的数据标识符:请求在服务中实现的功能单元 |
0xF18E | VehicleManufacturerKitAssemblyPartNumberDataIdentifier | 车辆制造商套件总成零件号的数据标识符 |
0xF18F | ISOSAEReserved | ISOSAE已保留:供未来定义用 |
0xF190 | VINDataIdentifier | VIN数据标识符:引用了VIN编号 |
0xF191 | vehicleManufacturerECUHardwareNumberDataIdentifier | 车辆制造商ECU硬件编号的数据标识符:引用了ECU硬件编号 |
0xF192 | systemSupplierECUHardwareNumberDataIdentifier | 系统供应商ECU硬件编号的数据标识符 |
0xF193 | systemSupplierECUHardwareVersionNumberDataIdentifier | 系统供应商ECU硬件版本号标识符 |
0xF194 | systemSupplierECUSoftwareNumberDataIdentifier | 系统供应商ECU软件编号标识符 |
0xF195 | systemSupplierECUSoftwareVersionNumberDataIdentifier | 系统供应商ECU软件版本号标识符 |
0xF196 | exhaustRegulationOrTypeApprovalNumberDataIdentifier | 排气法规或型式认证编号的数据标识符 |
0xF197 | systemNameOrEngineTypeDataIdentifier | 系统名称或发动机类型的数据标识符 |
0xF198 | repairShopCodeOrTesterSerialNumberDataIdentifier | 维修车间代码或测试仪器序列号数据标识符 |
0xF199 | programmingDateDataIdentifier | 编程日期的数据标识符 |
0xF19A | calibrationRepairShopCodeOrCalibrationEquipmentSerialNumber DataIdentifier | 校准车间代码或校准设备系列号的数据标识符 |
0xF19B | calibrationDateDataIdentifier | 校准日期的数据标识符 |
0xF19C | calibrationEquipmentSoftwareNumberDataIdentifier | 校准软件设备编号的数据标识符 |
0xF19D | ECUInstallationDateDataIdentifier | ECU安装日期的数据标识符 |
0xF19E | ODXFileDataIdentifier | ODX文件的数据标识符 |
0xF19F | EntityDataIdentifier | 实际数据标识符:引用用于安全数据传输的实体数据标识符 |
0xF1A0–0xF1EF | identificationOptionVehicleManufacturerSpecific | 车辆制造商规定的识别选项 |
0xF1F0–0xF1FF | identificationOptionSystemSupplierSpecific | 系统供应商规定的识别选项 |
0xF200–0xF2FF | periodicDataIdentifier | 周期性数据标识符 |
0xF300–0xF3FF | DynamicallyDefinedDataIdentifier | 动态定义的数据标识符 |
0xF400–0xF4FF | OBDDataIdentifier | OBD数据标识符 |
0xF500–0xF5FF | OBDDataIdentifier | OBD数据标识符 |
0xF600–0xF6FF | OBDMonitorDataIdentifier | OBD监视器的数据标识符 |
0xF700–0xF7FF | OBDMonitorDataIdentifier | OBD监视器的数据标识符 |
0xF800–0xF8FF | OBDInfoTypeDataIdentifier | OBD信息类型的数据标识符 |
0xF900–0xF9FF | TachographDataIdentifier | 里程记录器的数据标识符 |
0xFA00 – 0xFA0F | AirbagDeploymentDataIdentifier | 气囊展开的数据标识符 |
0xFA10 | NumberOfEDRDevices | EDR装置数 EDR数据的EDR装置的数量 |
0xFA11 | EDRIdentification | EDR识别:应用于报告EDR识别数据 |
0xFA13-0xFA18 | EDREntries | EDR条目:每一个DID对应一个EDR、0xFA13代表最后一个EDR |
0xFA19-0xFAFF | SafetySystemDataIdentifier | 安全系统的数据标识符 |
0xFB00-0xFCFF | ReservedForLegislativeUse | 针对法律用途保留的值 |
0xFD00-0xFEFF | SystemSupplierSpecific | 由系统供应商规定 |
0xFF00 | UDSVersionDataIdentifier | UDS版本的数据标识符 |
0xFF01-0xFFFF | ISOSAEReserved | ISOSAE已经保留 |