海思Hi3518EV200(5)图像sensor驱动开发

2024-02-24 20:58

本文主要是介绍海思Hi3518EV200(5)图像sensor驱动开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. sensor开发框图

 

wKiom1fSl5mwA2ESAABzoRmaSVU881.jpg

 

2. 设备驱动加载及硬件系统配置

cd mpp/ko
# default online ./load3518e -a -sensor sc2135 -osmem 32 -total 64 # vi_vpss offline ./load3518e -a -sensor sc2135 -osmem 32 -total 64 -offline

load3518e脚本主要是用来配置硬件系统的参数(引脚复用、sensor时钟、VI时钟)加载驱动(.ko),包括访问sensor的I2C接口驱动。

离线模式时图像存入DDR中,在线模式时图像不存入DDR中。

在load3518e脚本中添加sensor的相关配置,这里使用smartsens的SC2135的200万像素的图像传感器。

insert_sns()
{case $SNS_TYPE insc2135)himm 0x200f0040 0x2;              # I2C0_SCLhimm 0x200f0044 0x2;              # I2C0_SDA#cmos pinmuxhimm 0x200f007c 0x1;              # VI_DATA13himm 0x200f0080 0x1;              # VI_DATA10himm 0x200f0084 0x1;              # VI_DATA12himm 0x200f0088 0x1;              # VI_DATA11himm 0x200f008c 0x2;              # VI_VShimm 0x200f0090 0x2;              # VI_HShimm 0x200f0094 0x1;              # VI_DATA9himm 0x2003002c 0xb4001;          # sensor unreset, clk 27MHz, VI 148.5MHz
# himm 0x20030104 0x1; # vpss 148.5MHz ;; *) echo "xxxx Invalid sensor type  SNS_TYPE xxxx"
            report_error;;
    esac
}

