Camera Sensor常见的接口类型:

1、有并口信号(D0~D7、PCLK、HSYNC、VSYNC),一般的处理器有DCMI接口,如ST32F207x系列,直接相连就可以使用。

2、MIPI接口信号DCN/DCP、D0N/D0P~D4N/D4P,需解码芯片将MIPI信号解出并口信号,再送给处理器。MIPI芯片东芝TC358746AXBG, Sensor用的OV6211。

调试的时候注意I2C器件地址,一开始用的是0x0e(write)/0x1f(red)就是不通,后面改成0x1c(write)/0x1d(red)就可以了,后续这名字上也有点区别TC358746AXBG和TC358746XBG,一个带A,一个不带A,带A的估计是新产品,不带A的应属旧产品。主要在以前公司用的旧产品用的是0x0e,就没仔细看,搞了半天才知道这地方有鬼。

24M RAW10 1Line 解码参数配置:

#if 1      //TC358746AXBG config
// PLL_CLK = input_clk *[(PLL_FBD+1) / (PLL_PRD+1)] * [1/2^FRS]
// PLL_CLK =  24M * [(191+1)/(2+1)] * [1/2^3] = 192M
// sys_clk =  pclk = PLL_CLK /8 = 192/8 = 24M
// MclkRef = PLL_CLK/2 = 192/2 = 96M
// ppi_clk = PLL_CLK/2 =192/2 = 96M
// MCLK  = MclkRef /[(1+1)+(1+1)] = 96/4 = 24M
//mipi chip ID 0x4401
   ) & (temp2 == 0x4401))
         return 0xff;
     SCCB_WriteWord_MIPI(0x0002, 0x0001);  //bit[0] software reset ,bit[1]sleep
     Delay_ms();
     SCCB_WriteWord_MIPI(0x0002, 0x0000);
     SCCB_WriteWord_MIPI(0x0016, 0x20bf);  //PLL_PRD[15:12] = 0x02 + 1 = 2 + 1 =3 ; PLL_FBD[8:0] = 0xbf + 1 = 191 + 1 = 192
     SCCB_WriteWord_MIPI(0x0018, 0x0c03);
     SCCB_WriteWord_MIPI(0x0018, 0x0c13);//bit[0] PLL en,bit[1]PLL normal operaion,bit[4] pll clk en,bit[11:10] HSCK range
     SCCB_WriteWord_MIPI(0x0020, 0x0028);//bit[1:0] sys_clk=pclk= PLL_CLK /8 = 24M,bit[3:2] MclkRef = PLL_CLK/2 = 96M,bit[5:4]ppi_clk =PLL_CLK/2=96M
     SCCB_WriteWord_MIPI(0x0022, 0x0500); //word count
     SCCB_WriteWord_MIPI(0x0060, 0x000f); //MIPI PHY Time Delay Register
     SCCB_WriteWord_MIPI(0x0006, 0x0000); //FiFo Control Register
     SCCB_WriteWord_MIPI(0x0008, 0x0011);  //Data Format Control Register.bit[7:4] :0-RAW8;1-RAW10
     SCCB_WriteWord_MIPI(0x0004, 0x8040);  //Configuration Control Register(pclk¡¢VS¡¢HS¡)

     SCCB_WriteWord_MIPI(0x000c, 0x0101);  //output MCLK = MclkRef /[(mclk_high + 1) + (mclk_low + 1)] = 96/[(1+1)+(1+1)]=24M
     SCCB_WriteWord_MIPI(0x000e, 0xfff0);  //GPIO ENBALE
     SCCB_WriteWord_MIPI(0x0010, 0x0000);  //GPIO Direction
#endif

TC358746AXBG-SCH:格式输出设置的是RAW10,实际使用的时候只需高8bit,最低2bit可以不接,GPIO0输出时钟XVCLK(就是MCLK)给Sensor。

OV6211-SCH:

1、Sensor的输入时钟可有两个选择:

