Android平板电脑camera驱动_第1页
Android平板电脑camera驱动_第2页
Android平板电脑camera驱动_第3页
Android平板电脑camera驱动_第4页
Android平板电脑camera驱动_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android平板电脑camera驱动移植内容简介硬件平台OV9650简介OV9650摄像头结构视频驱动整体框架V4L2原理和框架V4L2的构架流程SCCB传输协议SCCB传输时序图Android的Camera系统结构Android调用Camera驱动过程。硬件平台三星s5pc100S5PC100开发平台采用三星公司最新推出的S5PC100处理器(ARMCortexA8核),最高主频可达到800MHz。板上配置有256MbytesDDR内存、256MbytesNandsh和2MbytesNorFlash等大容量存储器,方便客户编写、调试自己的应用程序。同时集成USB、UART、SD、LCD、Camera、VGA等常用设备接口,适用于各种手持设、消费电子和工业控制设备等产品的开发OV9650简介OV9650摄像头OV9650是OmniVision公司的彩色CMOS图像传感器,具有130万像素,支持SXGA,VGA,QVGA,QQVGA,CIF,QCIF,QQCIF的分辨率,具有多种色彩输出格式RGB,RGB(GRB4:2:2),YUV(4:2:2)和YCbCr(4:2:2),OV9650采用标准的SCCB接口。OV9650摄像头结构视频驱动整体框架V4L2的原理和架构V4L2是Linux下开发视频采集设备驱动程序的规范,它们使用分层的方法为驱动程序的开发提供了清晰的模型和一致的接口。应用程序处于最上层,与Framebuffer一样,V4L2都处于中间层,而实际的硬件设备处于下层,在linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0下。V4L2是一个两层结构的驱动,上层是videodev模块,当videodev初始化后,它把自己注册一个主设备号为81的字符设备,同时注册自己的字符驱动成员函数;下层是V4L2驱动程序,它实际上是videodev的客户端,videodev通过v4l2驱动程序的成员函数来调用V4L2驱动程序。当V4L2驱动程序初始化后,它把一个包含V4L2驱动程序成员函数,次设备号以及其他相关信息的结构传递给videodev,从而把它要处理的设备注册到videodev.V4L2的构架和流程文件操作接口(ioctl/mmap…)字符设备驱动程序V4L2驱动程序具体的V4L2驱动硬件设备SCCB传输协议简介S5PC100提供了一个摄像接口,摄像接口包括8位来自摄像头的输入数据信号,一个输出主时钟信号,三个来自摄像头的输入同步时钟信号和一个输出复位信号。S5PC100仅仅提供了一个摄像接口,因此要实现其功能,还需要摄像头。在这里,我们使用OV9650。OV9650内部有大量的寄存器需要配置,这就需要另外的数据接口。OV9650的数据接口称为SCCB(串行摄像控制总线)。SCCB是简化的I2C协议,SIO-l是串行时钟输入线,SIO-O是串行双向数据线,分别相当于I2C协议的SCL和SDA。SCCB的总线时序与I2C基本相同。SCCB是和I2C相同的一个协议。SIO_C和SIO_D分别为SCCB总线的时钟线和数据线SCCB传输时序SCCB_E信号是一个必须由主设备驱动的向,低电平有效的控制信号,它指示了数据传输的开始和结束。SCCB_E从高电平变为低电平表示一个传输的开始,从低电平变为高电平表示一个传输的结束,在数据传输期间,SCCB_E必须维持在逻辑0,当SCCB_E为1时,意味着此时总线空闲。SIO_C信号是一个必须由主设备驱动的单向控制信号。它指出了每一个传输位。当总线空闲时,主设备必须驱动SIO_C为逻辑1。在传输开始后,当SIO_C被驱动为逻辑0,则一个数据传输开始。在数据传输过程中SIO_C的一个逻辑1指示了一个单独的已传输位。因此,SIO_D只能在SIO_C被驱动为0时出现.SIO_D信号是一个双向数据信号,可以被主设备或从设备驱动。当总线空闲时该信号可以保持悬空或三态。SIO_C的一个逻辑1代表了一位传输,因此SIO_D仅当SIO_C被驱动为逻辑0时出现。SCCB传输开始位,结束位开始位:SCCB_E由高电平变为低电平表示数据传输的开始(如图3所示)。但是在声明数据传输开始之前,主设备必须驱动SIO_D为逻辑1以取得总线的控制权,这样做可以防止在总线上传输数据之前传播一个未知状态。结束位:SCCB_E由低电平变为电高平表示数据传输的结束(如图4所示)。在结束传输阶段定义了两个时间参数:SCCB_E由低电平变为电高平表示数据传输的结束(如图4所示)。在结束传输阶段定义了两个时间参数:tPSC和tPSA。

定义为SIO_D后处理(post-charge)时间,即SCCB_E在声明传输结束以后SIO_D必须保持为逻辑1的时间。

的最小值是15ns。

定义为SCCB_E的后活动(post-active)时间,即在SIO_D声明传输结束以后SCCB_E必须保持为逻辑0的时间,它的最小值是0ns。Android的Camera系统结构调用camera客户端Android应用框架层Camera框架层将应用与底层的实现隔离开来,实现了一套Android定义的对上对下接口规范,方便应用及底层硬件的开发和移植。这一层对上以Java类的形式包装出android.hardware.Camera,提供给应用层调用;对下在CameraHardwareInterface.h头文件中定义了Camera硬件抽象层的接口,这是一个包含纯虚函数的类,必须被实现类继承才能使用。这个实现类也即是下层中将讲到的用户库层,它继承CameraHardwareInterface接口,实例化对底层硬件驱动的封装,最终生成libcamera.so供框架的libcameraservice.so调用。这样做的好处是让Camera的应用框架代码独立,不受底层硬件驱动改变的影响,方便在不同平台上移植驱动代码,而保持上层的代码不用变化。Android应用框架层整个Camera在运行的时候,可以大致上分成Client和Server两个部分,它们分别在两个进程中运行,它们之间使用Binder机制实现进程间通讯。这样在client调用接口,功能则在server中实现,但是在client中调用就好像直接调用server中的功能,进程间通讯的部分对上层程序不可见。CameraClient端通过Binder机制与CameraServer端通讯,Server端的实现传递到Client端。而Server端的实现又是调用硬件接口来实现。这就延伸到我们要介绍的Camera的下一个层次――库层(HAL层)。库层(硬件抽象层HAL)这个层次其实就是用户空间的驱动代码。前面有介绍过框架层对下在CameraHardwareInterface.h头文件中定义了Camera硬件抽象层的接口,它是包含纯虚函数的类,必须被实现类继承才能使用。HAL层正好继承CameraHardwareInterface接口,依据V4l2规范实例化底层硬件驱动,使用ioctl方式调用驱动,最终生成libcamera.so供框架的libcameraservice.so调用。如果要在某硬件平台上运行Android,也就主要在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论