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. 2px边框,4分之1内边框实现选中功能实现

    有时候我们要实现如下选中效果: 我给出一种解决办法: 首先选中的时候,加一个class(active),未选中的全部加一个class(inactive),外层给一个1px border,每个选项给一个 ...

  2. 记录下actionbar的翻译

    http://blog.csdn.net/xyz_lmn/article/details/8132420 嗯,actionbarSherLock不错,viewpagerIndicator也不错.

  3. DOS下导入导出MySQL备份

    导入: 1. cd d:\mysql\bin #cd 到 mysql 的 bin 目录下 2. mysql -u root -p mysql_db_name < d:\mysql\data\ba ...

  4. IIS7或IIS7.5 ISAPI和CGI限制找不到的问题记录

    弄了一下午,才找到,选择最上面的节点,如下图,记录备用

  5. children

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> </head> ...

  6. MVC5 + EF6酒店项目笔记

    最近项目组准备用MVC5开发酒店模板包括后台.在此第一次学MVC5一个礼拜,看着组长给我的MVC5模板从一脸懵逼到懵懂. 慢慢学习,成长. 未完待续........

  7. Implementing a builder: Zero and Yield

    原文地址:http://fsharpforfunandprofit.com/posts/computation-expressions-builder-part1/ 前面介绍了bind和continu ...

  8. C++ namespace功能总结

    案例背景:你写了一些代码,其中有一个函数名为xyz(),同时另一个可用库里也有一个同名的函数xyz(), 编译器没有办法知道你指的是哪个版本的xyz(). 解决办法:A namespace is de ...

  9. .Net Core Identity外面使用Cookie中间件

    1.在 app.UseMvc 前面加上app.UseCookieAuthentication app.UseCookieAuthentication(new CookieAuthenticationO ...

  10. runtime官方文档

    OC是一种面向对象的动态语言,作为初学者可能大多数人对面向对象这个概念理解的比较深,而对OC是动态语言这一特性了解的比较少.那么什么是动态语言?动态语言就是在运行时来执行静态语言的编译链接的工作.这就 ...