(a)、要么同MIPI IC 同一路时钟,也就是说一时钟上挂两个设备,虽然实验测试没问题,但建议不这样做,防止两个设备互相干扰,倘若两个设备工作时钟需同步,那么从源时钟输出分别到两个设备时钟输入口的路径还得严格控制等长。

(b)、要么由TC358746AXBG芯片的GPIO0输出时钟给Sensor,本例用的就是这个方式。

注意图中的MOS管不能用普通的三极管(如S9013)替代,因为红外LED的瞬间脉冲电流比较大,其瞬间电流取决于Strobe的脉冲及限流电阻R2。

实际使用中瞬间电流达到500mA,S9013的集电极Ic电流最大也只能到500mA,S9014更小,仅有100mA,IRLM2402 脉冲电流范围可达7.4A,持续电流1.2A。

所以IRLM2402满足设计需求。

OV6211 config

 #if 1
 //OV6211
         {0x0103, 0x01},  //software reset :0 off; 1 on
         {0x0100, 0x00},
         {0x3001, 0x02},  // output drive capability control bit[6:5] 

         {0x3005, 0x08},  //strobe bit3 io_strobe_oen  control input/output :0 input ; 1 output

         {0x3013, 0x12},
         {0x3014, 0x04},
         {0x3016, 0x10},
         {0x3017, 0x00},
         {0x3018, 0x00},
         {0x301a, 0x00},
         {0x301b, 0x00},
         {0x301c, 0x00},
         {0x3037, 0xf0},
         {0x3080, 0x01},
         {0x3081, 0x00},
         {0x3082, 0x01},

         //PLL2  sys_clk = 80M,ADC_CLK = 240M
         {0x3098, 0x04},
         {0x3099, 0x28},
         {0x309a, 0x06},
         {0x309b, 0x04},
         {0x309c, 0x00},
         {0x309d, 0x00},

         {0x309e, 0x01},
         {0x309f, 0x00},

         //PLL1  pix_clk = 30M ,mipi_clk = 300M
         {0x30b0, 0x0a},
         {0x30b1, 0x02},
         {0x30b2, 0x00},
         {0x30b3, 0x32},
         {0x30b4, 0x02},
         {0x30b5, 0x05},

         {0x3106, 0xd9},

         //Manual exposure  time control
         {0x3500, 0x00},
         {0x3501, 0x00},
         {0x3502, 0x80}, 

         {0x3503, 0x03}, //bit[0]:manual exposure enable; bit[1]:manual AGC enable

         //Manual exposure Gain
         {0x3504, 0x00},  //sensor gain H
         {0x3505, 0x00},  //sensor gain L
         {0x3509, 0x10},  //AEC AGC ADJ ,bit[4] = 1 use real gain ,bit[4] = 0 use sensor gain
         {0x350a, 0x00},  //real gain H
         {0x350b, 0x30},  //real gain  L ; real gain =  2^n(16+x)/16,n is {0x350a,0x350b} bit[9:4] ,x is 0x350b's low bit[3:0]

         {0x3600, 0xfc},
         {0x3620, 0xb7},
         {0x3621, 0x05},
         {0x3626, 0x31},
         {0x3627, 0x40},
         {0x3632, 0xa3},
         {0x3633, 0x34},
         {0x3634, 0x40},
         {0x3636, 0x00},
         {0x3660, 0x80},
         {0x3662, 0x01},  //bit[1]=0 raw10
         {0x3664, 0xf0},
         {0x366a, 0x10},
         {0x366b, 0x06},
         {0x3680, 0xf4},
         {0x3681, 0x50},
         {0x3682, 0x00},
         {0x3708, 0x20},
         {0x3709, 0x40},
         {0x370d, 0x03},
         {0x373b, 0x02},
         {0x373c, 0xe8},
         {0x3742, 0x00},
         {0x3744, 0x16},
         {0x3745, 0x08},
         {0x3781, 0xfc},
         {0x3788, 0x00},
         {0x3800, 0x00},
         {0x3801, 0x00},
         {0x3802, 0x00},
         {0x3803, 0x00},
         {0x3804, 0x01},
         {0x3805, 0x9f},
         {0x3806, 0x01},
         {0x3807, 0x9f},
         {0x3808, 0x00},  //windows width H
         {0x3809, 0xc8},     //windows width L
         {0x380a, 0x00},  //windows height H
         {0x380b, 0xc8},  //windows height L
         {0x380c, 0x05},
         {0x380d, 0x78},
         {0x380e, 0x00},
         {0x380f, 0xee},
         {0x3810, 0x00},
         {0x3811, 0x04},
         {0x3812, 0x00},
         {0x3813, 0x04},
         {0x3814, 0x31},
         {0x3815, 0x31},

         //HSYNC start point
         {0x3816, 0x00},
         {0x3817, 0x00},
         //HSYNC end point
         {0x3818, 0x00},
         {0x3819, 0x00},
         //HSYNC first active row start position
         {0x381a, 0x00},
         {0x381b, 0x00},

         //subsampling 2:1
         {0x3820, 0x02},   //bit[1]: vertical binning 2; bit[2]:vertical flip
         {0x3821, 0x01},   //bit[0] horizontal binning 1; bit[2]:horizontal mirror

         {0x382b, 0xfa},
         {0x382f, 0x04},
         {0x3832, 0x00},
         {0x3833, 0x05},
         {0x3834, 0x00},
         {0x3835, 0x05},
         {0x3882, 0x04},
         {0x3883, 0x00},
         {0x38a4, 0x10},
         {0x38a5, 0x00},
         {0x38b1, 0x03},
         {0x3b80, 0x00},
         {0x3b81, 0xff},

         //PWM registers  PWM frequency = 24M /(0x3b82+0x3b83)
         {0x3b82, 0x10},  //divider_H
         {0x3b83, 0x00},  //divider_L
         {0x3b84, 0x08},  //duty_H
         {0x3b85, 0x00},  //duty_H
         {0x3b86, 0x01},
         {0x3b87, 0x00},

         //strobe control
         {0x3b88, 0x00},
         {0x3b89, 0x00},
         {0x3b8a, 0x00},
         {0x3b8b, 0x00}, //control strobe shift

         {0x3b8c, 0x00},
         {0x3b8d, 0x00},
         {0x3b8e, 0x00},
         {0x3b8f, 0x08},//control strobe pulse width

         {0x3b90, 0x01},
         {0x3b91, 0xb4},
         {0x3b92, 0x00},
         {0x3b93, 0x10},

         {0x3b94, 0x05},
         {0x3b95, 0xf2},
         {0x3b96, 0xc8},

         {0x3033, 0xf0},

         {0x4004, 0x02},  //Black level calibration(BLC)

         {0x404e, 0x01},
         {0x4801, 0x0f},
         {0x4806, 0x0f},
         {0x4837, 0x43},
         {0x5a08, 0x00},
         {0x5a01, 0x00},
         {0x5a03, 0x00},
         {0x5a04, 0x10},
         {0x5a05, 0xa0},
         {0x5a06, 0x0c},
         {0x5a07, 0x78},
         {0x0100, 0x01},  //software standby  - LOW POWER control

 #endif 

