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

简介:

1. sensor开发框图


wKiom1fSl5mwA2ESAABzoRmaSVU881.jpg


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

1
2
3
4
5
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的相关配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
insert_sns()
{
     case  $SNS_TYPE  in
         sc2135)
             himm 0x200f0040 0x2;               # I2C0_SCL
             himm 0x200f0044 0x2;               # I2C0_SDA
 
             #cmos pinmux
             himm 0x200f007c 0x1;               # VI_DATA13
             himm 0x200f0080 0x1;               # VI_DATA10
             himm 0x200f0084 0x1;               # VI_DATA12
             himm 0x200f0088 0x1;               # VI_DATA11
             himm 0x200f008c 0x2;               # VI_VS
             himm 0x200f0090 0x2;               # VI_HS
             himm 0x200f0094 0x1;               # VI_DATA9
             
             himm 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,$mmz_size anony=1 || report_error
     insmod hi_media.ko
     insmod hi3518e_base.ko
 
     insmod hi3518e_sys.ko vi_vpss_online=$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等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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建立通信。

1
2
3
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



本文转自 shugenyin 51CTO博客,原文链接:http://blog.51cto.com/shugenyin/1851241

相关文章
|
Ubuntu Shell Go
Hi3519DV500 学习摘录
Hi3519DV500 学习摘录
453 3
|
编解码 API 开发工具
|
传感器 编解码 Linux
V4l2 专栏
V4l2 专栏
886 1
|
前端开发 应用服务中间件 API
VUE+websocket编写实现PC web端控制摄像头
WebSocket是一种全双工通信的数据通信协议。WebSocket的主要功能用处是允许服务器主动地向客户端推送数据信息,使得客户端和服务端之间的数据交换变得更加的简单。
VUE+websocket编写实现PC web端控制摄像头
|
11月前
|
机器学习/深度学习 监控 并行计算
【图像增强】局部对比度增强的CLAHE算法直方图增强研究(Matlab代码实现)
【图像增强】局部对比度增强的CLAHE算法直方图增强研究(Matlab代码实现)
1366 0
|
Ubuntu 安全 网络协议
Ubuntu设置smb功能
通过以上步骤,您已经在Ubuntu系统上成功设置了SMB共享服务,实现了与不同操作系统间的文件共享。记住,根据实际需求调整配置文件,特别是在安全性方面,比如限制访问权限、使用加密传输等,以确保共享环境既便利又安全。
1701 1
|
Ubuntu 开发工具
Ubuntu更换阿里云软件源
Ubuntu更换阿里云软件源
147866 0
|
开发者
app备案
app备案
5658 2
|
人工智能 JavaScript 程序员
GitHub原生AI代码生成工具Copilot,官方支持Visual Studio 2022
GitHub原生AI代码生成工具Copilot,官方支持Visual Studio 2022
1406 0

热门文章

最新文章