基于MIPI-CSI2转换FPDLINK的智能车载摄像头驱动设计与实现

基于MIPI-CSI2转换FPDLINK的智能

车载视觉驱动软件说明书


目录

目录

一、软件简介

1.1 技术背景

1.2 软件概述

二、软件说明

2.1 硬件环境

2.2 软件环境

2.3 测试组件

2.4 参考资料

三、测试环境

3.1 软件安装

3.2 硬件安装

四、驱动开发

4.1 编译环境

4.2 编译生成

4.3 软件设计

4.3.1总统设计

4.3.2驱动接口

五、驱动测试

5.1测试原理

5. 2测试验证

5.2.1 Camera设备验证

5.2.2 Camera出图验证

5.2.3 Camera设置GAIN

5.2.4 Camera设置EXPOSURE

5.2.5 Camera设置FRAMERATE

一、软件简介

此软件是基于公司设计的LI-TX2-Carrier-Board嵌入式硬件平台,以SONY公司的IMX728图像传感器作为无人驾驶视觉图像视频采集模块,该芯片支持2468 x 2468分辨率,输出高清HDR视频,被广泛应用于各种高分辨率视觉设计中;以TI公司的TI9701与TI9702串行化编解码传输芯片来拓展数据信号传输长度,4Line或4*2Line 2.5 Gbps/lane 以及大于15m传输距离的MIPI-CSI2转换GMSL2信号高速传输特性。图像传感器采集到的是10位的raw数据,传输到nvidia的TX2 SOM处理,可以在同一时间传输多达4路的视频流,感知更多周围的环境,该sensor默认工作在Slave模式下(也可以切换到Master 模式),设备驱动程序可以把采集的图像视频数据发送给应用程序显示出来,例如Argus/Nvgst-Capture等测试软件,也可以通过驱动接口获取图像后进行进一步的开发处理。

该软件是嵌入式软件,需要使用本公司生产的LI-TX2-CB-4CAM V1.0载板 IMX728高清摄像机硬件模组一起使用,该整套模组产品可用于智能驾驶车载视觉,机器视觉,科学研究等多种场合。

1.1 技术背景

随着无人驾驶技术和智能汽车的快速发展,其中车载视觉采集系统又是智能驾驶技术的关键。为此,本文主要了介绍基于Jetson Nvidia TX2平台融合IMX728摄像头实现智能车载视觉采集系统驱动软件设计及功能验证。

1.2 软件概述

本文主要介绍基于LI-IMX728-Camera智能车载视觉采集系统驱动软件设计及测试应用说明。主要包括:驱动软件开发接口,驱动软件开发编译,驱动软件设计原理,驱动软件测试及软件应用等内容。

本驱动软件底层依赖JETSON-NVIDIA TX2硬件接口,依据电路原理实现Sensor寄存器或I2C接口,MIPI转换FPDLINK, GPIO设置,FPGA控制编程实现驱动机制。应用层基于串口通信指令操控摄像头,重点描述驱动软件开发接口与测试原理、Camera出图验证、及Camera Global Shutter功能验证。

驱动软件测试组件包括,以串口测试软件工具X-Shell7;IMX728-Sensor,MIPI-CSI2连接线;Senor和HDMI 接口测试结果需要外接HDMI显示器验证。

驱动软件支持的关键特性

  1. 嵌入式多核ARM Cortex-A53 1.2GHz ,带1MB L2缓存
  2. 多通道ISP,最高支持800MPixel/s输入像素速率
  3. 支持高清分辨率3840_1920_30P,30fps
  4. 6路Camera基于GSML2长距离(>=15m)连接,支持多路Camera
  5. Sensor支持RCCB低照度
  6. 串化、解串器支持4-lane ,4x2-lane or 2x4-lane MIPI CSI-2 V1.3端口
  7. 串化、解串器支持D-PHY V1.2 at 80 Mbps–2.5 Gbps/lane
  8. 串化、解串器支持用户数据包自定义类型,RAW8/10/12/14/16/20, RGB565/666/888, YUV422 8/10-bit
  9. 串化、解串器支持16-channel CSI-2虚拟通道
  10. 支持MIPI-CSI2转换FPDLINK-V数据传输
  11. 带闪烁引擎的LED灯

