diff --git a/.gitattributes b/.gitattributes index dc2decb..23ee28c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,3 +10,5 @@ # Keep vendor source and captured logs as supplied. firmware/Drivers/** -whitespace docs/evidence/**/*.log -whitespace +# Byte hashes in this capture manifest refer to the original bytes. +docs/evidence/2026-10-03/v2.2-display/* -text diff --git a/AMI.dbc b/AMI.dbc index 1672912..96d9440 100644 --- a/AMI.dbc +++ b/AMI.dbc @@ -1,4 +1,4 @@ -VERSION "AMI-2.1-2026-10-03" +VERSION "AMI-2.2-2026-10-03" NS_ : NS_DESC_ @@ -12,6 +12,15 @@ BS_: BU_: AMI VCU SDC_ACQ_DAC BMS +BO_ 386 AMI_DrivetrainDisplay: 8 VCU + SG_ Torque_Permille : 0|16@1- (1,0) [-1000|1000] "permille" AMI + SG_ Motor_Temperature : 16|16@1- (0.1,0) [-3276.8|3276.7] "degC" AMI + SG_ MCU_Temperature : 32|16@1- (0.1,0) [-3276.8|3276.7] "degC" AMI + SG_ Torque_Valid : 48|1@1+ (1,0) [0|1] "" AMI + SG_ Motor_Temperature_Valid : 49|1@1+ (1,0) [0|1] "" AMI + SG_ MCU_Temperature_Valid : 50|1@1+ (1,0) [0|1] "" AMI + SG_ Protocol_Version : 56|8@1+ (1,0) [1|1] "" AMI + BO_ 768 AMI_TaskRequest: 8 AMI SG_ Protocol_Version : 0|8@1+ (1,0) [1|1] "" VCU SG_ Task_ID : 8|8@1+ (1,0) [1|6] "" VCU @@ -65,12 +74,18 @@ BO_ 2556444915 BMS_Status_Extended: 8 BMS BO_ 2556510451 BMS_Extremes_Extended: 8 BMS SG_ Maximum_Cell_Temperature : 39|8@0+ (1,-40) [-40|215] "degC" AMI -CM_ "AMI CAN interface v2.1. CAN1: 500000 bit/s; CAN2: 250000 bit/s. Both use Classic CAN, identical IDs, parsing and task request capability. This file is CAN1; use AMI_CAN2_250k.dbc for CAN2. Frames are not bridged between buses. SDC fields follow SDC_ACQ_DAC.dbc VERSION 1.1. BMS consumed fields follow BmsMonitor-CANTest commit e65c95203d1689df05343775982d7e85bd782646. Omitted bytes/signals are not interpreted by the AMI firmware. No motor temperature, calibrated vehicle speed, torque, task execution feedback or AMI heartbeat frame is defined."; -CM_ BU_ AMI "Instrument MCU. UART HMI task confirmation produces AMI_TaskRequest. Display values are received from SDC and BMS."; -CM_ BU_ VCU "Logical receiver of task selection requests; execution and safety interlocks are outside this AMI interface."; +CM_ "AMI CAN interface v2.2. CAN1: 500000 bit/s; CAN2: 250000 bit/s. Both use Classic CAN, identical IDs, parsing and task request capability. This file is CAN1; use AMI_CAN2_250k.dbc for CAN2. Frames are not bridged between buses. SDC fields follow SDC_ACQ_DAC.dbc VERSION 1.1. BMS consumed fields follow BmsMonitor-CANTest commit e65c95203d1689df05343775982d7e85bd782646. AMI_DrivetrainDisplay is a custom instrument input; native motor-controller protocols are not defined. No calibrated vehicle speed, task execution feedback or AMI heartbeat frame is defined."; +CM_ BU_ AMI "Instrument MCU. UART HMI task confirmation produces AMI_TaskRequest. Display values come from SDC, BMS and custom VCU display inputs."; +CM_ BU_ VCU "Logical task receiver and sender/adapter for custom drivetrain display data. Execution and safety interlocks are outside this interface."; CM_ BU_ SDC_ACQ_DAC "Source of ADC, capture frequencies and raw PD0-PD14 states; both SDC CAN ports carry the same protocol."; CM_ BU_ BMS "Logical BMS source. Source frame periods are not specified here; do not infer them from test traffic."; +CM_ BO_ 386 "Standard ID 0x182, DLC exactly 8, send every 100 ms. Three little-endian signed int16 values: torque permille, motor temperature in 0.1 degC, motor-controller MCU temperature in 0.1 degC. Byte 6 bits 0/1/2 are individual valid flags; bits 3..7 must be zero. Byte 7 is fixed version 1. Wrong DLC, frame type, version or reserved bits rejects the whole frame without refreshing timeout. Valid fields update white; invalid fields retain last value and turn grey. Source expires independently after 2000 ms. Display only, no motor torque actuation."; +CM_ SG_ 386 Torque_Permille "Signed -1000..1000 permille relative to sender-defined reference torque. Out-of-range marks only torque invalid; temperatures still update."; +CM_ SG_ 386 Motor_Temperature "Signed int16 raw tenths degC. Screen rounds to whole degC, halves away from zero."; +CM_ SG_ 386 MCU_Temperature "Sender-supplied motor-controller MCU/inverter temperature, not the AMI STM32 die temperature. Screen rounds to whole degC, halves away from zero."; +CM_ SG_ 386 Protocol_Version "Fixed 1, independent of AMI interface package version 2.2."; + CM_ BO_ 768 "Standard ID 0x300, DLC 8. Event-driven: one request on valid HMI task confirmation, none on cancel. Counter wraps at 255. Request is not proof of execution and is not SDC ASSI_Lamp_Set (0x6A5). No CAN application-level acknowledgement is defined. Route to ports with valid RX within 500 ms; if none, attempt both."; CM_ SG_ 768 Protocol_Version "Fixed 1."; CM_ SG_ 768 Task_ID "Valid task values are 1 through 6."; @@ -103,6 +118,10 @@ CM_ SG_ 2556444915 Pack_Current "Current = raw_uint16 * 0.1 - 500 A."; CM_ BO_ 2556510451 "Extended arbitration ID 0x186140F3, DLC 8. AMI consumes byte 4 as maximum cell temperature. Raw 0xFF is invalid. Other bytes, including BMS low-voltage bytes 6..7, are not used and cannot override SDC ADC. DBC BO_ numeric ID includes 0x80000000."; VAL_ 768 Protocol_Version 1 "Version_1"; +VAL_ 386 Protocol_Version 1 "Version_1"; +VAL_ 386 Torque_Valid 0 "Invalid" 1 "Valid"; +VAL_ 386 Motor_Temperature_Valid 0 "Invalid" 1 "Valid"; +VAL_ 386 MCU_Temperature_Valid 0 "Invalid" 1 "Valid"; VAL_ 768 Task_ID 1 "Skidpad" 2 "Acceleration" 3 "Autocross" 4 "Inspection_Test" 5 "EBS_Test" 6 "Manual_Driving"; VAL_ 768 Request_Source 1 "AMI_HMI"; VAL_ 1696 Board_Identifier 161 "A11_F407"; @@ -130,6 +149,7 @@ BA_DEF_DEF_ "GenMsgCycleTime" 0; BA_ "BusType" "CAN"; BA_ "Baudrate" 500000; BA_ "AMIPort" "CAN1"; +BA_ "GenMsgCycleTime" BO_ 386 100; BA_ "GenMsgCycleTime" BO_ 1696 100; BA_ "GenMsgCycleTime" BO_ 1697 500; BA_ "GenMsgCycleTime" BO_ 1698 20; diff --git a/AMI_CAN2_250k.dbc b/AMI_CAN2_250k.dbc index 4c8ce33..28cc031 100644 --- a/AMI_CAN2_250k.dbc +++ b/AMI_CAN2_250k.dbc @@ -1,4 +1,4 @@ -VERSION "AMI-2.1-2026-10-03" +VERSION "AMI-2.2-2026-10-03" NS_ : NS_DESC_ @@ -12,6 +12,15 @@ BS_: BU_: AMI VCU SDC_ACQ_DAC BMS +BO_ 386 AMI_DrivetrainDisplay: 8 VCU + SG_ Torque_Permille : 0|16@1- (1,0) [-1000|1000] "permille" AMI + SG_ Motor_Temperature : 16|16@1- (0.1,0) [-3276.8|3276.7] "degC" AMI + SG_ MCU_Temperature : 32|16@1- (0.1,0) [-3276.8|3276.7] "degC" AMI + SG_ Torque_Valid : 48|1@1+ (1,0) [0|1] "" AMI + SG_ Motor_Temperature_Valid : 49|1@1+ (1,0) [0|1] "" AMI + SG_ MCU_Temperature_Valid : 50|1@1+ (1,0) [0|1] "" AMI + SG_ Protocol_Version : 56|8@1+ (1,0) [1|1] "" AMI + BO_ 768 AMI_TaskRequest: 8 AMI SG_ Protocol_Version : 0|8@1+ (1,0) [1|1] "" VCU SG_ Task_ID : 8|8@1+ (1,0) [1|6] "" VCU @@ -65,12 +74,18 @@ BO_ 2556444915 BMS_Status_Extended: 8 BMS BO_ 2556510451 BMS_Extremes_Extended: 8 BMS SG_ Maximum_Cell_Temperature : 39|8@0+ (1,-40) [-40|215] "degC" AMI -CM_ "AMI CAN interface v2.1. CAN1: 500000 bit/s; CAN2: 250000 bit/s. Both use Classic CAN, identical IDs, parsing and task request capability. This file is CAN2; use AMI.dbc for CAN1. Frames are not bridged between buses. SDC fields follow SDC_ACQ_DAC.dbc VERSION 1.1. BMS consumed fields follow BmsMonitor-CANTest commit e65c95203d1689df05343775982d7e85bd782646. Omitted bytes/signals are not interpreted by the AMI firmware. No motor temperature, calibrated vehicle speed, torque, task execution feedback or AMI heartbeat frame is defined."; -CM_ BU_ AMI "Instrument MCU. UART HMI task confirmation produces AMI_TaskRequest. Display values are received from SDC and BMS."; -CM_ BU_ VCU "Logical receiver of task selection requests; execution and safety interlocks are outside this AMI interface."; +CM_ "AMI CAN interface v2.2. CAN1: 500000 bit/s; CAN2: 250000 bit/s. Both use Classic CAN, identical IDs, parsing and task request capability. This file is CAN2; use AMI.dbc for CAN1. Frames are not bridged between buses. SDC fields follow SDC_ACQ_DAC.dbc VERSION 1.1. BMS consumed fields follow BmsMonitor-CANTest commit e65c95203d1689df05343775982d7e85bd782646. AMI_DrivetrainDisplay is a custom instrument input; native motor-controller protocols are not defined. No calibrated vehicle speed, task execution feedback or AMI heartbeat frame is defined."; +CM_ BU_ AMI "Instrument MCU. UART HMI task confirmation produces AMI_TaskRequest. Display values come from SDC, BMS and custom VCU display inputs."; +CM_ BU_ VCU "Logical task receiver and sender/adapter for custom drivetrain display data. Execution and safety interlocks are outside this interface."; CM_ BU_ SDC_ACQ_DAC "Source of ADC, capture frequencies and raw PD0-PD14 states; both SDC CAN ports carry the same protocol."; CM_ BU_ BMS "Logical BMS source. Source frame periods are not specified here; do not infer them from test traffic."; +CM_ BO_ 386 "Standard ID 0x182, DLC exactly 8, send every 100 ms. Three little-endian signed int16 values: torque permille, motor temperature in 0.1 degC, motor-controller MCU temperature in 0.1 degC. Byte 6 bits 0/1/2 are individual valid flags; bits 3..7 must be zero. Byte 7 is fixed version 1. Wrong DLC, frame type, version or reserved bits rejects the whole frame without refreshing timeout. Valid fields update white; invalid fields retain last value and turn grey. Source expires independently after 2000 ms. Display only, no motor torque actuation."; +CM_ SG_ 386 Torque_Permille "Signed -1000..1000 permille relative to sender-defined reference torque. Out-of-range marks only torque invalid; temperatures still update."; +CM_ SG_ 386 Motor_Temperature "Signed int16 raw tenths degC. Screen rounds to whole degC, halves away from zero."; +CM_ SG_ 386 MCU_Temperature "Sender-supplied motor-controller MCU/inverter temperature, not the AMI STM32 die temperature. Screen rounds to whole degC, halves away from zero."; +CM_ SG_ 386 Protocol_Version "Fixed 1, independent of AMI interface package version 2.2."; + CM_ BO_ 768 "Standard ID 0x300, DLC 8. Event-driven: one request on valid HMI task confirmation, none on cancel. Counter wraps at 255. Request is not proof of execution and is not SDC ASSI_Lamp_Set (0x6A5). No CAN application-level acknowledgement is defined. Route to ports with valid RX within 500 ms; if none, attempt both."; CM_ SG_ 768 Protocol_Version "Fixed 1."; CM_ SG_ 768 Task_ID "Valid task values are 1 through 6."; @@ -103,6 +118,10 @@ CM_ SG_ 2556444915 Pack_Current "Current = raw_uint16 * 0.1 - 500 A."; CM_ BO_ 2556510451 "Extended arbitration ID 0x186140F3, DLC 8. AMI consumes byte 4 as maximum cell temperature. Raw 0xFF is invalid. Other bytes, including BMS low-voltage bytes 6..7, are not used and cannot override SDC ADC. DBC BO_ numeric ID includes 0x80000000."; VAL_ 768 Protocol_Version 1 "Version_1"; +VAL_ 386 Protocol_Version 1 "Version_1"; +VAL_ 386 Torque_Valid 0 "Invalid" 1 "Valid"; +VAL_ 386 Motor_Temperature_Valid 0 "Invalid" 1 "Valid"; +VAL_ 386 MCU_Temperature_Valid 0 "Invalid" 1 "Valid"; VAL_ 768 Task_ID 1 "Skidpad" 2 "Acceleration" 3 "Autocross" 4 "Inspection_Test" 5 "EBS_Test" 6 "Manual_Driving"; VAL_ 768 Request_Source 1 "AMI_HMI"; VAL_ 1696 Board_Identifier 161 "A11_F407"; @@ -130,6 +149,7 @@ BA_DEF_DEF_ "GenMsgCycleTime" 0; BA_ "BusType" "CAN"; BA_ "Baudrate" 250000; BA_ "AMIPort" "CAN2"; +BA_ "GenMsgCycleTime" BO_ 386 100; BA_ "GenMsgCycleTime" BO_ 1696 100; BA_ "GenMsgCycleTime" BO_ 1697 500; BA_ "GenMsgCycleTime" BO_ 1698 20; diff --git a/README.md b/README.md index d74b192..81e46e5 100644 --- a/README.md +++ b/README.md @@ -2,19 +2,24 @@ YMR A11 仪表,使用淘晶驰 TJC4827X543_011 串口屏,分辨率 480 × 272。 -当前 MCU CAN 输入为 **v2.1(CAN1 500 kbit/s、CAN2 250 kbit/s,2026-10-03)**,两路保留相同的 SDC / BMS 解码和任务收发功能;屏幕沿用 debug 数字状态接口。工程使用 USART HMI 1.68.1.3037 编辑、编译。 +当前 MCU CAN 输入为 **v2.2(CAN1 500 kbit/s、CAN2 250 kbit/s,2026-10-03)**,新增标准 `0x182`,设置仪表上的扭矩千分、电机温度和 MCU 温度。两路保留相同解码和任务收发功能;屏幕沿用 debug 数字状态接口。工程使用 USART HMI 1.68.1.3037 编辑、编译。 dash 顶部已加入低压电池电压 `lvbat`(两位小数),来源是 SDC `0x6A1` ADC mV。高压电压、电流来自 BMS `0x140` / 扩展 `0x186040F3`,现有控件显示整数单位;最高单体温度取 `0x156` 的有效实际温度最大值,或扩展 `0x186140F3`。旧 `0x180 / 0x181 / 0x280` 输入不再使用。 +CAN 工具设置标准 ID `0x182`、DLC `8`、周期 `100 ms`,发送 `F4 01 C2 01 90 01 07 01` 即设置 **500‰ / 45℃ / 40℃**。三个数值为小端 int16;温度缩放 0.1℃;字节 6 的 bit0/1/2 为有效标志,字节 7 固定 1。停发超过 2 秒后三个数值变灰。该帧只设置显示;实际电机控制器协议由上游转换。详见 [字节布局和发送示例](docs/AMI_CAN_DBC说明.md#自定义动力显示输入-0x182)。 + ## 工程与交接资料 -- [CAN1 DBC](AMI.dbc):500 kbit/s,10 条报文、33 个信号,含标准/扩展帧。 +- [CAN1 DBC](AMI.dbc):500 kbit/s,11 条报文、40 个信号,含标准/扩展帧。 - [CAN2 DBC](AMI_CAN2_250k.dbc):250 kbit/s,报文布局与 CAN1 相同。 - [DBC 对应说明](docs/AMI_CAN_DBC说明.md):信号布局、枚举、字节序、样例与复现检查。 -- [CAN 报文说明 PDF](output/pdf/AMI_CAN报文说明.pdf):当前 v2.1 协议的中文打印版,包含两路速率和全部 10 条报文。 +- [CAN 报文说明 PDF](output/pdf/AMI_CAN报文说明.pdf):当前 v2.2 协议的中文打印版,包含两路速率和全部 11 条报文。 +- [CAN 显示发送工具](scripts/send_drivetrain_can.py):通过 python-can 发送扭矩千分和两路温度,支持预览字节、有效标志和适配器参数。 +- [v2.2 显示 CAN 测试报告](docs/AMI自定义显示CAN测试报告.md):新帧烧录回读和 CAN2 数据、失效、异常帧测试。 - [联调报告](docs/SDC_BMS联调报告.md):真实 CAN1 / MCU / COM4 到 HMI 调试器的证据。 - [v2.1 双 CAN 测试报告](docs/CAN1_CAN2_v2.1测试报告.md):烧录和完整回读、CAN1 500K / CAN2 250K 数据与六个任务确认/取消测试。 -- [当前固件 BIN](output/firmware/AMI_Controller.bin):STM32G0B1CBT6,CAN1 500K / CAN2 250K,已烧录并完成两路分别测试;配套源码在 firmware。 +- [当前固件 BIN](output/firmware/AMI_Controller.bin):STM32G0B1CBT6,v2.2,CAN1 500K / CAN2 250K,已烧录并完整回读比对;本次新帧实测 CAN2。 +- [此前已联调的 v2.1 BIN](output/firmware/AMI_Controller_v2.1_500k_250k.bin):CAN1 500K / CAN2 250K,保留双 CAN 分别测试的历史版本。 - [此前已联调的 v2.0 BIN](output/firmware/AMI_Controller_v2.0_500k.bin):两路均为 500K,保留历史测试版本。 - [AMI.HMI](AMI.HMI):最新版屏幕工程,打开后编译并下载到对应型号屏幕。 - [通讯交接文档](docs/通讯交接文档.md):可编辑协议说明,包含全部状态编号、任务帧、主页面属性及联调步骤。 diff --git a/docs/AMI_CAN_DBC说明.md b/docs/AMI_CAN_DBC说明.md index 4689a48..38b99a9 100644 --- a/docs/AMI_CAN_DBC说明.md +++ b/docs/AMI_CAN_DBC说明.md @@ -1,6 +1,6 @@ # AMI CAN DBC 说明 -版本:`AMI-2.1-2026-10-03`。由 [AMI.dbc](../AMI.dbc) 自动生成,10 条报文、33 个信号。 +版本:`AMI-2.2-2026-10-03`。由 [AMI.dbc](../AMI.dbc) 自动生成,11 条报文、40 个信号。 ## 使用范围 @@ -11,20 +11,21 @@ CAN1 为 500 kbit/s,CAN2 为 250 kbit/s,均为 Classic CAN、87.5% 采样点 | CAN1 | 500 kbit/s | PA11 / PA12 | [AMI.dbc](../AMI.dbc) | | CAN2 | 250 kbit/s | PB0 / PB1 | [AMI_CAN2_250k.dbc](../AMI_CAN2_250k.dbc) | -DBC 的 `Baudrate` / `AMIPort` 分别标注所属总线。每份 DBC 均含 10 条报文、33 个信号;同一份报文表适用于两路。CAN 工具必须按接入端口设置速率,导入 DBC 不一定自动改硬件速率。实际接法:SDC 500 kbit/s 接 CAN1,BMS 250 kbit/s 接 CAN2。 +DBC 的 `Baudrate` / `AMIPort` 分别标注所属总线。每份 DBC 均含 11 条报文、40 个信号;同一份报文表适用于两路。CAN 工具必须按接入端口设置速率,导入 DBC 不一定自动改硬件速率。实际接法:SDC 500 kbit/s 接 CAN1,BMS 250 kbit/s 接 CAN2。 FDCAN 时钟 64 MHz,时钟分频为 1;NominalPrescaler 为 CAN1=8、CAN2=16,两路均使用 Sync=1、TimeSeg1=13、TimeSeg2=2、SJW=1。速率 = 64 MHz / Prescaler / (1+13+2);采样点 = (1+13)/16 = 87.5%。 -本 DBC 包含 AMI 唯一发送的 `0x300` 任务请求,以及 AMI 当前识别的 SDC / BMS 输入。SDC `0x6A3` DAC 控制、`0x6A5` ASSI 控制、BMS 其他电芯/故障字段不属于此接口子集。没有定义电机温度、逆变器温度、扭矩、标定后的车速、AMI 周期心跳或 VCU 执行反馈。旧 `0x180 / 0x181 / 0x280` 输入已停用。 +本 DBC 包含 AMI 唯一发送的 `0x300` 任务请求,以及 AMI 当前识别的 SDC / BMS 和自定义显示输入。SDC `0x6A3` DAC 控制、`0x6A5` ASSI 控制、BMS 其他电芯/故障字段不属于此接口子集。`0x182` 新增扭矩千分、电机温度和电机控制器 MCU 温度的仪表显示输入;发送者负责转换实际电机控制器协议。未定义标定后的车速、AMI 周期心跳或 VCU 执行反馈。旧 `0x180 / 0x181 / 0x280` 输入已停用。 SDC 字段依据 `SDC_ACQ_DAC.dbc` VERSION 1.1,保持其信号名、位布局、缩放和单位;仅将输入接收节点设为 AMI。BMS 字段依据 [BmsMonitor-CANTest](https://git.acetaffy.ltd/acetaffy/BmsMonitor-CANTest) 提交 `e65c95203d1689df05343775982d7e85bd782646` 的 `BmsProtocolParser.cs`。 -DBC 为 ASCII 编码,注释和枚举使用英文,便于导入 CAN 工具;本文为 UTF-8 中文。物理值 = 原始无符号值 × Factor + Offset;下表范围为编码范围,不表示车辆正常工作范围。 +DBC 为 ASCII 编码,注释和枚举使用英文,便于导入 CAN 工具;本文为 UTF-8 中文。物理值 = 原始值 × Factor + Offset;`0x182` 的三个数值为有符号 int16,其他数值按表定义。下表范围为接口允许范围,不表示车辆正常工作范围。 ## 报文总览 | CAN ID | 类型 | DLC | 报文名 | 方向和作用 | 周期 / 触发 | | --- | --- | --- | --- | --- | --- | +| `0x182` | 标准 | 8 | `AMI_DrivetrainDisplay` | VCU / 测试器 -> AMI:扭矩千分、电机温度、MCU 温度 | 100 ms | | `0x300` | 标准 | 8 | `AMI_TaskRequest` | AMI -> VCU:用户确认后的任务选择请求 | 确认任务触发 | | `0x6A0` | 标准 | 8 | `SDC_Heartbeat` | SDC -> AMI:板标识、版本、序号、上电时间 | 100 ms | | `0x6A1` | 标准 | 2 | `SDC_ADC_InputVoltage` | SDC -> AMI:低压电池电压,精确 DLC=2 | 500 ms | @@ -38,12 +39,26 @@ DBC 为 ASCII 编码,注释和枚举使用英文,便于导入 CAN 工具; 扩展帧在 DBC 的 `BO_` 十进制 ID 中设置 bit31:`0x186040F3 -> 2556444915`,`0x186140F3 -> 2556510451`。CAN 工具中使用实际 29 位仲裁 ID 并选择扩展帧;bit31 不是总线上发送的仲裁 ID。 -`GenMsgCycleTime` 仅填写已确认的 SDC 周期 100 / 500 / 20 ms。其余帧未填写周期,默认 0 表示未指定,不据此推断 BMS 周期。 +`GenMsgCycleTime` 填写已确认的 SDC 周期 100 / 500 / 20 ms,以及自定义 `0x182` 的约定周期 100 ms。其余帧未填写周期,默认 0 表示未指定,不据此推断 BMS 周期。 ## 信号布局 Start 为 DBC 起始位,位号从 0 开始。Intel `@1` 从最低有效位起算;Motorola `@0` 从最高有效位起算。例如 BMS 的 `7|16@0+` 对应字节 0..1 大端无符号数,`23|16@0+` 对应字节 2..3。单字节温度的字节序不改变实际解码。 +### 0x182 - AMI_DrivetrainDisplay + +| 信号 | Start | 位数 | 字节序 | Factor | Offset | 单位 | 编码范围 | +| --- | --- | --- | --- | --- | --- | --- | --- | +| `Torque_Permille` | 0 | 16 | Intel | 1 | 0 | permille | -1000..1000 | +| `Motor_Temperature` | 16 | 16 | Intel | 0.1 | 0 | degC | -3276.8..3276.7 | +| `MCU_Temperature` | 32 | 16 | Intel | 0.1 | 0 | degC | -3276.8..3276.7 | +| `Torque_Valid` | 48 | 1 | Intel | 1 | 0 | - | 0..1 | +| `Motor_Temperature_Valid` | 49 | 1 | Intel | 1 | 0 | - | 0..1 | +| `MCU_Temperature_Valid` | 50 | 1 | Intel | 1 | 0 | - | 0..1 | +| `Protocol_Version` | 56 | 8 | Intel | 1 | 0 | - | 1..1 | + +`Torque_Valid`:0 = Invalid,1 = Valid;`Motor_Temperature_Valid`:0 = Invalid,1 = Valid;`MCU_Temperature_Valid`:0 = Invalid,1 = Valid;`Protocol_Version`:1 = Version_1。 + ### 0x300 - AMI_TaskRequest | 信号 | Start | 位数 | 字节序 | Factor | Offset | 单位 | 编码范围 | @@ -137,6 +152,29 @@ Start 为 DBC 起始位,位号从 0 开始。Intel `@1` 从最低有效位起 `Maximum_Cell_Temperature`:255 = Invalid。 +## 自定义动力显示输入 0x182 + +标准数据帧,DLC 必须为 8;CAN1 500K 或 CAN2 250K 均可接收,建议每 100 ms 发送。这是一条 AMI 仪表显示设置接口;扭矩千分以发送者定义的基准扭矩归一化,500 表示 500‰。MCU 温度由发送者提供,表示电机控制器 MCU / 逆变器温度,不是 AMI 芯片自动测温。 + +| 字节 | 字段 | 编码与规则 | +| --- | --- | --- | +| 0..1 | 扭矩千分 | 小端 int16,允许 -1000..1000,直接显示 | +| 2..3 | 电机温度 | 小端 int16 × 0.1 ℃,仪表四舍五入到整数 ℃ | +| 4..5 | MCU 温度 | 小端 int16 × 0.1 ℃,仪表四舍五入到整数 ℃ | +| 6 | 有效标志 | bit0 扭矩、bit1 电机温度、bit2 MCU 温度;1 有效,0 无效;bit3..7 必须为 0 | +| 7 | 帧版本 | 固定 1,与整体接口 v2.2 版本号独立 | + +有效值更新并显示白色;标志为 0 时立即变灰并保留历史数字。扭矩超出 -1000..1000 时仅扭矩无效,两个温度仍按各自标志处理。温度的 int16 编码范围为 -3276.8..3276.7 ℃;显示正负半值均向远离零方向取整。扩展帧、错误 DLC、版本非 1 或保留位非 0 均整帧拒绝,不覆盖数值、不刷新超时。连续 2000 ms 未收到合规帧后,三个值同时变灰;BMS / SDC 流量不能续期。 + +CAN 工具发送样例:标准 ID `182`,DLC `8`,数据 `F4 01 C2 01 90 01 07 01`,周期 `100 ms`。可用仓库脚本发送: + +```powershell +python -m pip install -r scripts/requirements-can.txt +python scripts/send_drivetrain_can.py --torque 500 --motor-temp 45 --mcu-temp 40 --dry-run +# PCAN 当前接 CAN2,速率 250000;其他适配器按 python-can 接口参数设置 +python scripts/send_drivetrain_can.py --interface pcan --channel PCAN_USBBUS1 --bitrate 250000 --torque 500 --motor-temp 45 --mcu-temp 40 --duration 10 +``` + ## AMI 任务请求语义 | Task_ID | 任务 | @@ -160,6 +198,9 @@ Start 为 DBC 起始位,位号从 0 开始。Intel `@1` 从最低有效位起 | 高压电压 | BMS 大端 uint16 × 0.1 V;现有控件四舍五入到整数 V | 2000 ms 无有效 BMS 状态 | | 高压电流 | BMS 大端 uint16 × 0.1 - 500 A;四舍五入到整数 A | 2000 ms 无有效 BMS 状态 | | 最高单体温度 | `0x156` 有效通道最大值,或扩展帧字节 4 - 40 | 全无效或 2000 ms 无有效温度源 | +| 扭矩千分 | `0x182` 小端 int16,直接更新 `dash.mct.val` | bit0=0、超范围或 2000 ms 超时 | +| 电机温度 | `0x182` int16 × 0.1 ℃,整数显示 `dash.djwd.val` | bit1=0 或 2000 ms 超时 | +| MCU 温度 | `0x182` int16 × 0.1 ℃,整数显示 `dash.mcuwd.val` | bit2=0 或 2000 ms 超时 | 电流字段是带偏置的 uint16,不能按 int16 解码。温度原始 `0xFF` 为无效;DBC 枚举将其标为 Invalid。关闭枚举解码的工具可能显示 215,聚合时必须先排除 原始 255,不能把它当作 215 ℃。有效实际温度范围为 -40..214 ℃。第 9/10 路虚拟温度没有总线字段,最高温度也属于 MCU 派生结果,不新增虚构信号。 @@ -172,6 +213,8 @@ BMS 扩展帧的其他字段没有纳入本 DBC,尤其字节 6..7 的低压电 | ID / DLC | 数据(十六进制) | 解码及仪表显示 | | --- | --- | --- | | `0x300 / 8` | `01 02 00 01 E8 03 00 00` | 直线加速请求、序号 0、来源 AMI、上电 1000 ms | +| `0x182 / 8` | `F4 01 C2 01 90 01 07 01` | 500‰、45.0 ℃、40.0 ℃,三个值有效 | +| `0x182 / 8` | `0C FE 9B FF 33 FF 07 01` | -500‰、-10.1 ℃、-20.5 ℃;显示 -500 / -10 / -21 | | `0x6A1 / 2` | `0C 30` | ADC 12300 mV;低压 12.30 V | | `0x6A2 / 8` | `32 00 64 00 96 00 C8 00` | PA0 / PA2 / PA6 / PB14:50 / 100 / 150 / 200 Hz | | `0x140 / 8` | `0F A0 14 03 00 00 00 05` | 400.0 V / +12.3 A;显示 400 / 12 | @@ -191,8 +234,8 @@ python scripts/export_dbc_docs.py --check python scripts/verify_dbc.py --sdc-dbc ../SDC_ACQ_DAC/SDC_ACQ_DAC.dbc ``` -校验覆盖严格 DBC 解析(长度、信号越界与重叠)、10 个 ID 与固件宏对应、标准/扩展格式、33 个信号、发送/接收节点、SDC 周期、24 个已知报文解码、六个任务号与计数边界编码、大端偏置电流、无效温度枚举、全负温度和截短 DLC。已安装并验证 cantools 44.1.0,接口参考 [cantools 官方文档](https://cantools.readthedocs.io/en/latest/)。 +校验覆盖严格 DBC 解析(长度、信号越界与重叠)、11 个 ID 与固件宏对应、标准/扩展格式、40 个信号、发送/接收节点、SDC / 自定义帧周期、已知报文解码、六个任务号与计数边界编码、大端偏置电流、无效温度枚举、全负温度和截短 DLC。已安装并验证 cantools 44.1.0,接口参考 [cantools 官方文档](https://cantools.readthedocs.io/en/latest/)。 -上述是静态及软件编解码验证,另校验两份 DBC 的速率、相同信号布局及源码 / CubeMX 位时序一致。v2.1 已完成烧录、完整 Flash 回读比对、CAN1 500K 与 CAN2 250K 到官方 HMI 调试器的实物测试,详见 [双 CAN 测试报告](CAN1_CAN2_v2.1测试报告.md)。之前 v2.0 的 CAN 盒 -> 实物 AMI CAN1 / MCU -> USART2 -> COM4 -> 官方 HMI 调试器的实际更新和六个任务回传见 [联调报告](SDC_BMS联调报告.md)。物理串口屏、真实 SDC/BMS 节点、两路同时接入和车辆执行动作尚未实测;文档生成和 DBC 解析不替代这些测试。 +上述是静态及软件编解码验证,另校验两份 DBC 的速率、相同信号布局及源码 / CubeMX 位时序一致。v2.2 的烧录回读、新帧 CAN2 测试及串口显示核验状态见 [显示 CAN 测试报告](AMI自定义显示CAN测试报告.md)。v2.1 已完成烧录、完整 Flash 回读比对、CAN1 500K 与 CAN2 250K 到官方 HMI 调试器的实物测试,详见 [双 CAN 测试报告](CAN1_CAN2_v2.1测试报告.md)。之前 v2.0 的 CAN 盒 -> 实物 AMI CAN1 / MCU -> USART2 -> COM4 -> 官方 HMI 调试器的实际更新和六个任务回传见 [联调报告](SDC_BMS联调报告.md)。物理串口屏、真实 SDC/BMS 节点、两路同时接入和车辆执行动作尚未实测;文档生成和 DBC 解析不替代这些测试。 修改 AMI.dbc 后运行 `python scripts/export_dbc_docs.py` 更新 CAN2 DBC 和本文;固件字节布局、DBC 与此文档需同时保持一致。 diff --git a/docs/AMI自定义显示CAN测试报告.md b/docs/AMI自定义显示CAN测试报告.md new file mode 100644 index 0000000..f28c906 --- /dev/null +++ b/docs/AMI自定义显示CAN测试报告.md @@ -0,0 +1,43 @@ +# AMI v2.2 自定义显示 CAN 测试 + +2026-10-03,新增标准 `0x182 / DLC 8`,用 CAN 设置扭矩千分、电机温度和 MCU 温度。CAN1 500K / CAN2 250K 保持原速率;本次 CAN 盒接 CAN2,250 kbit/s。 + +## 固件和烧录 + +- STM32G0B1CBT6,ST-LINK SN `37FF71064E573436188C1543`,目标 ID `0x467`,供电 3.28 V。 +- Release 编译通过,Flash 15880 字节,RAM 2632 字节。 +- [当前 BIN](../output/firmware/AMI_Controller.bin) SHA256:`E73994418D346ADEF7E2ED5EE3C018C4CD3B74C4E4A2884CD8628218153BEA7F`。 +- 烧录返回 `Download verified successfully`,另完整回读 15880 字节,逐字节一致。 +- CAN1 / CAN2 NBTP 分别为 `0x00070C01` / `0x000F0C01`;64 MHz 时钟下为 500K / 250K,采样点 87.5%。 +- 两份 DBC 各 11 条报文、40 个信号,严格解析和 28 个已知报文校验通过;五条 SDC 布局与源 DBC 一致。 + +## CAN2 与 MCU 状态 + +CAN 盒同时发送自定义输入和 BMS `0x140 / 0x156`;未发送 SDC 报文。SWD 根据本次 ELF 符号地址读取真实 MCU 状态,检查数值、有效位和时间戳。CAN1 接收时间为 0,CAN2 接收时间有效;各阶段 CAN / UART 接收错误均为 0,PCAN 状态 `0x0`。 + +| 阶段 | 输入 / 操作 | MCU 结果 | +| --- | --- | --- | +| 正值 | `F4 01 C2 01 90 01 07 01` | 500‰ / 45℃ / 40℃,均有效 | +| 负值 | `0C FE 9B FF 33 FF 07 01` | -500‰ / -10℃ / -21℃ | +| 取整和扭矩边界 | 1000‰ / 45.5℃ / -20.5℃ | 1000 / 46 / -21 | +| 部分无效 | 标志 05,仅扭矩 / MCU 有效 | 电机温度保留旧值但无效 | +| 全无效 | 标志 00 | 三项保留旧数字,均无效 | +| 扭矩超范围 | 1200‰ / 80℃ / 60℃,标志 07 | 扭矩无效,两个温度仍有效更新 | +| 有效基线 | 重新发送正值 | 三项恢复有效 | +| 错误版本 | 字节 7 改为 02,连续发送 | 整帧拒绝,原数值保留且独立超时 | +| 非零保留位 | 字节 6 改为 87 | 不更新值、不刷新时间戳 | +| 截短 DLC | DLC 7 | 不更新值、不刷新时间戳 | +| 错误帧类型 | 扩展 ID 182 | 不更新值、不刷新时间戳 | +| 恢复 | -250‰ / 70℃ / 55℃ | 三项恢复有效 | +| 独立超时 | 仅停止 0x182,BMS 持续发送 | 三项失效,BMS 400V / 12A / 40℃ 持续有效 | +| 再恢复 | 正值报文 | 三项恢复有效 | + +## 串口与 HMI 核验状态 + +本次 MCU 状态测试已通过;官方 HMI 调试窗口的显示更新尚未确认。COM4 9600 8N1 直接接收 6 秒得到 0 字节;电脑发送 `AA 55 01 02 0D 0A` 后收到 CAN2 标准 `0x300` 请求,说明电脑到 MCU 方向有效,MCU 到电脑方向待检查 PA2 -> 转串口 RXD 接线。不能据 MCU 数值正确宣称屏幕已更新。 + +随后在官方调试器点击六个任务按钮,每个任务先取消再确认:六个取消均无 `0x300`,六个确认均收到一条正确标准 `0x300 / DLC 8`,任务号 1..6、序号 0..5。此结果验证 HMI 操作到 MCU 再到 CAN2 的方向;不作为 CAN 输入到 HMI 数值更新的证据。发布的发送脚本另实际发送 30 条 `0x182`,每 100 ms 一条,3 秒后自动停止。 + +本次未重新接 CAN1 验证新帧;CAN1 与 CAN2 共享解码器和相同过滤 ID,属于源码 / 配置校验。未接物理串口屏、真实 BMS / 电机控制器或同时接两路。扭矩输入仅用于仪表显示。 + +证据见 [发送帧与状态](evidence/2026-10-03/v2.2-display/display-results.json)、[烧录回读](evidence/2026-10-03/v2.2-display/flash-verified.json)、[任务回传](evidence/2026-10-03/v2.2-display/task-results.json)、[串口诊断](evidence/2026-10-03/v2.2-display/uart-diagnostic.json)。v2.1 双 CAN 历史证据及 BIN 见 [双 CAN 报告](CAN1_CAN2_v2.1测试报告.md)。 diff --git a/docs/CAN1_CAN2_v2.1测试报告.md b/docs/CAN1_CAN2_v2.1测试报告.md index 1ceca8d..f01e8ea 100644 --- a/docs/CAN1_CAN2_v2.1测试报告.md +++ b/docs/CAN1_CAN2_v2.1测试报告.md @@ -2,6 +2,8 @@ 2026-10-03,固件来源提交 `9120bd0`。实际链路为 PCAN-USB CAN 盒 -> 实物 AMI MCU -> USART2 PA2/PA3 -> CH340 COM4(9600 8N1)-> USART HMI 官方调试器。先测试 CAN1,通知用户切换接线并收到确认后,再测试 CAN2。 +本报告为 v2.1 历史记录,对应 [归档 BIN](../output/firmware/AMI_Controller_v2.1_500k_250k.bin)。通用 `AMI_Controller.bin` 已更新为 v2.2,请勿把本报告的双 CAN 结果直接套用于后续版本。 + CAN1 按 SDC 的 500 kbit/s 使用,CAN2 按 BMS 的 250 kbit/s 使用。此次用 CAN 盒模拟源报文,未连接真实 SDC/BMS 节点或物理串口屏;未同时连接两路。 ## 烧录与实际位时序 diff --git a/docs/SDC_BMS协议.md b/docs/SDC_BMS协议.md index cba9679..57a9be2 100644 --- a/docs/SDC_BMS协议.md +++ b/docs/SDC_BMS协议.md @@ -1,6 +1,6 @@ # AMI 接入 SDC / BMS 协议 -版本 2.1,2026-10-03。CAN1 为 500 kbit/s,CAN2 为 250 kbit/s;两路均为 Classic CAN、87.5% 采样点,接收 ID、解码和任务发送功能相同,不转发原始帧。CAN1 使用 [AMI.dbc](../AMI.dbc),CAN2 使用 [AMI_CAN2_250k.dbc](../AMI_CAN2_250k.dbc)。当前固件不再接收旧 `0x180 / 0x181 / 0x280` 数据接口。 +版本 2.2,2026-10-03。CAN1 为 500 kbit/s,CAN2 为 250 kbit/s;两路均为 Classic CAN、87.5% 采样点,接收 ID、解码和任务发送功能相同,不转发原始帧。CAN1 使用 [AMI.dbc](../AMI.dbc),CAN2 使用 [AMI_CAN2_250k.dbc](../AMI_CAN2_250k.dbc)。当前固件不再接收旧 `0x180 / 0x181 / 0x280` 数据接口。 v2.1 已通过源码 / CubeMX 位时序一致性检查及 Release 编译,已烧录并完整回读比对;CAN1 500K(SDC)与 CAN2 250K(BMS)分别通过数据更新、失效恢复和六个任务确认/取消测试,见 [双 CAN 测试报告](CAN1_CAN2_v2.1测试报告.md)。本文后面旧的实物联调引用属于两路均为 500K 的 v2.0。 @@ -53,6 +53,8 @@ USART2 为 9600、8N1,PA2 TX / PA3 RX。命令为 ASCII,末尾三个真实 ` ## 任务回传 +另有 v2.2 新增的标准 `0x182` 仪表显示输入,设置扭矩千分、电机温度和 MCU 温度,三个值独立于 BMS / SDC 计时。该自定义接口不改变本文的源协议字段,详见 [DBC 说明](AMI_CAN_DBC说明.md)。 + 屏幕确认后发送 `AA 55 01 NN 0D 0A`,`NN=01..06`;取消不发送。MCU 用 Receive-to-Idle DMA 按字节流解析拆包/粘包。 MCU 发出标准 `0x300 / 8`:版本 1、任务号、uint8 序号、来源 1、uint32 小端 MCU ms。任务依次为八字绕环、直线加速、高速循迹、车检测试、EBS 测试、手动驾驶。此接口是原有 AMI 请求,**不是 SDC DBC 定义的 ASSI 控制**;没有 VCU 映射前不把任务号直接写成 `0x6A5` 灯状态。 @@ -61,10 +63,10 @@ MCU 发出标准 `0x300 / 8`:版本 1、任务号、uint8 序号、来源 1、 PA0 LED 每 500 ms 翻转,PA1 为仪表/SDC 状态活动超时提示,默认高电平有效;尚未观察验证灯的物理极性和行为,活动灯不能替代每个数值的有效性判断。 -## 验证范围 +## v2.0 历史验证范围 已完成 Release 编译、SWD 烧录校验、HMI 编译(0 错误 / 0 警告),以及 **CAN 盒 → 实物 AMI CAN1 → MCU USART2 → COM4 → 官方 HMI 调试器** 数据更新测试。 同时发送 SDC 20 ms 频率、100 ms 心跳、500 ms ADC 和 BMS 报文,验证标准/扩展 BMS、负电流、无效温度、独立超时、恢复、错误 DLC 和旧 ID 拒绝。原始帧、截图和 SWD 快照见 [发布的发送记录](evidence/2026-10-03/sdc-bms/sdc_bms_visual_results.json)。 -CAN2 配置及过滤寄存器与 CAN1 相同,但本次未接线实测 CAN2。未测试物理串口屏,未接真实 SDC/BMS 节点,未验证 VCU 实际执行或安全动作。现有画面的 EBS 文案不能作为安全状态证明。 +上述 v2.0 测试未接线实测 CAN2。后续 v2.1 已按 CAN1 500K / CAN2 250K 分别测试,见 [双 CAN 报告](CAN1_CAN2_v2.1测试报告.md);当前 v2.2 见 [显示 CAN 报告](AMI自定义显示CAN测试报告.md)。未测试物理串口屏,未接真实 SDC/BMS 节点,未验证 VCU 实际执行或安全动作。现有画面的 EBS 文案不能作为安全状态证明。 diff --git a/docs/evidence/2026-10-03/v2.2-display/all_invalid_ram.log b/docs/evidence/2026-10-03/v2.2-display/all_invalid_ram.log new file mode 100644 index 0000000..3e31a1e --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/all_invalid_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 00031E98 +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 00031E98 +0x200002FC : 00031E97 00031E97 00000000 00000000 +0x2000030C : 00031E98 00000000 00000000 00000190 +0x2000031C : FFFFFC18 0000000C 0000002E 00000032 +0x2000032C : 00000028 00000000 0000004A 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/baseline_ram.log b/docs/evidence/2026-10-03/v2.2-display/baseline_ram.log new file mode 100644 index 0000000..5842062 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/baseline_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 0003287A +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 0003287A +0x200002FC : 0003287A 00032879 00000000 00000000 +0x2000030C : 0003287A 00000000 00000000 00000190 +0x2000031C : 000001F4 0000000C 0000002D 00000028 +0x2000032C : 00000028 00000000 0000007E 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/can1-nbtp.log b/docs/evidence/2026-10-03/v2.2-display/can1-nbtp.log new file mode 100644 index 0000000..0eb533f --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/can1-nbtp.log @@ -0,0 +1,27 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 4 Bytes + Address: : 0x4000641C + +0x4000641C : 00070C01 + + diff --git a/docs/evidence/2026-10-03/v2.2-display/can2-nbtp.log b/docs/evidence/2026-10-03/v2.2-display/can2-nbtp.log new file mode 100644 index 0000000..74923c2 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/can2-nbtp.log @@ -0,0 +1,27 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 4 Bytes + Address: : 0x4000681C + +0x4000681C : 000F0C01 + + diff --git a/docs/evidence/2026-10-03/v2.2-display/display-results.json b/docs/evidence/2026-10-03/v2.2-display/display-results.json new file mode 100644 index 0000000..9b596e2 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/display-results.json @@ -0,0 +1,5639 @@ +{ + "result": "CAN2 MCU state checks passed; HMI display unconfirmed", + "stages": [ + { + "name": "positive", + "display_input": "f4 01 c2 01 90 01 07 01", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + 500, + 12, + 45, + 40, + 40, + 0 + ], + "valid": 126, + "can_port_last_rx_ms": [ + 0, + 199393 + ], + "drivetrain_last_rx_ms": 199393, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "negative", + "display_input": "0c fe 9b ff 33 ff 07 01", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + -500, + 12, + -10, + -21, + 40, + 0 + ], + "valid": 126, + "can_port_last_rx_ms": [ + 0, + 200598 + ], + "drivetrain_last_rx_ms": 200598, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "rounding", + "display_input": "e8 03 c7 01 33 ff 07 01", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + 1000, + 12, + 46, + -21, + 40, + 0 + ], + "valid": 126, + "can_port_last_rx_ms": [ + 0, + 201905 + ], + "drivetrain_last_rx_ms": 201905, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "partial_invalid", + "display_input": "18 fc d2 04 f4 01 05 01", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + -1000, + 12, + 46, + 50, + 40, + 0 + ], + "valid": 110, + "can_port_last_rx_ms": [ + 0, + 203135 + ], + "drivetrain_last_rx_ms": 203135, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "all_invalid", + "display_input": "00 00 00 00 00 00 00 01", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + -1000, + 12, + 46, + 50, + 40, + 0 + ], + "valid": 74, + "can_port_last_rx_ms": [ + 0, + 204440 + ], + "drivetrain_last_rx_ms": 204440, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "out_of_range", + "display_input": "b0 04 20 03 58 02 07 01", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + -1000, + 12, + 80, + 60, + 40, + 0 + ], + "valid": 122, + "can_port_last_rx_ms": [ + 0, + 205664 + ], + "drivetrain_last_rx_ms": 205664, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "baseline", + "display_input": "f4 01 c2 01 90 01 07 01", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + 500, + 12, + 45, + 40, + 40, + 0 + ], + "valid": 126, + "can_port_last_rx_ms": [ + 0, + 206970 + ], + "drivetrain_last_rx_ms": 206970, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "wrong_version", + "display_input": "84 03 84 03 84 03 07 02", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + 500, + 12, + 45, + 40, + 40, + 0 + ], + "valid": 74, + "can_port_last_rx_ms": [ + 0, + 210083 + ], + "drivetrain_last_rx_ms": 206970, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "reserved_bits", + "display_input": "84 03 84 03 84 03 87 01", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + 500, + 12, + 45, + 40, + 40, + 0 + ], + "valid": 74, + "can_port_last_rx_ms": [ + 0, + 211287 + ], + "drivetrain_last_rx_ms": 206970, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "truncated", + "display_input": "84 03 84 03 84 03 07", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + 500, + 12, + 45, + 40, + 40, + 0 + ], + "valid": 74, + "can_port_last_rx_ms": [ + 0, + 212593 + ], + "drivetrain_last_rx_ms": 206970, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "extended", + "display_input": "84 03 84 03 84 03 07 01", + "input_id": "0x182", + "extended": true, + "snapshot": { + "values": [ + 0, + 400, + 500, + 12, + 45, + 40, + 40, + 0 + ], + "valid": 74, + "can_port_last_rx_ms": [ + 0, + 213896 + ], + "drivetrain_last_rx_ms": 206970, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "recovered", + "display_input": "06 ff bc 02 26 02 07 01", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + -250, + 12, + 70, + 55, + 40, + 0 + ], + "valid": 126, + "can_port_last_rx_ms": [ + 0, + 215114 + ], + "drivetrain_last_rx_ms": 215114, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "source_timeout", + "display_input": null, + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + -250, + 12, + 70, + 55, + 40, + 0 + ], + "valid": 74, + "can_port_last_rx_ms": [ + 0, + 217824 + ], + "drivetrain_last_rx_ms": 215215, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + }, + { + "name": "final_recovered", + "display_input": "f4 01 c2 01 90 01 07 01", + "input_id": "0x182", + "extended": false, + "snapshot": { + "values": [ + 0, + 400, + 500, + 12, + 45, + 40, + 40, + 0 + ], + "valid": 126, + "can_port_last_rx_ms": [ + 0, + 219053 + ], + "drivetrain_last_rx_ms": 219053, + "can_errors": 0, + "uart_errors": 0 + }, + "pcan_status": "0x0" + } + ], + "tx": [ + { + "time_s": 0.1172, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 0.1173, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 0.1174, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 0.2171, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 0.2171, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 0.2172, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 0.3176, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 0.3177, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 0.3177, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 0.4176, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 0.4176, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 0.4177, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 0.5183, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 0.5183, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 0.5184, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 0.6184, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 0.6184, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 0.6185, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 0.7185, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 0.7185, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 0.7185, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 0.8195, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 0.8195, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 0.8195, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 0.9202, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 0.9203, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 0.9203, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 1.0203, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 1.0204, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 1.0204, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 1.121, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 1.121, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 1.121, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 1.2209, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 1.2209, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 1.2209, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 1.3209, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 1.3209, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 1.3209, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 1.422, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 1.4221, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 1.4221, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 1.523, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 1.523, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 1.523, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 1.623, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 1.623, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 1.623, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 1.724, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 1.724, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 1.724, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 1.8244, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 1.8244, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 1.8244, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 1.9252, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 1.9253, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 1.9253, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 2.0259, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 2.0259, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 2.0259, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 2.1259, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 2.1259, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 2.126, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 2.2262, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 2.2262, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 2.2262, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 2.3271, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 2.3271, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 2.3272, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 2.4278, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 2.4279, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 2.4279, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 2.528, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 2.528, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 2.5281, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 2.6283, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 2.6284, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 2.6284, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 2.7292, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 2.7292, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 2.7292, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 2.8291, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 2.8291, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 2.8292, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 2.9293, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 2.9293, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 2.9293, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 3.03, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 3.03, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 3.03, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 3.1308, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 3.1309, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 3.1309, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 3.2311, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 3.2311, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 3.2311, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 3.332, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 3.3321, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 3.3321, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 3.4325, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 3.4326, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 3.4326, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 3.5337, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 3.5337, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 3.5337, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 3.6341, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 3.6342, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 3.6342, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 3.7344, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 3.7345, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 3.7345, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 3.8353, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 3.8353, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 3.8353, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 3.9359, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 3.936, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 3.936, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 4.036, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 4.0361, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 4.0361, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 4.1364, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 4.1364, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 4.1364, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 4.2364, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 4.2365, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 4.2365, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 4.3367, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 4.3368, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 4.3368, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 4.4374, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 4.4374, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 4.4374, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 4.5381, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 4.5382, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 4.5382, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 4.6391, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 4.6391, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 4.6391, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 4.7396, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 4.7397, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 4.7397, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 4.84, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 4.8401, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 4.8401, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 4.9401, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 4.9402, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 4.9402, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 5.0409, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 5.041, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 5.041, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 5.1421, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 5.1421, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 5.1422, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 5.2427, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 5.2428, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 5.2428, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 5.3433, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 5.3433, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 5.3433, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 5.4434, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 5.4435, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 5.4435, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 5.544, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 5.544, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 5.544, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 5.6446, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 5.6446, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 5.6446, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 5.7455, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 5.7456, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 5.7456, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 5.8465, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 5.8466, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 5.8466, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 5.9465, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 5.9465, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 5.9465, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 6.047, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 6.047, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 6.047, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 6.1485, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 6.1486, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 6.1486, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 6.2491, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 6.2491, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 6.2491, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 6.3495, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 6.3496, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 6.3496, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 6.4498, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 6.4498, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 6.4498, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 6.5508, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 6.5509, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 6.5509, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 6.6511, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 6.6511, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 6.6511, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 6.7514, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 6.7514, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 6.7515, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 6.8524, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 6.8524, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 6.8525, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 6.9528, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 6.9528, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 6.9529, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 7.0535, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 7.0535, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 7.0535, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 7.1537, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 7.1537, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 7.1537, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 7.2537, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 7.2538, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 7.2538, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 7.3548, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 7.3548, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 7.3548, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 7.4548, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 7.4548, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 7.4549, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 7.5554, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 7.5555, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 7.5555, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 7.656, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 7.656, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 7.6561, + "id": "0x182", + "extended": false, + "data": "0c fe 9b ff 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 7.7568, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 7.7568, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 7.7568, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 7.8571, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 7.8572, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 7.8572, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 7.9574, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 7.9574, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 7.9574, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 8.0579, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 8.0579, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 8.0579, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 8.1588, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 8.1588, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 8.1588, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 8.2594, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 8.2594, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 8.2594, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 8.3603, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 8.3604, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 8.3604, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 8.4606, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 8.4606, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 8.4606, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 8.5614, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 8.5615, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 8.5615, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 8.6623, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 8.6623, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 8.6623, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 8.7631, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 8.7631, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 8.7631, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 8.8632, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 8.8632, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 8.8633, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 8.9644, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 8.9645, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 8.9645, + "id": "0x182", + "extended": false, + "data": "e8 03 c7 01 33 ff 07 01", + "dlc": 8 + }, + { + "time_s": 9.0648, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 9.0648, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 9.0648, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 9.1651, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 9.1651, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 9.1651, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 9.2658, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 9.2659, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 9.2659, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 9.3666, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 9.3666, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 9.3667, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 9.4677, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 9.4677, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 9.4677, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 9.568, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 9.5681, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 9.5681, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 9.6685, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 9.6685, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 9.6686, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 9.7695, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 9.7695, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 9.7696, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 9.8697, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 9.8697, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 9.8697, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 9.9952, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 9.9953, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 9.9953, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 10.0946, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 10.0946, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 10.0946, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 10.1948, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 10.1948, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 10.1949, + "id": "0x182", + "extended": false, + "data": "18 fc d2 04 f4 01 05 01", + "dlc": 8 + }, + { + "time_s": 10.2957, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 10.2957, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 10.2958, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 10.3967, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 10.3968, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 10.3968, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 10.4975, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 10.4975, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 10.4975, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 10.5977, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 10.5978, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 10.5978, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 10.6984, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 10.6985, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 10.6985, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 10.7984, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 10.7985, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 10.7985, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 10.8985, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 10.8985, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 10.8985, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 10.9989, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 10.999, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 10.999, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 11.0989, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 11.0989, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 11.099, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 11.1991, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 11.1991, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 11.1991, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 11.2993, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 11.2993, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 11.2993, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 11.4003, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 11.4003, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 11.4003, + "id": "0x182", + "extended": false, + "data": "00 00 00 00 00 00 00 01", + "dlc": 8 + }, + { + "time_s": 11.5012, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 11.5013, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 11.5013, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 11.6016, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 11.6016, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 11.6017, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 11.7025, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 11.7025, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 11.7025, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 11.8026, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 11.8026, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 11.8026, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 11.9033, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 11.9033, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 11.9034, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 12.0034, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 12.0034, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 12.0034, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 12.1037, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 12.1037, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 12.1038, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 12.2038, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 12.2039, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 12.2039, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 12.3045, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 12.3045, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 12.3045, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 12.4048, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 12.4048, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 12.4049, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 12.5255, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 12.5255, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 12.5255, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 12.6251, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 12.6251, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 12.6251, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 12.725, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 12.7251, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 12.7251, + "id": "0x182", + "extended": false, + "data": "b0 04 20 03 58 02 07 01", + "dlc": 8 + }, + { + "time_s": 12.8254, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 12.8255, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 12.8255, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 12.9265, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 12.9265, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 12.9265, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 13.0271, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 13.0271, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 13.0271, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 13.128, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 13.128, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 13.1281, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 13.2282, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 13.2283, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 13.2283, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 13.3287, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 13.3288, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 13.3288, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 13.43, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 13.43, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 13.43, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 13.5307, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 13.5307, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 13.5308, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 13.6311, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 13.6312, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 13.6312, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 13.7316, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 13.7316, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 13.7316, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 13.832, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 13.832, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 13.832, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 13.9329, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 13.9329, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 13.933, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 14.0336, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 14.0337, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 14.0337, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 14.1345, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 14.1345, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 14.1346, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 14.2347, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 14.2347, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 14.2347, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 14.3349, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 14.3349, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 14.3349, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 14.435, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 14.435, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 14.4351, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 14.535, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 14.535, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 14.535, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 14.6354, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 14.6354, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 14.6354, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 14.7363, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 14.7363, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 14.7363, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 14.8371, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 14.8372, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 14.8372, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 14.938, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 14.938, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 14.9381, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 15.0385, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 15.0386, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 15.0386, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 15.1391, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 15.1392, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 15.1392, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 15.2396, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 15.2396, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 15.2396, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 15.3403, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 15.3404, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 15.3404, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 15.4413, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 15.4413, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 15.4413, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 15.5418, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 15.5418, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 15.5418, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 15.6422, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 15.6422, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 15.6422, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 15.7424, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 15.7424, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 15.7424, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 15.8426, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 15.8427, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 15.8427, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 15.9434, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 15.9434, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 15.9434, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 16.044, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 16.0441, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 16.0441, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 16.1442, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 16.1442, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 16.1443, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 16.2444, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 16.2444, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 16.2444, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 16.3449, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 16.3449, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 16.345, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 16.446, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 16.446, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 16.446, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 16.5468, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 16.5468, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 16.5468, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 16.6468, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 16.6468, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 16.6468, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 16.7474, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 16.7475, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 16.7475, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 16.8482, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 16.8482, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 16.8483, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 16.9485, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 16.9485, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 16.9486, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 17.0489, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 17.049, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 17.049, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07 02", + "dlc": 8 + }, + { + "time_s": 17.149, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 17.1491, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 17.1491, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 17.249, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 17.2491, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 17.2491, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 17.3492, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 17.3493, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 17.3493, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 17.45, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 17.45, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 17.45, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 17.5505, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 17.5506, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 17.5506, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 17.6506, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 17.6506, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 17.6506, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 17.7507, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 17.7507, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 17.7507, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 17.8512, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 17.8512, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 17.8512, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 17.9521, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 17.9521, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 17.9522, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 18.0529, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 18.053, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 18.053, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 18.1537, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 18.1537, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 18.1538, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 18.2539, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 18.2539, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 18.2539, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 18.3548, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 18.3548, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 18.3548, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 87 01", + "dlc": 8 + }, + { + "time_s": 18.4553, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 18.4553, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 18.4553, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 18.5557, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 18.5558, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 18.5558, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 18.6562, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 18.6563, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 18.6563, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 18.7566, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 18.7566, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 18.7566, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 18.8575, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 18.8575, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 18.8576, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 18.9575, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 18.9576, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 18.9576, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 19.0581, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 19.0582, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 19.0582, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 19.1588, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 19.1588, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 19.1589, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 19.259, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 19.259, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 19.259, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 19.3596, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 19.3596, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 19.3596, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 19.4603, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 19.4603, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 19.4603, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 19.561, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 19.5611, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 19.5611, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 19.6613, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 19.6614, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 19.6614, + "id": "0x182", + "extended": false, + "data": "84 03 84 03 84 03 07", + "dlc": 7 + }, + { + "time_s": 19.7624, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 19.7624, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 19.7624, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 19.8623, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 19.8623, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 19.8623, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 19.9627, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 19.9627, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 19.9627, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 20.0628, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 20.0628, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 20.0629, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 20.163, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 20.163, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 20.163, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 20.2634, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 20.2634, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 20.2635, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 20.3634, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 20.3634, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 20.3635, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 20.4644, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 20.4644, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 20.4644, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 20.5646, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 20.5646, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 20.5646, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 20.6646, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 20.6647, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 20.6647, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 20.7648, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 20.7648, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 20.7648, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 20.8657, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 20.8657, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 20.8657, + "id": "0x182", + "extended": true, + "data": "84 03 84 03 84 03 07 01", + "dlc": 8 + }, + { + "time_s": 20.9665, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 20.9665, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 20.9665, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 21.0674, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 21.0674, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 21.0674, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 21.1678, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 21.1679, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 21.1679, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 21.2688, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 21.2688, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 21.2688, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 21.3688, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 21.3689, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 21.3689, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 21.4689, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 21.4689, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 21.4689, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 21.5693, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 21.5693, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 21.5693, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 21.6695, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 21.6696, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 21.6696, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 21.7696, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 21.7697, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 21.7697, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 21.8705, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 21.8705, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 21.8705, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 21.9851, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 21.9851, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 21.9851, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 22.0847, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 22.0847, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 22.0847, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 22.185, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 22.1851, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 22.1851, + "id": "0x182", + "extended": false, + "data": "06 ff bc 02 26 02 07 01", + "dlc": 8 + }, + { + "time_s": 22.2856, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 22.2857, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 22.3861, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 22.3862, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 22.4871, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 22.4871, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 22.5874, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 22.5874, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 22.6884, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 22.6884, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 22.7889, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 22.7889, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 22.8895, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 22.8895, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 22.9897, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 22.9898, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 23.0902, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 23.0902, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 23.1902, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 23.1903, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 23.2909, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 23.2909, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 23.3914, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 23.3914, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 23.4915, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 23.4916, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 23.593, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 23.593, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 23.6936, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 23.6936, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 23.7941, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 23.7942, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 23.8941, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 23.8941, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 23.9947, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 23.9948, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 24.0948, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 24.0949, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 24.195, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 24.1951, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 24.2953, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 24.2953, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 24.3957, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 24.3958, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 24.496, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 24.4961, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 24.5971, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 24.5971, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 24.6972, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 24.6973, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 24.7978, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 24.7978, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 24.8986, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 24.8988, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 24.9987, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 24.9988, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 24.9988, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 25.0996, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 25.0996, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 25.0997, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 25.1997, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 25.1997, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 25.1997, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 25.3005, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 25.3005, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 25.3005, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 25.4013, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 25.4013, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 25.4013, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 25.5022, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 25.5022, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 25.5022, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 25.6026, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 25.6026, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 25.6026, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 25.7028, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 25.7028, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 25.7028, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 25.803, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 25.803, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 25.8031, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 25.9271, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 25.9271, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 25.9271, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 26.0273, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 26.0273, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 26.0274, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + }, + { + "time_s": 26.1279, + "id": "0x140", + "extended": false, + "data": "0f a0 14 03 00 00 00 05", + "dlc": 8 + }, + { + "time_s": 26.128, + "id": "0x156", + "extended": false, + "data": "42 ff 43 47 37 0a 50 41", + "dlc": 8 + }, + { + "time_s": 26.128, + "id": "0x182", + "extended": false, + "data": "f4 01 c2 01 90 01 07 01", + "dlc": 8 + } + ], + "pcan_status": "0x0", + "sdc_frames_sent": false, + "path": "PCAN-USB CAN2 250K -> real AMI MCU; USART2 / COM4 output currently not received", + "hmi_display_verified": false +} \ No newline at end of file diff --git a/docs/evidence/2026-10-03/v2.2-display/extended_ram.log b/docs/evidence/2026-10-03/v2.2-display/extended_ram.log new file mode 100644 index 0000000..13e4017 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/extended_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 00034388 +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 0003287A +0x200002FC : 00034388 00034387 00000000 00000000 +0x2000030C : 00034388 00000000 00000000 00000190 +0x2000031C : 000001F4 0000000C 0000002D 00000028 +0x2000032C : 00000028 00000000 0000004A 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/final_recovered_ram.log b/docs/evidence/2026-10-03/v2.2-display/final_recovered_ram.log new file mode 100644 index 0000000..c66ac12 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/final_recovered_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 000357AD +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 000357AD +0x200002FC : 000357AD 000357AC 00000000 00000000 +0x2000030C : 000357AD 00000000 00000000 00000190 +0x2000031C : 000001F4 0000000C 0000002D 00000028 +0x2000032C : 00000028 00000000 0000007E 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/flash-readback.log b/docs/evidence/2026-10-03/v2.2-display/flash-readback.log new file mode 100644 index 0000000..c74d9f1 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/flash-readback.log @@ -0,0 +1,29 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +UPLOADING ... + File : D:\YMR\AMI\tmp\can-display-v22-test-20261003\flash-readback.bin + Size : 15880 Bytes + Address: : 0x8000000 +Read progress: +±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± 0% ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ 100% + +Data read successfully +Time elapsed during read operation is: 00:00:00.252 diff --git a/docs/evidence/2026-10-03/v2.2-display/flash-verified.json b/docs/evidence/2026-10-03/v2.2-display/flash-verified.json new file mode 100644 index 0000000..ac3f0d7 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/flash-verified.json @@ -0,0 +1,6 @@ +{ + "bytes": 15880, + "sha256": "E73994418D346ADEF7E2ED5EE3C018C4CD3B74C4E4A2884CD8628218153BEA7F", + "flash_verified": true, + "full_readback_identical": true +} \ No newline at end of file diff --git a/docs/evidence/2026-10-03/v2.2-display/flash.log b/docs/evidence/2026-10-03/v2.2-display/flash.log new file mode 100644 index 0000000..0115179 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/flash.log @@ -0,0 +1,56 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Under Reset +Reset mode : Hardware reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + + +Opening and parsing file: AMI_Controller.bin + + +Memory Programming ... + File : AMI_Controller.bin + Size : 15.51 KB + Address : 0x08000000 + + +Erasing memory corresponding to segment 0: +Erasing internal memory sectors [0 7] +Download in Progress: +±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± 0% ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ 100% + +File download complete +Time elapsed during download operation: 00:00:00.762 + + + +Verifying... + + +Read progress: +±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± 50% ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ 100% + +Time elapsed during verifying operation: 00:00:00.252 + + +Download verified successfully + + + +MCU Reset + +Software reset is performed diff --git a/docs/evidence/2026-10-03/v2.2-display/hmi-not-updated.png b/docs/evidence/2026-10-03/v2.2-display/hmi-not-updated.png new file mode 100644 index 0000000..fd35dac Binary files /dev/null and b/docs/evidence/2026-10-03/v2.2-display/hmi-not-updated.png differ diff --git a/docs/evidence/2026-10-03/v2.2-display/manifest.sha256.json b/docs/evidence/2026-10-03/v2.2-display/manifest.sha256.json new file mode 100644 index 0000000..074843a --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/manifest.sha256.json @@ -0,0 +1,29 @@ +{ + "all_invalid_ram.log": "4c5aec9dc454cfcabdd74a9fee1f173c6debfa17498c0c8194628b7a1aaa99d2", + "baseline_ram.log": "99821ebe2305bb7e04da970f4c191ae1d9bfe6b076d47003d0b2511e028ca9e0", + "can1-nbtp.log": "cab2516dc364f705b4d76aebefaa6c74c2613508df26602c7bceb3f0d28bdc3f", + "can2-nbtp.log": "5a4ab1de646f825fb1f10de307c835e1d5bdaeba26b203bf39188cb9a4307684", + "display-results.json": "2a8772323cd8a29988ed3f1abee28dd91bcfcc776f86d08b5db1b3268d88687f", + "extended_ram.log": "659a043bc153e36b968797d182f458b5461d7e17059accf41efabb1543be07b2", + "final_recovered_ram.log": "28e14f32a0712ec0cbd47f65ecdb7aa02608c4d123ba31e3322473bea46d3c59", + "flash-readback.log": "5269ba5a41f38ffbf61e82f54b9f1bd0590d9074b4efd52700e9a63123b84cab", + "flash-verified.json": "884caaaa1f340ee008e9629f927230f4fa6fef65c6e09184f7f0b68160ec8924", + "flash.log": "bce4b434ea80aec044a9bc10e31a2701d5179ad7939c33f39f13acd2f36db47c", + "hmi-not-updated.png": "3382d2407b4238829f76bbc4beb290451ff2fc51d7e007d23fd95edbda5faafc", + "negative_ram.log": "b3b05102cb09e552ec151cb2e4ebc92c33fdab4a0a9c2303980556ebf7c528ad", + "out_of_range_ram.log": "fa0c56aaff993322bc358f447161006e352c557fc7c264ff2bc302812fa6c2f2", + "partial_invalid_ram.log": "b857e871f6ef4a26bbe485c6a68f9e34a790e9e5f3932561a30c7096d7a1cd12", + "positive_ram.log": "1bf1ae2e0c8fcdd843fad842c0c766c2dceec5cbfcb0eef92b4b708a5ff51333", + "recovered_ram.log": "4027dd15d4d1c47f8100ac40e37bc313c3370856fd6b9fb0c775e5c65e86bd85", + "reject_baseline_ram.log": "1d95a37bdee533c131bf1e70e884a2ad624d4125081571f9b7d47b38363ef366", + "reserved_bits_ram.log": "a40b1c3867115835703c1f891f4309d0d2de475709816dc3d291416a58736854", + "rounding_ram.log": "4e11287a4ccc6362108de61c322dad78471fe296a14789d8cad121a34d0378a9", + "source_timeout_ram.log": "128f9fd78c10d26bd92ae36f0d6bccab732b6d594e21123d01e6a719eba4b9f2", + "symbols.json": "cb979c1b25e3b55d7ffaf378f7ad90b8e34b4b282e23eeb766fe61d36087e2d4", + "task-reset.log": "541d5b7b95ef470302a7cf87b29215fac268331a31b172d193b6ec1625b9bc7c", + "task-results.json": "496d10c60935c09d0aa8cb5f28c5b38eda225c560325c552eb9cd2bc5adcfe18", + "truncated_ram.log": "dfac2f39b7d5a951645e29546382954f2f7bfe19ca4e716adb607e64ffc559a0", + "uart-diagnostic.bin": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "uart-diagnostic.json": "4edb6c1a0cbdedb87936f264b4e0445c46b96454ebbd90d7938f42b5e2802edd", + "wrong_version_ram.log": "560afd44bc00d332c7ac3b81b35e968e3cce4e10185e78a8389be224bea27514" +} \ No newline at end of file diff --git a/docs/evidence/2026-10-03/v2.2-display/negative_ram.log b/docs/evidence/2026-10-03/v2.2-display/negative_ram.log new file mode 100644 index 0000000..5b05cbb --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/negative_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 00030F96 +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 00030F96 +0x200002FC : 00030F96 00030F95 00000000 00000000 +0x2000030C : 00030F96 00000000 00000000 00000190 +0x2000031C : FFFFFE0C 0000000C FFFFFFF6 FFFFFFEB +0x2000032C : 00000028 00000000 0000007E 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/out_of_range_ram.log b/docs/evidence/2026-10-03/v2.2-display/out_of_range_ram.log new file mode 100644 index 0000000..7964f1a --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/out_of_range_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 00032360 +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 00032360 +0x200002FC : 0003235F 0003235F 00000000 00000000 +0x2000030C : 00032360 00000000 00000000 00000190 +0x2000031C : FFFFFC18 0000000C 00000050 0000003C +0x2000032C : 00000028 00000000 0000007A 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/partial_invalid_ram.log b/docs/evidence/2026-10-03/v2.2-display/partial_invalid_ram.log new file mode 100644 index 0000000..1e4e438 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/partial_invalid_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 0003197F +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 0003197F +0x200002FC : 0003197F 0003197E 00000000 00000000 +0x2000030C : 0003197F 00000000 00000000 00000190 +0x2000031C : FFFFFC18 0000000C 0000002E 00000032 +0x2000032C : 00000028 00000000 0000006E 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/positive_ram.log b/docs/evidence/2026-10-03/v2.2-display/positive_ram.log new file mode 100644 index 0000000..12e724b --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/positive_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 00030AE1 +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 00030AE1 +0x200002FC : 00030AE1 00030AE0 00000000 00000000 +0x2000030C : 00030AE1 00000000 00000000 00000190 +0x2000031C : 000001F4 0000000C 0000002D 00000028 +0x2000032C : 00000028 00000000 0000007E 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/recovered_ram.log b/docs/evidence/2026-10-03/v2.2-display/recovered_ram.log new file mode 100644 index 0000000..a3707b0 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/recovered_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 0003484A +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 0003484A +0x200002FC : 0003484A 00034849 00000000 00000000 +0x2000030C : 0003484A 07FFFFE0 00000000 00000190 +0x2000031C : FFFFFF06 0000000C 00000046 00000037 +0x2000032C : 00000028 00000000 0000007E 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/reject_baseline_ram.log b/docs/evidence/2026-10-03/v2.2-display/reject_baseline_ram.log new file mode 100644 index 0000000..8b2730b --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/reject_baseline_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 00032A0B +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 0003287A +0x200002FC : 00032A0B 00032A0B 00000000 00000000 +0x2000030C : 00032A0B 00000000 00000000 00000190 +0x2000031C : 000001F4 0000000C 0000002D 00000028 +0x2000032C : 00000028 00000000 0000007E 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/reserved_bits_ram.log b/docs/evidence/2026-10-03/v2.2-display/reserved_bits_ram.log new file mode 100644 index 0000000..668bc8a --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/reserved_bits_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 00033957 +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 0003287A +0x200002FC : 00033957 00033956 00000000 00000000 +0x2000030C : 00033957 00000000 00000000 00000190 +0x2000031C : 000001F4 0000000C 0000002D 00000028 +0x2000032C : 00000028 00000000 0000004A 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/rounding_ram.log b/docs/evidence/2026-10-03/v2.2-display/rounding_ram.log new file mode 100644 index 0000000..c44f9e9 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/rounding_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 000314B1 +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 000314B1 +0x200002FC : 000314B0 000314B0 00000000 00000000 +0x2000030C : 000314B1 00000000 00000000 00000190 +0x2000031C : 000003E8 0000000C 0000002E FFFFFFEB +0x2000032C : 00000028 00000000 0000007E 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/source_timeout_ram.log b/docs/evidence/2026-10-03/v2.2-display/source_timeout_ram.log new file mode 100644 index 0000000..95cca27 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/source_timeout_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 000352E0 +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 000348AF +0x200002FC : 000352E0 000352E0 00000000 00000000 +0x2000030C : 000352E0 00000000 00000000 00000190 +0x2000031C : FFFFFF06 0000000C 00000046 00000037 +0x2000032C : 00000028 00000000 0000004A 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/symbols.json b/docs/evidence/2026-10-03/v2.2-display/symbols.json new file mode 100644 index 0000000..06a2dca --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/symbols.json @@ -0,0 +1,232 @@ +{ + "_Min_Heap_Size": 512, + "_Min_Stack_Size": 1280, + "g_pfnVectors": 134217728, + "__do_global_dtors_aux": 134217916, + "frame_dummy": 134217956, + "__gnu_thumb1_case_sqi": 134217988, + "__gnu_thumb1_case_uqi": 134218008, + "__aeabi_uidiv": 134218028, + "__udivsi3": 134218028, + "__aeabi_uidivmod": 134218296, + "__aeabi_idiv": 134218304, + "__divsi3": 134218304, + "__aeabi_idivmod": 134218764, + "__aeabi_idiv0": 134218772, + "__aeabi_ldiv0": 134218772, + "__aeabi_uldivmod": 134218776, + "__udivmoddi4": 134218840, + "__clzdi2": 134219248, + "__clzsi2": 134219272, + "strlen": 134219332, + "SystemInit": 134219346, + "HAL_FDCAN_Init": 134219348, + "HAL_FDCAN_ConfigFilter": 134219888, + "HAL_FDCAN_ConfigGlobalFilter": 134219970, + "HAL_FDCAN_Start": 134220026, + "HAL_FDCAN_AddMessageToTxFifoQ": 134220072, + "HAL_FDCAN_GetRxMessage": 134220272, + "HAL_FDCAN_GetRxFifoFillLevel": 134220556, + "HAL_FDCAN_GetTxFifoFreeLevel": 134220576, + "HAL_FDCAN_ActivateNotification": 134220588, + "HAL_FDCAN_TxEventFifoCallback": 134220836, + "HAL_FDCAN_RxFifo1Callback": 134220838, + "HAL_FDCAN_TxFifoEmptyCallback": 134220840, + "HAL_FDCAN_TxBufferCompleteCallback": 134220842, + "HAL_FDCAN_TxBufferAbortCallback": 134220844, + "HAL_FDCAN_TimestampWraparoundCallback": 134220846, + "HAL_FDCAN_TimeoutOccurredCallback": 134220848, + "HAL_FDCAN_HighPriorityMessageCallback": 134220850, + "HAL_FDCAN_ErrorStatusCallback": 134220852, + "HAL_FDCAN_IRQHandler": 134220854, + "HAL_RCC_OscConfig": 134221212, + "HAL_RCC_GetSysClockFreq": 134222404, + "HAL_RCC_ClockConfig": 134222540, + "HAL_RCC_GetPCLK1Freq": 134222880, + "HAL_RCCEx_PeriphCLKConfig": 134222920, + "HAL_GPIO_Init": 134223596, + "HAL_GPIO_WritePin": 134223964, + "HAL_GPIO_TogglePin": 134223976, + "DMA_SetConfig": 134223992, + "DMA_CalcDMAMUXChannelBaseAndMask": 134224048, + "HAL_DMA_Init": 134224124, + "HAL_DMA_Start_IT": 134224344, + "HAL_DMA_Abort": 134224488, + "HAL_DMA_Abort_IT": 134224596, + "HAL_DMA_IRQHandler": 134224704, + "HAL_DMA_GetError": 134224880, + "HAL_PWREx_ControlVoltageScaling": 134224884, + "HAL_NVIC_SetPriority": 134224972, + "HAL_NVIC_EnableIRQ": 134225056, + "HAL_SYSTICK_Config": 134225080, + "HAL_InitTick": 134225132, + "HAL_Init": 134225212, + "HAL_IncTick": 134225252, + "HAL_GetTick": 134225276, + "HAL_SYSCFG_StrobeDBattpinsConfig": 134225288, + "UART_EndTxTransfer": 134225312, + "UART_EndRxTransfer": 134225372, + "HAL_UART_Transmit_DMA": 134225472, + "HAL_UART_AbortReceive": 134225636, + "UART_DMATransmitCplt": 134225828, + "HAL_UART_TxHalfCpltCallback": 134225908, + "UART_DMATxHalfCplt": 134225910, + "HAL_UART_RxCpltCallback": 134225920, + "HAL_UART_RxHalfCpltCallback": 134225922, + "UART_DMAError": 134225924, + "UART_DMAAbortOnError": 134226008, + "HAL_UART_IRQHandler": 134226032, + "UART_DMARxHalfCplt": 134226860, + "UART_DMAReceiveCplt": 134226896, + "UART_SetConfig": 134227056, + "UART_AdvFeatureConfig": 134227708, + "UART_WaitOnFlagUntilTimeout": 134227916, + "UART_CheckIdleState": 134228064, + "HAL_UART_Init": 134228264, + "UART_Start_Receive_DMA": 134228368, + "UARTEx_SetNbDataToProcess": 134228540, + "HAL_UARTEx_WakeupCallback": 134228620, + "HAL_UARTEx_RxFifoFullCallback": 134228622, + "HAL_UARTEx_TxFifoEmptyCallback": 134228624, + "HAL_UARTEx_DisableFifoMode": 134228628, + "HAL_UARTEx_SetTxFifoThreshold": 134228688, + "HAL_UARTEx_SetRxFifoThreshold": 134228752, + "HAL_UARTEx_ReceiveToIdle_DMA": 134228820, + "SystemClock_Config": 134228920, + "main": 134229042, + "Error_Handler": 134229084, + "MX_GPIO_Init": 134229088, + "MX_DMA_Init": 134229180, + "MX_FDCAN1_Init": 134229240, + "MX_FDCAN2_Init": 134229316, + "HAL_FDCAN_MspInit": 134229392, + "MX_USART2_UART_Init": 134229676, + "HAL_UART_MspInit": 134229784, + "NMI_Handler": 134230044, + "HardFault_Handler": 134230046, + "SVC_Handler": 134230048, + "PendSV_Handler": 134230050, + "SysTick_Handler": 134230052, + "DMA1_Channel1_IRQHandler": 134230060, + "DMA1_Channel2_3_IRQHandler": 134230076, + "TIM16_FDCAN_IT0_IRQHandler": 134230092, + "TIM17_FDCAN_IT1_IRQHandler": 134230116, + "USART2_LPUART2_IRQHandler": 134230124, + "HAL_MspInit": 134230140, + "Reset_Handler": 134230216, + "CopyDataInit": 134230234, + "LoopCopyDataInit": 134230240, + "FillZerobss": 134230254, + "LoopFillZerobss": 134230258, + "LoopForever": 134230270, + "ADC1_COMP_IRQHandler": 134230296, + "CEC_IRQHandler": 134230296, + "Default_Handler": 134230296, + "DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQHandler": 134230296, + "EXTI0_1_IRQHandler": 134230296, + "EXTI2_3_IRQHandler": 134230296, + "EXTI4_15_IRQHandler": 134230296, + "FLASH_IRQHandler": 134230296, + "I2C1_IRQHandler": 134230296, + "I2C2_3_IRQHandler": 134230296, + "Infinite_Loop": 134230296, + "PVD_VDDIO2_IRQHandler": 134230296, + "RCC_CRS_IRQHandler": 134230296, + "RTC_TAMP_IRQHandler": 134230296, + "SPI1_IRQHandler": 134230296, + "SPI2_3_IRQHandler": 134230296, + "TIM1_BRK_UP_TRG_COM_IRQHandler": 134230296, + "TIM1_CC_IRQHandler": 134230296, + "TIM14_IRQHandler": 134230296, + "TIM15_IRQHandler": 134230296, + "TIM2_IRQHandler": 134230296, + "TIM3_TIM4_IRQHandler": 134230296, + "TIM6_DAC_LPTIM1_IRQHandler": 134230296, + "TIM7_LPTIM2_IRQHandler": 134230296, + "USART1_IRQHandler": 134230296, + "USART3_4_5_6_LPUART1_IRQHandler": 134230296, + "USB_UCPD1_2_IRQHandler": 134230296, + "WWDG_IRQHandler": 134230296, + "RoundTenths": 134230298, + "ReadLeS16": 134230320, + "ConfigureCanPort": 134230344, + "SetDashValid": 134230532, + "SetDashValue": 134230592, + "RestartScreenRx": 134230644, + "AMI_App_Init": 134230700, + "AMI_App_Service": 134230856, + "HAL_FDCAN_RxFifo0Callback": 134232012, + "HAL_FDCAN_ErrorCallback": 134232724, + "HAL_UARTEx_RxEventCallback": 134232740, + "HAL_UART_TxCpltCallback": 134232936, + "HAL_UART_ErrorCallback": 134232960, + "memset": 134232996, + "__libc_init_array": 134233012, + "memcpy": 134233084, + "__EH_FRAME_BEGIN__": 134233104, + "_init": 134233104, + "_fini": 134233116, + "_etext": 134233128, + "APBPrescTable": 134233128, + "AHBPrescTable": 134233160, + "DLCtoBytes": 134233224, + "UARTPrescTable": 134233240, + "__exidx_start": 134233580, + "__exidx_end": 134233588, + "__frame_dummy_init_array_entry": 134233588, + "__init_array_start": 134233588, + "__preinit_array_end": 134233588, + "__preinit_array_start": 134233588, + "__do_global_dtors_aux_fini_array_entry": 134233592, + "__init_array_end": 134233592, + "_sidata": 134233596, + "_sdata": 536870912, + "SystemCoreClock": 536870912, + "uwTickFreq": 536870916, + "uwTickPrio": 536870920, + "__bss_start__": 536870924, + "_edata": 536870924, + "_sbss": 536870924, + "uwTick": 536870952, + "HAL_RCC_FDCAN_CLK_ENABLED": 536870956, + "hfdcan2": 536870960, + "hfdcan1": 536871060, + "hdma_usart2_rx": 536871160, + "hdma_usart2_tx": 536871256, + "huart2": 536871352, + "task_drop_count": 536871516, + "task_target_mask": 536871520, + "task_tx_mask": 536871521, + "task_sequence": 536871522, + "task_tail": 536871523, + "task_head": 536871524, + "task_queue": 536871525, + "parser_task_id": 536871529, + "parser_pos": 536871530, + "screen_tx_busy": 536871531, + "screen_tx_dma": 536871532, + "screen_rx_dma": 536871564, + "uart_rx_error_count": 536871628, + "can_rx_error_count": 536871632, + "can_port_last_rx_ms": 536871636, + "bms_current_tenths": 536871644, + "bms_voltage_tenths": 536871648, + "sdc_gpio_received": 536871650, + "sdc_gpio_timestamp_ms": 536871652, + "sdc_gpio_changed": 536871656, + "sdc_gpio_state": 536871658, + "sdc_frequency_hz": 536871660, + "sdc_adc_mv": 536871668, + "drivetrain_last_rx_ms": 536871672, + "bms_temperature_last_rx_ms": 536871676, + "bms_status_last_rx_ms": 536871680, + "adc_last_rx_ms": 536871684, + "debug_last_rx_ms": 536871688, + "dash_last_rx_ms": 536871692, + "display_dirty": 536871696, + "display_state": 536871700, + "__bss_end__": 536871752, + "_ebss": 536871752, + "_end": 536871752, + "_estack": 537018368 +} \ No newline at end of file diff --git a/docs/evidence/2026-10-03/v2.2-display/task-reset.log b/docs/evidence/2026-10-03/v2.2-display/task-reset.log new file mode 100644 index 0000000..005a1e3 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/task-reset.log @@ -0,0 +1,24 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +MCU Reset + +Software reset is performed +Core run diff --git a/docs/evidence/2026-10-03/v2.2-display/task-results.json b/docs/evidence/2026-10-03/v2.2-display/task-results.json new file mode 100644 index 0000000..d8a7c4b --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/task-results.json @@ -0,0 +1,141 @@ +{ + "results": [ + { + "task": 1, + "cancel_no_can_request": true, + "confirm_can_request_correct": true, + "cancel_frames": [], + "confirm_frames": [ + { + "time_s": 4.289997600018978, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 01 00 01 6d 0f 00 00" + } + ] + }, + { + "task": 2, + "cancel_no_can_request": true, + "confirm_can_request_correct": true, + "cancel_frames": [], + "confirm_frames": [ + { + "time_s": 8.514357500011101, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 02 01 01 e8 1f 00 00" + } + ] + }, + { + "task": 3, + "cancel_no_can_request": true, + "confirm_can_request_correct": true, + "cancel_frames": [], + "confirm_frames": [ + { + "time_s": 12.751596000045538, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 03 02 01 75 30 00 00" + } + ] + }, + { + "task": 4, + "cancel_no_can_request": true, + "confirm_can_request_correct": true, + "cancel_frames": [], + "confirm_frames": [ + { + "time_s": 16.996419199975207, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 04 03 01 01 41 00 00" + } + ] + }, + { + "task": 5, + "cancel_no_can_request": true, + "confirm_can_request_correct": true, + "cancel_frames": [], + "confirm_frames": [ + { + "time_s": 21.236944500007667, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 05 04 01 8c 51 00 00" + } + ] + }, + { + "task": 6, + "cancel_no_can_request": true, + "confirm_can_request_correct": true, + "cancel_frames": [], + "confirm_frames": [ + { + "time_s": 25.482824600068852, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 06 05 01 27 62 00 00" + } + ] + } + ], + "rx": [ + { + "time_s": 4.289997600018978, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 01 00 01 6d 0f 00 00" + }, + { + "time_s": 8.514357500011101, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 02 01 01 e8 1f 00 00" + }, + { + "time_s": 12.751596000045538, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 03 02 01 75 30 00 00" + }, + { + "time_s": 16.996419199975207, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 04 03 01 01 41 00 00" + }, + { + "time_s": 21.236944500007667, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 05 04 01 8c 51 00 00" + }, + { + "time_s": 25.482824600068852, + "id": 768, + "dlc": 8, + "extended": false, + "data": "01 06 05 01 27 62 00 00" + } + ], + "pcan_status": "0x0", + "path": "Official HMI task buttons -> COM4 / AMI MCU -> CAN2 250K", + "hmi_data_display_verified": false +} \ No newline at end of file diff --git a/docs/evidence/2026-10-03/v2.2-display/truncated_ram.log b/docs/evidence/2026-10-03/v2.2-display/truncated_ram.log new file mode 100644 index 0000000..693cc22 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/truncated_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 00033E71 +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 0003287A +0x200002FC : 00033E71 00033E70 00000000 00000000 +0x2000030C : 00033E71 00000000 00000000 00000190 +0x2000031C : 000001F4 0000000C 0000002D 00000028 +0x2000032C : 00000028 00000000 0000004A 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/evidence/2026-10-03/v2.2-display/uart-diagnostic.bin b/docs/evidence/2026-10-03/v2.2-display/uart-diagnostic.bin new file mode 100644 index 0000000..e69de29 diff --git a/docs/evidence/2026-10-03/v2.2-display/uart-diagnostic.json b/docs/evidence/2026-10-03/v2.2-display/uart-diagnostic.json new file mode 100644 index 0000000..349c1b7 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/uart-diagnostic.json @@ -0,0 +1,16 @@ +{ + "baudrate": 9600, + "port": "COM4", + "sample_seconds": 6, + "rx_bytes": 0, + "pc_to_mcu_task": "AA 55 01 02 0D 0A", + "can2_response": "01 02 00 01 42 E2 04 00", + "can_id": "0x300", + "can_type": "standard", + "dlc": 8, + "mcu_gpioa_moder": "0xEABFFFA5", + "mcu_gpioa_afrl": "0x00001100", + "PA2_PA3_mode": "alternate function 1, USART2", + "PA2_idle": "high", + "hmi_display_verified": false +} \ No newline at end of file diff --git a/docs/evidence/2026-10-03/v2.2-display/wrong_version_ram.log b/docs/evidence/2026-10-03/v2.2-display/wrong_version_ram.log new file mode 100644 index 0000000..c7f1508 --- /dev/null +++ b/docs/evidence/2026-10-03/v2.2-display/wrong_version_ram.log @@ -0,0 +1,32 @@ + ------------------------------------------------------------------- + STM32CubeProgrammer v2.20.0 + ------------------------------------------------------------------- + +ST-LINK SN : 37FF71064E573436188C1543 +ST-LINK FW : V2J47S7 +Board : -- +Voltage : 3.28V +SWD freq : 950 KHz +Connect mode: Hot Plug +Reset mode : Software reset +Device ID : 0x467 +Revision ID : Rev Z +Device name : STM32G0B0xx/B1xx/C1xx +Flash size : 128 KBytes +Device type : MCU +Device CPU : Cortex-M0+ +BL Version : 0x92 + + +Reading 32-bit memory content + Size : 128 Bytes + Address: : 0x200002CC + +0x200002CC : 00000000 00000000 00000000 000334A3 +0x200002DC : 0000007B 00000FA0 00000000 00000000 +0x200002EC : 00000000 00000000 00000000 0003287A +0x200002FC : 000334A3 000334A3 00000000 00000000 +0x2000030C : 000334A3 07FFFFFF 00000000 00000190 +0x2000031C : 000001F4 0000000C 0000002D 00000028 +0x2000032C : 00000028 00000000 0000004A 00000000 +0x2000033C : 00000000 00000000 00000000 1C6D559A diff --git a/docs/通讯交接文档.md b/docs/通讯交接文档.md index 4c287e3..5926c0f 100644 --- a/docs/通讯交接文档.md +++ b/docs/通讯交接文档.md @@ -1,9 +1,11 @@ # AMI 仪表通讯交接文档 -屏幕接口 1.2;MCU CAN 协议 2.1(CAN1 500K / CAN2 250K) | 2026-10-03 +屏幕接口 1.2;MCU CAN 协议 2.2(CAN1 500K / CAN2 250K) | 2026-10-03 适用工程:AMI.HMI;屏幕 TJC4827X543_011,480 × 272;编辑器 USART HMI 1.68.1.3037。本文以随附的精简指令版工程为准。 +v2.2 新增标准 CAN `0x182 / DLC 8`,分别设置 `dash.mct`(扭矩千分)、`dash.djwd`(电机温度)、`dash.mcuwd`(MCU 温度)。数据 `F4 01 C2 01 90 01 07 01` 对应 500‰ / 45℃ / 40℃;建议每 100 ms 发一次。CAN1 500K / CAN2 250K 均可接收,三个字段各有有效标志,帧源独立超时 2000 ms。完整布局、有符号温度和异常处理见 [DBC 说明](AMI_CAN_DBC说明.md),实测范围见 [v2.2 报告](AMI自定义显示CAN测试报告.md)。 + v2.1 已烧录并通过 CAN1 500K(SDC)与 CAN2 250K(BMS)分别到官方 HMI 调试器的测试,含两路各六个任务确认/取消;见 [双 CAN 测试报告](CAN1_CAN2_v2.1测试报告.md)。下文的旧模拟器及 v2.0 测试描述属于历史记录,物理串口屏、真实节点和两路同时接入仍待实测。 2026-10-03 补充:dash 增加全局虚拟浮点控件 `lvbat`,两位小数,`dash.lvbat.val=1230` 显示 12.30 V,来源为 SDC ADC。当前 MCU CAN 输入见 [SDC_BMS协议.md](SDC_BMS协议.md);原整数高压电压/电流控件四舍五入为 1 V / 1 A。灰色数值表示未知或失效。SDC GPIO 尚无具名安全状态映射,当前 MCU 不生成正常/故障判断。 diff --git a/docs/验证说明.txt b/docs/验证说明.txt index 4d86239..a84e377 100644 --- a/docs/验证说明.txt +++ b/docs/验证说明.txt @@ -1,13 +1,18 @@ -2026-10-03:屏幕数字接口1.2,MCU CAN输入2.1(SDC/BMS)。 -CAN1为500 kbit/s,使用AMI.dbc;CAN2为250 kbit/s,使用AMI_CAN2_250k.dbc。每份包含10条Classic CAN报文和33个信号,报文布局相同。 +2026-10-03:屏幕数字接口1.2,MCU CAN输入2.2(SDC/BMS及自定义动力显示)。 +CAN1为500 kbit/s,使用AMI.dbc;CAN2为250 kbit/s,使用AMI_CAN2_250k.dbc。每份包含11条Classic CAN报文和40个信号,报文布局相同。 +v2.2新增标准0x182/DLC8,设置扭矩千分、电机温度及MCU温度,三个有效标志和独立2000ms超时;不控制电机执行。 +v2.2编译通过,烧录及完整15880字节回读一致;14组CAN2 MCU状态核对通过,CAN/UART接收错误均为0。 +v2.2官方HMI按钮到CAN2回传方向六个确认/六个取消通过,任务号1..6、序号0..5;发送脚本实发30条0x182。 +当前COM4未收到MCU输出字节,已请检查PA2->RXD线;本次HMI显示尚未确认,详见docs/AMI自定义显示CAN测试报告.md。 +以下双CAN分别联调结果对应归档v2.1 BIN,不能直接作为v2.2新帧CAN1/HMI实测证据。 v2.1源码/CubeMX/DBC位时序一致性校验及Release编译通过;已烧录,完整15612字节Flash回读与发布BIN一致。 CAN1 500K(SDC)及CAN2 250K(仅BMS数据)分别完成MCU/USART2/COM4/官方HMI调试器的数据更新、无效、超时和恢复测试。 两路各六个任务确认及六个取消通过;十组MCU状态快照符合预期,CAN/UART接收错误均为0。新证据见docs/CAN1_CAN2_v2.1测试报告.md。 -cantools 44.1.0严格解析、24个已知报文、六个任务号及计数边界、标准/扩展ID、偏置电流、无效温度和SDC布局一致性检查通过;具体复现命令见docs/AMI_CAN_DBC说明.md。 +cantools 44.1.0严格解析、28个已知报文、六个任务号及计数边界、标准/扩展ID、偏置电流、无效温度、有符号扭矩/温度和SDC布局一致性检查通过;具体复现命令见docs/AMI_CAN_DBC说明.md。 下述历史实物证据对应v2.0,两路均为500K;原BIN保留在output/firmware/AMI_Controller_v2.0_500k.bin。 HMI编译0错误0警告;v2.0固件Release编译、SWD烧录校验通过。 已实测CAN盒->实物AMI CAN1/MCU->USART2->COM4->官方HMI调试器:低压电压、高压电压/电流、最高有效温度、无效数据、超时/恢复、跨页更新、HMI重连。 六个任务确认均收到正确0x300请求,六个取消均未发送;该测试条件为CAN1持续有有效输入。 证据在docs/evidence/2026-10-03/sdc-bms;联调报告见docs/SDC_BMS联调报告.md。 -v2.1仍未接物理串口屏或真实SDC/BMS节点,未实测两路同时接入、LED极性和车辆执行/安全动作;未定义电机温度、轮频到车速标定和GPIO到具名安全信号映射。 +未接物理串口屏或真实SDC/BMS/电机控制器节点,未实测两路同时接入、LED极性和车辆执行/安全动作;未定义轮频到车速标定和GPIO到具名安全信号映射。 原C示例是屏幕debug接口参考,不代表整车控制已实现。 diff --git a/firmware/AMI_Controller.ioc b/firmware/AMI_Controller.ioc index 561071a..23678e0 100644 --- a/firmware/AMI_Controller.ioc +++ b/firmware/AMI_Controller.ioc @@ -50,7 +50,7 @@ FDCAN1.IPParameters=AutoRetransmission,CalculateTimeQuantumNominal,CalculateTime FDCAN1.NominalPrescaler=8 FDCAN1.NominalTimeSeg1=13 FDCAN1.NominalTimeSeg2=2 -FDCAN1.StdFiltersNbr=3 +FDCAN1.StdFiltersNbr=4 FDCAN1.ExtFiltersNbr=1 FDCAN2.AutoRetransmission=ENABLE FDCAN2.CalculateBaudRateNominal=250000 @@ -63,7 +63,7 @@ FDCAN2.IPParameters=AutoRetransmission,CalculateTimeQuantumNominal,CalculateTime FDCAN2.NominalPrescaler=16 FDCAN2.NominalTimeSeg1=13 FDCAN2.NominalTimeSeg2=2 -FDCAN2.StdFiltersNbr=3 +FDCAN2.StdFiltersNbr=4 FDCAN2.ExtFiltersNbr=1 File.Version=6 GPIO.groupedBy=Group By Peripherals diff --git a/firmware/Core/Inc/ami_protocol.h b/firmware/Core/Inc/ami_protocol.h index c0814e7..bb9afaa 100644 --- a/firmware/Core/Inc/ami_protocol.h +++ b/firmware/Core/Inc/ami_protocol.h @@ -1,7 +1,8 @@ #ifndef AMI_PROTOCOL_H #define AMI_PROTOCOL_H -/* Both CAN ports use the same 500 kbit/s protocol and the same IDs. */ +/* CAN1 is 500 kbit/s; CAN2 is 250 kbit/s. Both share IDs and parsing. */ +#define AMI_CAN_ID_DRIVETRAIN_DISPLAY 0x182U #define AMI_CAN_ID_SDC_HEARTBEAT 0x6A0U #define AMI_CAN_ID_SDC_ADC 0x6A1U #define AMI_CAN_ID_SDC_FREQUENCY 0x6A2U @@ -17,6 +18,7 @@ #define AMI_CAN_DATA_TIMEOUT_MS 500U #define AMI_ADC_TIMEOUT_MS 1500U #define AMI_BMS_TIMEOUT_MS 2000U +#define AMI_DRIVETRAIN_TIMEOUT_MS 2000U #define AMI_SCREEN_BOOT_DELAY_MS 800U #define AMI_SCREEN_RESYNC_MS 5000U diff --git a/firmware/Core/Src/ami_app.c b/firmware/Core/Src/ami_app.c index b3985d5..c93dda8 100644 --- a/firmware/Core/Src/ami_app.c +++ b/firmware/Core/Src/ami_app.c @@ -41,6 +41,7 @@ static volatile uint32_t debug_last_rx_ms; static volatile uint32_t adc_last_rx_ms; static volatile uint32_t bms_status_last_rx_ms; static volatile uint32_t bms_temperature_last_rx_ms; +static volatile uint32_t drivetrain_last_rx_ms; /* Preserve the exact source units even where the HMI has integer controls. */ static volatile uint16_t sdc_adc_mv; static volatile uint16_t sdc_frequency_hz[4]; @@ -88,6 +89,12 @@ static int32_t RoundTenths(int32_t value) return (value >= 0) ? ((value + 5) / 10) : ((value - 5) / 10); } +static int32_t ReadLeS16(const uint8_t *data) +{ + uint32_t raw = ReadLeU16(data); + return (raw & 0x8000U) ? ((int32_t)raw - 65536) : (int32_t)raw; +} + static size_t AppendUnsigned(char *dst, uint32_t value) { char reversed[10]; @@ -245,6 +252,27 @@ static bool DecodeCan(uint32_t identifier, uint32_t id_type, uint32_t now = HAL_GetTick(); if (id_type == FDCAN_STANDARD_ID) { + if (identifier == AMI_CAN_ID_DRIVETRAIN_DISPLAY) + { + /* Version 1 display input only; no motor actuation is performed. */ + if ((length != 8U) || (data[7] != 1U) || ((data[6] & 0xF8U) != 0U)) + { + return false; + } + int32_t torque = ReadLeS16(data); + if ((data[6] & 1U) && (torque >= -1000) && (torque <= 1000)) + { + SetDashValue(2U, torque); + } + else { SetDashValid(2U, false); } + if (data[6] & 2U) { SetDashValue(4U, RoundTenths(ReadLeS16(&data[2]))); } + else { SetDashValid(4U, false); } + if (data[6] & 4U) { SetDashValue(5U, RoundTenths(ReadLeS16(&data[4]))); } + else { SetDashValid(5U, false); } + drivetrain_last_rx_ms = now; + dash_last_rx_ms = now; + return true; + } if ((identifier == AMI_CAN_ID_SDC_ADC) && (length == 2U)) { sdc_adc_mv = (uint16_t)ReadLeU16(data); @@ -350,6 +378,10 @@ static void ConfigureCanPort(FDCAN_HandleTypeDef *hfdcan) filter.FilterID1 = AMI_CAN_ID_BMS_TEMPERATURE; if (HAL_FDCAN_ConfigFilter(hfdcan, &filter) != HAL_OK) { Error_Handler(); } + filter.FilterIndex = 3U; + filter.FilterID1 = AMI_CAN_ID_DRIVETRAIN_DISPLAY; + if (HAL_FDCAN_ConfigFilter(hfdcan, &filter) != HAL_OK) { Error_Handler(); } + filter.IdType = FDCAN_EXTENDED_ID; filter.FilterIndex = 0U; filter.FilterType = FDCAN_FILTER_DUAL; @@ -489,6 +521,13 @@ static void UpdateTimeoutsAndLeds(void) { SetDashValid(6U, false); } + if ((drivetrain_last_rx_ms == 0U) || + ((now - drivetrain_last_rx_ms) > AMI_DRIVETRAIN_TIMEOUT_MS)) + { + SetDashValid(2U, false); + SetDashValid(4U, false); + SetDashValid(5U, false); + } __enable_irq(); if (debug_timeout && !debug_timeout_applied) diff --git a/firmware/Core/Src/fdcan.c b/firmware/Core/Src/fdcan.c index ca3fa22..ab304f9 100644 --- a/firmware/Core/Src/fdcan.c +++ b/firmware/Core/Src/fdcan.c @@ -53,7 +53,7 @@ void MX_FDCAN1_Init(void) hfdcan1.Init.DataSyncJumpWidth = 1; hfdcan1.Init.DataTimeSeg1 = 13; hfdcan1.Init.DataTimeSeg2 = 2; - hfdcan1.Init.StdFiltersNbr = 3; + hfdcan1.Init.StdFiltersNbr = 4; hfdcan1.Init.ExtFiltersNbr = 1; hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION; if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK) @@ -91,7 +91,7 @@ void MX_FDCAN2_Init(void) hfdcan2.Init.DataSyncJumpWidth = 1; hfdcan2.Init.DataTimeSeg1 = 13; hfdcan2.Init.DataTimeSeg2 = 2; - hfdcan2.Init.StdFiltersNbr = 3; + hfdcan2.Init.StdFiltersNbr = 4; hfdcan2.Init.ExtFiltersNbr = 1; hfdcan2.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION; if (HAL_FDCAN_Init(&hfdcan2) != HAL_OK) diff --git a/firmware/README.md b/firmware/README.md index 629fad1..66a3d4c 100644 --- a/firmware/README.md +++ b/firmware/README.md @@ -21,7 +21,8 @@ CAN1 为 500 kbit/s、CAN2 为 250 kbit/s。FDCAN 时钟为 64 MHz,两路 Cloc ## 数据路径 -- FDCAN1、FDCAN2 使用相同的三条标准过滤器和一条扩展过滤器,接收 SDC 0x6A0..0x6A6 与 BMS 0x140 / 0x156 / 0x186040F3 / 0x186140F3。 +- FDCAN1、FDCAN2 使用相同的四条标准过滤器和一条扩展过滤器,接收自定义显示 0x182、SDC 0x6A0..0x6A6 与 BMS 0x140 / 0x156 / 0x186040F3 / 0x186140F3。 +- 标准 0x182 / DLC 8:小端 int16 扭矩千分、0.1℃ 电机温度、0.1℃ MCU 温度;有效标志及版本校验见 [DBC 说明](../docs/AMI_CAN_DBC说明.md)。设置 dash.mct / djwd / mcuwd,独立超时 2000 ms。 - SDC ADC 为低压电池电压;BMS 总压、偏置电流和最高有效实际温度按源协议解码。旧 0x180 / 0x181 / 0x280 不再接收。 - 主循环通过 USART2 TX DMA 一次发送一条完整 TJC 指令,末尾为三个真实字节 `FF FF FF`。 - 仅变化后的数值排队,字段轮转和 DMA 合并最新值,避免刷新饥饿;白色为有效数值,灰色为未知/失效,ADC 和 BMS 各自计时。 @@ -57,4 +58,4 @@ CubeMX 配置源为 `AMI_Controller.ioc`。重新生成时保留 USER CODE 区 4. 下载 `AMI.HMI` 后逐条验证仪表数值、16 路 debug 状态及 6 个任务按钮。 5. 2026-10-03 已完成 v2.1 CAN1 500K 与 CAN2 250K 分别到 MCU / USART2 / COM4 / 官方 HMI 调试器的联调;物理屏幕、真实节点、两路同时接入和 LED 极性尚未实测。见 [双 CAN 测试报告](../docs/CAN1_CAN2_v2.1测试报告.md)。 -此前两路均为 500K 的 v2.0 历史证据仍保留。当前 v2.1 BIN 已烧录并完整回读比对通过,两路各六个任务确认和六个取消通过;CAN2 测试仅注入 BMS 数据,未将 SDC 改成 250K。 +当前 v2.2 BIN 已烧录并完整回读比对;新 0x182 在 CAN2 250K 实测,见 [显示 CAN 测试报告](../docs/AMI自定义显示CAN测试报告.md)。v2.1 的双 CAN 分别联调和两路均为 500K 的 v2.0 历史证据及 BIN 保留;SDC 仍为 500K。 diff --git a/output/firmware/AMI_Controller.bin b/output/firmware/AMI_Controller.bin index fcb2632..d301273 100644 Binary files a/output/firmware/AMI_Controller.bin and b/output/firmware/AMI_Controller.bin differ diff --git a/output/firmware/AMI_Controller_v2.1_500k_250k.bin b/output/firmware/AMI_Controller_v2.1_500k_250k.bin new file mode 100644 index 0000000..fcb2632 Binary files /dev/null and b/output/firmware/AMI_Controller_v2.1_500k_250k.bin differ diff --git a/output/pdf/AMI_CAN报文说明.pdf b/output/pdf/AMI_CAN报文说明.pdf index 3def572..932f737 100644 Binary files a/output/pdf/AMI_CAN报文说明.pdf and b/output/pdf/AMI_CAN报文说明.pdf differ diff --git a/scripts/export_can_pdf.py b/scripts/export_can_pdf.py index a597c46..b4901c5 100644 --- a/scripts/export_can_pdf.py +++ b/scripts/export_can_pdf.py @@ -127,7 +127,7 @@ def export(font_path): canvas.line(40, 31, page_width-40, 31) canvas.setFont('AMIChinese', 8) canvas.setFillColor(colors.HexColor('#506775')) - canvas.drawString(40, 19, 'AMI-2.1 | 2026-10-03 | CAN1 500K / CAN2 250K') + canvas.drawString(40, 19, 'AMI-2.2 | 2026-10-03 | CAN1 500K / CAN2 250K') canvas.drawRightString(page_width-40, 19, f'{doc.page}') canvas.restoreState() @@ -136,7 +136,7 @@ def export(font_path): leftMargin=40, rightMargin=40, topMargin=36, bottomMargin=44, title='AMI CAN 报文说明', author='AMI / YMR', - subject='AMI CAN DBC v2.1: CAN1 500K / CAN2 250K') + subject='AMI CAN DBC v2.2: CAN1 500K / CAN2 250K') document.build(story, onFirstPage=footer, onLaterPages=footer) print(OUTPUT) diff --git a/scripts/export_dbc_docs.py b/scripts/export_dbc_docs.py index 29b1d7d..00928d9 100644 --- a/scripts/export_dbc_docs.py +++ b/scripts/export_dbc_docs.py @@ -23,6 +23,7 @@ def can2_dbc_text(): return text PURPOSE = { + 0x182: 'VCU / 测试器 -> AMI:扭矩千分、电机温度、MCU 温度', 0x300: 'AMI -> VCU:用户确认后的任务选择请求', 0x6A0: 'SDC -> AMI:板标识、版本、序号、上电时间', 0x6A1: 'SDC -> AMI:低压电池电压,精确 DLC=2', @@ -40,7 +41,7 @@ def render(): db = cantools.database.load_file(ROOT / 'AMI.dbc', strict=True) lines = [ '# AMI CAN DBC 说明', '', - f'版本:`{db.version}`。由 [AMI.dbc](../AMI.dbc) 自动生成,10 条报文、33 个信号。', '', + f'版本:`{db.version}`。由 [AMI.dbc](../AMI.dbc) 自动生成,{len(db.messages)} 条报文、{sum(len(m.signals) for m in db.messages)} 个信号。', '', '## 使用范围', '', 'CAN1 为 500 kbit/s,CAN2 为 250 kbit/s,均为 Classic CAN、87.5% 采样点。' '两路保留相同的接收 ID、解码与任务发送功能,MCU 不在两路之间转发原始报文。' @@ -49,22 +50,24 @@ def render(): '| --- | --- | --- | --- |', '| CAN1 | 500 kbit/s | PA11 / PA12 | [AMI.dbc](../AMI.dbc) |', '| CAN2 | 250 kbit/s | PB0 / PB1 | [AMI_CAN2_250k.dbc](../AMI_CAN2_250k.dbc) |', '', - 'DBC 的 `Baudrate` / `AMIPort` 分别标注所属总线。每份 DBC 均含 10 条报文、33 个信号;' + 'DBC 的 `Baudrate` / `AMIPort` 分别标注所属总线。每份 DBC 均含 11 条报文、40 个信号;' '同一份报文表适用于两路。CAN 工具必须按接入端口设置速率,导入 DBC 不一定自动改硬件速率。' '实际接法:SDC 500 kbit/s 接 CAN1,BMS 250 kbit/s 接 CAN2。', '', 'FDCAN 时钟 64 MHz,时钟分频为 1;NominalPrescaler 为 CAN1=8、CAN2=16,' '两路均使用 Sync=1、TimeSeg1=13、TimeSeg2=2、SJW=1。' '速率 = 64 MHz / Prescaler / (1+13+2);采样点 = (1+13)/16 = 87.5%。', '', - '本 DBC 包含 AMI 唯一发送的 `0x300` 任务请求,以及 AMI 当前识别的 SDC / BMS 输入。' + '本 DBC 包含 AMI 唯一发送的 `0x300` 任务请求,以及 AMI 当前识别的 SDC / BMS 和自定义显示输入。' 'SDC `0x6A3` DAC 控制、`0x6A5` ASSI 控制、BMS 其他电芯/故障字段不属于此接口子集。' - '没有定义电机温度、逆变器温度、扭矩、标定后的车速、AMI 周期心跳或 VCU 执行反馈。' + '`0x182` 新增扭矩千分、电机温度和电机控制器 MCU 温度的仪表显示输入;' + '发送者负责转换实际电机控制器协议。未定义标定后的车速、AMI 周期心跳或 VCU 执行反馈。' '旧 `0x180 / 0x181 / 0x280` 输入已停用。', '', 'SDC 字段依据 `SDC_ACQ_DAC.dbc` VERSION 1.1,保持其信号名、位布局、缩放和单位;' '仅将输入接收节点设为 AMI。BMS 字段依据 ' '[BmsMonitor-CANTest](https://git.acetaffy.ltd/acetaffy/BmsMonitor-CANTest) ' '提交 `e65c95203d1689df05343775982d7e85bd782646` 的 `BmsProtocolParser.cs`。', '', 'DBC 为 ASCII 编码,注释和枚举使用英文,便于导入 CAN 工具;本文为 UTF-8 中文。' - '物理值 = 原始无符号值 × Factor + Offset;下表范围为编码范围,不表示车辆正常工作范围。', '', + '物理值 = 原始值 × Factor + Offset;`0x182` 的三个数值为有符号 int16,其他数值按表定义。' + '下表范围为接口允许范围,不表示车辆正常工作范围。', '', '## 报文总览', '', '| CAN ID | 类型 | DLC | 报文名 | 方向和作用 | 周期 / 触发 |', '| --- | --- | --- | --- | --- | --- |', @@ -78,7 +81,7 @@ def render(): '', '扩展帧在 DBC 的 `BO_` 十进制 ID 中设置 bit31:' '`0x186040F3 -> 2556444915`,`0x186140F3 -> 2556510451`。' 'CAN 工具中使用实际 29 位仲裁 ID 并选择扩展帧;bit31 不是总线上发送的仲裁 ID。', '', - '`GenMsgCycleTime` 仅填写已确认的 SDC 周期 100 / 500 / 20 ms。' + '`GenMsgCycleTime` 填写已确认的 SDC 周期 100 / 500 / 20 ms,以及自定义 `0x182` 的约定周期 100 ms。' '其余帧未填写周期,默认 0 表示未指定,不据此推断 BMS 周期。', '', '## 信号布局', '', 'Start 为 DBC 起始位,位号从 0 开始。Intel `@1` 从最低有效位起算;' @@ -100,6 +103,28 @@ def render(): lines += ['', ';'.join(choices) + '。'] lines += [''] lines += [ + '## 自定义动力显示输入 0x182', '', + '标准数据帧,DLC 必须为 8;CAN1 500K 或 CAN2 250K 均可接收,建议每 100 ms 发送。' + '这是一条 AMI 仪表显示设置接口;扭矩千分以发送者定义的基准扭矩归一化,500 表示 500‰。' + 'MCU 温度由发送者提供,表示电机控制器 MCU / 逆变器温度,不是 AMI 芯片自动测温。', '', + '| 字节 | 字段 | 编码与规则 |', '| --- | --- | --- |', + '| 0..1 | 扭矩千分 | 小端 int16,允许 -1000..1000,直接显示 |', + '| 2..3 | 电机温度 | 小端 int16 × 0.1 ℃,仪表四舍五入到整数 ℃ |', + '| 4..5 | MCU 温度 | 小端 int16 × 0.1 ℃,仪表四舍五入到整数 ℃ |', + '| 6 | 有效标志 | bit0 扭矩、bit1 电机温度、bit2 MCU 温度;1 有效,0 无效;bit3..7 必须为 0 |', + '| 7 | 帧版本 | 固定 1,与整体接口 v2.2 版本号独立 |', '', + '有效值更新并显示白色;标志为 0 时立即变灰并保留历史数字。' + '扭矩超出 -1000..1000 时仅扭矩无效,两个温度仍按各自标志处理。' + '温度的 int16 编码范围为 -3276.8..3276.7 ℃;显示正负半值均向远离零方向取整。' + '扩展帧、错误 DLC、版本非 1 或保留位非 0 均整帧拒绝,不覆盖数值、不刷新超时。' + '连续 2000 ms 未收到合规帧后,三个值同时变灰;BMS / SDC 流量不能续期。', '', + 'CAN 工具发送样例:标准 ID `182`,DLC `8`,数据 `F4 01 C2 01 90 01 07 01`,周期 `100 ms`。' + '可用仓库脚本发送:', '', '```powershell', + 'python -m pip install -r scripts/requirements-can.txt', + 'python scripts/send_drivetrain_can.py --torque 500 --motor-temp 45 --mcu-temp 40 --dry-run', + '# PCAN 当前接 CAN2,速率 250000;其他适配器按 python-can 接口参数设置', + 'python scripts/send_drivetrain_can.py --interface pcan --channel PCAN_USBBUS1 --bitrate 250000 --torque 500 --motor-temp 45 --mcu-temp 40 --duration 10', + '```', '', '## AMI 任务请求语义', '', '| Task_ID | 任务 |', '| --- | --- |', '| 1 | 八字绕环 |', '| 2 | 直线加速 |', '| 3 | 高速循迹 |', @@ -117,7 +142,10 @@ def render(): '| 低压电池 | `0x6A1` uint16 mV;`lvbat.val=(mV+5)/10`,显示两位小数 V | 1500 ms 无有效 ADC |', '| 高压电压 | BMS 大端 uint16 × 0.1 V;现有控件四舍五入到整数 V | 2000 ms 无有效 BMS 状态 |', '| 高压电流 | BMS 大端 uint16 × 0.1 - 500 A;四舍五入到整数 A | 2000 ms 无有效 BMS 状态 |', - '| 最高单体温度 | `0x156` 有效通道最大值,或扩展帧字节 4 - 40 | 全无效或 2000 ms 无有效温度源 |', '', + '| 最高单体温度 | `0x156` 有效通道最大值,或扩展帧字节 4 - 40 | 全无效或 2000 ms 无有效温度源 |', + '| 扭矩千分 | `0x182` 小端 int16,直接更新 `dash.mct.val` | bit0=0、超范围或 2000 ms 超时 |', + '| 电机温度 | `0x182` int16 × 0.1 ℃,整数显示 `dash.djwd.val` | bit1=0 或 2000 ms 超时 |', + '| MCU 温度 | `0x182` int16 × 0.1 ℃,整数显示 `dash.mcuwd.val` | bit2=0 或 2000 ms 超时 |', '', '电流字段是带偏置的 uint16,不能按 int16 解码。温度原始 `0xFF` 为无效;' 'DBC 枚举将其标为 Invalid。关闭枚举解码的工具可能显示 215,聚合时必须先排除 ' '原始 255,不能把它当作 215 ℃。有效实际温度范围为 -40..214 ℃。' @@ -131,6 +159,8 @@ def render(): '## 报文样例', '', '| ID / DLC | 数据(十六进制) | 解码及仪表显示 |', '| --- | --- | --- |', '| `0x300 / 8` | `01 02 00 01 E8 03 00 00` | 直线加速请求、序号 0、来源 AMI、上电 1000 ms |', + '| `0x182 / 8` | `F4 01 C2 01 90 01 07 01` | 500‰、45.0 ℃、40.0 ℃,三个值有效 |', + '| `0x182 / 8` | `0C FE 9B FF 33 FF 07 01` | -500‰、-10.1 ℃、-20.5 ℃;显示 -500 / -10 / -21 |', '| `0x6A1 / 2` | `0C 30` | ADC 12300 mV;低压 12.30 V |', '| `0x6A2 / 8` | `32 00 64 00 96 00 C8 00` | PA0 / PA2 / PA6 / PB14:50 / 100 / 150 / 200 Hz |', '| `0x140 / 8` | `0F A0 14 03 00 00 00 05` | 400.0 V / +12.3 A;显示 400 / 12 |', @@ -145,11 +175,12 @@ def render(): '# 若同时检出 SDC 仓库,可额外比较五条输入帧的原始布局:', 'python scripts/verify_dbc.py --sdc-dbc ../SDC_ACQ_DAC/SDC_ACQ_DAC.dbc', '```', '', - '校验覆盖严格 DBC 解析(长度、信号越界与重叠)、10 个 ID 与固件宏对应、' - '标准/扩展格式、33 个信号、发送/接收节点、SDC 周期、24 个已知报文解码、' + '校验覆盖严格 DBC 解析(长度、信号越界与重叠)、11 个 ID 与固件宏对应、' + '标准/扩展格式、40 个信号、发送/接收节点、SDC / 自定义帧周期、已知报文解码、' '六个任务号与计数边界编码、大端偏置电流、无效温度枚举、全负温度和截短 DLC。' '已安装并验证 cantools 44.1.0,接口参考 [cantools 官方文档](https://cantools.readthedocs.io/en/latest/)。', '', '上述是静态及软件编解码验证,另校验两份 DBC 的速率、相同信号布局及源码 / CubeMX 位时序一致。' + 'v2.2 的烧录回读、新帧 CAN2 测试及串口显示核验状态见 [显示 CAN 测试报告](AMI自定义显示CAN测试报告.md)。' 'v2.1 已完成烧录、完整 Flash 回读比对、CAN1 500K 与 CAN2 250K 到官方 HMI 调试器的' '实物测试,详见 [双 CAN 测试报告](CAN1_CAN2_v2.1测试报告.md)。' '之前 v2.0 的 CAN 盒 -> 实物 AMI CAN1 / MCU -> USART2 -> COM4 ' diff --git a/scripts/requirements-can.txt b/scripts/requirements-can.txt new file mode 100644 index 0000000..d3661f6 --- /dev/null +++ b/scripts/requirements-can.txt @@ -0,0 +1 @@ +python-can==4.6.1 diff --git a/scripts/send_drivetrain_can.py b/scripts/send_drivetrain_can.py new file mode 100644 index 0000000..5ffd0da --- /dev/null +++ b/scripts/send_drivetrain_can.py @@ -0,0 +1,79 @@ +"""Send AMI 0x182 display values through a python-can adapter (no motor actuation).""" +import argparse +from decimal import Decimal, InvalidOperation +import os +import struct +import time + + +def temperature_raw(value): + try: + scaled = Decimal(value) * 10 + if not scaled.is_finite() or scaled != scaled.to_integral_value(): + raise ValueError('temperature must have at most one decimal place') + raw = int(scaled) + except (InvalidOperation, OverflowError) as exc: + raise ValueError('invalid temperature') from exc + if not -32768 <= raw <= 32767: + raise ValueError('temperature must be -3276.8..3276.7 degC') + return raw + + +def build_payload(torque, motor_temp, mcu_temp, valid=7): + if not -1000 <= torque <= 1000: + raise ValueError('torque must be -1000..1000 permille') + if not 0 <= valid <= 7: + raise ValueError('valid must be 0..7 (bit0 torque, bit1 motor, bit2 MCU)') + return struct.pack('0 and <=2 seconds; duration must be positive and finite') + print(f'Standard ID 0x182, DLC 8, data {payload.hex(" ").upper()}, bitrate {args.bitrate}', flush=True) + if args.dry_run: + return + dll_handle = None + if args.dll_dir: + path = os.path.abspath(args.dll_dir) + os.environ['PATH'] = path + os.pathsep + os.environ['PATH'] + if hasattr(os, 'add_dll_directory'): + dll_handle = os.add_dll_directory(path) + import can + count = 0 + try: + with can.Bus(interface=args.interface, channel=args.channel, bitrate=args.bitrate) as bus: + message = can.Message(arbitration_id=0x182, is_extended_id=False, data=payload) + started = time.monotonic() + deadline = started + while time.monotonic() < started + args.duration: + bus.send(message, timeout=0.2) + count += 1 + deadline += args.period + time.sleep(max(0, min(deadline, started + args.duration) - time.monotonic())) + finally: + if dll_handle is not None: + dll_handle.close() + print(f'Sent {count} frames. Values expire after 2 seconds without valid input.') + + +if __name__ == '__main__': + main() diff --git a/scripts/verify_dbc.py b/scripts/verify_dbc.py index be311db..2eca373 100644 --- a/scripts/verify_dbc.py +++ b/scripts/verify_dbc.py @@ -11,6 +11,7 @@ import re import cantools from export_dbc_docs import can2_dbc_text +from send_drivetrain_can import build_payload ROOT = Path(__file__).resolve().parents[1] @@ -36,6 +37,7 @@ def verify_bit_timing(): assert value('ClockDivider') == 'FDCAN_CLOCK_DIV1' assert value('FrameFormat') == 'FDCAN_FRAME_CLASSIC' + assert int(value('StdFiltersNbr')) == int(ioc[f'FDCAN{port}.StdFiltersNbr']) == 4 prescaler, seg1, seg2, sjw = (int(value(field)) for field in ('NominalPrescaler', 'NominalTimeSeg1', 'NominalTimeSeg2', 'NominalSyncJumpWidth')) @@ -70,23 +72,24 @@ def main(): header = (ROOT / 'firmware/Core/Inc/ami_protocol.h').read_text(encoding='utf-8') identifiers = {int(value, 16) for value in re.findall( r'^#define\s+AMI_CAN_ID_\w+\s+(0x[\dA-Fa-f]+)', header, re.MULTILINE)} - expected = {0x300:(False,8), 0x6A0:(False,8), 0x6A1:(False,2), + expected = {0x182:(False,8), 0x300:(False,8), 0x6A0:(False,8), 0x6A1:(False,2), 0x6A2:(False,8), 0x6A4:(False,4), 0x6A6:(False,8), 0x140:(False,8), 0x156:(False,8), 0x186040F3:(True,8), 0x186140F3:(True,8)} actual = {m.frame_id:(m.is_extended_frame,m.length) for m in db.messages} assert actual == expected, actual assert set(actual) == identifiers, (actual, identifiers) - assert len(db.messages) == 10 - assert sum(len(m.signals) for m in db.messages) == 33 + assert len(db.messages) == 11 + assert sum(len(m.signals) for m in db.messages) == 40 for m in db.messages: if m.frame_id == 0x300: assert m.senders == ['AMI'] and m.receivers == {'VCU'} else: assert m.receivers == {'AMI'} - assert m.senders == (['SDC_ACQ_DAC'] if 0x6A0 <= m.frame_id <= 0x6A6 else ['BMS']) + assert m.senders == (['VCU'] if m.frame_id == 0x182 else + ['SDC_ACQ_DAC'] if 0x6A0 <= m.frame_id <= 0x6A6 else ['BMS']) assert db.dbc.attributes['Baudrate'].value == 500000 - for ident, cycle in [(0x6A0,100), (0x6A1,500), (0x6A2,20)]: + for ident, cycle in [(0x182,100), (0x6A0,100), (0x6A1,500), (0x6A2,20)]: assert db.get_message_by_frame_id(ident).cycle_time == cycle for ident in [0x300,0x6A4,0x6A6,0x140,0x156,0x186040F3,0x186140F3]: assert db.get_message_by_frame_id(ident).cycle_time in (None,0) @@ -96,6 +99,32 @@ def main(): checks.append({'id':hex(ident),'data':data}) return db.decode_message(ident, bytes.fromhex(data), decode_choices=False) + display = db.get_message_by_frame_id(0x182) + for raw, torque, motor, mcu, flags in [ + ('F4 01 C2 01 90 01 07 01',500,45,40,7), + ('0C FE 9B FF 33 FF 07 01',-500,-10.1,-20.5,7), + ('18 FC 00 80 FF 7F 05 01',-1000,-3276.8,3276.7,5), + ('E8 03 00 00 00 00 00 01',1000,0,0,0)]: + values = decode(0x182,raw) + assert values['Torque_Permille'] == torque + near(values['Motor_Temperature'],motor) + near(values['MCU_Temperature'],mcu) + for bit, name in enumerate(('Torque_Valid','Motor_Temperature_Valid','MCU_Temperature_Valid')): + assert values[name] == ((flags >> bit) & 1) + assert values['Protocol_Version'] == 1 + assert display.encode(values) == bytes.fromhex(raw) + assert build_payload(torque,str(motor),str(mcu),flags) == bytes.fromhex(raw) + assert all(display.get_signal_by_name(name).is_signed for name in + ('Torque_Permille','Motor_Temperature','MCU_Temperature')) + for arguments in ((1001,'45','40',7), (0,'3276.8','40',7), + (0,'45.01','40',7), (0,'45','40',8), (0,'nan','40',7)): + try: + build_payload(*arguments) + except ValueError: + pass + else: + raise AssertionError(f'Invalid sender arguments accepted: {arguments}') + # Canonical request at 1000 ms, first sequence, task 2; all six task enums. task = decode(0x300,'01 02 00 01 E8 03 00 00') assert task == {'Protocol_Version':1,'Task_ID':2,'Request_Sequence':0, @@ -189,11 +218,12 @@ def main(): for decode_choices in (False, True): assert db.decode_message(ident, payload, decode_choices=decode_choices) == \ db2.decode_message(ident, payload, decode_choices=decode_choices) - print(json.dumps({'result':'passed','messages':len(db.messages),'signals':33, + print(json.dumps({'result':'passed','messages':len(db.messages),'signals':40, 'known_payload_checks':len(checks),'all_task_ids_and_counter_edges':True, 'ports_bitrate':bitrates,'both_dbc_layouts_and_payloads_match':True, 'firmware_and_ioc_bit_timing_match':True, 'firmware_ids_match':True,'sdc_source_layout_match':source_check, + 'display_sender_known_bytes_and_argument_rejection':True, 'cantools_version':cantools.__version__},indent=2))