一、 开发环境
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 文件)
评论