Bootloader
depthai 库中,因此例如要刷入最新的 bootloader,应使用最新的 depthai 库。设备管理器
device_manager.py 是一个 Python 脚本,用于与设备的 Bootloader 及 bootloader 配置进行交互。 它位于 depthai-python/utilities。
关于设备
- 首先,我们必须选择要连接(启动)的设备,可通过以下方式选择:
- 下拉菜单 包含已发现的设备 MX Id。下拉菜单仅在启动应用时更新。
- 指定 IP 按钮(如果您的 OAK PoE 相机不在同一局域网内)。
- 搜索 功能——将打开一个新窗口,显示一个表格,包含所有可用摄像头(通过 USB 端口或局域网——OAK PoE),以及它们的 MxId、名称和状态。点击表格行将选择该设备并启动至该设备。
配置设置
- 如果设备 已刷入网络 bootloader,您将能够设置其静态/动态 IP、掩码、网关、DNS、MAC 等。
- 如果设备 已刷入 USB bootloader,您将能够设置其 USB 最大速度和 USB 超时。
Flash configuration 按钮。您还可以 Clear configuration 或 View configuration(其 JSON)。
应用设置
- 刷写应用:选择要刷写设备的 DepthAI 应用包(
.dap)。以下代码片段展示了如何创建 dap 文件。 - 移除应用:从设备中移除/清除已刷写的应用。
- 打开设备流式传输应用:开始从设备上所有已连接的摄像头流式传输帧。
Python
1import depthai as dai
2pipeline = dai.Pipeline()
3# ... 向管道添加节点
4dai.DeviceBootloader.saveDepthaiApplicationPackage(
5 './file.dap', # 保存 .dap 文件的位置
6 pipeline, # 我的管道
7 compress=True, # 压缩固件和资源。在我的案例中,从 24MB 压缩至 9.5MB
8 applicationName='myAppName' # 可选,以便后续知道刷写了哪个应用
9 )危险区域
软砖
本部分可能导致设备软砖,请谨慎使用。
- 更新 Bootloader 按钮将刷写最新的 bootloader 到设备。您可以选择 AUTO、USB 或 NETWORK bootloader。
- AUTO 将选择相机当前连接的 bootloader 连接类型。如果您通过 USB 连接到 OAK PoE 相机(进行恢复出厂设置),则不应选择 AUTO,因为它会刷写 USB bootloader。
- USB bootloader 将尝试启动存储在闪存中的应用程序。如果找不到已刷写的应用程序,它将作为普通 USB OAK 运行——等待主机计 算机初始化应用程序。
- NETWORK bootloader 用于 OAK PoE 相机,并在工厂刷写。它处理网络初始化,以便 OAK PoE 相机可以通过 LAN 启动。
- 刷写工厂 Bootloader:如果您想刷写工厂 bootloader,可以使用此按钮。即使已刷写用户 bootloader,它也会刷写工厂 bootloader。
- 恢复出厂设置将擦除整个闪存内容,并仅重新刷写 USB 或 NETWORK bootloader。已刷写的应用程序(管道、资源)和 bootloader 配置将丢失。
- 启动至 USB 恢复模式将强制例如 OAK PoE 相机通过 USB 连接器可用,即使其启动引脚设置为 PoE 启动。这主要由我们的固件开发人员使用。
工厂启动加载器与用户启动加载器
- 工厂启动加载器:在工厂中刷写的启动加载器。不建议重新刷写此启动加载器,因为它不打算由最终用户编辑。
- 用户启动加载器:可由用户刷写的启动加载器。如果启动失败(例如刷写时损坏),则会回退到工厂启动加载器。
启动开关
- 从闪存启动 - DIP 开关:0x03(开关 5、6 打开)- 适用于已安装启动加载器的 OAK PoE 和 USB 相机。
- USB 恢复模式 - DIP 开关:0x16(开关 2、4、5 打开)- 直接启动进入 USB 模式,使相机等待主机通过 USB 连接。


API
C++
1std::tuple<bool, std::string> flash(std::function<void(float)> progressCb, Pipeline& pipeline);
2
3std::tuple<bool, std::string> flashDepthaiApplicationPackage(std::function<void(float)> progressCb, std::vector<uint8_t> package);
4
5std::tuple<bool, std::string> flashBootloader(std::function<void(float)> progressCb, std::string path = "");DepthAI 应用程序包(.dap)
- SBR(512B 头部,描述数据段)
- Depthai 设备固件(段 "__firmware")
- 管线描述(段 "pipeline")
- 资产结构(段 "assets")
- 资产存储(段 "asset_storage")