# rt_thread_vision_board **Repository Path**: morixinguan/rt_thread_vision_board ## Basic Information - **Project Name**: rt_thread_vision_board - **Description**: No description available - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-04 - **Last Updated**: 2026-10-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RT-Thread Vision Board 开发环境 [Renesas RA8D1](https://www.renesas.com) (Cortex-M85 @ 480MHz, Helium, TrustZone) 开发板, 官方 SDK 已就绪,macOS 全命令行工具链(编译 / menuconfig / 烧录 / 串口 / GDB)已打通。 调试器:**ART-Link CMSIS-DAP**(SWD + CDC 串口) 当前串口节点:`/dev/cu.usbmodem6FB960D864362`,波特率 115200(RT-Thread console 为 `uart9`,P208/P209) ## 快速开始 ```bash ./build.sh # 编译默认例程 vision_board_blink_led ./build.sh vision_board_openmv # 编译其它例程 ./flash.sh vision_board_blink_led # 烧录 ./monitor.sh -r # 打开串口终端 (-r 会先复位, 可看到启动日志) ./reset.sh # 仅复位运行 ./debug.sh # 启动 gdbserver (:3333) ./menuconfig.sh vision_board_blink_led # 图形化裁剪内核/组件 ./new_project.sh my_demo # 复制模板创建自己的例程 ./sync.sh my_demo # 把 examples/my_demo/src 的源码接回 SDK 工程 ./sync.sh vision_board_camera --flash # 接回源码后直接编译并烧录 ``` 烧录后串口输出示例: ``` [D/drv_sdram] sdram init success, mapped at 0x68000000, size is 33554432 bytes \ | / - RT - Thread Operating System / | \ 5.0.2 build Oct 4 2026 21:23:11 2006 - 2022 Copyright by RT-Thread team Hello RT-Thread! msh > ``` ## 目录结构 ``` . ├── env.sh # 环境变量(工具链路径 / RTT_CC=gcc / RTT_EXEC_PATH) ├── build.sh menuconfig.sh # 编译、配置 ├── flash.sh monitor.sh # 烧录、串口 ├── reset.sh debug.sh # 复位、gdbserver ├── new_project.sh # 从模板新建例程 ├── sync.sh # 把 examples/<工程>/src 的源码接回 SDK 工程 ├── .gitmodules # SDK 声明为 submodule (ignore=all, 不入库) ├── tools/ │ ├── gcc-arm-none-eabi-13.3/ # Arm GNU Toolchain 13.3.Rel1 │ ├── packs/Renesas.RA_DFP.* # CMSIS 器件包 (RA8D1 flash 算法) │ ├── vb_pyocd.py # PyOCD 适配补丁 (ART-Link) │ ├── vb_flash.py # 烧录 / 备份 / 复位 │ ├── vb_monitor.py # 串口终端 │ └── vb_gdbserver.py # 调试服务 ├── firmware/official/ # 出厂固件备份 (重要!) ├── examples/ # 自定义例程 (见 README) ├── docs/ # 资料索引 └── sdk-bsp-ra8d1-vision-board/ # 官方 SDK (含 rt-thread / projects / documents) ``` `.venv/` 内已安装:`scons`、`kconfiglib`、`pyocd`、`pyserial`。 ## Web 控制台(画面 / 参数 / 串口 / 日志 一屏搞定) ```bash ./web/start.sh # -> http://localhost:8088 ``` 浏览器里同时给你:视频画面、旋转/预览/彩条等运行时参数按钮、串口开关与命令输入、 带级别着色的调试信息控制台、FPS 折线。界面上的按钮就是在下发板子的 msh 命令。 画面出图需要 UVC 固件(开发板变身 USB 摄像头)+ 第二根 USB 线接板载 USB 口, 详见 [`web/README.md`](web/README.md)。 ## 版本管理:代码怎么提交 SDK(`sdk-bsp-ra8d1-vision-board/`)是官方仓库,自带 `.git` 且 1GB+。若它的内容进本仓库, 内部改动只会挂在 SDK 自己的 git 上,本仓库 `git status` 只剩一条 `modified: sdk-bsp... (modified content)`, **自己的代码提交不进去**。因此约定: - **SDK 作为 submodule**(见 `.gitmodules`,`ignore = all`):锚定官方版本,内容不入库, 它内部的未提交改动也不会再干扰本仓库的状态。 - **固件源码放在 `examples/<工程名>/src/`,这里是唯一真身、正常入库提交**。 - **编译前用 `./sync.sh <工程名>` 把源码接回 SDK**(默认符号链接,改完即编,不会忘记同步)。 ```bash git add examples/vision_board_camera sync.sh git commit -m "camera preview example" # 只有自己的代码,干净 ``` > 不要在 `sdk-bsp-ra8d1-vision-board/projects/` 里直接写代码:改了不入库,且 SDK 一更新就丢。 > 内核/组件配置(`rtconfig.h`)改动同样要拷一棵到 `examples/<工程名>/` 留档。 新环境自举: ```bash git clone <本仓库> && cd rt_thread_vision_board git submodule update --init # 拉官方 SDK (~1GB) ./sync.sh --all # 接回所有例程源码 ``` ## 重建环境(换机器 / 删了 .venv 时) ```bash python3 -m venv .venv .venv/bin/pip install -q scons kconfiglib pyocd pyserial requests # 工具链:不要用 brew 版本(缺 newlib 裸机头文件,编不了 -nostdlib 的代码) mkdir -p tools && cd tools curl -fL -o tc.tar.xz https://developer.arm.com/-/media/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-darwin-arm64-arm-none-eabi.tar.xz tar xf tc.tar.xz && mv arm-gnu-toolchain-13.3.rel1-darwin-arm64-arm-none-eabi gcc-arm-none-eabi-13.3 && rm tc.tar.xz mkdir -p packs && cd packs curl -fL -o Renesas.RA_DFP.5.2.0.pack https://www2.renesas.eu/Keil_MDK_Packs/Renesas.RA_DFP.5.2.0.pack ``` ## 踩坑记录(都是已经解决过的) 1. **Homebrew 的 `arm-none-eabi-gcc` 不能用于裸机**:未安装 newlib target headers, 编译 RT-Thread 会报 `fatal error: stdint.h: No such file or directory`。 必须用 Arm 官方工具链(上面 URL),本仓库已放在 `tools/gcc-arm-none-eabi-13.3`。 2. **ART-Link 不支持 PyOCD 的 `DebugPortSetup` 默认调试序列**: 固件上报了 SWJ_SEQUENCE 能力但执行 JTAG→SWD 切换时无 ACK, 报错 `SWD/JTAG communication failure (No ACK)`。 `tools/vb_pyocd.py` 会剔除该序列,改由 PyOCD 走标准 SWD 初始化。 3. **烧录前必须 `reset_and_halt()`**:直接从运行中的应用 `halt()` 会让 CMSIS flash 算法 跑飞,`target was not halted ... (IPSR=3)`(IPSR=3 = HardFault)。工具里已处理。 4. **Flash region 实际大小是 `0x1F8000`**(不是 2MB),备份/烧录裸 bin 时长度要按此来, 否则报 `no memory region defined for address 0x021f8000`。 5. **ELF 中 `0x27030080`(Option Setting)段**不在 pack 的 memory region 内会被跳过, 日志里的 `Failed to add data chunk ...` 是正常提示,不影响运行。 6. `menuconfig.sh` 需要显式把 `rt-thread/tools` 放进 `PYTHONPATH`, 否则会误加载 site-packages 里的同名 `menuconfig` 包(报 `'str' object has no attribute 'load_config'`)。 ## 出厂固件恢复 ```bash ./flash.sh firmware/official/vision_board_factory.bin --base 0x02000000 ``` 重新备份: ```bash ./flash.sh --read firmware/official/vision_board_factory.bin --read-len 0x1F8000 ``` ## 资料索引 见 [`docs/RESOURCES.md`](docs/RESOURCES.md)。本地已有: `sdk-bsp-ra8d1-vision-board/documents/` 下包含 RA8D1 Datasheet、User's Manual、 Vision Board 原理图 / 尺寸图 / Kicad 原理图。 专题笔记:[摄像头画面送 LCD / 网络如何做到不撕裂](docs/lcd-tearing.md) (双完整帧租借 + 对齐屏幕帧起点,附现场自检方法与移植清单)。