此页面由 AI 自动翻译。查看英文原版

本页目录

  • 设备树覆盖配置
  • I2C 配置示例
  • 通过 I2C 连接 BME280 传感器
  • 编译覆盖文件
  • SPI 配置示例
  • 工厂模式
  • 故障排除

OAK4 SoM 开发指南

Luxonis OAK4 SoM 设备支持灵活的外设配置,允许用户在各种引脚上启用或禁用 I2C、SPI 和 UART 功能。默认情况下,大多数引脚配置为通用输入/输出 (GPIO)。但是,用户可以将支持的引脚重新配置为外设接口。需要注意的是,并非所有引脚都支持所有外设。下表概述了可用的 QUPv3 和 I2CHUB 引擎以及它们的配置方式。如果您的用例需要表中未列出的配置,或者引脚标记为“当前未公开”,请联系 Luxonis 技术支持,以帮助创建具有不同公开选项的自定义配置。
QUPv3 引擎模式引脚备注
QUPv3_SE0I2C
  • SDA: GPIO28
  • SCL: GPIO29
QUPv3_SE1SPI
  • MISO: GPIO32
  • MOSI: GPIO33
  • SCLK: GPIO34
  • CS0: GPIO35
QUPv3_SE2SPI
  • MISO: GPIO36
  • MOSI: GPIO37
  • SCLK: GPIO38
  • CS0: GPIO39
  • CS1: GPIO40
  • CS2: GPIO41
  • CS3: GPIO42
QUPv3_SE3//当前未公开
QUPv3_SE4I2C
  • SDA: GPIO44
  • SCL: GPIO45
默认启用
QUPv3_SE5I2C
  • SDA: GPIO52
  • SCL: GPIO53
QUPv3_SE6//当前未公开
QUPv3_SE7UART
  • TX: GPIO26
  • RX: GPIO27
QUPv3_SE8I2C
  • SDA: GPIO0
  • SCL: GPIO1
QUPv3_SE9I3C
  • SDA: GPIO60
  • SCL: GPIO61
QUPv3_SE10SPI
  • MISO: GPIO64
  • MOSI: GPIO65
  • SCLK: GPIO66
  • CS0: GPIO67
QUPv3_SE11SPI
  • MISO: GPIO68
  • MOSI: GPIO69
  • SCLK: GPIO70
  • CS0: GPIO71
QUPv3_SE12I2C
  • SDA: GPIO2
  • SCL: GPIO3
默认启用
QUPv3_SE13//当前未公开
QUPv3_SE14UART
  • CTS: GPIO76
  • RFR: GPIO77
  • TX: GPIO78
  • RX: GPIO79
高速 UART,硬件流控制
QUPv3_SE15//当前未公开
I2CHUB_SE0//当前未公开
I2CHUB_SE1//当前未公开
I2CHUB_SE2I2C
  • SDA: GPIO20
  • SCL: GPIO21
默认启用
I2CHUB_SE3I2C
  • SDA: GPIO22
  • SCL: GPIO23
I2CHUB_SE4I2C
  • SDA: GPIO4
  • SCL: GPIO5
I2CHUB_SE5//当前未公开
I2CHUB_SE6//当前未公开
I2CHUB_SE7//当前未公开
I2CHUB_SE8//当前未公开
I2CHUB_SE9//当前未公开

设备树覆盖配置

外围设备配置通过设备树覆盖(DTO)实现,这些覆盖在启动时应用。覆盖文件必须放置在设备上的 /persist/custom/dtbo 目录中。在启动过程中,系统会应用此目录中找到的所有覆盖文件,以实现所需的引脚配置。此文件夹中的文件在 OTA 更新后也会保留,不会被删除。

I2C 配置示例

通过 I2C 连接 BME280 传感器

