基于 NXP S32V234 平台的 OV9284 DMS 摄像头调试

关键字 :S32V234OV9284DMS

一、 开发环境

1、S32V234 主平台采用的是 Panda Board,TI964 采用的是 Bamboo Board,DMS 摄像头采用的是 OV9284+TI933 摄像头模组,以下是硬件实物图:

2、软件环境是 BSP19.0+VSDK1.3。

3、基于BSP19.0+VSDK1.3 的补丁和源码包,可以在以下百度云链接获取:

链接:https://pan.baidu.com/s/1m5SMiQUeIvCCYVOil_ZaPQ

提取码:u6jd

、 OV9284+TI933 DMS 摄像头规格

1、摄像头的主要参数如下图:

2、OV9284 输出的图像是灰度图。

3、TI933 的 GPIO0 接 OV9284 的 FSIN 引脚;

TI933 的 GPIO1 接 OV9284 的 RESET 引脚。

、 建立 S32V 与 TI964、TI933、OV9284 的 I2C 通信

1、将 TI964 接在 S32V I2C 0 上面,给 S32V 接 12V 电源,可以直接检测到 TI964 的七位 I2C 地址是 0X3D。

2、配置 TI964 的相关寄存器之后,可以检测到 TI933 的七位 I2C 地址是 0X59。

3、配置 TI933 的寄存器,对 OV9284 进行软件复位之后,可以检测到 OV9284 的七位 I2C 地址是 0X60。

、 设计 OV9284+TI933 DMS 摄像头的 ISP Graph

1、使用 S32DS 2018 R1 创建一个新的 ISP Dataflow Project,命名为 wpi_ov9284_ub933。

2、点击工具最上方的 Window -> Preferences,在下图的位置添加 CSI_UB964_OV9284这个摄像头类型,点击 OK 退出,Refresh 工程之后,就可以选择这个类型。

3、OV9284 输出的图像是灰度图,在 IPUS 中将其转化为 RGB888,使用的 kernel 是 gray_to_display.ipus,以下是设计好的 ISP Graph:

4、在空白处单击右键,选择 Validate diagram,如果出现以下界面,则说明 ISP Graph 设计合理。

5、在空白处单击右键,选择 Emit As -> Emit Configurations,选择 Graph 和 Output,点击 Emit。

6、Emit 成功之后,会生成 inc 和 src 目录。

、 添加 OV9284+TI933 DMS 摄像头的驱动

1、在 s32v234_sdk/isp/inc/seq_graph_meta.h 文件中添加 CSI_UB964_OV9284 摄像头类型。

2、在 s32v234_sdk/libs/io/sdi/src/sdi_io.cpp 文件中,sdi_MipiCsiIO::Reserve()、sdi_MipiCsiIO::Release()、sdi_MipiCsiIO::Setup()、sdi_MipiCsiIO::Start()、sdi_MipiCsiIO::Stop() 等 5 个函数中添加 CSI_UB964_OV9284 分支。

3、sdi_MipiCsiIO::Reserve() 函数会调用 TIUB964_Init() 函数,对 TI964、TI933、OV9284 进行设备注册和 I2C 初始化操作。

(1)解串器 TI964

(2)串行器 TI933

(3)Sensor OV9284



4、sdi_MipiCsiIO::Release() 函数会调用 TIUB964_Close() 函数,对 TI964、TI933、OV9284 进行设备注销操作。

5、sdi_MipiCsiIO::Setup() 函数可以设置 CSI 的 Lanes 数量和传输速率。

、 编译应用程序

1、创建 s32v234_sdk/isp/graphs/wpi_ov9284_ub933 目录。

(1)将之前 Emit 成功的 inc 和 src 目录复制过来。

(2)graph.mk 文件中需要添加 gray_to_display.ipus 的路径。

2、创建 s32v234_sdk/demos/isp/wpi_isp_ov9284 目录。

(1)BUILD.mk 文件中需要选择 Graph 和调度方式,并且可以设置应用程序的名字。

(2)main.cpp 文件中需要选择摄像头的分辨率、数量和数据格式。

3、修改 build_ov9284_single.sh 中声明的环境变量,运行成功后生成 wpi_isp_ov9284_single_mipi0.elf 文件。

4、将编译生成的 wpi_isp_ov9284_single_mipi0.elf 在 S32V 开发板上运行,效果如下:

、 调试过程中可能遇到的问题

1、TI964 的跳帽没有选择 12V,会导致摄像头供电不足,没法正常工作。若 TI964 的 0X20 寄存器设置为 0XE0,则摄像头必须接在 Port0,否则 OV9284 的 I2C 初始化会失败。

2、OV9284 的 RESET 引脚接在 TI933 的 GPIO1,若没有进行软件复位,则 OV9284 没法正常工作。通过配置 TI933 的 0X0D 寄存器,对 OV9284 进行软件复位。

3、设计 ISP Graph 时在 IPUS 控件中找不到 gray_to_display.ipus 算子,可能是 kernel 的路径选择不正确。

4、OV9284 的 I2C 初始化失败,可能是初始化 TI933 之后,没有延时 100ms。

5、在开发板不重启的情况下,第二次运行应用程序,log 显示设备被占用导致 I2C 初始化失败,原因是上一次运行后没有注销设备,因此需要在 TIUB964_Close() 函数进行此操作。

6、VSDK1.3 相较于 VSDK1.2,需要额外编译 sumat 相关的库,否则应用程序会编译失败。

、 总结

本篇博文是 S32V Camera 调试系列的第一次实战,在本文第七章介绍的注意事项同样适用于后面讲解的摄像头调试,下一篇博文将要介绍的是基于 NXP S32V234 平台的 OV9716 摄像头调试。

参考文献

1、Auto_Linux_BSP_19.0_User_Manual

链接:https://pan.baidu.com/s/1vp4RSL7jnH-0WipGmBaV8g

提取码:pu8v

2、SDI_Software_User_Guide

链接:https://pan.baidu.com/s/10MPB7zxcluHuaZJgsU-l_w

提取码:j8bf

3、OV9284-Product-Specification-a-CSP_Version-2-0_WPI(NDA 文件)

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

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

评论