NXP S32V234 基于 Eagle Eye 的 OV9284 调试

一、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 编译和调试

 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论