二、软件说明

2.1 硬件环境

  1. 处理器最好Intel i5或以上
  2. 内存容量4G以上
  3. HDMI 显示器

2.2 软件环境

  1. 操作系统:(Win7,Win8,Win10,Win2000,Windows XP)Microsoft WINDOWS 10 (32bit/64bit)
  2. 测试软件:Xshell6(Free for Home/School)
  3. LI-Camera-tool(USB3.0)
  4. 开发环境与工具:Microsoft WINDOWS 10 (64bit),VMware Workstation 16 Pro,ubuntu1804、NVIDIA-TX2 BSP,gcc-linaro-6.2.1-2016.11-i686_arm-linux-gnueabi
  5. 开发语言:C语言

2.3 测试组件

  1. 摄像头: IMX728 Sensor,Nvidia-TX2,TX2 SOM
  2. 适配板: 1 x LI-JTX1-MIPI-ADPT REV1.2, LI-TI9702-IPX-DESER V1.0, LI-TI971-FKR V1.2
  3. 连接线: 1 x FAW-1233 cable , 1 x LI-IMX728-FPDLINKIV

2.4 参考资料

  1. <<IMX728-MIPI-R32.4.3-TX2-NV-20220217_Driver_Guide.docx >>
  2. <<IMX728_RGGB_TechnicalDocument_release_note_E_210310.pdf>>
  3. <<IMX728_RegisterMap_E_Rev0.0.2.xlsx >>

三、测试环境

3.1 软件安装

系统软件:NVIDIA-JETSON-TX2刷机成R32.6.1内核版本系统。

调试软件:安装Xshell7(Free for Home/School)版本,串行线通信端口连接TX2,查看驱动调试信息。

3.2 硬件安装

1)安装NVIDIA-JETSON-TX2 Board,连接19V电源线,HDMI接口线,串口线连接调试线;安装IMX728摄像头经GMLS2连接TI9702解串板,后MIPI-CSI2连接线至MIPI-ADPT板,且需独立连接12V供电电源等测试设备。待开机系统启动后、Sensor出图,则HDMI显示器验证。如下3-2图整机测试连接图:

3-2整机测试连接图

2)在WINDOWS虚拟机搭建JETSON驱动编译环境,编译IMX728-CAMERA驱动文件,编译好的驱动程序一起打包至Firmware。

四、驱动开发

4.1 编译环境

Vmware虚拟机安装ubuntu 16.04完成后,安装配置编译环境系统依赖库,安装系统教程编译环境,顺序配置JETSON-TX2-R32.6.1内核SDK(Hardware and Kernel),设置编译环境变量,设置arm-linux编译器;下载系统编译依赖包,待系统更新完成后,新建build目录,解压三个编译文件包;Source编译环境变量“source ../../ jetson.sh”;执行预编译配置命令,执行SDK驱动编译。如下图4-1所示:

4-1编译环境配置图

4.2 编译生成

如下图4-2驱动文件与主要配置图所示,主要编译步骤与命令配置驱动文件包括,添加修改过的驱动文件(Sensor-IMX728源文件)至SDK对应的文件目录,执行编译,将生成的firmware (../Kernel_out/arch/arm64/boot/dts/tegra186-quill-p3310-1000-c03-00-base.dtb ../Image)文件烧录至JETSON-TX2-SOM主板(USB Port)。烧录Firmware方法,请参考《IMX728-MIPI-R32.4.3-TX2-NV-20220217_Driver_Guide.pdf》。

4.3 软件设计

4.3.1总统设计

基于linux标准V4L2驱动框架的IMX728 Sensor驱动结构,如下图4-1 基于V4L2框架的IMX 728 Sensor驱动模型架构所示,遵循基于标准V4L2驱动框架驱动结构,内核侧以I2C总线注册device 并做IOCTL访问内核MAP映射地址内存访问;应用侧以/dev/node给应用层访问调用。

图4-3-1 基于V4L2框架的IMX728 Sensor驱动模型

