本来以为一天就能改完了,莫名越改越多,故单另叙述。
[success]前排提示:sdk里有份文档《sensor调试指南》可以根据里面的流程进行排查,编写代码。[/success]
首先还是在load3516文件中可以定义senor的相关寄存器,主要就三个用于定义时钟的。
0x004C PERI_CRG19 媒体CBB 频率配置寄存器1
0x0054 PERI_CRG21 媒体CBB 频率配置寄存器2
0x0040 PERI_CRG16 Sensor 时钟配置寄存器
这三个按照注释配置就好。
主要需要配置i2c或者spi通信方式,对于接线,i2c是双线spi是四线前两根线通用,所以主要是底层自己的协议配置。店家给的和274的进行了对比差距有点大故自己在这里下载了这个资源包含1080p30帧的源码据说可用,就先凑合着用。(这个代码是i2c通信的)
先来说一下文件结构吧
系统跑起来后所有需要的文件都在sdk/mpp_big-little下,其中component里是sensor的驱动,包括成像参数。include是调用的头文件。ko是硬件驱动,lib是相关动态文件,注意,编译好的sensor文件要放在这里。sample是测试程序。
前面那个load3516av200的文件是用来配置管脚的,没有加载驱动的代码。sdk中在sample/common中有加载senor的代码,所以需要进行相应修改。
makefile.param
ifeq ($(SNS), imx385_3M30_12BIT) SENSOR_LIBS += $(REL_LIB)/libsns_imx385.a SENSOR_TYPE = SONY_IMX385_MIPI_3M30_12BIT CFLAGS += -DSNS_IMX385_8M30_12BIT_SINGLE CFLAGS += -DHI_MIPI_ENABLE endif
sample_comm_isp.c
const ISP_SNS_OBJ_S *g_pstSnsObj[MAX_SENSOR_NUM] =
{
#elif defined (SNS_IMX385_8M30_12BIT_SINGLE)
&stSnsImx385Obj, HI_NULL
static HI_S32 GetIspPubAttrBySns(ISP_PUB_ATTR_S *pstPubAttr)
{
switch (SENSOR_TYPE)
{
case SONY_IMX385_MIPI_3M30_12BIT:
stPubAttr.enBayer = BAYER_RGGB;
stPubAttr.f32FrameRate = 30;
stPubAttr.stWndRect.s32X = 0;
stPubAttr.stWndRect.s32Y = 0;
stPubAttr.stWndRect.u32Width = 1920;
stPubAttr.stWndRect.u32Height = 1080;
stPubAttr.stSnsSize.u32Width = 1920;
stPubAttr.stSnsSize.u32Height = 1080;
break;
}
}
static ISP_SNS_TYPE_E GetSnsType(SAMPLE_VI_MODE_E enViMode)
{
ISP_SNS_TYPE_E enSnsType;
switch (enViMode)
{
case SONY_IMX385_MIPI_3M30_12BIT:
}libsns_imx385.so
}
sample_comm.h
typedef enum sample_vi_mode_e
{
SONY_IMX385_MIPI_3M30_12BIT,
}
大概就是这么几处,主要是相关变量名写清楚。一一对应上就好。
然后就可以编译相关文件了,直接make就好,然后就可以运行了。
然而!!!还是会提示错误,也不知道哪里有问题,排查代码又无从下手只能转头想别的方式。
提示错误是因为串行图像口通信失败,这时需要根据i2c的参数来进行细致排查,寻找故障。
这时发现sdk里面有一个PQ Tools工具,用来调试图像质量的,这个可以直接出图,于是考虑不用例程,用这个软件调试摄像头
分为上位机和下位机两部分,主要修改的是下位机部分。该部分主要是增加385部分的驱动以及相关配置文件。
[SensorConfig] file=configs/imx385/config_entry.ini
把libsns_imx385.so文件复制到/libs文件夹下
/config文件夹下新建imx385文件,然后根据其他文件进行修改
这里直接贴代码了
[sensor_common]
SensorNum =1 ;sensor num
EnSceneAuto =FALSE ;enable scene auto
SceneAutoMode =SCENEAUTO_SPECIAL_SCENE_NONE ;SCENEAUTO_SPECIAL_SCENE_NONE = 0,
;SCENEAUTO_SPECIAL_SCENE_IR,
;SCENEAUTO_SPECIAL_SCENE_HLC,
;SCENEAUTO_SPECIAL_SCENE_AUTO_FSWDR,
;SCENEAUTO_SPECIAL_SCENE_MANUAL_LONG_FRAME,
;SCENEAUTO_SPECIAL_SCENE_MANUAL_NORMAL_WDR,
;SCENEAUTO_SPECIAL_SCENE_TRAFFIC
VcNum0 = 2
VcNum1 = 1
VcNum2 = 4
VcNum3 = 8
;VI VC NUMBER VcNum0:Linear VcNum1:DES0 VcNum2:DES1 VcNum3:DES2
;Normal sensor 2 1 4 8 vc0 = 1,vc1 = 2,vc2 = 4,vc3 = 8
[sensor.0]
SensorType =stSnsImx385Obj ;sensor name
DllFile =libsns_imx385.so ;sensor lib path
SensorModeNum=1 ;sensor mode num
UseWdrMode = WDR_MODE_NONE ;WDR_MODE_NONE = 0
;WDR_MODE_BUILT_IN,
;WDR_MODE_2To1_LINE,
;WDR_MODE_2To1_FRAME,
;WDR_MODE_2To1_FRAME_FULL_RATE,
;WDR_MODE_3To1_LINE,
;WDR_MODE_3To1_FRAME,
;WDR_MODE_3To1_FRAME_FULL_RATE,
;WDR_MODE_4To1_LINE,
;WDR_MODE_4To1_FRAME,
;WDR_MODE_4To1_FRAME_FULL_RATE,
WdrMode0 =WDR_MODE_NONE
SceneAutoFile0 =./configs/scene_auto/sceneauto_274.ini
[sensor_mode.0.0]
devno =0 ;device number, select sensor0 and sensor 1
input_mode =INPUT_MODE_MIPI ;INPUT_MODE_MIPI = 0
;INPUT_MODE_SUBLVDS = 1
;INPUT_MODE_LVDS = 2
;INPUT_MODE_HISPI = 3
;INPUT_MODE_CMOS = 4
;INPUT_MODE_BT1120 = 5
;phy_clk_share,img_rect only for Hi3519V101
phy_clk_share =PHY_CLK_SHARE_PHY0 ;PHY_CLK_SHARE_NONE = 0
;PHY_CLK_SHARE_PHY0 = 1
;PHY_CLK_SHARE_BUTT = 2
img_rect_x = 0 ;oringnal sensor input image size x
img_rect_y = 0 ;oringnal sensor input image size y
img_rect_w = 1920 ;oringnal sensor input image size W
img_rect_h = 1080 ;oringnal sensor input image size H
raw_data_type = RAW_DATA_12BIT ;RAW_DATA_8BIT = 0
;RAW_DATA_10BIT = 1
;RAW_DATA_12BIT = 2
;RAW_DATA_14BIT = 3
;RAW_DATA_16BIT = 4
;----------only for mipi_dev---------
mipi_wdr_mode =HI_MIPI_WDR_MODE_NONE ;HI_MIPI_WDR_MODE_NONE =0
;HI_MIPI_WDR_MODE_VC = 1
;HI_MIPI_WDR_MODE_DT = 2
;HI_MIPI_WDR_MODE_DOL =3
mipi_lane_id = 0|1|2|3|-1|-1|-1|-1| ;lane_id: -1 - disable
;----------only for lvds_dev---------
img_size_w = -1 ;only for Hi3516CV300
img_size_h = -1 ;only for Hi3516CV300
wdr_mode = HI_WDR_MODE_NONE ;HI_WDR_MODE_NONE =0
;HI_WDR_MODE_2F = 1
;HI_WDR_MODE_3F = 2
;HI_WDR_MODE_4F =3
;HI_WDR_MODE_DOL_2F=4
;HI_WDR_MODE_DOL_3F=5
;HI_WDR_MODE_DOL_4F=6
sync_mode = LVDS_SYNC_MODE_SAV ;LVDS_SYNC_MODE_SOF = 0
;LVDS_SYNC_MODE_SAV = 1
lvds_vsync_type = LVDS_VSYNC_NORMAL ;LVDS_VSYNC_NORMAL = 0
;LVDS_VSYNC_SHARE = 1
;LVDS_VSYNC_HCONNECT = 2
hblank1 = 0 ;hconnect vsync blanking len, valid when the sync_type is LVDS_VSYNC_HCONNECT
hblank2 = 0
lvds_fid_type = LVDS_FID_NONE ;LVDS_FID_NONE = 0
;LVDS_FID_IN_SAV = 1
;LVDS_FID_IN_DATA = 2
output_fil = TRUE
data_endian = LVDS_ENDIAN_BIG ;LVDS_ENDIAN_LITTLE = 0
;LVDS_ENDIAN_BIG = 1
sync_code_endian =LVDS_ENDIAN_BIG ;LVDS_ENDIAN_LITTLE = 0
;LVDS_ENDIAN_BIG = 1
lane_id = 0| 1| 2| 3|-1|-1|-1|-1|-1|-1|-1|-1| ;lane_id: -1 - disable
;lane_id = -1| -1| -1| -1|-1|-1|-1|-1|-1|-1|-1|-1| ;lane_id: -1 - disable
sync_code_0 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|
sync_code_1 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|
sync_code_2 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|
sync_code_3 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|
sync_code_4 = 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
sync_code_5 = 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
sync_code_6 = 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
sync_code_7 = 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
sync_code_8 = 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
sync_code_9 = 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
sync_code_10 = 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
sync_code_11 = 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[sensor_mode.0.1]
devno =0 ;device number, select sensor0 and sensor 1
input_mode =INPUT_MODE_MIPI ;INPUT_MODE_MIPI = 0
;INPUT_MODE_SUBLVDS = 1
;INPUT_MODE_LVDS = 2
;INPUT_MODE_HISPI = 3
;INPUT_MODE_CMOS = 4
;INPUT_MODE_BT1120 = 5
;phy_clk_share,img_rect only for Hi3519V101
phy_clk_share =PHY_CLK_SHARE_NONE ;PHY_CLK_SHARE_NONE = 0
;PHY_CLK_SHARE_PHY0 = 1
;PHY_CLK_SHARE_BUTT = 2
img_rect_x = 0 ;oringnal sensor input image size x
img_rect_y = 0 ;oringnal sensor input image size y
img_rect_w = 1920 ;oringnal sensor input image size W
img_rect_h = 1080 ;oringnal sensor input image size H
raw_data_type = RAW_DATA_12BIT ;RAW_DATA_8BIT = 0
;RAW_DATA_10BIT = 1
;RAW_DATA_12BIT = 2
;RAW_DATA_14BIT = 3
;RAW_DATA_16BIT = 4
;----------only for mipi_dev---------
mipi_wdr_mode =-HI_MIPI_WDR_MODE_NONE ;HI_MIPI_WDR_MODE_NONE =0
;HI_MIPI_WDR_MODE_VC = 1
;HI_MIPI_WDR_MODE_DT = 2
;HI_MIPI_WDR_MODE_DOL =3
mipi_lane_id = 0|1|2|3|-1|-1|-1|-1| ;lane_id: -1 - disable
;----------only for lvds_dev---------
img_size_w = -1 ;only for Hi3516CV300
img_size_h = -1 ;only for Hi3516CV300
wdr_mode = HI_WDR_MODE_DOL_2F ;HI_WDR_MODE_NONE =0
;HI_WDR_MODE_2F = 1
;HI_WDR_MODE_3F = 2
;HI_WDR_MODE_4F =3
;HI_WDR_MODE_DOL_2F=4
;HI_WDR_MODE_DOL_3F=5
;HI_WDR_MODE_DOL_4F=6
sync_mode = LVDS_SYNC_MODE_SAV ;LVDS_SYNC_MODE_SOF = 0
;LVDS_SYNC_MODE_SAV = 1
lvds_vsync_type = LVDS_VSYNC_NORMAL ;LVDS_VSYNC_NORMAL = 0
;LVDS_VSYNC_SHARE = 1
;LVDS_VSYNC_HCONNECT = 2
hblank1 = 0 ;hconnect vsync blanking len, valid when the sync_type is LVDS_VSYNC_HCONNECT
hblank2 = 0
lvds_fid_type = LVDS_FID_IN_SAV ;LVDS_FID_NONE = 0
;LVDS_FID_IN_SAV = 1
;LVDS_FID_IN_DATA = 2
output_fil = TRUE
data_endian = LVDS_ENDIAN_BIG ;LVDS_ENDIAN_LITTLE = 0
;LVDS_ENDIAN_BIG = 1
sync_code_endian =LVDS_ENDIAN_BIG ;LVDS_ENDIAN_LITTLE = 0
;LVDS_ENDIAN_BIG = 1
lane_id = -1|-1|-1|3|4|5|6|7|8|9|-1|-1| ;lane_id: -1 - disable
sync_code_0 = 0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|
sync_code_1 = 0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|
sync_code_2 = 0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|
sync_code_3 = 0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|
sync_code_4 = 0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|
sync_code_5 = 0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|
sync_code_6 = 0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|
sync_code_7 = 0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|
sync_code_8 = 0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|
sync_code_9 = 0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|0x2ac|0x2d8|0x201|0x275|0x2ac|0x2d8|0x202|0x276|
sync_code_10 = 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
sync_code_11 = 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[isp_image.0]
Isp_x =0
Isp_y =0
Isp_w =1920
Isp_h =1080
SensorWidth =1920
SensorHeight =1080
Isp_FrameRate=30
Isp_Bayer =BAYER_RGGB ;BAYER_RGGB=0,
;BAYER_GRBG=1,
;BAYER_GBRG=2,
;BAYER_BGGR=3,
[defog.0]
;----------defog attribute--------
EnDefog =FALSE ;enable sensor defog
Strength =94
[antiflicker.0]
;----------anti-flicker attribute--------
EnAntiflicker =FALSE ;enable anti-flicker
AntiflickerMode =ANTIFLICKER_MODE_50HZ ;ANTIFLICKER_MODE_50HZ =0,
;ANTIFLICKER_MODE_60HZ
[video_common]
ViDevNum =1 ;support vi count
VpssGrpNum =1
VencNum =2 ;support venc count
VoChnNum =1 ;vo chn count
PoolNum =2 ;max count of pools
EnStitch =FALSE
SupportOSD =FALSE
SupportFishEye =FALSE
FishEyeCnt =0 ;support FishEye count(only for EnFisheye=TRUE)
CNFonts = ./font/hzk16
ENFonts = ./font/asc16
[vb_conf]
;----- only for 4k ----------
BlkSize0 =16657920 ;(3840+16)*2160*2
BlkCnt0 =15
;----- only for 1080p ----------
BlkSize1 =3110400 ;1920*1080*3/2
BlkCnt1 =10
[vi_dev.0]
ViDev =0
IntfMode =VI_MODE_MIPI ;VI_MODE_BT656 = 0
;VI_MODE_BT601,
;VI_MODE_DIGITAL_CAMERA
;VI_MODE_BT1120_STANDARD
;VI_MODE_BT1120_INTERLEAVED
;VI_MODE_MIPI,
;VI_MODE_LVDS,
;VI_MODE_HISPI,
WorkMode =VI_WORK_MODE_1Multiplex ;VI_WORK_MODE_1Multiplex = 0
;VI_WORK_MODE_2Multiplex
;VI_WORK_MODE_4Multiplex
CompMask0 =0xfff00000
CompMask1 =0x0
ScanMode =VI_SCAN_PROGRESSIVE ;VI_SCAN_INTERLACED = 0
;VI_SCAN_PROGRESSIVE,
DataSeq =VI_INPUT_DATA_YUYV ;data sequence (ONLY for YUV format)
;----2th component U/V sequence in bt1120
; VI_INPUT_DATA_VUVU = 0,
; VI_INPUT_DATA_UVUV,
;----input sequence for yuv
; VI_INPUT_DATA_UYVY = 0,
; VI_INPUT_DATA_VYUY,
; VI_INPUT_DATA_YUYV,
; VI_INPUT_DATA_YVYU
;----- only for BT601/CAMERA ----------
Vsync =VI_VSYNC_PULSE ;vertical synchronization signal
;VI_VSYNC_FIELD = 0,
;VI_VSYNC_PULSE,
VsyncNeg=VI_VSYNC_NEG_HIGH ;Polarity of the vertical synchronization signal
;VI_VSYNC_NEG_HIGH = 0,
;VI_VSYNC_NEG_LOW
Hsync =VI_HSYNC_VALID_SINGNAL ;Attribute of the horizontal synchronization signal
;VI_HSYNC_VALID_SINGNAL = 0,
;VI_HSYNC_PULSE,
HsyncNeg =VI_HSYNC_NEG_HIGH ;Polarity of the horizontal synchronization signal
;VI_HSYNC_NEG_HIGH = 0,
;VI_HSYNC_NEG_LOW
VsyncValid =VI_VSYNC_VALID_SINGAL ;Attribute of the valid vertical synchronization signal
;VI_VSYNC_NORM_PULSE = 0,
;VI_VSYNC_VALID_SINGAL,
VsyncValidNeg =VI_VSYNC_VALID_NEG_HIGH ;Polarity of the valid vertical synchronization signal
;VI_VSYNC_VALID_NEG_HIGH = 0,
;VI_VSYNC_VALID_NEG_LOW
Timingblank_HsyncHfb =0 ;Horizontal front blanking width
Timingblank_HsyncAct =1920 ;Horizontal effetive width
Timingblank_HsyncHbb =0 ;Horizontal back blanking width
Timingblank_VsyncVfb =0 ;Vertical front blanking height
Timingblank_VsyncVact =1080 ;Vertical effetive width
Timingblank_VsyncVbb =0 ;Vertical back blanking height
Timingblank_VsyncVbfb =0 ;Even-field vertical front blanking height(interlace, invalid progressive)
Timingblank_VsyncVbact=0 ;Even-field vertical effetive width(interlace, invalid progressive)
Timingblank_VsyncVbbb =0 ;Even-field vertical back blanking height(interlace, invalid progressive)
;----- only for bt656 ----------
FixCode =0 ;BT656_FIXCODE_1 = 0,
;BT656_FIXCODE_0
FieldPolar=0 ;BT656_FIELD_POLAR_STD = 0
;BT656_FIELD_POLAR_NSTD
DataPath =VI_PATH_ISP ;ISP enable or bypass
;VI_PATH_BYPASS = 0,/* ISP bypass */
;VI_PATH_ISP = 1,/* ISP enable */
;VI_PATH_RAW = 2,/* Capture raw data, for debug */
InputDataType=VI_DATA_TYPE_RGB ;VI_DATA_TYPE_YUV = 0,
;VI_DATA_TYPE_RGB = 1,
DataRev =FALSE ;Data reverse. FALSE = 0; TRUE = 1
DevRect_x=0 ;
DevRect_y=0 ;
DevRect_w=1920 ;
DevRect_h=1080 ;
EnWdrCompress=FALSE;VI WDR compress switch
SupportBas=FALSE;
BasSize_w=1920 ;
BasSize_h=1080 ;
BasCompress=FALSE
HRephaseMode=VI_REPHASE_MODE_NONE ;VI_REPHASE_MODE_NONE = 0,
;VI_REPHASE_MODE_SKIP_1_2 = 1, /*skip 1/2*/
;VI_REPHASE_MODE_SKIP_1_3 = 2, /* skip 1/3 */
;VI_REPHASE_MODE_BINNING_1_2= 3, /* binning 1/2*/
;VI_REPHASE_MODE_BINNING_1_3= 4, /* binning 1/3*/
VRephaseMode=VI_REPHASE_MODE_NONE ;VI_REPHASE_MODE_NONE = 0,
;VI_REPHASE_MODE_SKIP_1_2 = 1, /*skip 1/2*/
;VI_REPHASE_MODE_SKIP_1_3 = 2, /* skip 1/3 */
;VI_REPHASE_MODE_BINNING_1_2= 3, /* binning 1/2*/
;VI_REPHASE_MODE_BINNING_1_3= 4, /* binning 1/3*/
;GenTiming only for Hi3519V101
GenTimingEn = FALSE;
GenTimingFps = 20;
[vi_chn.0]
ViChn =0
;enViExtChn =FALSE
;BindChn =-1 ;Source physical channel to be bound (ONLY for enViExtChn=TRUE)
;----- only for phy chn ONLY for enViExtChn=FALSE)----------
CapRectX =0 ;
CapRectY =0
CapRectWidth =1920
CapRectHeight=1080
CapSel =VI_CAPSEL_BOTH ;Frame/field select. ONLY used in interlaced mode
;VI_CAPSEL_TOP = 0, /* top field */
;VI_CAPSEL_BOTTOM, /* bottom field */
;VI_CAPSEL_BOTH, /* top and bottom field */
Mirror =FALSE ;Whether to mirror
Flip =FALSE ;Whether to flip
enDIS =FALSE ;
DIS_X =64 ;
DIS_Y =64 ;
DIS_W =256 ;
DIS_H =256 ;
DestSizeWidth =1920
DestSizeHeight=1080
PixFormat =23;PIXEL_FORMAT_YUV_SEMIPLANAR_422 = 22
;PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 23 ...etc
CompressMode =COMPRESS_MODE_NONE ;COMPRESS_MODE_NONE = 0
;COMPRESS_MODE_SEG =1 ...etc
SrcFrameRate=30 ;Source frame rate. -1: not controll
DstFrameRate=30 ;Target frame rate. -1: not controll
;----------LDC attribute--------
EnLDC =FALSE
LDCType =LDC_VIEW_TYPE_ALL ;LDC_VIEW_TYPE_ALL = 0,
;LDC_VIEW_TYPE_CROP,
LDCRatio =0
;----------vi dis only for Hi3519V101-----------
DIS_Enable=FALSE
DIS_MovingSubjectLevel=2
DIS_NoMovementLevel=1
DIS_TimeLag=0
DIS_AngleType=VI_DIS_ANGLE_TYPE_HORIZONTAL ;VI_DIS_ANGLE_TYPE_HORIZONTAL
;VI_DIS_ANGLE_TYPE_VERTICAL
;VI_DIS_ANGLE_TYPE_DIAGONAL
DIS_Vangle=934
DIS_bStillCrop=FALSE
DIS_Accuracy=VI_DIS_ACCURACY_HIGH ;VI_DIS_ACCURACY_HIGH
;VI_DIS_ACCURACY_MIDDLE
;VI_DIS_ACCURACY_LOW
DIS_CameraMode=VI_DIS_CAMERA_MODE_IPC ;VI_DIS_CAMERA_MODE_NORMAL
;VI_DIS_CAMERA_MODE_IPC
DIS_MotionType=VI_DIS_MOTION_6DOF_SOFT ;VI_DIS_MOTION_4DOF_SOFT
;VI_DIS_MOTION_6DOF_SOFT
;VI_DIS_MOTION_6DOF_HYBRID
;VI_DIS_MOTION_8DOF_HARD
DIS_FixLevel=4
DIS_RollingShutterCoef=80
DIS_BufNum=6
DIS_CropRatio=80
DIS_FrameRate=30
DIS_bScale=TRUE
DIS_DelayFrmNum=0
DIS_RetCenterStrength=7
DIS_GyroWeight=0
;----------vi spread only for Hi3519V101-----------
SpreadEn = FALSE
SpreadCoef = 8
SpreadWidth = 1920
SpreadHeight = 1080
;----------stitch only for Hi3519V101-----------
[vi_stitch.0]
Ldc_Enable=FALSE ;
Ldc_Ratio =0
Ldc_MinRatio =0
Ldc_ViewType =LDC_VIEW_TYPE_ALL ;LDC_VIEW_TYPE_ALL = 0, /* View scale all but x and y independtly, this will keep both x and y axis ,but corner maybe lost*/
;LDC_VIEW_TYPE_CROP = 1, /* Not use view scale, this will lost some side and corner */
Ldc_CenterXOffset =0
Ldc_CenterYOffset =0
PMFEnable = FALSE
PMFCoef=524288|0|0|0|524288|0|0|0|524288|
Dest_Width=1920
Dest_Height=1080
[vpss_group.0]
VpssGrp =0
VpssChnNum =2
Vpss_NrEn =TRUE
NrType =VPSS_NR_TYPE_VIDEO;
;VPSS_NR_TYPE_VIDEO
;VPSS_NR_TYPE_SNAP
NrRefFrameNum=1;
NrRefSource = VPSS_NR_REF_FROM_RFR;
;VPSS_NR_REF_FROM_RFR = 0,
;VPSS_NR_REF_FROM_CHN0 = 1,
;VPSS_NR_REF_FROM_SRC = 2,
NrOutputMode = VPSS_NR_OUTPUT_NORMAL;
;VPSS_NR_OUTPUT_NORMAL = 0,
;VPSS_NR_OUTPUT_DELAY = 1,
MaxW =1920
MaxH =1080
SharpenEn=FALSE ;only for Hi3516CV300
;----------stitch only for Hi3519V101-----------
StitchBlendEn=FALSE
StitchBlend_Mode = STITCH_MODE_PERSPECTIVE;
;STITCH_MODE_PERSPECTIVE = 0,
;STITCH_MODE_CYLINDRICAL = 1,
StitchBlend_OutWidth=3648
StitchBlend_OutHeight=1080
StitchBlend_OverlapPoint=1728|0|1728|0|1728|1079|1728|1079
Crop_enable =FALSE ;
Coordinate =VPSS_CROP_ABS_COOR ;VPSS_CROP_RATIO_COOR = 0, /*Ratio coordinate*/
;VPSS_CROP_ABS_COOR = 1 /*Absolute coordinate*/
Crop_X =0 ;
Crop_Y =0 ;
Crop_W =1920 ;
Crop_H =1080 ;
[vpss_chn.0.0]
VpssChn =0
enVpssExtChn =FALSE
VpssPhyChn =-1 ;Source physical channel to be bound (ONLY for enVpssExtChn=TRUE)
Vpss_W =1920
Vpss_H =1080
CompressMode=COMPRESS_MODE_NONE ;COMPRESS_MODE_NONE = 0
;COMPRESS_MODE_SEG =1 ...etc
;----------vpss spread only for Hi3519V101-----------
SpreadEn = FALSE
SpreadCoef = 8
SpreadWidth = 1920
SpreadHeight = 1080
[vpss_chn.0.1]
VpssChn =1
enVpssExtChn =FALSE
VpssPhyChn =-1 ;Source physical channel to be bound (ONLY for enVpssExtChn=TRUE)
Vpss_W =1920
Vpss_H =1080
CompressMode=COMPRESS_MODE_NONE ;COMPRESS_MODE_NONE = 0
;COMPRESS_MODE_SEG =1 ...etc
;----------vpss spread only for Hi3519V101-----------
SpreadEn = FALSE
SpreadCoef = 8
SpreadWidth = 1920
SpreadHeight = 1080
[venc.0]
VencChn =0
EnVenc =TRUE
VencFormat =VENC_FORMAT_H265 ;VENC_FORMAT_H261 = 0, /*H261 */
;VENC_FORMAT_H263 = 1, /*H263 */
;VENC_FORMAT_MPEG2 = 2, /*MPEG2 */
;VENC_FORMAT_MPEG4 = 3, /*MPEG4 */
;VENC_FORMAT_H264 = 4, /*H264 */
;VENC_FORMAT_MJPEG = 5, /*MOTION_JPEG*/
;VENC_FORMAT_YUV = 6, /*YVU Nonsupport*/
;VENC_FORMAT_JPEG = 7, /*JPEG*/
;VENC_FORMAT_H265 = 8, /*H265 */
PicWidth =1920
PicHeight =1080
Profile =0
RcMode =VENC_RC_MODE_CBR ;VENC_RC_MODE_CBR = 0,
;VENC_RC_MODE_VBR,
;VENC_RC_MODE_AVBR,
;VENC_RC_MODE_FIXQP,
Gop =60
StatTime =40
TargetFrmRate=30
BitRate =9216
;----- only for VENC_RC_MODE_VBR ----------
QualityLevel=VBR_QUALITYLEVEL_NORMAL ;VBR_QUALITYLEVEL_GOOD=0;
;VBR_QUALITYLEVEL_NORMAL=1;
;VBR_QUALITYLEVEL_BAD=2;
GoodMaxQp=38
GoodMinQp=20
NormalMaxQp=51
NormalMinQp=30
BadMaxQp=51
BadMinQp=40
;MinIQp=MinQp+1
;----- only for VENC_RC_MODE_FIXQP ----------
IQp=28
PQp=28
BQp=28
;---- for VENC_GOP_ATTR_S ---------
GopMode =VENC_GOPMODE_SMARTP ;VENC_GOPMODE_NORMALP = 0,
;VENC_GOPMODE_DUALP = 1,
;VENC_GOPMODE_SMARTP = 2,
;VENC_GOPMODE_BIPREDB = 3,only for Hi3519V101
;VENC_GOPMODE_LOWDELAYB = 4,not support
;----- only for VENC_GOPMODE_NORMALP ----------
NormalP_IPQpDelta = 2
;----- only for VENC_GOPMODE_DUALP ----------
DualP_SPInterval = 4
DualP_SPQpDelta = 2
DualP_IPQpDelta = 2
;----- only for VENC_GOPMODE_SMARTP ----------
SmartP_BgInterval = 1200
SmartP_BgQpDelta = 7
SmartP_ViQpDelta = 2
;----- only for VENC_GOPMODE_BIPREDB/VENC_GOPMODE_LOWDELAYB ----------
BipredB_BFrmNum = 1
BipredB_BQpDelta = 2
BipredB_IpQpDelta = 2
[venc.1]
VencChn =1
EnVenc =TRUE
VencFormat =VENC_FORMAT_H264 ;VENC_FORMAT_H261 = 0, /*H261 */
;VENC_FORMAT_H263 = 1, /*H263 */
;VENC_FORMAT_MPEG2 = 2, /*MPEG2 */
;VENC_FORMAT_MPEG4 = 3, /*MPEG4 */
;VENC_FORMAT_H264 = 4, /*H264 */
;VENC_FORMAT_MJPEG = 5, /*MOTION_JPEG*/
;VENC_FORMAT_YUV = 6, /*YVU Nonsupport*/
;VENC_FORMAT_JPEG = 7, /*JPEG*/
;VENC_FORMAT_H265 = 8, /*H265 */
PicWidth =1920
PicHeight =1080
Profile =0
RcMode =VENC_RC_MODE_CBR ;VENC_RC_MODE_CBR = 0,
;VENC_RC_MODE_VBR,
;VENC_RC_MODE_AVBR,
;VENC_RC_MODE_FIXQP,
Gop =60
StatTime =40
TargetFrmRate=30
BitRate=4096
;----- only for VENC_RC_MODE_VBR ----------
QualityLevel=VBR_QUALITYLEVEL_NORMAL ;VBR_QUALITYLEVEL_GOOD=0;
;VBR_QUALITYLEVEL_NORMAL=1;
;VBR_QUALITYLEVEL_BAD=2;
GoodMaxQp=38
GoodMinQp=20
NormalMaxQp=51
NormalMinQp=30
BadMaxQp=51
BadMinQp=40
;MinIQp=MinQp+1
;----- only for VENC_RC_MODE_FIXQP ----------
IQp=28
PQp=28
BQp=28
;---- for VENC_GOP_ATTR_S ---------
GopMode =VENC_GOPMODE_SMARTP ;VENC_GOPMODE_NORMALP = 0,
;VENC_GOPMODE_DUALP = 1,
;VENC_GOPMODE_SMARTP = 2,
;VENC_GOPMODE_BIPREDB = 3,only for Hi3519V101
;VENC_GOPMODE_LOWDELAYB = 4,not support
;----- only for VENC_GOPMODE_NORMALP ----------
NormalP_IPQpDelta = 2
;----- only for VENC_GOPMODE_DUALP ----------
DualP_SPInterval = 4
DualP_SPQpDelta = 2
DualP_IPQpDelta = 2
;----- only for VENC_GOPMODE_SMARTP ----------
SmartP_BgInterval = 1200
SmartP_BgQpDelta = 7
SmartP_ViQpDelta = 2
;----- only for VENC_GOPMODE_BIPREDB/VENC_GOPMODE_LOWDELAYB ----------
BipredB_BFrmNum = 1
BipredB_BQpDelta = 2
BipredB_IpQpDelta = 2
[osd.0]
;----- only for StringOsd ----------
EnStringOsd =FALSE
StringOsdData =hisilicon
EnAbsQp =FALSE
Qp =0
StringOsdX =0
StringOsdY =0
;----- only for InfoOsd ----------
EnInfoOsd =FALSE
InfoOsdX =0
InfoOsdY =128
EnInvertColor=FALSE ;OSD color inversion enable
BgColor =17969
FgColor =32767
BgAlpha =0
FgAlpha =64
[osd.1]
;----- only for StringOsd ----------
EnStringOsd =FALSE
StringOsdData =hisilicon
EnAbsQp =FALSE
Qp =0
StringOsdX =0
StringOsdY =0
;----- only for InfoOsd ----------
EnInfoOsd =FALSE
InfoOsdX =0
InfoOsdY =48
EnInvertColor=FALSE ;OSD color inversion enable
BgColor =17969
FgColor =32767
BgAlpha =0
FgAlpha =64
[vo.0]
EnVo =FALSE
VoDev =0
VoChn =0
width =1920
height =1080
framerate =30
bDoubleFrame =0
IntfType =VO_INTF_CVBS ;sample:IntfType = VO_INTF_BT1120
VO_INTF_CVBS,
VO_INTF_YPBPR,
VO_INTF_VGA,
VO_INTF_BT656,
VO_INTF_BT1120,
VO_INTF_HDMI,
VO_INTF_LCD,
VO_INTF_BT656_H,
VO_INTF_BT656_L,
VO_INTF_LCD_6BIT,
VO_INTF_LCD_8BIT,
VO_INTF_LCD_16BIT,
VO_INTF_LCD_24BIT,
IntfSync =VO_OUTPUT_1080P30
VO_OUTPUT_PAL = 0,
VO_OUTPUT_NTSC,
VO_OUTPUT_1080P24,
VO_OUTPUT_1080P25,
VO_OUTPUT_1080P30,
VO_OUTPUT_720P50,
VO_OUTPUT_720P60,
VO_OUTPUT_1080I50,
VO_OUTPUT_1080I60,
VO_OUTPUT_1080P50,
VO_OUTPUT_1080P60, ...etc
PixelFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420
PIXEL_FORMAT_RGB_1BPP = 0,
PIXEL_FORMAT_RGB_2BPP,
PIXEL_FORMAT_RGB_4BPP,
PIXEL_FORMAT_RGB_8BPP,
PIXEL_FORMAT_RGB_444,
PIXEL_FORMAT_RGB_4444,
PIXEL_FORMAT_RGB_555,
PIXEL_FORMAT_RGB_565,
PIXEL_FORMAT_RGB_1555,
PIXEL_FORMAT_RGB_888,
PIXEL_FORMAT_RGB_8888,
PIXEL_FORMAT_RGB_PLANAR_888,
PIXEL_FORMAT_RGB_BAYER_8BPP,
PIXEL_FORMAT_RGB_BAYER_10BPP,
PIXEL_FORMAT_RGB_BAYER_12BPP,
PIXEL_FORMAT_RGB_BAYER_14BPP,
PIXEL_FORMAT_RGB_BAYER,
PIXEL_FORMAT_YUV_A422,
PIXEL_FORMAT_YUV_A444,
PIXEL_FORMAT_YUV_PLANAR_422,
PIXEL_FORMAT_YUV_PLANAR_420,
PIXEL_FORMAT_YUV_PLANAR_444,
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
PIXEL_FORMAT_YUV_SEMIPLANAR_420,
PIXEL_FORMAT_YUV_SEMIPLANAR_444,
PIXEL_FORMAT_UYVY_PACKAGE_422,
PIXEL_FORMAT_YUYV_PACKAGE_422,
PIXEL_FORMAT_VYUY_PACKAGE_422,
PIXEL_FORMAT_YCbCr_PLANAR,
PIXEL_FORMAT_YUV_400,
ViDev =0
ViChn =0
[Bind_commom]
VpssBindViNum = 1
VencBindVpssNum = 2
[VpssbindVi.0]
VpssGrp =0
ViDev =0
ViChn =0
[VencbindVpss.0]
VencGrp =0
VencChn =0
VpssGrp =0
VpssChn =0
[VencbindVpss.1]
VencGrp =1
VencChn =1
VpssGrp =0
VpssChn =1
[SnapbindVpss]
VencSnapGrp=9
VencSnapChn=9
VpssSnapGrp=0
VpssSnapChn=0
[VobindVpss]
VoDev =0
VoChn =0
VpssGrp =0
VpssChn =0
bUseVpss=TRUE ;TRUE:vo bind to vpss,
;FALSE:vo bind to vi
大部分直接复制的其他senor的,部分根据实际修改,该摄像头最大支持1080p,且目前只支持30/25fps进行响应定义,然后把.so文件放置在sbin文件夹下。
在sdk开发包中的Hi3519V101R001C01SPC040\01.software\board./HiIspTool.shdocument_cn有个HiISP 开发参考.pdf文档,里面描述了错误码,可以根据这个进行错误追踪。
然后下位机启动./HiIspTool.sh文件,该文件有一个参数
如果加载驱动没有报错,最后成功输出"initial_ok"做到这里只是把i2c调通了而已,i2c只是进行寄存器配置部分,sensor与海思芯片通信还是需要并行口的,并行口的配置不在sensor驱动部分,而是在例程以及pqtools部分分别配置,这部分需要配置sync code(老师建议先调mipi模式,这个简单,那lvds先鸽了。另起一段,其实可能难度差不多,大同小异)
[success]pqtools与sample是两部分,连驱动文件都在不同的文件夹里,这里需要注意,不要搞混了,配置文件要分别配置[/success]
这里简单介绍一下相关名词:
MIPI
MIPI 的全称是Mobile Industry Processor Interface(移动行业处理器接口),本文描述
的MIPI 接口特指物理层使用D-PHY 传输规范,协议层使用CSI-2 的通信接口。
LVDS
LVDS 的全称是Low Voltage differential Signaling(低压差分信号),通过同步码区分
消隐区和有效数据。
Lane
用于连接发送端和接收端的一对高速差分线,即可以是时钟Lane,也可以是数据
Lane。
Link
发送端和接收端之间的时钟Lane 和至少一个数据Lane 组成一个Link。
同步码
MIPI 接口使用CSI-2 里面的短包进行同步,LVDS 使用同步码区分有效数据和消
隐区。LVDS 有两种同步方式
相对而言MIPI更简单一些,不用设置同步码了。
mipi模式需要修改寄存器配置部分,通过datasheet找到了这部分