东芝MIPI解码TC358746AXBG和OV6211使用及配置的更多相关文章

  1. 使用FFmpeg解码H264-2016.01.14

    使用jni方式调用FFmepg项目中接口,对H264裸码进行解码. 该Demo主要实现从文件中读取H264编码的视频流,然后使用FFmpeg解码,将解码后的码流保存到文件. 工程目录结构如图所示: A ...

  2. FFmpeg 学习(五):FFmpeg 编解码 API 分析

    在上一篇文章 FFmpeg学习(四):FFmpeg API 介绍与通用 API 分析 中,我们简单的讲解了一下FFmpeg 的API基本概念,并分析了一下通用API,本文我们将分析 FFmpeg 在编 ...

  3. RK3288 mipi屏参数配置文件

    RK3288     Android 5.1系统     Linux 3.10 mipi屏参数配置文件所在的路径:kernel/arch/arm/boot/dts/xxx_mipi.dtsi 屏参数配 ...

  4. 海思3519 qt ffmpeg 软解码播放avi

    在海思3519上基于qt采用ffmpeg对avi进行解码显示,其中ffmpeg的配置,qt的配置在前文中已经说明,在此不再赘述. 解码 解码在单独的线程中进行,具体的代码如下: void VideoP ...

  5. LcdTools如何编写MIPI指令(初始化代码)

    在LcdTools帮助文档中查看MIPI读写指令描述,如下图 编写LCM初始化代码就是配置LCM Driver IC寄存器值,一般只需用MipiWrite()指令写参数即可:下面介绍MipiWrite ...

  6. 学习jsp(3)

    HttpServletRequest和HttpServletResponse: response.setContentType("text/html;charset=UTF-8") ...

  7. Mac上好用的视频播放器有哪些?

    首页发现话题 提问 登录加入知乎 Mac 上好用的视频播放器有哪些? 关注问题写回答 OS X 应用 多媒体播放器(软件) Mac 上好用的视频播放器有哪些? 关注者 2680 被浏览 981770 ...

  8. 微言netty:不在浮沙筑高台

    1. 写作缘起 几年前,我在一家农业物联网公司,负责解决其物联网产品线.我们当时基于.net平台打造了一套实时数据采集系统,可以把数以百万级的传感器传送回来的数据采集入库并根据这些数据进行建模.在搭建 ...

  9. 芯灵思Sinlinx A33开发板boa与CGI移植

    开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 641395230 在嵌入式设备的管理与交互中,基于W ...