JETSON-TX2-IMX728 Camera驱动主要包括内容,有Sensor驱动初始化和Sensor寄存器配置、主板配置相关;基于FPDLINK-V串行器TI9701与解串器TI9702配置与寄存器读写配置,DTS解析接口,电源使能开关接口,分辨率模式设置接口;以及基于Sensor曝光、GAIN、Framerate等特性寄存器读写相关内容。基于JETSON-TX2-SDK与IMX728-Sensor驱动结合实现单路、多路出流等功能实现。

4.3.2驱动接口

基于NVIDIA Tegracam 驱动架构封装Linxu内核V4L2驱动模式。NVIDIA Tegracam 内核用户模式库提供应用程序和linux内核模式V4L2驱动程序之间所有控件和数据处理。由Sensor传感器提供RAW格式数据通过TI9701串行器芯片FPDLINK传输TI9702解串器转换MIPI-CSI总线交给TX2 SOM GPU处理的整个过程。

驱动接口主要有IMX728 Sensor驱动接口。驱动接口模块主要包括:驱动启动入口,驱动使能,驱动上电,驱动掉电,驱动寄存器读写,获取电源,设置电源,解析DTS,设置RES模式,启动流,获取流;初始化fpdlink_init接口,TI9702寄存器读写接口,TI9701寄存器读写接口组成。

4.3.2.1 初始化接口

如下图4-3-2-1 Sensor初始化接口图所示。

接口功能:Sensor驱动入口函数,主板上电、注册V4L2驱动设备、读写I2C寄存器,以及移除驱动设备。

函数名称:static int imx728_probe(struct i2c_client *client,

const struct i2c_device_id *id)

主要参数:输入参数,struct i2c_client *client,const struct i2c_device_id *id;输出参数none;返回值0或 -1。

4-3-2-1 Sensor初始化接口图

4.3.2.2 上电接口

如下图4-3-2-2 Sensor上电接口图所示。

接口功能:Sensor上电启动,GPIO复位。

函数名称:static int imx728_power_on(struct camera_common_data *s_data)主要参数:输入参数,struct camera_common_data *s_data;输出参数, none;返回值,0或-1。

4-3-2-2 Sensor上电接口图

4.3.2.3 掉电接口

如下图4-3-2-3 Sensor掉电接口图所示。

接口功能:Sensor断电

函数名称:static int imx728_power_off(struct camera_common_data *s_data)

主要参数:输入参数,struct camera_common_data *s_data;输出参数, none;返回值,0或-1。

4-3-2-3 Sensor停用接口图

4.3.2.4 设置电压接口

如下图4-3-2-4 Sensor状态接口图所示。

接口功能:设置Sensor驱动电压

函数名称:static int imx728_power_put(struct tegracam_device *tc_dev)

主要参数:输入参数,tegracam_device *tc_dev 设备ID指针 返回值,0或-1。

4-3-2-4 Sensor状态接口图

4.3.2.5 获取电压接口

如下图4-3-2-5 Sensor模式接口图所示。

接口功能:获取Sensor电压

函数名称:static int imx728_power_get(struct tegracam_device *tc_dev)

主要参数:输入参数,tegracam_device *tc_dev 设备ID指针 返回值,0或-1。

4-3-2-5 Sensor获取电压接口图

4.3.2.6 解析DTS接口

如下图4-3-2-6 Sensor设备信息接口所示。

接口功能:解析DTS接口。

函数名称:Static struct camera_common_pdata *imx728_parse_dt(struct tegracam_device *tc_dev)

主要参数:输入参数,tegracam_device *tc_dev 设备ID指针 返回值,0或-1。

4-3-2-6 Sensor DTS解析接口图

4.3.2.7 设置模式接口

如下4-3-2-7 Sensor 设置模式接口图所示。

接口功能:设置DTS Mode接口

函数名称:static int imx728_set_mode(struct tegracam_device *tc_dev)

主要参数:输入参数,tegracam_device *tc_dev 设备ID指针 返回值,0或-1。

4-3-2-7 Sensor 设置模式接口图

