基于MIPI-CSI2转换FPDLINK的智能车载视觉驱动程序设计与实现

软件设计

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图示

  • 34
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

愿达前程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值