diff --git a/README.md b/README.md index 8ac56460d4706f309e2da4a13e196328f5394ed5..7775006c7f2d5d9ce609933048b778ab668db7af 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ RT-Thread Smart 是基于 RT-Thread 操作系统上的混合操作系统,简 - [OPENHW Core-V-MCU](/rt-thread-version/rt-thread-standard/tutorial/quick-start/openhw-core-v-mcu/quick-start.md) - [富瀚微 MC3302](/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-mc3302/quick-start.md) - [富瀚微 MC632X](/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-mc632x/quick-start.md) +- [富瀚微 FH8626V300](/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/quick-start.md) - [其他...](/rt-thread-version/rt-thread-standard/tutorial/quick-start/more.md) #### 内核学习 diff --git a/rt-thread-version/rt-thread-standard/_sidebar.md b/rt-thread-version/rt-thread-standard/_sidebar.md index 701355728a78feb5e30416c8a5fac3b8ee33ff5d..ce1bf86e78aed27d5017109ecd447a00f3865c6a 100644 --- a/rt-thread-version/rt-thread-standard/_sidebar.md +++ b/rt-thread-version/rt-thread-standard/_sidebar.md @@ -24,6 +24,7 @@ - [OPENHW Core-V-MCU](/rt-thread-version/rt-thread-standard/tutorial/quick-start/openhw-core-v-mcu/quick-start.md) - [富瀚微 MC3302](/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-mc3302/quick-start.md) - [富瀚微 MC632X](/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-mc632x/quick-start.md) + - [富瀚微 FH8626V300](/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/quick-start.md) - [其他开发板...](/rt-thread-version/rt-thread-standard/tutorial/quick-start/more.md) - 内核 - [内核基础](/rt-thread-version/rt-thread-standard/programming-manual/basic/basic.md) diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/1.png b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..09d13f96dedee060fd6e30bf535a3c9e706dc784 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/1.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/2.png b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..28ba619a3f7bc109dd7897c05ae10ce8b04de42a Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/2.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/3.gif b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/3.gif new file mode 100644 index 0000000000000000000000000000000000000000..299fa20109854dd3d56baeb8d1e71f063a587c13 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/3.gif differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/4.gif b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/4.gif new file mode 100644 index 0000000000000000000000000000000000000000..8beab3b62cbe8f749c4e6fb6e33b508535656387 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/4.gif differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/5.gif b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/5.gif new file mode 100644 index 0000000000000000000000000000000000000000..36aa8edca916d4f45f102c7575dc7b3de66934dd Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/figures/5.gif differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/quick-start.md new file mode 100644 index 0000000000000000000000000000000000000000..19a52811f03316e14f3e54b59e892f0e6ba373b4 --- /dev/null +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/fullhan-fh8626v300/quick-start.md @@ -0,0 +1,221 @@ +# Fullhan FH8626V300上手指南 + +## 1 FH8626V300简介 + +**FH8626V300** 是一款面向智能高清网络摄像机应用的高性能 SOC 芯片。该芯片集成了高性能 ISP 图像处理模块和 H.264 视频压缩编码模块,集成高能效比的人工智能处理引擎,具备优异的图像处理能力、极高的编码质量和智能处理能力。同时芯片内部集成了 512 Mbit DDR2 存储器,拥有完备的应用所需外设接口,包括 USB、SDIO 和 Ethernet PHY 等,可适用于智能 IPC、UVC、双目摄像机等产品。 + +![](figures/2.png) + +​ 图一 应用场景 + +### 1.1 产品规格和技术参数 + +![](figures/1.png) + + + +​ 图二 系统框图 + +#### 1.1.1 处理器 + + + +- 应用处理器:运行频率 700MHz,16KB I-CACHE, 16KB D-CACHE + +- 低功耗处理器:运行频率 450MHz,8KB I-CACHE, 8KB D-CACHE + +#### 1.1.2 视频输入(VI) + +- 串行输入 + - MIPI D-PHY ,MIPI CSI-2, MIPI 2C2D,RGB Bayer 输入 + - 最高时钟频率 750MHz(1.5Gbps per lane) + - 1x2lane Sensor 或 2x1lane Sensor + - 典型应用:2x1920x1080@15fps + +- 并行输入 + - 最大 10bit DVP 输入,最高时钟频率 81MHz + +#### 1.1.3 图像信号处理(ISP) + +- 最大吞吐量支持 2x1920x1080@15fps + +- 标准的 RGB Bayer,2x2 Pattern 可配置 + +- 镜头暗角校正(LSC) +- 固定模式噪声的消除。自动黑底消除,动态坏点的自动检测和消除,静态坏点消除 +- 自适应的 2D/3D 去噪 +- 自适应 YC 去噪 + +除上述功能之外该支持下述功能: + +| 图像处理单元(VPU) | 图像处理单元(VPU) | 图像编码(JPEG) | 智能处理引擎(NN) | +| :------------------ | :---------------------------- | :--------------- | :--------------------------- | +| **内置 DRAM** | **I2C 接口** | **SPI 接口** | **GPIO 接口** | +| **UART 接口** | **SAR-ADC 输入** | **Audio Codec** | **I2S 接口** | +| **PWM 输出** | **内置 10/100M Ethernet PHY** | **SDIO** | **USB(USB2.0 Host或Device)** | +| **EFUSE** | **AES** | **复位管理模块** | **安全启动** | + +更多信息请访问 [富瀚微官网](https://www.fullhan.com/) + +## 2 SDK开发 + +SDK 发布包是一个压缩包:FHxxxx_IPC_Vx.x.x_yyyymmdd.rar,其中 FHxxxx 是发布的芯片型号名称,Vx.x.x 是版本号,yyyymmdd 是 SDK 打包日期。获取SDK请访问 [富瀚微官网](https://www.fullhan.com/) + +### 2.1 SDK目录 + +SDK主要包含:编译环境与工具链,预编译的镜像文件,调试工具与相关文档,U-Boot 源码,Kernel 源码,音视频示例程序。 + +下述是详细的目录结构示意图: + +```c +├── images +│ └── (非可供FLASH烧写的映像文件,如内核,u-boot, Flash.ing等) +├── docs_tools +│ └── (开发板使用说明、音视频媒体开发参考手册、开发环境设置交叉编译器、打包的c运行时库板级工具,如gdbserver、mtd-utis,还有PC工具,a如mkfs,jffs2、mkfs,cramfsmkimage.制作f红ah升级镜像的工具LDGO图片转换工具和图像效果调试工具等) +├── board_support +│ ├── uboot +│ │ └── (uboot源代码) +│ ├── kernel +│ │ └── (linux内核源代码WiFi驱动代码) +│ ├── rootfs +│ │ └── (rootfs源代码) +│ └── ddrboot +│ └── (部分SDK支持ddrboot启动,包含ddrboot源码) +├── media_support +│ ├── include +│ │ └── (对外头文件) +│ ├── driver +│ │ └── (音视频媒体处理内核模块和安装屏本) + ── └── make_drivers + │ └── (音视频媒体内核模块的编译环境,若kernel配置有较多变化,可自行编译适配) + ├── lib + │ └── (媒体库和sensor库,以及sensor配置文件) + └── demo + └── (样例源代码) +``` + +## 3 编译示例 + +### 3.1 AOV简介 + +AOV(Always on Video)是指通过低帧率截图,以实现全时缩影录像的低功耗模式。一般每个 AOV 窗口,都包含唤醒、截图、MD& 人形检测、睡下四个动作。AOV 方案与RPC 方案一致,音视频均运行在 SUB CPU 上。 + +```c +media_support (媒体处理平台的目录) +│ +├── include (对外头文件) +│ └── 外部使用的头文件 +│ +├── driver (音视频媒体处理内核模块和安装脚本) +│ ├── 音视频媒体处理驱动 +│ └── 安装脚本 +│ +├── make_drivers (音视频媒体内核模块的编译环境,若kernel配置有较多变化,可自行编译适配kernel的ko文件) +│ └── 编译环境与工具 +│ +├── lib (媒体库和sensor库,以及sensor配置文件) +│ ├── 媒体库 +│ ├── sensor库 +│ └── sensor配置文件 +│ +├── tools (LOGO图片转换工具、图像效果调试工具等) +│ ├── LOGO图片转换工具 +│ └── 图像效果调试工具 +│ +├── demo (样例源代码) +│ └── 样例程序 +│ +└── make_arcfirmware (ARC源码) + └── ARC处理器架构相关源码 +``` + +AOV 方案与 RPC 方案前面初始化等基本一致,只有应用相关方案有所不同。ARM 端应用样例在 demo/aov_demo 中,ARC 端应用样例在 make_arcfirmware/app/arc_aov_demo中。 + +### 3.2 AOV使用 + +下述的步骤说明、编译方法和代码修改仅供参考,例如地址信息,在产品开发时需要根据实际修改。 + +#### 3.2.1 内存分配 + +AOV 方案内存分配与 RPC 快速启动方案内存分配一致,当使能 ddrboot 时,aov 和快起结合,模型烧录和加载方法和 RPC 快速启动方案一样,nn 模型文件存放在固定内存地址0x13700000。如果不使能 ddrboot,则在加load_aov_modules_FH8626V300.sh 中读取 nn 模型到固定地址 0x13700040。 + +#### 3.2.2 加载NN模型 + +目前 aov 方案支持两个模型,一个是 Cmax-nn 模型,模型输入是 128x256 的单 Y 数据,先基于 nr3d md 做 md 分析,将有移动的区域坐标区域输入给 nn 驱动,nn 驱动做跳点缩放到 128x256 后输入给 nn 模型,模型使用 case32005.nbg 文件。另一个是 yuv 模型,输入幅面是 464x240,模型使用的是 yuv 模型需要使用 gen_with_nbg 工具对 nn 模型进行处理,依赖原本的 nbg 模型,制作出 nn 模型的 bin 文件夹,具体使用方法可以参考工具的 readme,工具位置在`SDK_DIR/docs_tools/sofware/pc/gen_with_nbg`。 + +#### 3.2.3 编译Kernel + +1. 进入 SDK/board_support/kernel路径。 + +2. 执行`$make`命令,与SDK标准编译一致,但是需要添加AOV后缀,用于编译aov的config例如`$make FHXXXX_AOV`。 + +```shell +# 解压 +tar xf linux-5.10.tar.gz +cd linux-5.10 + +# 导入默认配置 +make ARCH=arm CROSS_COMPILE=arm-fhva12e-linux-uclibcgnueabihf- fh8626v300_aov_defconfig + +# 编译内核与设备树 +make ARCH=arm CROSS_COMPILE=arm-fhva12e-linux-uclibcgnueabihf- uImage +make ARCH=arm dtbs + +# 合并 DTB 到 uImage +cat arch/arm/boot/dts/fh8626v300.dtb >> arch/arm/boot/uImage +``` + + AOV 方案由于 SUB CPU 使用了 I2C,kernel 默认关闭了I2C支持。 + +#### 3.2.4 编译ARC demo + +- 进入 media_support/make_arcfirmware/app/arc_aov_demo + +- 执行 make fh8626v300_aov_defconfig,再执行 make clean && make all,编译生成 **rtthread_arc_aov.bin** + +- 执行make menuconfig 修改视频配置,如更改 sensor,打开/关闭 nn、osd、md等。需注意,修改 sensor 时需要修改对应支持的幅面。 + +#### 3.2.5 编译ARM demo + +- 进入 media_support/demo/aov_demo + +- 执行 make clean && make,编译生成 aov_demo + +- 修改 sample_opts.h 配置选择录码流、网络传流,配置 aov demo 参数,如 aov 周期、唤醒水线、nn 阈值、nn 使能等参数。 + +#### 3.2.6 运行demo + +- 加载 kernel,配置 ip 地址,mount 到 nfs 目录下。将所需的 osal.ko、xbus_rpc.ko、**rtthread_arc_aov.bin**、aov_demo copy 至 nfs 目录下。 + +- 执行 `insmod osal.ko`。 +- 执行`insmod xbus_rpc.ko fn=rtthread_arc_aov.bin fa=0x4f800000 ` +- 若使能了 ddrboot 模式,则加载地址为 0x4fc00000,上述的命令修改为:`insmod xbus_rpc.ko fn=rtthread_arc_aov.bin fa=0x4fc00000` +- 执行./aov_demo ip port + +> sdk 中的 rtthread_arc_aov.bin 默认编译没有打开 nn,所以 aov_demo 运行时aovnn-enable =1 也是无效的,只有 aov 出图功能,如果需要修改 aov arc 固件支持的功能请进入make_arcfirmware/app/arc_aov_demo 目录下执行make fh8626v300_aov_defconfig,再执行 make menuconfig 进行配置修改后重新编译生成新的 rtthread_arc_aov.bin + +## 4.示例展示 + +### 4.1 双路AOV demo + +![](figures/3.gif) + +​ 图三 双路AOV + +### 4.2 AOV状态切换 demo + +- AOV模式 (低功耗):无事件发生时,FH8626V300芯片进入低帧率、低内存的休眠状态,显著降低系统功耗。同时内置AI算法持续进行高频定点抓拍。 +- 事件触发 (高性能): AI算法检测到有事件发生,快速切换至全帧率状态,立即启动快速录像和报警。 + +![](figures/4.gif) + +​ 图四 AOV事件触发 + +![](figures/5.gif) + +​ 图五 功耗变化 + + + +​ 更多信息请访问 [富瀚微官网](https://www.fullhan.com/) +