引导加载程序 - 仅限 RVC2
depthai 库绑定在一起,因此,例如要刷写最新的引导加载 程序,应使用最新的 depthai 库。设备管理器
device_manager.py 是一个 Python 脚本,用于与设备的引导加载程序及其配置进行交互。 该脚本可在 depthai-core/utilities 找到。
关于设备
- 首先,我们必须选择要连接(启动)的设备,可以使用以下方式选择:
- 下拉菜单:包含已发现设备的 MX ID。仅当启动应用程序时下拉菜单才会更新。
- 指定 IP 按钮:当您的 OAK PoE 相机不在同一局域网时使用。
- 搜索功能:一个新窗口将显示一个表格,其中包含所有可用的相机(通过 USB 端口或局域网 - OAK PoE 相机)、它们的 MxId、名称和状态。单击表格行将选中该设备并启动至该设备。
配置设置
- 如果设备已刷写网络引导加载程序,您将能够设置其静态/动态 IP/掩码/网关、DNS、MAC 等。
- 如果设备已刷写USB 引导加载程序,您将能够设置其 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 )危险区域
软砖
本部分可能导致设备变砖,请谨慎使用。
- 更新引导加载程序按钮将把最新的引导加载程序刷写到设备上。您可以选择 AUTO、USB 或 NETWORK 引导加载程序。
- AUTO 将根据相机当前连接的引导加载程序连接类型自动选择。如果您通过 USB(执行恢复出厂设置)连接到 OAK PoE 相机,则不应选择 AUTO,因为它会刷写 USB 引导加载程序。
- USB 引导加载程序将尝试启动存储在闪存中的应用程序。如果未找到刷写的应用程序,它将仅作为普通 USB OAK 设备运行 - 即等待主机计算机初始化应用程序。
- NETWORK 引导加载程序由 OAK PoE 相机使用,并在出厂时刷写。它处理网络初始化,以便 OAK PoE 相机可以通过局域网启动。
- 刷写工厂引导加载程序:如果您想刷写工厂引导加载程序,可以使用此按钮。即使已刷写用户引导加载程序,它也会刷写工厂引导加载程序。
- 恢复出厂设置将擦除整个闪存内容,并仅用 USB 或 NETWORK 引导加载程序重新刷写。已刷写的应用程序(管道、资源)和引导加载程序配置将丢失。
- 启动至 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")