控制台以及流输出都打开需要-a 后面加上摄像头模块 imx385即可启动,注意会读取配置文件,注意输出根据错误提示寻找修改处,我这里控制台读取完成后会输出

然而目前流输出还没配置好。。。此时可以根据
cat /proc/umap/isp
cat /proc/umap/vi
cat /proc/umap/hi_mipi
来判断配置结果如何也可以使用官方给出的读取工具ssp_read/i2c_read来读取寄存器的值,这里要注意和datasheet进行结合。
例如:

硬件接在spi接口上如图所示,该部分寄存器地址位于ID:02H部分,所以采用spi读取时的
Usage: ssp_read [num_reg] [dev_width] [reg_width] [data_width] [reg_order] [data_order] . ssp_read 0x0 0x0 0x2 0x5 1 1 1 1 usage: i2c_read i2c_read 0x0 0x34 0x3005 0x3055 2 1
修改成mipi需要配置

3044h以及3054h
修改成mipi模式后,还需要根据所选择的连线数量(2lane/4 lane)来具体配置寄存器。主要见下图。

还有其他的寄存器需要配置,根据模板细细改完。
搞定后就进行编译,切记,编译了sensor驱动后还要编译sample例程。调试阶段多做printf输出,并且每次版本做点不一样的输出,保证能一眼看出来是编译的新版本。我是使用sample/venc例程 # ./sample_venc 11 如果通信顺利就能在当前文件夹下生成图像了。


Comments NOTHING