tag 标签: SD3403

相关博文
  • 热度 7
    2023-5-28 16:34
    799 次阅读|
    0 个评论
    SS928V100(SD3403)处理器之红外成像调试
    一、视频接入 参数说明:视频输入接口 支持 8-Lane image sensor 串行输入,支持 MIPI/LVDS/Sub-LVDS/HiSPi 多种接口 支持 2x4-Lane 或 4x2-Lane 等多种组合,最高支持 4 路 sensor 串行输入 最大分辨率 8192 x 8192 支持 8/10/12/14 Bit RGB Bayer DC 时序视频输入,时钟频率最高 150MHz 支持 BT.601 、 BT.656 、 BT.1120 视频输入接口 支持主流 CMOS 电平热成像传感器 1.1 数字摄像头( DC )接口时序 水平时序 VICAP 接数字摄像头时, VI_HSYNC_VD 表示数据有效信号,数据有效信号极性可 配,水平时序所示。 1.2 垂直时序 VICAP 支持两种垂直时序脉冲方式和行有效方式,如下图所示。垂直同步极性可配 数字摄像头垂直时序脉冲方式 数字摄像头垂直时序行有效方式 对于 VICAP 内部处理来说,这两种时序相同, VICAP 内部检测到一个上升沿或下降 沿,这认为是一帧的开始,然后检测数据有效信号,来判断当前数据是否有效。 二、复用寄存器 管脚复用 查看手册 mipi dev/vi dev/vi chn/vi pipe/ 所支持的编号; mipi 配置 , 设置接入模式为 cmos;(dc 接口不需要 lain id) 设置 vi 离线还是在线模式 ; 设置 vi 属性 , 使能 vi 设备 ; vi 绑定 pipe; 设置 pipe 属性 , 创建并开始 pipe; 设置通道属性 , 使能通道 ; 2.1 详细说明 参考 SS928V100 VI 输入场景详细说明 .xlsx 中 DC 接入需要复用的寄存器 2.1.1 复用寄器 static void vi_DC_mode_mux(void) { void *iocfg2_base = sys_config_get_reg_iocfg2(); sys_writel(iocfg2_base + 0x0158, 0x0206); /* VI_CLK */ sys_writel(iocfg2_base + 0x0168, 0x0005); /* VI_VS */ sys_writel(iocfg2_base + 0x0170, 0x0005); /* VI_HS */ sys_writel(iocfg2_base + 0x016C, 0x0006); /* VI_DATA0 */ sys_writel(iocfg2_base + 0x0178, 0x0006); /* VI_DATA1 */ sys_writel(iocfg2_base + 0x017C, 0x0006); /* VI_DATA2 */ sys_writel(iocfg2_base + 0x0174, 0x0006); /* VI_DATA3 */ sys_writel(iocfg2_base + 0x0160, 0x0206); /* VI_DATA4 */ sys_writel(iocfg2_base + 0x015C, 0x0206); /* VI_DATA5 */ sys_writel(iocfg2_base + 0x0164, 0x0206); /* VI_DATA6 */ sys_writel(iocfg2_base + 0x0154, 0x0206); /* VI_DATA7 */ sys_writel(iocfg2_base + 0x0194, 0x0006); /* VI_DATA8 */ sys_writel(iocfg2_base + 0x0190, 0x0006); /* VI_DATA9 */ sys_writel(iocfg2_base + 0x0184, 0x0006); /* VI_DATA10 */ sys_writel(iocfg2_base + 0x0180, 0x0006); /* VI_DATA11 */ sys_writel(iocfg2_base + 0x0188, 0x0006); /* VI_DATA12 */ sys_writel(iocfg2_base + 0x018C, 0x0006); /* VI_DATA13 */ } 2.2.2 选择类型 static void vi_pin_mux(int vi_intf_type) { switch (vi_intf_type) { case VI_MIPI_RX_MODE: mipi_rx_pin_mux(MIPI_RX_0); mipi_rx_pin_mux(MIPI_RX_1); break; case VI_CMOS_BT1120_MODE: mipi_rx_pin_mux(MIPI_RX_0); vi_bt1120_mode_mux(); break; case VI_THERMO_MODE: mipi_rx_pin_mux(MIPI_RX_0); thermo_sensor_pin_mux(); break; case VI_THERMO_T3_MODE: mipi_rx_pin_mux(MIPI_RX_0); thermo_t3_pin_mux(); break; case VI_MODE_1_DC: mipi_rx_pin_mux(MIPI_RX_0); vi_DVP_mode_mux(); sys_config_print("========== DVP ==========\n"); break; default: break; } } 2.2.3 选择 COMS static int is_coms(const char *name, unsigned int name_len) { unsigned int len; if (name_len == 0) { sys_config_print("name len is 0!\n"); return 0; } len = SENSOR_NAME_LEN; if ((strncmp("bt1120", name, len) == 0) || (strncmp("bt656", name, len) == 0) || (strncmp("bt601", name, len) == 0) || (strncmp("DC", name, len) == 0)) { return 1; } else { return 0; } } 三、加载驱动 四、修改 mpp 代码 根据 MPP 媒体处理软件 V5.0 开发参考 .pdf 中所说的绑定关系确定 DC 的 videv 、 MIPI 选择 3 4.1comm_vi 配置 static ot_vi_dev_attr g_DC_dev_attr = { .intf_mode = OT_VI_INTF_MODE_DC, /* Invalid argument */ .work_mode = OT_VI_WORK_MODE_MULTIPLEX_1, // 1 路复合工作模式 /* mask component */ .component_mask = {0xFF0000, 0x0}, .scan_mode = OT_VI_SCAN_PROGRESSIVE, // VI 输入为逐行图像 OT_VI_SCAN_INTERLACED // VI 输入为隔行图像 /* Invalid argument */ .ad_chn_id = {-1, -1, -1, -1}, /* data seq */ .data_seq = OT_VI_DATA_SEQ_UYVY, /* sync param */ .sync_cfg = { .vsync = OT_VI_VSYNC_PULSE, // 垂直同步脉冲模式,即一个脉冲到来表示新的一帧或一场 // .vsync = OT_VI_VSYNC_FIELD, // DC 模式下表示行有效信号 .vsync_neg = OT_VI_VSYNC_NEG_HIGH, // OT_VI_VSYNC_FIELD 表示偶数场的 vsync 信号为高电平 // OT_VI_VSYNC_PULSE 表示 vsync 同步脉冲为正脉冲 .hsync = OT_VI_HSYNC_VALID_SIG, // 水平同步数据有效信号 // OT_VI_HSYNC_PULSE .hsync_neg = OT_VI_HSYNC_NEG_HIGH, // OT_VI_HSYNC_VALID_SIG 表示高电平表示有效数据 .vsync_valid = OT_VI_VSYNC_VALID_SIG, // 表示垂直同步时序行有效信号 // OT_VI_VSYNC_NORM_PULSE 表示垂直有效同步标识 .vsync_valid_neg = OT_VI_VSYNC_NORM_PULSE, // OT_VI_VSYNC_VALID_SIG 表示高电平为有效信号 .timing_blank = { // 水平前消隐区宽度 水平有效宽度 水平后消隐区宽度 /* hsync_hfb hsync_act hsync_hhb */ 0, 0, 0, // 帧图像或隔行输入 帧图像或隔行 帧图像或隔行输入时 // 时奇场图像的垂直 输入时奇场垂 奇场垂直后消隐区高 // 前消隐区高度 直有效高度 度 /* vsync0_vhb vsync0_act vsync0_hhb */ 0, 0, 0, // 隔行输入时偶场垂 隔行输入时偶 隔行输入时偶场垂 // 直前消隐区高度 场垂直有效高度 直后消隐区高度 /* vsync1_vhb vsync1_act vsync1_hhb */ 0, 0, 0 } }, /* data type */ .data_type = OT_VI_DATA_TYPE_RAW, //OT_VI_DATA_TYPE_YUV, //OT_VI_DATA_TYPE_RAW /* data reverse */ .data_reverse = TD_FALSE, /* input size */ .in_size = {640, 512}, /* data rate */ .data_rate = OT_DATA_RATE_X1, }; 4.2static combo_dev_attr_t g_mipi_DC_attr = { .devno = 0, .input_mode = INPUT_MODE_MIPI, // /* input mode */ .data_rate = MIPI_DATA_RATE_X1, .img_rect = {0, 0, 640, 512}, .mipi_attr = { DATA_TYPE_RAW_12BIT, OT_MIPI_WDR_MODE_NONE, {0, 1, 2, 3, 4, 5, 6, 7} } }; 4.3sample_vi_cfg 配置 根据输入格式选择不同的类型 例如: vi_cfg .pipe_info .pipe_attr.pixel_format = OT_PIXEL_FORMAT_YUV_400; vi_cfg .pipe_info .isp_need_run = TD_FALSE; vi_cfg .pipe_info .pipe_attr.isp_bypass = TD_TRUE; // yuv true vi_cfg .pipe_info .chn_info .chn_attr.pixel_format = OT_PIXEL_FORMAT_YUV_400 ; 配置完 vpss 和 venc 就可以输出视频了 五、输出红外视频 六、备货选型参考 6.1 后端处理器: 1 、 SS524 即 22AP10 平替 Hi3521DV200 2 、 SS522 即 22AP09 平替 Hi3520DV500 3 、 SS528 即 22AP30 平替 Hi3531DV200 4 、 SS626 即 22AP20 平替 Hi3536AV100 6.2 越影系列 5 、 SS928 即 108DC2910 平替 SD3043 6 、 SS927 即 107DC2910 平替 SD3402 7 、 Hi3519DV500 8 、 Hi3516DV500 9 、 Hi3559CV100 10 、 Hi3559AV100