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;
}
}
三、加载驱动
ss928 热成像驱动加载
四、修改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[i].pipe_info[j].pipe_attr.pixel_format = ot_pixel_format_yuv_400;
vi_cfg[i].pipe_info[j].isp_need_run = td_false;
vi_cfg[i].pipe_info[j].pipe_attr.isp_bypass = td_true; // yuv true
vi_cfg[i].pipe_info[j].chn_info[0].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
Arduino提供的PWM控制功能入门(2)
中国政府支持开展车联网和自动驾驶地图应用
什么是运维标准化和流程化呢?运维工作梳理
无人机设计中STM32库实现的模拟i2c代码
旧手机扔了很可惜吧,教你家中那些闲置的旧手机还有这些利用的方法
SS928V100(SD3403)处理器之红外成像调试
保密局总工程师:核心人员禁用3G手机
你会在车上找到哪一些物联网技术
变电所运维云平台的简单介绍
5G时代的来临会使得WIFI消失吗
使用 OpenVINO™ 工具套件进行物体尺寸检测
无线蓝牙模块CC2540使用心得
触摸屏的性能测试可选择大电流弹片微针模组
专业扩声的声场环境要求及调试方法的详细介绍
魅蓝E3怎么样 到底值不值得买
先进封装成为半导体厂商争相竞逐的新战场
模具界大佬眼中的工业4.0与模具智能制造
小米6或被爆了个精光,高通835处理器5.7寸2K屏双摄
简析电场辐射发射试验测试系统噪声计算
三星GalaxyNote7开箱实拍 附送USB Type-C接口转换器