YAML 标记与写法

[English]

本节集中说明 BMGR 在标准 YAML 之上额外约定的几种写法,覆盖填写标记、枚举书写、${BOARD_PATH} 变量与锚点合并语法。三份板级 YAML 文件均适用。

[IO] 标记

字段注释带有 [IO] 时,表示该字段对应真实硬件引脚,必须按实际原理图填写,不能照搬示例值或模板默认值(通常为 -1)。

- name: i2c_main
  type: i2c
  config:
    sda_io_num: 10   # [IO]
    scl_io_num: 11   # [IO]

[TO_BE_CONFIRMED] 标记

字段注释带有 [TO_BE_CONFIRMED] 时,表示当前值是占位值或通用默认值,适配开发板时必须逐项确认并替换为真实值。常见于屏幕分辨率、时序参数、电压档位、I2C 地址等需要查阅器件资料才能确定的字段。

枚举值

YAML 中的枚举字段直接使用 ESP-IDF 驱动或相关组件头文件中的原始枚举名,不使用自定义字符串或数值替代。例如 GPIO 方向字段填 GPIO_MODE_OUTPUT,不填 1"output";MIPI DPI 时钟源填 MIPI_DSI_DPI_CLK_SRC_DEFAULT,不使用数值或缩写。生成器会按字符串原样输出到 C 源码,枚举名拼写错误会在编译阶段暴露。

${BOARD_PATH} 变量

${BOARD_PATH} 在开发板 YAML 中指向当前开发板定义的根目录(即包含 board_devices.yaml 的目录)。引用开发板目录下的本地组件时,建议使用该变量代替手写相对路径。gen_bmgr_codes/idf_component.yml 由 BMGR 生成,相对路径以该目录为基准展开,容易出错。${BOARD_PATH} 由 BMGR 在生成阶段统一替换,写在开发板 YAML 中语义稳定:

dependencies:
  my_company/my_driver:
    version: "*"
    override_path: ${BOARD_PATH}/packages/my_driver

备注

变量名仅识别 ${BOARD_PATH} 这一种写法。{{BOARD_PATH}}$BOARD_PATH 等写法均不会被替换。

YAML 锚点与合并(标准 YAML)

BMGR 不限制 YAML 解析行为,因此 & 锚点、* 引用、<<: 合并等标准语法均可直接使用,常用于消除同型外设的重复配置:

peripherals:
  - name: spi_lcd
    type: spi
    version: "1.0.0"
    role: master
    config: &spi_master_default
      mosi_io_num: 11        # [IO]
      miso_io_num: -1        # 仅写入设备时不需要
      sclk_io_num: 12        # [IO]
      max_transfer_sz: 32768

  - name: spi_touch
    type: spi
    version: "1.0.0"
    role: master
    config:
      <<: *spi_master_default
      mosi_io_num: 35        # [IO]
      sclk_io_num: 36        # [IO]

语义化外设绑定

设备条目按语义角色引用外设。请使用与设备类型和子类型匹配的 *_name 字段,不要依赖外设名称前缀或列表顺序:

devices:
  - name: display_lcd
    type: display_lcd
    sub_type: spi
    peripherals:
      - spi_name: spi_lcd

选择器由设备类型和子类型决定。例如,编解码器 GPIO 使用 pa_namereset_name,I2C 控制总线使用 i2c_name,SPI 总线使用 spi_name,DSI LCD 使用 dsi_nameldo_name,GPIO 控制线使用 gpio_name。每个外设条目最多只能包含一个角色选择器。

为保持兼容,仍接受字符串引用以及只包含 name 的映射。BMGR 会根据设备上下文推断角色并发出告警。未知选择器、重复角色、同时包含 name*_name 的引用,或引用外设类型不匹配时,解析阶段会拒绝该配置。


此文档对您有帮助吗?