4.3.2.8 获取增益接口

如下4-3-2-8 Sensor 获取增益接口图所示。

接口功能:获取Sensor Gain增益接口

函数名称:static int imx728_get_gain(struct tegracam_device *tc_dev, s64 val)

主要参数:输入参数,tegracam_device *tc_dev 设备ID指针,输入Gain值Val; 返回值,0或-1。

4-3-2-8 Sensor 获取增益接口图

4.3.2.9 增益设置接口

如下4-3-2-9 Sensor增益设置寄存器接口图所示。

接口功能:设置Gain增益寄存器接口。

函数名称:static int imx728_set_gain(struct tegracam_device *tc_dev, s64 val)

主要参数:输入参数,tegracam_device *tc_dev 设备ID指针,输入Gain值val。

4-3-2-9 Sensor增益设置寄存器接口图

4.3.2.10 FPDLINK初始化接口

接口功能:初始化fpdlink接口

函数名称:int fpdlink_init(struct i2c_client *client)

主要参数:输入参数struct i2c_client *client;返回值,OK(0)/NG(-1)。

4-3-2-10初始化fpdlink接口图

4.3.2.11 TI9702初始化接口

接口功能:解串TI9702芯片初始化

函数名称:int fpdlink_init(struct i2c_client *client)

主要参数:输入参数struct i2c_client *client;返回值,OK(0)/NG(-1)。

4-3-2-11解串TI9702芯片初始化图

4.3.2.12 TI9702写寄存器接口

接口功能:解串TI9702芯片写寄存器接口

函数名称:static int TI9702_reg_write(struct i2c_client *client, u8 addr, u8 val)

主要参数:输入参数struct i2c_client *client, u8 addr, u8 val;返回值,OK(0)/NG(-1)。

4-3-2-12解串TI9702芯片写寄存器接口图

4.3.2.13 TI9702读寄存器接口

接口功能:解串TI9702芯片读寄存器接口

函数名称:static int TI9702_reg_read(struct i2c_client *client, u8 addr, u8 *val)

主要参数:输入参数I2C设备struct i2c_client *client, 地址u8 addr,寄存器值 u8 *val;返回值,OK(0)/NG(-1)。

4-3-2-13串行化TI9702芯片写寄存器接口图

4.3.2.14 设置曝光接口

如下4-3-2-14 Sensor驱动配置接口图所示。

接口功能:Sensor驱动设置曝光接口

函数名称:static int imx728_set_exposure(struct tegracam_device *tc_dev, s64 val)主要参数:输入参数,tegracam_device *tc_dev 设备ID指针,输入曝光值val。

4-3-2-14 Sensor驱动设置曝光接口图

4.3.2.15 设置帧率接口

如下图4-3-2-15设置帧率接口图所示。

接口功能:设置帧率接口

函数名称:static int imx728_set_frame_rate(struct tegracam_device *tc_dev, s64 val)

主要参数:输入参数,tegracam_device *tc_dev 设备ID指针,设置帧率值val。

4-3-2-15设置帧率接口图

4.3.2.16 读寄存器接口

如下图4-3-2-16读寄存器接口图所示。

接口功能:读寄存器接口

函数名称:static inline int imx728_read_reg(struct camera_common_data *s_data, u16 addr, u8 *val)

主要参数:输入参数数据指针struct camera_common_data *s_data,寄存器地址,寄存器值;返回值,0,-1。

4-3-2-16读寄存器接口图

4.3.2.17 写寄存器接口

如下图4-3-2-17写器寄存器接口图所示。

接口功能:写Sensor器寄存器接口

函数名称:static int imx728_write_reg(struct camera_common_data *s_data, u16 addr, u8 val)

主要参数:输入参数数据指针struct camera_common_data *s_data,寄存器地址,寄存器值;返回值,0,-1。

4-3-2-17写器寄存器接口图

4.3.2.18 Camera取流接口

如下图4-3-2-18 Camera取流接口图所示。

接口功能:Camera取流接口

函数名称:static int imx728_start_streaming(struct tegracam_device *tc_dev)

主要参数:输入参数,struct tegracam_device *tc_dev;返回值, 0,-1。