insert_ko()
{
    # sys config
    sys_config;

    # driver load
    insmod mmz.ko mmz=anonymous,0,
mmz_start, mmzsizeanony=1||reporterrorinsmodhimedia.koinsmodhi3518ebase.koinsmodhi3518esys.kovivpssonline= b_arg_online sensor=$SNS_TYPE insmod hi3518e_tde.ko insmod hi3518e_region.ko insmod hi3518e_vgs.ko insmod hi3518e_isp.ko insmod hi3518e_viu.ko detect_err_frame=10; insmod hi3518e_vpss.ko rfr_frame_comp=1; insmod hi3518e_vou.ko #insmod hi3518e_vou.ko transparentTransmit=1 #enable transparentTransmit insmod hifb.ko video="hifb:vram0_size:1620"     # default pal insmod hi3518e_rc.ko insmod hi3518e_venc.ko  insmod hi3518e_chnl.ko ChnlLowPower=1 insmod hi3518e_h264e.ko insmod hi3518e_jpege.ko insmod hi3518e_ive.ko save_power=0; # insmod hi3518e_ive.ko insmod extdrv/sensor_i2c.ko echo "==== Your input Sensor type is  SNS_TYPE ===="
    insmod extdrv/pwm.ko
    insmod extdrv/piris.ko

    #insert_sns > /dev/null
    insert_sns
    insert_audio

    insmod hi_mipi.ko
    echo "==== Your input Sensor type is
SNS_TYPE ====" }

 

3. sensor的库文件生成(.so)

sensor的库文件需要在Linux服务器中的SDK包中编译得到,将生成的.so文件放到SDK包中的stream软件包中的Hi3518E_Stream_xxx/libs目录下。

wKiom1fSrKWSwkQLAAB-bfCJ3DQ706.jpg

sensor_ctl.c实现sensor的读写初始化。

sensor_cmos.c主要实现ISP需要的回调函数,包括ISP、AE、AWB等。

[cpp] view plain copy
print ?
  1. //ISP function  
  2. HI_S32 cmos_init_sensor_exp_function(ISP_SENSOR_EXP_FUNC_S *pstSensorExpFunc)  
  3. {  
  4.     memset(pstSensorExpFunc, 0, sizeof(ISP_SENSOR_EXP_FUNC_S));  
  5.   
  6.     pstSensorExpFunc->pfn_cmos_sensor_init = sensor_init;  
  7.     pstSensorExpFunc->pfn_cmos_sensor_exit = sensor_exit;  
  8.     pstSensorExpFunc->pfn_cmos_sensor_global_init = sensor_global_init;  
  9.     pstSensorExpFunc->pfn_cmos_set_image_mode = cmos_set_image_mode;  
  10.     pstSensorExpFunc->pfn_cmos_set_wdr_mode = cmos_set_wdr_mode;  
  11.       
  12.     pstSensorExpFunc->pfn_cmos_get_isp_default = cmos_get_isp_default;  
  13.     pstSensorExpFunc->pfn_cmos_get_isp_black_level = cmos_get_isp_black_level;  
  14.     pstSensorExpFunc->pfn_cmos_set_pixel_detect = cmos_set_pixel_detect;  
  15.     pstSensorExpFunc->pfn_cmos_get_sns_reg_info = cmos_get_sns_regs_info;  
  16.   
  17.     return 0;  
  18. }  
  19.   
  20. //AE function  
  21. HI_S32 cmos_init_ae_exp_function(AE_SENSOR_EXP_FUNC_S *pstExpFuncs)  
  22. {  
  23.     memset(pstExpFuncs, 0, sizeof(AE_SENSOR_EXP_FUNC_S));  
  24.   
  25.     pstExpFuncs->pfn_cmos_get_ae_default    = cmos_get_ae_default;  
  26.     pstExpFuncs->pfn_cmos_fps_set           = cmos_fps_set;  
  27.     pstExpFuncs->pfn_cmos_slow_framerate_set= cmos_slow_framerate_set;      
  28.     pstExpFuncs->pfn_cmos_inttime_update    = cmos_inttime_update;  
  29.     pstExpFuncs->pfn_cmos_gains_update      = cmos_gains_update;  
  30.     pstExpFuncs->pfn_cmos_again_calc_table  = cmos_again_calc_table;  
  31.     pstExpFuncs->pfn_cmos_get_inttime_max   = cmos_get_inttime_max;   
  32.   
  33.     return 0;  
  34. }  
  35.   
  36. //AWB function  
  37. HI_S32 cmos_init_awb_exp_function(AWB_SENSOR_EXP_FUNC_S *pstExpFuncs)  
  38. {  
  39.     memset(pstExpFuncs, 0, sizeof(AWB_SENSOR_EXP_FUNC_S));  
  40.   
  41.     pstExpFuncs->pfn_cmos_get_awb_default = cmos_get_awb_default;  
  42.   
  43.     return 0;  
  44. }  
//ISP function
HI_S32 cmos_init_sensor_exp_function(ISP_SENSOR_EXP_FUNC_S *pstSensorExpFunc)
{memset(pstSensorExpFunc, 0, sizeof(ISP_SENSOR_EXP_FUNC_S));pstSensorExpFunc->pfn_cmos_sensor_init = sensor_init;pstSensorExpFunc->pfn_cmos_sensor_exit = sensor_exit;pstSensorExpFunc->pfn_cmos_sensor_global_init = sensor_global_init;pstSensorExpFunc->pfn_cmos_set_image_mode = cmos_set_image_mode;pstSensorExpFunc->pfn_cmos_set_wdr_mode = cmos_set_wdr_mode;pstSensorExpFunc->pfn_cmos_get_isp_default = cmos_get_isp_default;pstSensorExpFunc->pfn_cmos_get_isp_black_level = cmos_get_isp_black_level;pstSensorExpFunc->pfn_cmos_set_pixel_detect = cmos_set_pixel_detect;pstSensorExpFunc->pfn_cmos_get_sns_reg_info = cmos_get_sns_regs_info;return 0;
}//AE function
HI_S32 cmos_init_ae_exp_function(AE_SENSOR_EXP_FUNC_S *pstExpFuncs)
{memset(pstExpFuncs, 0, sizeof(AE_SENSOR_EXP_FUNC_S));pstExpFuncs->pfn_cmos_get_ae_default    = cmos_get_ae_default;pstExpFuncs->pfn_cmos_fps_set           = cmos_fps_set;pstExpFuncs->pfn_cmos_slow_framerate_set= cmos_slow_framerate_set;    pstExpFuncs->pfn_cmos_inttime_update    = cmos_inttime_update;pstExpFuncs->pfn_cmos_gains_update      = cmos_gains_update;pstExpFuncs->pfn_cmos_again_calc_table  = cmos_again_calc_table;pstExpFuncs->pfn_cmos_get_inttime_max   = cmos_get_inttime_max; return 0;
}//AWB function
HI_S32 cmos_init_awb_exp_function(AWB_SENSOR_EXP_FUNC_S *pstExpFuncs)
{memset(pstExpFuncs, 0, sizeof(AWB_SENSOR_EXP_FUNC_S));pstExpFuncs->pfn_cmos_get_awb_default = cmos_get_awb_default;return 0;
}

 

4. 修改stream软件包的.ini文件

sc2135_1080p_line.ini文件在Hi3518E_Stream_xxx/configs目录下,改文件主要指定.so文件的位置、输入视频的接口(LVDS/MIPI/DVP)、视频格式(分辨率、同步方式、目标帧率等)等系统配置。

 

5. 运行stream软件

运行stream软件包中的HiIspTool.sh脚本,通过以太网卡与上位机的PQTools建立通信。

cd /Hi3518E_Stream_V1.0.2.0./HiIspTool.sh -a -p sc2135_1080p_line.ini

ittb_control进程是基于TCP的服务端,负责控制信号的传输。

ittb_stream进程也是基于TCP的服务端,负责播放H.264或YUV视频流。

wKioL1fSsq-wXKC9AADRHXJoipc306.jpg

 

6. 运行PQ Tools

双击PQ Tools图片,弹出如下对话框,设置IP地址。

wKiom1fStgiBOLd5AABV6TYUyy8974.jpg

在下拉菜单中选择TTP_Stream.exe选项

wKiom1fStkDxwy9rAADdoeFseIU165.jpg

 

7. 最终结果

wKioL1fStqGzj4q-AAFyb_DMrWc691.jpg


这篇关于海思Hi3518EV200(5)图像sensor驱动开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/743355

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境