契约参考(协议 / 引脚)
contracts/ 是神圣契约:只 lead 改,其余 lane 只读。它让控制(C) 和算法(Python) 永远对得上、让引脚不接错。
UART 帧协议
K230 ↔ 主控的串口帧,单一来源 contracts/protocol.yaml,由 gen_protocol.py 生成 C(protocol.h) 与 Python(protocol.py) 两端,签名哈希保证一致。
链路
| 项 | 值 |
|---|---|
| 波特率 | 115200(8N1,可上 230400/460800,两端一致) |
| 电平 | 3.3V TTL(K230 与 MCU 直连;TX↔RX 交叉,必须共地) |
帧格式
| 帧头 0xAA | 帧头 0x55 | LEN | FUNC | DATA[LEN-1] | CHK | 帧尾 0x0D |- 双帧头
0xAA 0x55,降低误同步 - LEN = FUNC + DATA 的字节数
- CHK =
sum8:(LEN + FUNC + DATA) & 0xFF - 接收侧是带重同步的状态机:任何一步不匹配就回到找帧头,丢半截帧而不卡死
max_data = 32
功能码
| FUNC | 名称 | DATA(小端) | 用途 |
|---|---|---|---|
0x01 | blob_xy | int16 cx, int16 cy | 色块/光点中心坐标 |
0x02 | line_error | int16 error | 巡线中线偏差(喂 PID) |
0x03 | target_class | uint8 class_id, uint8 confidence | 目标类别 + 置信度 |
0x04 | handshake | uint8 token | 上电握手 / ACK |
示例帧(实测逐字节一致)
line_error(-123) → AA 55 03 02 85 FF 89 0D
blob_xy(100, 200) → AA 55 05 01 64 00 C8 00 32 0D改协议:改
protocol.yaml后必须python tools/gen_protocol.py重新生成两端,并通知三 lane 重新 pull。
引脚映射
contracts/pinmap.yaml 由 interconnect 产出,pinmux_check.py 校验。
字段
yaml
mcu: MSPM0G3507
assignments:
- signal: motorL_pwm # 网络名,唯一
pin: PA0 # 引脚,须存在于 MCU 能力表,且唯一
function: PWM # 见下功能词表
peripheral: TIMA0 # 外设实例(数量门用)
module: TB6612#1 # 对端模块
net: PWMA # 对端连接器引脚
note: ...功能词表
GPIO · PWM · ADC · UART_TX · UART_RX · I2C_SDA · I2C_SCL · SPI_SCLK/MOSI/MISO/CS · QEI_A · QEI_B · CAN_TX · CAN_RX · SWD_IO · SWD_CLK
校验规则(pinmux_check.py 强制)
- 引脚不可复用:同一 pin 出现多次 → 冲突 FAIL。
- 功能合法:
function必须在该 pin 的能力列表内。 - 数量门:各外设族占用数 ≤ MCU 能力表
limits。 - 必填字段齐全;pin 存在于能力表。
MCU 能力表
contracts/mcu/<MCU>.yaml 描述每个引脚支持的功能 + 外设数量上限。MSPM0G3507 上限示例:
| 外设 | 上限 |
|---|---|
| PWM 通道 | 12(TIMA0/1 带死区) |
| QEI | 2 |
| ADC 通道 | 17(2×12bit SAR) |
| UART / SPI / I2C / CAN | 4 / 2 / 2 / 1 |
verified: false
逐脚复用是代表性结构占位(计数取自知识库)。真实可用引脚/复用必须用 TI SysConfig 或数据手册核实后改 verified: true;在此之前 pinmux_check 通过仅表示"逻辑自洽"。