Files
AMI/docs/通讯交接文档.md
T

222 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AMI 仪表通讯交接文档
当前屏幕接口 1.5;MCU CAN 协议 2.7(CAN1 500K / CAN2 250K) | 2026-10-07
当前工程:AMI_TJC8048X370_011.HMI;屏幕 TJC8048X370_011,800 × 480;编辑器 USART HMI 1.68.1.3037。AMI.HMI 为 480 × 272 小屏工程,现已同步新增无人状态。下文 1.4 的原接口与历史测试保留;无人状态扩展见末尾 v2.7 节及 CAN DBC 说明。
v2.4 新增 VCU 标准状态反馈 `0x183 / DLC 8`,建议周期 100 ms,独立超时 500 ms。只有 VCU 反馈更新当前任务、锁定和 EBS,确认发送不会改写实际任务。字节定义、颜色及样例见 [VCU 状态反馈](AMI_CAN_DBC说明.md#vcu-状态反馈-0x183),验证见 [反馈测试报告](VCU状态反馈测试报告.md)。
v2.2 新增标准 CAN `0x182 / DLC 8`,分别设置 `dash.mct`(扭矩千分)、`dash.djwd`(电机温度)、`dash.mcuwd`(MCU 温度)。数据 `F4 01 C2 01 90 01 07 01` 对应 500‰ / 45℃ / 40℃;建议每 100 ms 发一次。CAN1 500K / CAN2 250K 均可接收,三个字段各有有效标志,帧源独立超时 2000 ms。完整布局、有符号温度和异常处理见 [DBC 说明](AMI_CAN_DBC说明.md),实测范围见 [v2.2 报告](AMI自定义显示CAN测试报告.md)。
v2.1 已烧录并通过 CAN1 500K(SDC)与 CAN2 250K(BMS)分别到官方 HMI 调试器的测试,含两路各六个任务确认/取消;见 [双 CAN 测试报告](CAN1_CAN2_v2.1测试报告.md)。下文的旧模拟器及 v2.0 测试描述属于历史记录,物理串口屏、真实节点和两路同时接入仍待实测。
2026-10-03 补充:dash 增加全局虚拟浮点控件 `lvbat`,两位小数,`dash.lvbat.val=1230` 显示 12.30 V,来源为 SDC ADC。当前 MCU CAN 输入见 [SDC_BMS协议.md](SDC_BMS协议.md);原整数高压电压/电流控件四舍五入为 1 V / 1 A。灰色数值表示未知或失效。v2.3 SDC GPIO 按用户接线表顺序映射:PD0..PD14 对应 d0,d5,d2,d6,d7,d1,d3,d4,d8..d14;全部低电平正常、高电平故障,d15 无来源未知。完整映射及超时规则见 [SDC / BMS 协议](SDC_BMS协议.md)。
## 1. 接手先看这三点
主控 → 屏幕:发送文本指令,末尾必须追加三个实际字节 FF FF FF。屏幕 → 主控:用户确认任务后发送固定 6 字节帧 AA 55 01 NN 0D 0A。这两种帧的结束方式不同。
debug 状态只发送 d0~d15 的数值;0=未知,1=正常,2=故障。屏幕自动处理中文和颜色,不再要求主控发送 txt/pco。
任务帧表示用户选择请求。仪表没有实现主控执行确认、运行完成回传或安全互锁裁决,主控必须自行判断能否执行。
## 2. 串口与发送规则
| 项目 | 当前约定 |
| --- | --- |
| 波特率 | 9600(Program.s 中 baud=9600) |
| 串口格式 | 联调使用 8N1;实物 UART 参数及电平按该型号规格书确认 |
| 接收模式 | recmod=0,使用屏幕原生文本指令协议 |
| 指令编码 | dN=状态 等指令为 ASCII;发送中文时使用 GB2312 |
| 指令结束 | 每条指令后加 FF FF FF;不需要 CR/LF,不发送字符串“FF FF FF” |
| 接线 | 主控 TX → 屏 RX,屏 TX → 主控 RX,共地;本交接未核实连接器针脚和电平 |
## 3. 最小可用示例
以下三条依次设置配电箱正常、左急停/行程/惯性故障,再进入 debug 页面。仅发送指令本身,每条追加结束符。
```text
d0=1
d1=2
page debug
```
发送 d0=1 的完整字节:64 30 3D 31 FF FF FF(7 字节)。连续发送多条时,每条都要独立追加结束符,串口队列不得让不同任务的字节交错。
---
# 4. Debug 状态编号
主控发送 dN=V;N 为下表编号,V 只能取 0、1、2。默认全部为 0。下表顺序是工程中的接口映射,不是电气线束针脚顺序。
| 变量 | 原始信号名 | 检测内容 |
| --- | --- | --- |
| d0 | Safe_DBBox_OUT | 配电箱安全回路 |
| d1 | Safe_L&BOTS&IW | 左急停、超行程和惯性开关 |
| d2 | Safe_Ba_BOX | 电池箱安全回路 |
| d3 | Safe_RSTOP | 右急停和驾驶舱急停 |
| d4 | Safe_LAST | 安全回路末端 |
| d5 | Safe_S | 左电机互锁(PD1,按用户最新纠正) |
| d6 | Safe_RES1 | RES 安全回路 |
| d7 | Safe_Control | 主控盒安全回路 |
| d8 | EBS_BE | 制动舵机电源 |
| d9 | EBS_12V | 电磁阀电源 |
| d10 | EBS_AIR | 气压传感器电源 |
| d11 | EBS_Oil | 油压传感器电源 |
| d12 | Driverless_INS | 惯导电源 |
| d13 | Driverless_WSS | 轮速传感器电源 |
| d14 | Driverless_Camera | 摄像头电源 |
| d15 | 12V_Control | 主控盒供电 |
## 显示与生命周期
0 → 灰色“未知”(33840);1 → 绿色“正常”(2016);2 → 红色“故障”(63488)。其他数值显示未知,但主控应限制为 0~2。颜色由工程脚本处理。
d1 同时更新左急停及行程/惯性两个位置;一次发送即可同步。用户已纠正 Safe_S / PD1 为左电机互锁,d5 更新顶行第二格;原左后悬项已被替换。BSPD/TSMS 及“返回支路”框已删除。RES 和主控盒独立显示;连线只表示示意顺序,不能据此推断具体断点。
d0~d15 为全局变量,任何页面均可更新,切页保留,断电重置。debug 后初始化立即绘制状态,tm0 每 250 ms 刷新;离开 debug 后定时器停止,但全局变量仍可接收更新。
通讯断线不会自动恢复未知。主控或通讯管理层应在数据超时后将相应 dN 清为 0;建议仅发送变化项,并按项目周期补发完整状态。旧的 debug.tN.txt/pco 赋值会被定时器覆盖,接手代码应改为 dN=V。
---
# 5. 任务选择回传
方向:屏幕 → 主控。用户点击主页面左侧按钮后进入 CONFIRM,显示所选任务。点击“确认发送”输出下表帧并返回 dash;点击“取消返回”不输出任务帧。
| 编号 NN | 任务 | 完整帧(十六进制) |
| --- | --- | --- |
| 01 | 八字绕环 | AA 55 01 01 0D 0A |
| 02 | 直线加速 | AA 55 01 02 0D 0A |
| 03 | 高速循迹 | AA 55 01 03 0D 0A |
| 04 | 车检测试 | AA 55 01 04 0D 0A |
| 05 | EBS 测试 | AA 55 01 05 0D 0A |
| 06 | 手动驾驶 | AA 55 01 06 0D 0A |
| 偏移 | 字节 | 含义 |
| --- | --- | --- |
| 0~1 | AA 55 | 帧头 |
| 2 | 01 | 任务选择消息类型 |
| 3 | 01~06 | 任务编号,单字节二进制 |
| 4~5 | 0D 0A | 固定帧尾 |
## 主控接收与处理
按连续字节流解析,不能假定一次 UART/DMA 回调正好收到一帧。维护接收缓冲,搜索 AA 55,等待至少 6 字节,检查类型=01、编号=1~6、帧尾=0D 0A。合法则交给任务状态机并消费 6 字节;非法则丢弃首字节重新搜索。
当前串口帧没有长度字段、序列号、校验和或 CRC;屏幕也没有 ACK 等待、自动重发机制。VCU 自行决定忙碌时如何处理新任务和重复请求。确认发送后仅清 pending_task 并返回 dash,保留 VCU 上次反馈的实际任务;只有 CAN 0x183 更新 current_task。反馈不是与请求序号逐条关联的 ACK。
## 上电与其他返回帧
Program.s 上电通过 printh 发出 00 00 00 FF FF FF 88 FF FF FF。该启动数据不是任务指令。屏幕还可能输出官方错误、查询结果等返回数据,接收层要与任务帧区分。
联调可发送 bkcmd=3(同样加 FF FF FF)打开成功/失败反馈。官方执行成功码为 01 FF FF FF,变量名称无效为 1A FF FF FF。反馈是屏幕执行文本指令的结果,不是任务执行 ACK。当前工程未主动设置 bkcmd,不应以“没有成功返回”判断命令失败。
---
# 6. 主页面与页面切换
主页面数字控件已设为全局,可通过带页面名的属性指令跨页更新。新增 lvbat 是两位小数的虚拟浮点控件,val 单位固定为 0.01 V;其他原有数值仍为整数显示。所有 val 指令都发送整数。
| 显示项 | 赋值命令示例 | 说明 |
| --- | --- | --- |
| 低压电池电压 | dash.lvbat.val=1260 | 0.01 V/计数;显示 12.60 V |
| 当前车速 | dash.speed.val=30 | 界面标注 km/h;示例显示 30 |
| 高压电压 | dash.ts.val=300 | 整数 V;BMS 原始 0.1 V 四舍五入 |
| 扭矩千分 | dash.mct.val=500 | 保留界面“扭矩千分”定义 |
| 高压电流 | dash.dl.val=20 | 整数 A;BMS 原始偏置 uint16 换算后四舍五入 |
| 电机温度 | dash.djwd.val=45 | 来自 0x182 的小端 int16 × 0.1 ℃,四舍五入为整数 ℃ |
| MCU 温度 | dash.mcuwd.val=40 | 来自 0x182 的电机控制器 MCU 温度,整数 ℃;不是 AMI 芯片测温 |
| 最高单体 | dash.dtwd.val=50 | BMS 最高有效实际温度,整数 ℃ |
低压电池电压放在车速上方,保留两位小数。主控若采集为 mV,应先换算为 0.01 V 整数(例如 12600 mV → 1260)。指令 dash.lvbat.val=1260 后仍追加 FF FF FF。该值为全局,切页保留,上电设计初值 0.00 V;初值和断线后的旧值不代表有效测量,也没有自动低压告警。
数值 val 按有符号 32 位整数使用。当前 CAN 来源、单位、缩放、独立超时和有效颜色已在 [AMI_CAN_DBC说明.md](AMI_CAN_DBC说明.md) 定义。扭矩、电机与 MCU 温度由 VCU/适配节点通过自定义 0x182 提供;实际电机控制器原生协议仍需上游定义。车速已采用最新 SDC `0x6A2 / DLC 4` 双前轮已标定轮速的平均值,整数 km/h,独立超时 500 ms 后变灰;SDC 的每圈 49 脉冲、轮周长 1414 mm 不在 AMI 重复应用。
## 页面指令
```text
page dash
page debug
```
每条后加 FF FF FF。页面 ID:dash=0、debug=1、CONFIRM=2。优先用页面名,不依赖页面顺序。CONFIRM 应由六个任务按钮进入,避免未设置 pending_task 时直接进入。
隐藏入口:dash 右上角 x=440,y=0,w=40,h=25;debug 右上角“返回”切回 dash。调试页状态是显示功能,不输出 ECU/继电器动作指令。
## 其他文本与安全动作
dash 的 rw、sd、EBS 文本仍为私有控件,由后初始化事件和 100 ms 定时器读取全局变量更新。主控发送 `current_task=0..6`(7 未知)、`lock_state=0/1/2`、`ebs_state=0/1/2`(0 未知、1 绿、2 红),各命令末尾追加真实 FF FF FF;MCU 根据 VCU 0x183 自动转换。切页后重新渲染,不丢失反馈;上电三项均未知。直接修改文本会被状态渲染覆盖。
当前任务 1~6 为绿字、0“无”为红字;锁定为绿字、解锁为红字;EBS 正常为绿底白字、故障为红底白字。无反馈、无效或超时为灰色未知。debug 的 d8~d11 不自动决定主页面 EBS 汇总状态,由 VCU 独立反馈。
### VCU 控制当前任务
VCU 发送标准 ID 0x183、DLC 8、周期 100 ms,任务号放 byte0。0 无,1 八字绕环,2 直线加速,3 高速循迹,4 车检测试,5 EBS 测试,6 手动驾驶。完整样例 `02 01 01 07 00 00 00 01` 显示直线加速、已锁定、EBS 正常。byte1/2 填写实际锁定和 EBS 状态,byte3 的 bit0/1/2 是各项有效标志,byte5/6 必须为 0,byte7 固定 1。
每帧是三项状态的完整快照。任务未知应清 byte3 的 bit0,不发送任务号 7;清锁定或 EBS 有效位会将对应项置未知。确认任务只产生 0x300 请求,VCU 完成裁决后自行反馈实际任务;反馈停止超过 500 ms 后三项均未知。发送对照表和发送工具命令见 [当前任务发送对照](AMI_CAN_DBC说明.md#当前任务发送对照)。
按用户提供的状态表:EBS 舵机、电磁阀、气压、油压检测故障时的 VCU 通知、EBS 灯供地及 ECUBACK 断开,由主控实现;无人驾驶 INS/WSS/Camera 故障的 VCU 通知与 ECUBACK 断开也由主控实现,其 EBS 灯逻辑与前四项不同。屏幕工程不包含这些安全输出,也不把检测电平自动解释为正常/故障。
---
# 7. 主控发送参考与验收
以下 C 示例一次提交整条消息,防止命令与结束符被交错。UART_SendBytes 是待接入的驱动接口;必须在返回前完成发送或复制数据,异步 DMA 不能继续引用函数栈缓冲。
```text
#include <stdint.h>
#include <stddef.h>
#include <stdio.h>
extern void UART_SendBytes(const uint8_t *data, size_t len);
int ami_set_debug(unsigned id, unsigned state)
{
uint8_t buf[24];
if (id > 15 || state > 2) return -1;
int n = snprintf((char *)buf, sizeof buf,
"d%u=%u", id, state);
if (n < 0 || (size_t)n > sizeof buf - 4) return -1;
buf[n++] = 0xFF;
buf[n++] = 0xFF;
buf[n++] = 0xFF;
UART_SendBytes(buf, (size_t)n);
return 0;
}
```
## 联调验收顺序
① 下载配套 AMI.HMI 编译生成的屏幕资源;将 UART 参数、电平和接线与实际型号核对。② 在 dash 页面发送 d0=1、d1=2,打开隐藏入口,应见配电箱绿正常、左急停和行程/惯性同时红故障。③ debug 内发送 d0=2、d1=1,应在约 250 ms 刷新周期内变色;发送 d0=0 应恢复灰未知。
④ 离开再进入 debug,状态应保留;断电重启应全为未知。⑤ 六个任务逐项确认并记录实际收到的 6 字节帧;逐项取消应无新增任务帧。⑥ 主控接收测试覆盖拆帧、粘帧、启动数据及非法编号。⑦ 单独验证安全逻辑,不能以仪表显示替代主控/执行器测试。
## 已完成与待验证
已完成:USART HMI 编译 0 错误、0 警告;模拟器验证跨页数值更新、正常/故障/未知转换,以及 d1 双位置同步;新增 lvbat 已验证 1260 显示 12.60 V、跨页更新 1185 显示 11.85 V。六个任务回传此前已做模拟检查。2026-10-03 已通过实物 CAN1 / MCU / USART2 / COM4 到官方 HMI 调试器联调,含六个任务确认/取消、失效和恢复。待完成:物理屏幕下载、实物触摸与完整时延、CAN2 接线和车辆安全动作。C 示例仅为驱动接入参考,本次未在目标主控工程中编译。
## 8. 工程版本与资料
配套 AMI.HMI 的 SHA-256:
8a37e4961f90671f04e55ba94c173ae8fbfc5e30c2a3e74a2c37148157c3d16d
旧版工程不能与本版 dN 接口混用。配套文件包括 AMI.HMI、AMI.dbc、DBC 说明、通讯交接文档.md 和 ami_debug_send.c;旧 PDF 保留为 v1.2 历史资料,其中 Markdown 为可编辑文字源,C 文件为参考发送函数。仓库中的实际位置见 README。
官方协议依据:wiki.tjc1688.com/commands/index.html;wiki.tjc1688.com/return/index.html;wiki.tjc1688.com/variables/bkcmd.html。项目自定义任务帧和 dN 编号以本文及配套工程为准。
## 2026-10-07 无人状态显示 v2.7
按 ASF 补充独立无人状态,800×480 主页面在“已锁定/已解锁”右侧显示 AS OFF、AS Ready、AS Driving、AS Finished、AS Emergency 或 Manual Driving;无效或超过 500 ms 无反馈显示灰色“无人未知”。状态来自 VCU,不从任务、锁定、EBS 或灯色推断。
`0x183 / DLC 8` 版本 2:byte3 bit3 为 AS 有效标志,byte5 为状态 0..5(按上面顺序),byte6=0,byte7=2;其他字段位置不变。例 `02 01 01 0F 00 01 00 02` 表示直线加速、已锁定、AS Ready、EBS 正常。保留位和枚举错误整帧拒绝、不续期。旧版本 1 仍接收原三项,但 AS 立即未知。屏内新增 `as_state=0..5`(6 未知),串口命令仍使用真实 FF FF FF 结尾;全局变量在切页后保留,每 5 秒重同步。需配套包含 as_state 的新屏幕工程;480×272 AMI.HMI 与 800×480 工程均已加入 as_state;小屏 AS=5 显示“有人驾驶”。完整定义见 CAN DBC 说明的“VCU 状态反馈 0x183”。
本次源码、屏幕工程和构建产物的验证以 `docs/无人状态显示验证报告.md` 为准,历史烧录和联调记录不代表本次版本已下载到实物。
2026-10-07:v2.7 已烧录并完整回读程序区 16,672 字节一致,保留 128 KB 烧录前备份;CAN1 500K→MCU RAM→COM6 实际链路 37 项通过,实际串口驱动官方 HMI 调试器新增状态 16 项通过,含触摸请求→UART→MCU→CAN 0x300。实物串口屏、CAN2、真实 VCU 和车辆动作未测试。详见 [无人状态验收报告](无人状态显示验证报告.md)。