随机推荐

  1. Qt实现悬浮窗效果

    当鼠标移动到头像控件时,显示悬浮窗,当鼠标离开时,悬浮窗隐藏.   1.控件选择 悬浮窗可以从QDialog派生,并将窗口的属性设置为无边框 this->setWindowFlags(this- ...

  2. mybatis的decimal精度缺失

    在mybatis里面用decimal确实方便,但是经过测试发现decimal默认只有一位小数,所以也不能滥用,如果是double类型的话还是要使用double

  3. win7提示Xshell5提示缺少msvcp110.dll解决办法

    下载地址: http://www.microsoft.com/zh-CN/download/details.aspx?id=30679 X86和X64的都下载下来,安装好后重启计算机,就OK了

  4. HTML表格标记

  5. sql 针对拼接语句的优化

    在日常的开发中尽量少采用拼接语句,但针对多条件联合查询,并有多字段可以偏序的情况下,的确采用拼接语句要方便简单得多,单数据库会因为传入的参数不同而产生不同的计划数,计划数多了,对数据库影响很大. 为了 ...

  6. Oracle sql 中的字符(串)替换与转换[转载]

    1.REPLACE 语法:REPLACE(char, search_string,replacement_string) 用法:将char中的字符串search_string全部转换为字符串repla ...

  7. javaWEB总结(14):请求的转发和重定向

    通俗理解请求转发与重定向的流程 通俗的来讲:我们可以把请求转发和重定向当成是一种借钱的情景模式. (1)请求的转发:A向B借钱,B自己没有钱,但是向C借到了钱,并且把钱借给了A.A只向B请求了一次. ...

  8. MySql5.6性能优化

    目标 了解什么是优化 掌握优化查询的方法 掌握优化数据库结构的方法 掌握优化MySQL服务器的方法 什么是优化? 合理安排资源.调整系统参数使MySQL运行更快.更节省资源. 优化是多方面的,包括查询 ...

  9. Hierarchyid(层次结构)数据类型

    实例表结构 CREATE TABLE [dbo].[Emp]( ,), ), [Org] [hierarchyid], ) INSERT INTO Emp(Name,Org) VALUES('吴xx' ...

  10. Java 反射 分析类和对象

    Java 反射 分析类和对象 @author ixenos 摘要:优化程序启动策略.在运行时使用反射分析类的结构和对象 优化程序启动策略 在启动时,包含main方法的类被加载.它会加载所有它需要的类. ...