Skip to content

契约参考(协议 / 引脚)

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(小端)用途
0x01blob_xyint16 cx, int16 cy色块/光点中心坐标
0x02line_errorint16 error巡线中线偏差(喂 PID)
0x03target_classuint8 class_id, uint8 confidence目标类别 + 置信度
0x04handshakeuint8 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.yamlinterconnect 产出,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 强制)

  1. 引脚不可复用:同一 pin 出现多次 → 冲突 FAIL。
  2. 功能合法function 必须在该 pin 的能力列表内。
  3. 数量门:各外设族占用数 ≤ MCU 能力表 limits
  4. 必填字段齐全;pin 存在于能力表。

MCU 能力表

contracts/mcu/<MCU>.yaml 描述每个引脚支持的功能 + 外设数量上限。MSPM0G3507 上限示例:

外设上限
PWM 通道12(TIMA0/1 带死区)
QEI2
ADC 通道17(2×12bit SAR)
UART / SPI / I2C / CAN4 / 2 / 2 / 1

verified: false

逐脚复用是代表性结构占位(计数取自知识库)。真实可用引脚/复用必须用 TI SysConfig 或数据手册核实后改 verified: true;在此之前 pinmux_check 通过仅表示"逻辑自洽"。