一、OV9284 芯片介绍
应用:
- 工业条码扫描
- 驾驶员监测系统(DMS)
特点:
- 采用 OmniPixel3-GS 技术的 3um * 3um 像素
- 自动黑电平矫正
- 帧率、镜像、翻转、剪裁、窗口的可编程的控制
- 支持输出的格式:8/10-bit RAW
- 快速模式切换
- 支持 2x2 单色装仓
- 双通道 MIPI 串行输出接口
- DVP 并行输出接口
- 支持水平和垂直 2:1 和 4:1 的单色二次抽样
- 支持图像尺寸:1280x800、1280x720、640x480、640x400
- 嵌入式 256 位一次性可编程存储器,用于零件识别
- 两个片上锁相环
- LED PWM
- 内置闪光灯控制
二、S32DS 绘制 ISP Graph
1. 新建 ISP Graph
使用 S32DS_Vision_v2018.R1 新建一个使用 raw12_to_rgb888_gamma_2out 算子的
OV9284 的 ISP Graph 。
(1)首先新建 MIPI 设备。
(2)在 S32DS 中绘制如下 ISP Graph 流程图,并使用上面新建的 MIPI 设备。
点击 MIPI 设备,选择 “Camera Type” 中选择新建的 CSI_UB964_OV9284 即可。
2. 填充各模块参数
(1)MIPI 设备参数。
(2)MIPI 的 SRAM 参数。
(3)IPUS 算子参数。
(4)IPUS 输出的 RBG 和 Gray 的 SRAM 参数。
(5)FDMA 通道名称。
(6)DDR Buffer 参数。
(7)验证图形。
(8)生成代码。
(9)默认生成的代码在 inc/ 和 src/ 目录下。
三、修改和编译库文件
1. 修改和编译 isp graph 的库文件
(1)打开 Ubuntu18.04 虚拟机,安装 sdk1.51 ,进入到 s32v234_sdk/isp/graphs 目录下,拷贝一个 isp graph 工程,命名为 ov9284_ub964_mipi 。
sudo cp -r ov9284_max9286_mipi ov9284_ub964_mipi |
(2)进入目录并修改相关目录名称。
cd ov9284_ub964_mipi/ sudo mv dynamic_ov9284_max9286_mipi dynamic_ov9284_ub964_mipi |
(3)修改 graph.mk 中的 graph 名称。
(4)把由 ISP Graph 生成的文件修改为 ov9284_ub964_mipi ,修改完如下:
(5)另外 ov9284_max9286_mipi.c 中包含的头文件也需要改名。
(6)如本文第一步操作 MIPI 设备名只在 S32DS 工具中添加,代码中也需要添加,修改 s32v234_sdk/isp/inc/ seq_graph_meta.h 文件添加 “CSI_UB964_OV9284” 。
(7)在编译 uboot & linux 和 sdk 中的 ko 驱动模块的时候已经在 /etc/profile 中添加了交叉编译器以及相关目录的环境变量。
(8)进入 root 用户再进行编译得到 .a 库文件,说明 ISP graph 部分移植没有问题。
su – root make clean & make |
2. 修改文件编译 libsdi.a 库文件
(1)在 s32v234_sdk/lib/isp/cam_generic/kernel/include/cam_i2c_addr.h 文件中添加
OV9284 的 I2C 地址。
(2)在 /home/stark/VisionSDK_S32V2_RTM_1_5_1/s32v234_sdk/libs/io/sdi/include/
sdi_io.hpp 文件中添加 1 处 OV9284 相关的声明。
(3)在 /home/stark/VisionSDK_S32V2_RTM_1_5_1/s32v234_sdk/libs/io/sdi/src/sdi_io.cpp
文件中添加 6 处 OV9284 相关的修改:
① 在 void sdi_MipiCsiIO::ReserveCamSwitch(LIB_RESULT &arRet) 函数中添加 CSI_UB964_OV9284 分支。
② 添加 void sdi_MipiCsiIO::UB964_OV9284_Reserve(LIB_RESULT &arRet) 函数。
③ 在 LIB_RESULT sdi_MipiCsiIO::ReleasePrv() 函数添加 CSI_UB964_OV9284 分支。
④ 在 LIB_RESULT sdi_MipiCsiIO::Setup() 函数中添加 CSI_UB964_OV9284 分支。
⑤ 在 LIB_RESULT sdi_MipiCsiIO::Start(void) 函数中添加 CSI_UB964_OV9284 分支。
⑥ 在 LIB_RESULT sdi_MipiCsiIO::StopPrv(void) 函数添加 CSI_UB964_OV9284 分支。
(4)移植完毕可以编译得到 libsdi.a ,说明 sdi 部分移植没有问题。
3. 修改文件编译 libcamdrv.a 库文件
(1)首先添加 ov9284 的配置文件到 s32v234_sdk/libs/isp/cam_generic/kernel/include/。
(2)接下来修改 s32v234_sdk/libs/isp/cam_generic/user/src/tiub964_user.cpp 文件:
① 首先添加上面的 ov9284 的配置文件,再添加兼容字符串。
② 填充 CAM_LIB_RESULT TIUB964_OV10640_Start( const TIUB964_Cfg_t &acUB964_Cfg ) 函数。
③ 填充 CAM_LIB_RESULT TIUB964_OV10640_Stop( const TIUB964_Cfg_t &acUB964_Cfg ) 函数。
注意:后面的修改都在 CAM_LIB_RESULT TIUB964_Init( const TIUB964_Cfg_t
&acUB964_Cfg ) 函数中。
④ 添加 j ,l16bReg 变量定义,在后面写入 ov9284 寄存器值的时候需要用到。
⑤ 修改解串器的寄存器,使能 CSI 的写入通道。
⑥ 修改解串器的寄存器,配置控制通道和串行器以及 Sensor 的 ID 和别名
⑦ 修改解串器的寄存器。
⑧ 把 camera 的别名数据位往右移动一位,使之成功写入。
⑨ 添加 CSI_UB964_OV9284 分支,添加兼容字符串。
⑩ 添加 CSI_UB964_OV9284 分支,以写入 ov9284 Sensor 的寄存器配置。
(3)移植完毕可以编译得到 libcamdrv.a ,说明 sdi 部分移植没有问题。
四、编译 demo 例程并运行
1. 拷贝并修改 Demo 例程
(1)在 s32v234_sdk/demos/isp/ 目录下拷贝一份 isp_ov9284_max9286_mipi 更名为
isp_ov9284_ub964_mipi 。
sudo cp -r isp_ov9284_max9286_mipi isp_ov9284_ub964_mipi |
(2)修改 s32v234_sdk/demos/isp/isp_ov9284_ub964_mipi/BUILD.mk 文件。
(3)再修改 s32v234_sdk/demos/isp/isp_ov9284_ub964_mipi/src/main.cpp 的头文件。
2. 运行 Demo 例程
把编译得到的 elf 文件放入 Eagle Eye 运行即可得到图像。
参考资料
[1] S32V234RM_Rev2.1.pdf
上一篇:NXP S32V234 的 BSP23+VSDK1.6 编译和调试
评论