假设您想使用 GPIO52 (SDA) 和 GPIO53 (SCL) 连接一个 Bosch BME280 压力传感器。根据上表,这些引脚由 QUPv3 SE5 引擎管理。要启用此接口,请在您的工作目录中创建一个设备树覆盖文件(例如 bme280.dts):
Dts
1/dts-v1/;
2/plugin/;
3
4/ {
5  fragment@0 {
6    target = <&qupv3_se5_i2c>;
7    __overlay__ {
8      status = "ok";
9      #address-cells = <1>;
10      #size-cells = <0>;
11
12      bme280@76 {
13        compatible = "bosch,bme280";
14        reg = <0x76>;
15      };
16    };
17  };
18};
重要的行是 status = "ok";,它实际启用了所选的 I2C 引擎。如果没有它,外围设备将保持禁用状态。
注意: 对于 QUP 引擎,请使用 &qupv3_seX_i2c;对于 HUB 引擎,请使用 &qupv3_hub_i2cX,其中 X 是引擎索引。

编译覆盖文件

使用 SDK Docker 容器编译源文件。在您的工作目录中运行以下命令:
Command Line
1docker run --rm \
2  -v /etc/passwd:/etc/passwd:ro \
3  -v /etc/shadow:/etc/shadow:ro \
4  -v "$PWD":"$PWD" \
5  -w "$PWD" \
6  --user=$(id -u):$(id -g) --group-add 27 \
7  luxonis/luxonis-os-rvc4:<SDK_version>-public \
8  /bin/bash -c "dtc -@ -I dts -O dtb -o bme280.dtbo bme280.dts"
注意: <SDK_version> 必须与目标设备刷写的 OS 版本匹配(例如 1.8.0)。如果您使用的是最新的 OS 版本,也可以使用 latest
将编译好的 .dtbo 文件传输到目标设备:
Command Line
1scp /app/test-overlay/bme280.dtbo user@<device-ip>:/persist/custom/dtbo/
然后重启设备。启动后,覆盖文件将自动应用。通过检查 /sys/bus/i2c/devices/ 来验证 I2C 设备是否已注册。

SPI 配置示例

启用 SPI 接口遵循相同的方法。以下是一个用于在 QUPv3 SE1 上启用 SPI 的 DTO 示例:
Dts
1/dts-v1/;
2/plugin/;
3
4/ {
5  fragment@0 {
6    target = <&qupv3_se1_spi>;
7    __overlay__ {
8      status = "ok";
9    };
10  };
11};
编译并传输覆盖文件:
Command Line
1docker run --rm \
2  -v /etc/passwd:/etc/passwd:ro \
3  -v /etc/shadow:/etc/shadow:ro \
4  -v "$PWD":"$PWD" \
5  -w "$PWD" \
6  --user=$(id -u):$(id -g) --group-add 27 \
7  luxonis/luxonis-os-rvc4:latest-public \
8  /bin/bash -c "dtc -@ -I dts -O dtb -o spi-overlay.dtbo spi-overlay.dts"
Command Line
1scp spi_se1.dtbo user@<device-ip>:/persist/custom/dtbo/
重启设备后,SPI 接口应该会被启用。

工厂模式

工厂模式是 Luxonis OS 的一种模式,可以方便地在工厂环境中处理设备。它对于测试设备非常有用。它可以为任何类型的 OAK4 设备启用,但主要对开发使用 SoM 的用户有用,这些 SoM 也默认以工厂模式出货。工厂模式会移除 root 用户的密码,并启用无需密码即可登录的 SSH。通过在 /persist/factory/enabled 下创建一个文件来进入工厂模式(文件的内容无关紧要)。启动时,如果找到此文件,则会触发工厂模式。要恢复并退出工厂模式,请在系统上运行此命令:
Command Line
1rm /persist/factory/enabled && cp -r /persist/factory/original_files/* / && rm -rf /persist/factory/original_files && sync && reboot
下次启动时,系统将以正常模式运行,此时默认 root 密码为 oelinux123,并且禁用 SSH 密码登录。

故障排除

如果尝试进行不受支持的外围设备配置(例如,将外围设备分配给不兼容的 QUPv3 引擎),设备可能会无法启动。在这种情况下,TrustZone 引擎会阻止系统继续运行。要恢复:
  1. 进入 紧急下载模式 (EDL)
  2. 使用一个已知良好的映像重新刷写设备。
有关如何执行完整 OS 刷写步骤,请参阅以下页面:完整 OS 刷写为了帮助调试,请使用 dmesg 检查内核消息:
Command Line
1dmesg | less
查找与设备树解析、外围设备激活或安全策略违规相关的错误。或者,检查设备树覆盖加载脚本的日志:
Command Line
1journalctl -u apply-overlays.service