4-3-2-18 Camera取流接口图

4.3.2.19 Camera停流接口

如下图4-3-2-19 Camera停流接口图所示。

接口功能:Camera停流接口

函数名称:static int imx728_stop_streaming(struct tegracam_device *tc_dev)

主要参数:输入参数,struct tegracam_device *tc_dev;返回值,0或-1。

4-3-2-19 Camera停流接口图

4.3.2. 20 打开设备接口

如下4-3-2-20 打开设备图所示。

接口功能:打开驱动设备接口

函数名称:static int imx728_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)

主要参数:输入参数struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh;返回值,0,-1。

4-3-2-20  Sensor打开设备接口图

4.3.2.21 移除设备接口

如下4-3-2-21 移除设备接口图所示。

接口功能:移除驱动设备接口

函数名称:static int imx728_remove(struct i2c_client *client)

主要参数:输入参数struct i2c_client *client;返回值,0,-1。

4-3-2-21 Sensor移除设备驱动接口图

4.3.2.22 TI9701写寄存器接口

如下解串TI9701芯片写寄存器接口图示。

接口功能:解串TI9701芯片写寄存器接口

函数名称:static int TI971_reg_write(struct i2c_client *client, u8 addr, u8 val)

主要参数:输入参数I2C设备struct i2c_client *client, 地址u8 addr,寄存器值 u8 *val;返回值,OK(0)/NG(-1)

4-3-2-22 解串TI9701芯片写寄存器接口图

五、驱动测试

5.1测试原理

如下图5-1-1测试原理图所示,前端IMX728 Sensor采集视频数据经TI9701串行化传输给TI9702解串化处理后,交给TX2进行视频编解码,有显示处理模块封装后HDMI显示输出。

5-1-1测试原理图

5.2测试验证

5.2.1 Camera设备验证

5.2.1.1查看设备节点

登录TX2系统界面,命令行输入命令:ls -l /dev/video* 查阅驱动设备节点。

5.2.1.1查看设备节点图

5.2.1.2查看I2C地址

查看驱动加载信息命令dmesg -Hw | grep i2c

5-2-1-2 查看I2C地址图示

5.2.2 Camera出图验证

配置ISP文件,安装Argus出图软件验证出图。拷贝文件至s /var/nvidia/nvcam/settings/目录,如下5-2-2 Camra出图验证图示修改camera_overrides.jsp文件属性后,再次加载运行出图argus软件得到出图效果。

5-2-2-1 Camra出图验证图示

Argus-camera 出图命令:Argus-camera  -d0 ,如下图5-2-2-2图示。

5-2-2-2 Argus出图图示

nvgstcapture-1.0出图,命令终端输入; Nvgstcapture-1.0如下图5-2-2-3图示。

Gstpipeline 出图,命令终端输入; gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! 'video/x-raw(memory:NVMM), width=(int)3872, height=(int)2144, framerate=50/1'  ! nvvidconv flip-method=0 ! 'video/x-raw, format=(string)I420' ! xvimagesink –e如下图5-2-2-4图示。

图5-2-2-3图示

V4L2抓RAW数据:

命令终端输入; v4l2-ctl --set-fmt-video=width=3868,height=2176,pixelformat=RG10 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=3 --stream-to=imx728.raw -d /dev/video0

5.2.3 Camera设置GAIN

手动设置Gain用 Argus 测试,在Argus软件界面, 将 AE 调成 off,勾选 AE Lock。调节Gain的最小值与最大值。

5-2-3-1 Sensor 曝光设置命令图示

5.2.4 Camera设置EXPOSURE

手动设置exposure用 Argus 测试,在Argus软件界面, 将 AE 调成 off,勾选 AE Lock。调节exposure的最小值与最大值。

5-2-4 Camera设置EXPOSURE 图示

5.2.5 Camera设置FRAMERATE

手动设置Framerate用 Argus 测试,在Argus软件界面,勾选KPI按钮。调节不同mode或者设置framerate的最小值与最大值。

5-2-5 Camera设置FRAMERATE图

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿达前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值