Add CAN inputs for drivetrain display values with DBC and bench evidence
This commit is contained in:
@@ -10,3 +10,5 @@
|
|||||||
# Keep vendor source and captured logs as supplied.
|
# Keep vendor source and captured logs as supplied.
|
||||||
firmware/Drivers/** -whitespace
|
firmware/Drivers/** -whitespace
|
||||||
docs/evidence/**/*.log -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
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
VERSION "AMI-2.1-2026-10-03"
|
VERSION "AMI-2.2-2026-10-03"
|
||||||
|
|
||||||
NS_ :
|
NS_ :
|
||||||
NS_DESC_
|
NS_DESC_
|
||||||
@@ -12,6 +12,15 @@ BS_:
|
|||||||
|
|
||||||
BU_: AMI VCU SDC_ACQ_DAC BMS
|
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
|
BO_ 768 AMI_TaskRequest: 8 AMI
|
||||||
SG_ Protocol_Version : 0|8@1+ (1,0) [1|1] "" VCU
|
SG_ Protocol_Version : 0|8@1+ (1,0) [1|1] "" VCU
|
||||||
SG_ Task_ID : 8|8@1+ (1,0) [1|6] "" 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
|
BO_ 2556510451 BMS_Extremes_Extended: 8 BMS
|
||||||
SG_ Maximum_Cell_Temperature : 39|8@0+ (1,-40) [-40|215] "degC" AMI
|
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_ "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 are received from SDC and BMS.";
|
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 receiver of task selection requests; execution and safety interlocks are outside this AMI interface.";
|
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_ 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_ 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_ 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 Protocol_Version "Fixed 1.";
|
||||||
CM_ SG_ 768 Task_ID "Valid task values are 1 through 6.";
|
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.";
|
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_ 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 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_ 768 Request_Source 1 "AMI_HMI";
|
||||||
VAL_ 1696 Board_Identifier 161 "A11_F407";
|
VAL_ 1696 Board_Identifier 161 "A11_F407";
|
||||||
@@ -130,6 +149,7 @@ BA_DEF_DEF_ "GenMsgCycleTime" 0;
|
|||||||
BA_ "BusType" "CAN";
|
BA_ "BusType" "CAN";
|
||||||
BA_ "Baudrate" 500000;
|
BA_ "Baudrate" 500000;
|
||||||
BA_ "AMIPort" "CAN1";
|
BA_ "AMIPort" "CAN1";
|
||||||
|
BA_ "GenMsgCycleTime" BO_ 386 100;
|
||||||
BA_ "GenMsgCycleTime" BO_ 1696 100;
|
BA_ "GenMsgCycleTime" BO_ 1696 100;
|
||||||
BA_ "GenMsgCycleTime" BO_ 1697 500;
|
BA_ "GenMsgCycleTime" BO_ 1697 500;
|
||||||
BA_ "GenMsgCycleTime" BO_ 1698 20;
|
BA_ "GenMsgCycleTime" BO_ 1698 20;
|
||||||
|
|||||||
+24
-4
@@ -1,4 +1,4 @@
|
|||||||
VERSION "AMI-2.1-2026-10-03"
|
VERSION "AMI-2.2-2026-10-03"
|
||||||
|
|
||||||
NS_ :
|
NS_ :
|
||||||
NS_DESC_
|
NS_DESC_
|
||||||
@@ -12,6 +12,15 @@ BS_:
|
|||||||
|
|
||||||
BU_: AMI VCU SDC_ACQ_DAC BMS
|
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
|
BO_ 768 AMI_TaskRequest: 8 AMI
|
||||||
SG_ Protocol_Version : 0|8@1+ (1,0) [1|1] "" VCU
|
SG_ Protocol_Version : 0|8@1+ (1,0) [1|1] "" VCU
|
||||||
SG_ Task_ID : 8|8@1+ (1,0) [1|6] "" 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
|
BO_ 2556510451 BMS_Extremes_Extended: 8 BMS
|
||||||
SG_ Maximum_Cell_Temperature : 39|8@0+ (1,-40) [-40|215] "degC" AMI
|
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_ "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 are received from SDC and BMS.";
|
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 receiver of task selection requests; execution and safety interlocks are outside this AMI interface.";
|
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_ 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_ 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_ 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 Protocol_Version "Fixed 1.";
|
||||||
CM_ SG_ 768 Task_ID "Valid task values are 1 through 6.";
|
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.";
|
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_ 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 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_ 768 Request_Source 1 "AMI_HMI";
|
||||||
VAL_ 1696 Board_Identifier 161 "A11_F407";
|
VAL_ 1696 Board_Identifier 161 "A11_F407";
|
||||||
@@ -130,6 +149,7 @@ BA_DEF_DEF_ "GenMsgCycleTime" 0;
|
|||||||
BA_ "BusType" "CAN";
|
BA_ "BusType" "CAN";
|
||||||
BA_ "Baudrate" 250000;
|
BA_ "Baudrate" 250000;
|
||||||
BA_ "AMIPort" "CAN2";
|
BA_ "AMIPort" "CAN2";
|
||||||
|
BA_ "GenMsgCycleTime" BO_ 386 100;
|
||||||
BA_ "GenMsgCycleTime" BO_ 1696 100;
|
BA_ "GenMsgCycleTime" BO_ 1696 100;
|
||||||
BA_ "GenMsgCycleTime" BO_ 1697 500;
|
BA_ "GenMsgCycleTime" BO_ 1697 500;
|
||||||
BA_ "GenMsgCycleTime" BO_ 1698 20;
|
BA_ "GenMsgCycleTime" BO_ 1698 20;
|
||||||
|
|||||||
@@ -2,19 +2,24 @@
|
|||||||
|
|
||||||
YMR A11 仪表,使用淘晶驰 TJC4827X543_011 串口屏,分辨率 480 × 272。
|
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` 输入不再使用。
|
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 相同。
|
- [CAN2 DBC](AMI_CAN2_250k.dbc):250 kbit/s,报文布局与 CAN1 相同。
|
||||||
- [DBC 对应说明](docs/AMI_CAN_DBC说明.md):信号布局、枚举、字节序、样例与复现检查。
|
- [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 调试器的证据。
|
- [联调报告](docs/SDC_BMS联调报告.md):真实 CAN1 / MCU / COM4 到 HMI 调试器的证据。
|
||||||
- [v2.1 双 CAN 测试报告](docs/CAN1_CAN2_v2.1测试报告.md):烧录和完整回读、CAN1 500K / CAN2 250K 数据与六个任务确认/取消测试。
|
- [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,保留历史测试版本。
|
- [此前已联调的 v2.0 BIN](output/firmware/AMI_Controller_v2.0_500k.bin):两路均为 500K,保留历史测试版本。
|
||||||
- [AMI.HMI](AMI.HMI):最新版屏幕工程,打开后编译并下载到对应型号屏幕。
|
- [AMI.HMI](AMI.HMI):最新版屏幕工程,打开后编译并下载到对应型号屏幕。
|
||||||
- [通讯交接文档](docs/通讯交接文档.md):可编辑协议说明,包含全部状态编号、任务帧、主页面属性及联调步骤。
|
- [通讯交接文档](docs/通讯交接文档.md):可编辑协议说明,包含全部状态编号、任务帧、主页面属性及联调步骤。
|
||||||
|
|||||||
+50
-7
@@ -1,6 +1,6 @@
|
|||||||
# AMI CAN DBC 说明
|
# 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) |
|
| CAN1 | 500 kbit/s | PA11 / PA12 | [AMI.dbc](../AMI.dbc) |
|
||||||
| CAN2 | 250 kbit/s | PB0 / PB1 | [AMI_CAN2_250k.dbc](../AMI_CAN2_250k.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%。
|
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`。
|
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 | 报文名 | 方向和作用 | 周期 / 触发 |
|
| CAN ID | 类型 | DLC | 报文名 | 方向和作用 | 周期 / 触发 |
|
||||||
| --- | --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- | --- |
|
||||||
|
| `0x182` | 标准 | 8 | `AMI_DrivetrainDisplay` | VCU / 测试器 -> AMI:扭矩千分、电机温度、MCU 温度 | 100 ms |
|
||||||
| `0x300` | 标准 | 8 | `AMI_TaskRequest` | AMI -> VCU:用户确认后的任务选择请求 | 确认任务触发 |
|
| `0x300` | 标准 | 8 | `AMI_TaskRequest` | AMI -> VCU:用户确认后的任务选择请求 | 确认任务触发 |
|
||||||
| `0x6A0` | 标准 | 8 | `SDC_Heartbeat` | SDC -> AMI:板标识、版本、序号、上电时间 | 100 ms |
|
| `0x6A0` | 标准 | 8 | `SDC_Heartbeat` | SDC -> AMI:板标识、版本、序号、上电时间 | 100 ms |
|
||||||
| `0x6A1` | 标准 | 2 | `SDC_ADC_InputVoltage` | SDC -> AMI:低压电池电压,精确 DLC=2 | 500 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。
|
扩展帧在 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。单字节温度的字节序不改变实际解码。
|
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
|
### 0x300 - AMI_TaskRequest
|
||||||
|
|
||||||
| 信号 | Start | 位数 | 字节序 | Factor | Offset | 单位 | 编码范围 |
|
| 信号 | Start | 位数 | 字节序 | Factor | Offset | 单位 | 编码范围 |
|
||||||
@@ -137,6 +152,29 @@ Start 为 DBC 起始位,位号从 0 开始。Intel `@1` 从最低有效位起
|
|||||||
|
|
||||||
`Maximum_Cell_Temperature`:255 = Invalid。
|
`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 任务请求语义
|
## AMI 任务请求语义
|
||||||
|
|
||||||
| Task_ID | 任务 |
|
| Task_ID | 任务 |
|
||||||
@@ -160,6 +198,9 @@ Start 为 DBC 起始位,位号从 0 开始。Intel `@1` 从最低有效位起
|
|||||||
| 高压电压 | BMS 大端 uint16 × 0.1 V;现有控件四舍五入到整数 V | 2000 ms 无有效 BMS 状态 |
|
| 高压电压 | BMS 大端 uint16 × 0.1 V;现有控件四舍五入到整数 V | 2000 ms 无有效 BMS 状态 |
|
||||||
| 高压电流 | BMS 大端 uint16 × 0.1 - 500 A;四舍五入到整数 A | 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 ℃。第 9/10 路虚拟温度没有总线字段,最高温度也属于 MCU 派生结果,不新增虚构信号。
|
电流字段是带偏置的 uint16,不能按 int16 解码。温度原始 `0xFF` 为无效;DBC 枚举将其标为 Invalid。关闭枚举解码的工具可能显示 215,聚合时必须先排除 原始 255,不能把它当作 215 ℃。有效实际温度范围为 -40..214 ℃。第 9/10 路虚拟温度没有总线字段,最高温度也属于 MCU 派生结果,不新增虚构信号。
|
||||||
|
|
||||||
@@ -172,6 +213,8 @@ BMS 扩展帧的其他字段没有纳入本 DBC,尤其字节 6..7 的低压电
|
|||||||
| ID / DLC | 数据(十六进制) | 解码及仪表显示 |
|
| ID / DLC | 数据(十六进制) | 解码及仪表显示 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `0x300 / 8` | `01 02 00 01 E8 03 00 00` | 直线加速请求、序号 0、来源 AMI、上电 1000 ms |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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
|
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 与此文档需同时保持一致。
|
修改 AMI.dbc 后运行 `python scripts/export_dbc_docs.py` 更新 CAN2 DBC 和本文;固件字节布局、DBC 与此文档需同时保持一致。
|
||||||
|
|||||||
@@ -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)。
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
2026-10-03,固件来源提交 `9120bd0`。实际链路为 PCAN-USB CAN 盒 -> 实物 AMI MCU -> USART2 PA2/PA3 -> CH340 COM4(9600 8N1)-> USART HMI 官方调试器。先测试 CAN1,通知用户切换接线并收到确认后,再测试 CAN2。
|
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 节点或物理串口屏;未同时连接两路。
|
CAN1 按 SDC 的 500 kbit/s 使用,CAN2 按 BMS 的 250 kbit/s 使用。此次用 CAN 盒模拟源报文,未连接真实 SDC/BMS 节点或物理串口屏;未同时连接两路。
|
||||||
|
|
||||||
## 烧录与实际位时序
|
## 烧录与实际位时序
|
||||||
|
|||||||
+5
-3
@@ -1,6 +1,6 @@
|
|||||||
# AMI 接入 SDC / BMS 协议
|
# 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。
|
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 按字节流解析拆包/粘包。
|
屏幕确认后发送 `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` 灯状态。
|
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 状态活动超时提示,默认高电平有效;尚未观察验证灯的物理极性和行为,活动灯不能替代每个数值的有效性判断。
|
PA0 LED 每 500 ms 翻转,PA1 为仪表/SDC 状态活动超时提示,默认高电平有效;尚未观察验证灯的物理极性和行为,活动灯不能替代每个数值的有效性判断。
|
||||||
|
|
||||||
## 验证范围
|
## v2.0 历史验证范围
|
||||||
|
|
||||||
已完成 Release 编译、SWD 烧录校验、HMI 编译(0 错误 / 0 警告),以及 **CAN 盒 → 实物 AMI CAN1 → MCU USART2 → COM4 → 官方 HMI 调试器** 数据更新测试。
|
已完成 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)。
|
同时发送 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 文案不能作为安全状态证明。
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"bytes": 15880,
|
||||||
|
"sha256": "E73994418D346ADEF7E2ED5EE3C018C4CD3B74C4E4A2884CD8628218153BEA7F",
|
||||||
|
"flash_verified": true,
|
||||||
|
"full_readback_identical": true
|
||||||
|
}
|
||||||
@@ -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
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
@@ -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"
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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
|
||||||
+3
-1
@@ -1,9 +1,11 @@
|
|||||||
# AMI 仪表通讯交接文档
|
# 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。本文以随附的精简指令版工程为准。
|
适用工程: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 测试描述属于历史记录,物理串口屏、真实节点和两路同时接入仍待实测。
|
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 不生成正常/故障判断。
|
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 不生成正常/故障判断。
|
||||||
|
|||||||
+9
-4
@@ -1,13 +1,18 @@
|
|||||||
2026-10-03:屏幕数字接口1.2,MCU CAN输入2.1(SDC/BMS)。
|
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。每份包含10条Classic CAN报文和33个信号,报文布局相同。
|
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一致。
|
v2.1源码/CubeMX/DBC位时序一致性校验及Release编译通过;已烧录,完整15612字节Flash回读与发布BIN一致。
|
||||||
CAN1 500K(SDC)及CAN2 250K(仅BMS数据)分别完成MCU/USART2/COM4/官方HMI调试器的数据更新、无效、超时和恢复测试。
|
CAN1 500K(SDC)及CAN2 250K(仅BMS数据)分别完成MCU/USART2/COM4/官方HMI调试器的数据更新、无效、超时和恢复测试。
|
||||||
两路各六个任务确认及六个取消通过;十组MCU状态快照符合预期,CAN/UART接收错误均为0。新证据见docs/CAN1_CAN2_v2.1测试报告.md。
|
两路各六个任务确认及六个取消通过;十组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。
|
下述历史实物证据对应v2.0,两路均为500K;原BIN保留在output/firmware/AMI_Controller_v2.0_500k.bin。
|
||||||
HMI编译0错误0警告;v2.0固件Release编译、SWD烧录校验通过。
|
HMI编译0错误0警告;v2.0固件Release编译、SWD烧录校验通过。
|
||||||
已实测CAN盒->实物AMI CAN1/MCU->USART2->COM4->官方HMI调试器:低压电压、高压电压/电流、最高有效温度、无效数据、超时/恢复、跨页更新、HMI重连。
|
已实测CAN盒->实物AMI CAN1/MCU->USART2->COM4->官方HMI调试器:低压电压、高压电压/电流、最高有效温度、无效数据、超时/恢复、跨页更新、HMI重连。
|
||||||
六个任务确认均收到正确0x300请求,六个取消均未发送;该测试条件为CAN1持续有有效输入。
|
六个任务确认均收到正确0x300请求,六个取消均未发送;该测试条件为CAN1持续有有效输入。
|
||||||
证据在docs/evidence/2026-10-03/sdc-bms;联调报告见docs/SDC_BMS联调报告.md。
|
证据在docs/evidence/2026-10-03/sdc-bms;联调报告见docs/SDC_BMS联调报告.md。
|
||||||
v2.1仍未接物理串口屏或真实SDC/BMS节点,未实测两路同时接入、LED极性和车辆执行/安全动作;未定义电机温度、轮频到车速标定和GPIO到具名安全信号映射。
|
未接物理串口屏或真实SDC/BMS/电机控制器节点,未实测两路同时接入、LED极性和车辆执行/安全动作;未定义轮频到车速标定和GPIO到具名安全信号映射。
|
||||||
原C示例是屏幕debug接口参考,不代表整车控制已实现。
|
原C示例是屏幕debug接口参考,不代表整车控制已实现。
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ FDCAN1.IPParameters=AutoRetransmission,CalculateTimeQuantumNominal,CalculateTime
|
|||||||
FDCAN1.NominalPrescaler=8
|
FDCAN1.NominalPrescaler=8
|
||||||
FDCAN1.NominalTimeSeg1=13
|
FDCAN1.NominalTimeSeg1=13
|
||||||
FDCAN1.NominalTimeSeg2=2
|
FDCAN1.NominalTimeSeg2=2
|
||||||
FDCAN1.StdFiltersNbr=3
|
FDCAN1.StdFiltersNbr=4
|
||||||
FDCAN1.ExtFiltersNbr=1
|
FDCAN1.ExtFiltersNbr=1
|
||||||
FDCAN2.AutoRetransmission=ENABLE
|
FDCAN2.AutoRetransmission=ENABLE
|
||||||
FDCAN2.CalculateBaudRateNominal=250000
|
FDCAN2.CalculateBaudRateNominal=250000
|
||||||
@@ -63,7 +63,7 @@ FDCAN2.IPParameters=AutoRetransmission,CalculateTimeQuantumNominal,CalculateTime
|
|||||||
FDCAN2.NominalPrescaler=16
|
FDCAN2.NominalPrescaler=16
|
||||||
FDCAN2.NominalTimeSeg1=13
|
FDCAN2.NominalTimeSeg1=13
|
||||||
FDCAN2.NominalTimeSeg2=2
|
FDCAN2.NominalTimeSeg2=2
|
||||||
FDCAN2.StdFiltersNbr=3
|
FDCAN2.StdFiltersNbr=4
|
||||||
FDCAN2.ExtFiltersNbr=1
|
FDCAN2.ExtFiltersNbr=1
|
||||||
File.Version=6
|
File.Version=6
|
||||||
GPIO.groupedBy=Group By Peripherals
|
GPIO.groupedBy=Group By Peripherals
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
#ifndef AMI_PROTOCOL_H
|
#ifndef AMI_PROTOCOL_H
|
||||||
#define 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_HEARTBEAT 0x6A0U
|
||||||
#define AMI_CAN_ID_SDC_ADC 0x6A1U
|
#define AMI_CAN_ID_SDC_ADC 0x6A1U
|
||||||
#define AMI_CAN_ID_SDC_FREQUENCY 0x6A2U
|
#define AMI_CAN_ID_SDC_FREQUENCY 0x6A2U
|
||||||
@@ -17,6 +18,7 @@
|
|||||||
#define AMI_CAN_DATA_TIMEOUT_MS 500U
|
#define AMI_CAN_DATA_TIMEOUT_MS 500U
|
||||||
#define AMI_ADC_TIMEOUT_MS 1500U
|
#define AMI_ADC_TIMEOUT_MS 1500U
|
||||||
#define AMI_BMS_TIMEOUT_MS 2000U
|
#define AMI_BMS_TIMEOUT_MS 2000U
|
||||||
|
#define AMI_DRIVETRAIN_TIMEOUT_MS 2000U
|
||||||
#define AMI_SCREEN_BOOT_DELAY_MS 800U
|
#define AMI_SCREEN_BOOT_DELAY_MS 800U
|
||||||
#define AMI_SCREEN_RESYNC_MS 5000U
|
#define AMI_SCREEN_RESYNC_MS 5000U
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ static volatile uint32_t debug_last_rx_ms;
|
|||||||
static volatile uint32_t adc_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_status_last_rx_ms;
|
||||||
static volatile uint32_t bms_temperature_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. */
|
/* Preserve the exact source units even where the HMI has integer controls. */
|
||||||
static volatile uint16_t sdc_adc_mv;
|
static volatile uint16_t sdc_adc_mv;
|
||||||
static volatile uint16_t sdc_frequency_hz[4];
|
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);
|
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)
|
static size_t AppendUnsigned(char *dst, uint32_t value)
|
||||||
{
|
{
|
||||||
char reversed[10];
|
char reversed[10];
|
||||||
@@ -245,6 +252,27 @@ static bool DecodeCan(uint32_t identifier, uint32_t id_type,
|
|||||||
uint32_t now = HAL_GetTick();
|
uint32_t now = HAL_GetTick();
|
||||||
if (id_type == FDCAN_STANDARD_ID)
|
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))
|
if ((identifier == AMI_CAN_ID_SDC_ADC) && (length == 2U))
|
||||||
{
|
{
|
||||||
sdc_adc_mv = (uint16_t)ReadLeU16(data);
|
sdc_adc_mv = (uint16_t)ReadLeU16(data);
|
||||||
@@ -350,6 +378,10 @@ static void ConfigureCanPort(FDCAN_HandleTypeDef *hfdcan)
|
|||||||
filter.FilterID1 = AMI_CAN_ID_BMS_TEMPERATURE;
|
filter.FilterID1 = AMI_CAN_ID_BMS_TEMPERATURE;
|
||||||
if (HAL_FDCAN_ConfigFilter(hfdcan, &filter) != HAL_OK) { Error_Handler(); }
|
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.IdType = FDCAN_EXTENDED_ID;
|
||||||
filter.FilterIndex = 0U;
|
filter.FilterIndex = 0U;
|
||||||
filter.FilterType = FDCAN_FILTER_DUAL;
|
filter.FilterType = FDCAN_FILTER_DUAL;
|
||||||
@@ -489,6 +521,13 @@ static void UpdateTimeoutsAndLeds(void)
|
|||||||
{
|
{
|
||||||
SetDashValid(6U, false);
|
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();
|
__enable_irq();
|
||||||
|
|
||||||
if (debug_timeout && !debug_timeout_applied)
|
if (debug_timeout && !debug_timeout_applied)
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ void MX_FDCAN1_Init(void)
|
|||||||
hfdcan1.Init.DataSyncJumpWidth = 1;
|
hfdcan1.Init.DataSyncJumpWidth = 1;
|
||||||
hfdcan1.Init.DataTimeSeg1 = 13;
|
hfdcan1.Init.DataTimeSeg1 = 13;
|
||||||
hfdcan1.Init.DataTimeSeg2 = 2;
|
hfdcan1.Init.DataTimeSeg2 = 2;
|
||||||
hfdcan1.Init.StdFiltersNbr = 3;
|
hfdcan1.Init.StdFiltersNbr = 4;
|
||||||
hfdcan1.Init.ExtFiltersNbr = 1;
|
hfdcan1.Init.ExtFiltersNbr = 1;
|
||||||
hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
|
hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
|
||||||
if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
|
if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
|
||||||
@@ -91,7 +91,7 @@ void MX_FDCAN2_Init(void)
|
|||||||
hfdcan2.Init.DataSyncJumpWidth = 1;
|
hfdcan2.Init.DataSyncJumpWidth = 1;
|
||||||
hfdcan2.Init.DataTimeSeg1 = 13;
|
hfdcan2.Init.DataTimeSeg1 = 13;
|
||||||
hfdcan2.Init.DataTimeSeg2 = 2;
|
hfdcan2.Init.DataTimeSeg2 = 2;
|
||||||
hfdcan2.Init.StdFiltersNbr = 3;
|
hfdcan2.Init.StdFiltersNbr = 4;
|
||||||
hfdcan2.Init.ExtFiltersNbr = 1;
|
hfdcan2.Init.ExtFiltersNbr = 1;
|
||||||
hfdcan2.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
|
hfdcan2.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
|
||||||
if (HAL_FDCAN_Init(&hfdcan2) != HAL_OK)
|
if (HAL_FDCAN_Init(&hfdcan2) != HAL_OK)
|
||||||
|
|||||||
+3
-2
@@ -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 不再接收。
|
- SDC ADC 为低压电池电压;BMS 总压、偏置电流和最高有效实际温度按源协议解码。旧 0x180 / 0x181 / 0x280 不再接收。
|
||||||
- 主循环通过 USART2 TX DMA 一次发送一条完整 TJC 指令,末尾为三个真实字节 `FF FF FF`。
|
- 主循环通过 USART2 TX DMA 一次发送一条完整 TJC 指令,末尾为三个真实字节 `FF FF FF`。
|
||||||
- 仅变化后的数值排队,字段轮转和 DMA 合并最新值,避免刷新饥饿;白色为有效数值,灰色为未知/失效,ADC 和 BMS 各自计时。
|
- 仅变化后的数值排队,字段轮转和 DMA 合并最新值,避免刷新饥饿;白色为有效数值,灰色为未知/失效,ADC 和 BMS 各自计时。
|
||||||
@@ -57,4 +58,4 @@ CubeMX 配置源为 `AMI_Controller.ioc`。重新生成时保留 USER CODE 区
|
|||||||
4. 下载 `AMI.HMI` 后逐条验证仪表数值、16 路 debug 状态及 6 个任务按钮。
|
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)。
|
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。
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -127,7 +127,7 @@ def export(font_path):
|
|||||||
canvas.line(40, 31, page_width-40, 31)
|
canvas.line(40, 31, page_width-40, 31)
|
||||||
canvas.setFont('AMIChinese', 8)
|
canvas.setFont('AMIChinese', 8)
|
||||||
canvas.setFillColor(colors.HexColor('#506775'))
|
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.drawRightString(page_width-40, 19, f'{doc.page}')
|
||||||
canvas.restoreState()
|
canvas.restoreState()
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ def export(font_path):
|
|||||||
leftMargin=40, rightMargin=40,
|
leftMargin=40, rightMargin=40,
|
||||||
topMargin=36, bottomMargin=44,
|
topMargin=36, bottomMargin=44,
|
||||||
title='AMI CAN 报文说明', author='AMI / YMR',
|
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)
|
document.build(story, onFirstPage=footer, onLaterPages=footer)
|
||||||
print(OUTPUT)
|
print(OUTPUT)
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ def can2_dbc_text():
|
|||||||
return text
|
return text
|
||||||
|
|
||||||
PURPOSE = {
|
PURPOSE = {
|
||||||
|
0x182: 'VCU / 测试器 -> AMI:扭矩千分、电机温度、MCU 温度',
|
||||||
0x300: 'AMI -> VCU:用户确认后的任务选择请求',
|
0x300: 'AMI -> VCU:用户确认后的任务选择请求',
|
||||||
0x6A0: 'SDC -> AMI:板标识、版本、序号、上电时间',
|
0x6A0: 'SDC -> AMI:板标识、版本、序号、上电时间',
|
||||||
0x6A1: 'SDC -> AMI:低压电池电压,精确 DLC=2',
|
0x6A1: 'SDC -> AMI:低压电池电压,精确 DLC=2',
|
||||||
@@ -40,7 +41,7 @@ def render():
|
|||||||
db = cantools.database.load_file(ROOT / 'AMI.dbc', strict=True)
|
db = cantools.database.load_file(ROOT / 'AMI.dbc', strict=True)
|
||||||
lines = [
|
lines = [
|
||||||
'# AMI CAN DBC 说明', '',
|
'# 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% 采样点。'
|
'CAN1 为 500 kbit/s,CAN2 为 250 kbit/s,均为 Classic CAN、87.5% 采样点。'
|
||||||
'两路保留相同的接收 ID、解码与任务发送功能,MCU 不在两路之间转发原始报文。'
|
'两路保留相同的接收 ID、解码与任务发送功能,MCU 不在两路之间转发原始报文。'
|
||||||
@@ -49,22 +50,24 @@ def render():
|
|||||||
'| --- | --- | --- | --- |',
|
'| --- | --- | --- | --- |',
|
||||||
'| CAN1 | 500 kbit/s | PA11 / PA12 | [AMI.dbc](../AMI.dbc) |',
|
'| CAN1 | 500 kbit/s | PA11 / PA12 | [AMI.dbc](../AMI.dbc) |',
|
||||||
'| CAN2 | 250 kbit/s | PB0 / PB1 | [AMI_CAN2_250k.dbc](../AMI_CAN2_250k.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 不一定自动改硬件速率。'
|
'同一份报文表适用于两路。CAN 工具必须按接入端口设置速率,导入 DBC 不一定自动改硬件速率。'
|
||||||
'实际接法:SDC 500 kbit/s 接 CAN1,BMS 250 kbit/s 接 CAN2。', '',
|
'实际接法:SDC 500 kbit/s 接 CAN1,BMS 250 kbit/s 接 CAN2。', '',
|
||||||
'FDCAN 时钟 64 MHz,时钟分频为 1;NominalPrescaler 为 CAN1=8、CAN2=16,'
|
'FDCAN 时钟 64 MHz,时钟分频为 1;NominalPrescaler 为 CAN1=8、CAN2=16,'
|
||||||
'两路均使用 Sync=1、TimeSeg1=13、TimeSeg2=2、SJW=1。'
|
'两路均使用 Sync=1、TimeSeg1=13、TimeSeg2=2、SJW=1。'
|
||||||
'速率 = 64 MHz / Prescaler / (1+13+2);采样点 = (1+13)/16 = 87.5%。', '',
|
'速率 = 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 其他电芯/故障字段不属于此接口子集。'
|
'SDC `0x6A3` DAC 控制、`0x6A5` ASSI 控制、BMS 其他电芯/故障字段不属于此接口子集。'
|
||||||
'没有定义电机温度、逆变器温度、扭矩、标定后的车速、AMI 周期心跳或 VCU 执行反馈。'
|
'`0x182` 新增扭矩千分、电机温度和电机控制器 MCU 温度的仪表显示输入;'
|
||||||
|
'发送者负责转换实际电机控制器协议。未定义标定后的车速、AMI 周期心跳或 VCU 执行反馈。'
|
||||||
'旧 `0x180 / 0x181 / 0x280` 输入已停用。', '',
|
'旧 `0x180 / 0x181 / 0x280` 输入已停用。', '',
|
||||||
'SDC 字段依据 `SDC_ACQ_DAC.dbc` VERSION 1.1,保持其信号名、位布局、缩放和单位;'
|
'SDC 字段依据 `SDC_ACQ_DAC.dbc` VERSION 1.1,保持其信号名、位布局、缩放和单位;'
|
||||||
'仅将输入接收节点设为 AMI。BMS 字段依据 '
|
'仅将输入接收节点设为 AMI。BMS 字段依据 '
|
||||||
'[BmsMonitor-CANTest](https://git.acetaffy.ltd/acetaffy/BmsMonitor-CANTest) '
|
'[BmsMonitor-CANTest](https://git.acetaffy.ltd/acetaffy/BmsMonitor-CANTest) '
|
||||||
'提交 `e65c95203d1689df05343775982d7e85bd782646` 的 `BmsProtocolParser.cs`。', '',
|
'提交 `e65c95203d1689df05343775982d7e85bd782646` 的 `BmsProtocolParser.cs`。', '',
|
||||||
'DBC 为 ASCII 编码,注释和枚举使用英文,便于导入 CAN 工具;本文为 UTF-8 中文。'
|
'DBC 为 ASCII 编码,注释和枚举使用英文,便于导入 CAN 工具;本文为 UTF-8 中文。'
|
||||||
'物理值 = 原始无符号值 × Factor + Offset;下表范围为编码范围,不表示车辆正常工作范围。', '',
|
'物理值 = 原始值 × Factor + Offset;`0x182` 的三个数值为有符号 int16,其他数值按表定义。'
|
||||||
|
'下表范围为接口允许范围,不表示车辆正常工作范围。', '',
|
||||||
'## 报文总览', '',
|
'## 报文总览', '',
|
||||||
'| CAN ID | 类型 | DLC | 报文名 | 方向和作用 | 周期 / 触发 |',
|
'| CAN ID | 类型 | DLC | 报文名 | 方向和作用 | 周期 / 触发 |',
|
||||||
'| --- | --- | --- | --- | --- | --- |',
|
'| --- | --- | --- | --- | --- | --- |',
|
||||||
@@ -78,7 +81,7 @@ def render():
|
|||||||
'', '扩展帧在 DBC 的 `BO_` 十进制 ID 中设置 bit31:'
|
'', '扩展帧在 DBC 的 `BO_` 十进制 ID 中设置 bit31:'
|
||||||
'`0x186040F3 -> 2556444915`,`0x186140F3 -> 2556510451`。'
|
'`0x186040F3 -> 2556444915`,`0x186140F3 -> 2556510451`。'
|
||||||
'CAN 工具中使用实际 29 位仲裁 ID 并选择扩展帧;bit31 不是总线上发送的仲裁 ID。', '',
|
'CAN 工具中使用实际 29 位仲裁 ID 并选择扩展帧;bit31 不是总线上发送的仲裁 ID。', '',
|
||||||
'`GenMsgCycleTime` 仅填写已确认的 SDC 周期 100 / 500 / 20 ms。'
|
'`GenMsgCycleTime` 填写已确认的 SDC 周期 100 / 500 / 20 ms,以及自定义 `0x182` 的约定周期 100 ms。'
|
||||||
'其余帧未填写周期,默认 0 表示未指定,不据此推断 BMS 周期。', '',
|
'其余帧未填写周期,默认 0 表示未指定,不据此推断 BMS 周期。', '',
|
||||||
'## 信号布局', '',
|
'## 信号布局', '',
|
||||||
'Start 为 DBC 起始位,位号从 0 开始。Intel `@1` 从最低有效位起算;'
|
'Start 为 DBC 起始位,位号从 0 开始。Intel `@1` 从最低有效位起算;'
|
||||||
@@ -100,6 +103,28 @@ def render():
|
|||||||
lines += ['', ';'.join(choices) + '。']
|
lines += ['', ';'.join(choices) + '。']
|
||||||
lines += ['']
|
lines += ['']
|
||||||
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 任务请求语义', '',
|
'## AMI 任务请求语义', '',
|
||||||
'| Task_ID | 任务 |', '| --- | --- |',
|
'| Task_ID | 任务 |', '| --- | --- |',
|
||||||
'| 1 | 八字绕环 |', '| 2 | 直线加速 |', '| 3 | 高速循迹 |',
|
'| 1 | 八字绕环 |', '| 2 | 直线加速 |', '| 3 | 高速循迹 |',
|
||||||
@@ -117,7 +142,10 @@ def render():
|
|||||||
'| 低压电池 | `0x6A1` uint16 mV;`lvbat.val=(mV+5)/10`,显示两位小数 V | 1500 ms 无有效 ADC |',
|
'| 低压电池 | `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 V;现有控件四舍五入到整数 V | 2000 ms 无有效 BMS 状态 |',
|
||||||
'| 高压电流 | BMS 大端 uint16 × 0.1 - 500 A;四舍五入到整数 A | 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` 为无效;'
|
'电流字段是带偏置的 uint16,不能按 int16 解码。温度原始 `0xFF` 为无效;'
|
||||||
'DBC 枚举将其标为 Invalid。关闭枚举解码的工具可能显示 215,聚合时必须先排除 '
|
'DBC 枚举将其标为 Invalid。关闭枚举解码的工具可能显示 215,聚合时必须先排除 '
|
||||||
'原始 255,不能把它当作 215 ℃。有效实际温度范围为 -40..214 ℃。'
|
'原始 255,不能把它当作 215 ℃。有效实际温度范围为 -40..214 ℃。'
|
||||||
@@ -131,6 +159,8 @@ def render():
|
|||||||
'## 报文样例', '',
|
'## 报文样例', '',
|
||||||
'| ID / DLC | 数据(十六进制) | 解码及仪表显示 |', '| --- | --- | --- |',
|
'| ID / DLC | 数据(十六进制) | 解码及仪表显示 |', '| --- | --- | --- |',
|
||||||
'| `0x300 / 8` | `01 02 00 01 E8 03 00 00` | 直线加速请求、序号 0、来源 AMI、上电 1000 ms |',
|
'| `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 |',
|
'| `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 |',
|
'| `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 |',
|
'| `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 仓库,可额外比较五条输入帧的原始布局:',
|
'# 若同时检出 SDC 仓库,可额外比较五条输入帧的原始布局:',
|
||||||
'python scripts/verify_dbc.py --sdc-dbc ../SDC_ACQ_DAC/SDC_ACQ_DAC.dbc',
|
'python scripts/verify_dbc.py --sdc-dbc ../SDC_ACQ_DAC/SDC_ACQ_DAC.dbc',
|
||||||
'```', '',
|
'```', '',
|
||||||
'校验覆盖严格 DBC 解析(长度、信号越界与重叠)、10 个 ID 与固件宏对应、'
|
'校验覆盖严格 DBC 解析(长度、信号越界与重叠)、11 个 ID 与固件宏对应、'
|
||||||
'标准/扩展格式、33 个信号、发送/接收节点、SDC 周期、24 个已知报文解码、'
|
'标准/扩展格式、40 个信号、发送/接收节点、SDC / 自定义帧周期、已知报文解码、'
|
||||||
'六个任务号与计数边界编码、大端偏置电流、无效温度枚举、全负温度和截短 DLC。'
|
'六个任务号与计数边界编码、大端偏置电流、无效温度枚举、全负温度和截短 DLC。'
|
||||||
'已安装并验证 cantools 44.1.0,接口参考 [cantools 官方文档](https://cantools.readthedocs.io/en/latest/)。', '',
|
'已安装并验证 cantools 44.1.0,接口参考 [cantools 官方文档](https://cantools.readthedocs.io/en/latest/)。', '',
|
||||||
'上述是静态及软件编解码验证,另校验两份 DBC 的速率、相同信号布局及源码 / CubeMX 位时序一致。'
|
'上述是静态及软件编解码验证,另校验两份 DBC 的速率、相同信号布局及源码 / CubeMX 位时序一致。'
|
||||||
|
'v2.2 的烧录回读、新帧 CAN2 测试及串口显示核验状态见 [显示 CAN 测试报告](AMI自定义显示CAN测试报告.md)。'
|
||||||
'v2.1 已完成烧录、完整 Flash 回读比对、CAN1 500K 与 CAN2 250K 到官方 HMI 调试器的'
|
'v2.1 已完成烧录、完整 Flash 回读比对、CAN1 500K 与 CAN2 250K 到官方 HMI 调试器的'
|
||||||
'实物测试,详见 [双 CAN 测试报告](CAN1_CAN2_v2.1测试报告.md)。'
|
'实物测试,详见 [双 CAN 测试报告](CAN1_CAN2_v2.1测试报告.md)。'
|
||||||
'之前 v2.0 的 CAN 盒 -> 实物 AMI CAN1 / MCU -> USART2 -> COM4 '
|
'之前 v2.0 的 CAN 盒 -> 实物 AMI CAN1 / MCU -> USART2 -> COM4 '
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
python-can==4.6.1
|
||||||
@@ -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('<hhhBB', torque, temperature_raw(motor_temp),
|
||||||
|
temperature_raw(mcu_temp), valid, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description=__doc__)
|
||||||
|
parser.add_argument('--torque', type=int, required=True)
|
||||||
|
parser.add_argument('--motor-temp', required=True, help='degC, up to one decimal place')
|
||||||
|
parser.add_argument('--mcu-temp', required=True, help='motor-controller temperature, degC')
|
||||||
|
parser.add_argument('--valid', type=int, default=7, help='validity mask 0..7, default all valid')
|
||||||
|
parser.add_argument('--interface', default='pcan')
|
||||||
|
parser.add_argument('--channel', default='PCAN_USBBUS1')
|
||||||
|
parser.add_argument('--bitrate', type=int, choices=(250000, 500000), default=250000)
|
||||||
|
parser.add_argument('--period', type=float, default=0.1, help='seconds, default 100 ms')
|
||||||
|
parser.add_argument('--duration', type=float, default=10, help='seconds; finite transmission')
|
||||||
|
parser.add_argument('--dll-dir', help='Windows adapter DLL directory, if required')
|
||||||
|
parser.add_argument('--dry-run', action='store_true', help='print payload without opening CAN')
|
||||||
|
args = parser.parse_args()
|
||||||
|
try:
|
||||||
|
payload = build_payload(args.torque, args.motor_temp, args.mcu_temp, args.valid)
|
||||||
|
except ValueError as exc:
|
||||||
|
parser.error(str(exc))
|
||||||
|
if not (0 < args.period <= 2 and 0 < args.duration < float('inf')):
|
||||||
|
parser.error('period must be >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()
|
||||||
+36
-6
@@ -11,6 +11,7 @@ import re
|
|||||||
|
|
||||||
import cantools
|
import cantools
|
||||||
from export_dbc_docs import can2_dbc_text
|
from export_dbc_docs import can2_dbc_text
|
||||||
|
from send_drivetrain_can import build_payload
|
||||||
|
|
||||||
|
|
||||||
ROOT = Path(__file__).resolve().parents[1]
|
ROOT = Path(__file__).resolve().parents[1]
|
||||||
@@ -36,6 +37,7 @@ def verify_bit_timing():
|
|||||||
|
|
||||||
assert value('ClockDivider') == 'FDCAN_CLOCK_DIV1'
|
assert value('ClockDivider') == 'FDCAN_CLOCK_DIV1'
|
||||||
assert value('FrameFormat') == 'FDCAN_FRAME_CLASSIC'
|
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
|
prescaler, seg1, seg2, sjw = (int(value(field)) for field in
|
||||||
('NominalPrescaler', 'NominalTimeSeg1',
|
('NominalPrescaler', 'NominalTimeSeg1',
|
||||||
'NominalTimeSeg2', 'NominalSyncJumpWidth'))
|
'NominalTimeSeg2', 'NominalSyncJumpWidth'))
|
||||||
@@ -70,23 +72,24 @@ def main():
|
|||||||
header = (ROOT / 'firmware/Core/Inc/ami_protocol.h').read_text(encoding='utf-8')
|
header = (ROOT / 'firmware/Core/Inc/ami_protocol.h').read_text(encoding='utf-8')
|
||||||
identifiers = {int(value, 16) for value in re.findall(
|
identifiers = {int(value, 16) for value in re.findall(
|
||||||
r'^#define\s+AMI_CAN_ID_\w+\s+(0x[\dA-Fa-f]+)', header, re.MULTILINE)}
|
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),
|
0x6A2:(False,8), 0x6A4:(False,4), 0x6A6:(False,8),
|
||||||
0x140:(False,8), 0x156:(False,8),
|
0x140:(False,8), 0x156:(False,8),
|
||||||
0x186040F3:(True,8), 0x186140F3:(True,8)}
|
0x186040F3:(True,8), 0x186140F3:(True,8)}
|
||||||
actual = {m.frame_id:(m.is_extended_frame,m.length) for m in db.messages}
|
actual = {m.frame_id:(m.is_extended_frame,m.length) for m in db.messages}
|
||||||
assert actual == expected, actual
|
assert actual == expected, actual
|
||||||
assert set(actual) == identifiers, (actual, identifiers)
|
assert set(actual) == identifiers, (actual, identifiers)
|
||||||
assert len(db.messages) == 10
|
assert len(db.messages) == 11
|
||||||
assert sum(len(m.signals) for m in db.messages) == 33
|
assert sum(len(m.signals) for m in db.messages) == 40
|
||||||
for m in db.messages:
|
for m in db.messages:
|
||||||
if m.frame_id == 0x300:
|
if m.frame_id == 0x300:
|
||||||
assert m.senders == ['AMI'] and m.receivers == {'VCU'}
|
assert m.senders == ['AMI'] and m.receivers == {'VCU'}
|
||||||
else:
|
else:
|
||||||
assert m.receivers == {'AMI'}
|
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
|
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
|
assert db.get_message_by_frame_id(ident).cycle_time == cycle
|
||||||
for ident in [0x300,0x6A4,0x6A6,0x140,0x156,0x186040F3,0x186140F3]:
|
for ident in [0x300,0x6A4,0x6A6,0x140,0x156,0x186040F3,0x186140F3]:
|
||||||
assert db.get_message_by_frame_id(ident).cycle_time in (None,0)
|
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})
|
checks.append({'id':hex(ident),'data':data})
|
||||||
return db.decode_message(ident, bytes.fromhex(data), decode_choices=False)
|
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.
|
# Canonical request at 1000 ms, first sequence, task 2; all six task enums.
|
||||||
task = decode(0x300,'01 02 00 01 E8 03 00 00')
|
task = decode(0x300,'01 02 00 01 E8 03 00 00')
|
||||||
assert task == {'Protocol_Version':1,'Task_ID':2,'Request_Sequence':0,
|
assert task == {'Protocol_Version':1,'Task_ID':2,'Request_Sequence':0,
|
||||||
@@ -189,11 +218,12 @@ def main():
|
|||||||
for decode_choices in (False, True):
|
for decode_choices in (False, True):
|
||||||
assert db.decode_message(ident, payload, decode_choices=decode_choices) == \
|
assert db.decode_message(ident, payload, decode_choices=decode_choices) == \
|
||||||
db2.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,
|
'known_payload_checks':len(checks),'all_task_ids_and_counter_edges':True,
|
||||||
'ports_bitrate':bitrates,'both_dbc_layouts_and_payloads_match':True,
|
'ports_bitrate':bitrates,'both_dbc_layouts_and_payloads_match':True,
|
||||||
'firmware_and_ioc_bit_timing_match':True,
|
'firmware_and_ioc_bit_timing_match':True,
|
||||||
'firmware_ids_match':True,'sdc_source_layout_match':source_check,
|
'firmware_ids_match':True,'sdc_source_layout_match':source_check,
|
||||||
|
'display_sender_known_bytes_and_argument_rejection':True,
|
||||||
'cantools_version':cantools.__version__},indent=2))
|
'cantools_version':cantools.__version__},indent=2))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user