不同硬件平台上移植Android的Camera系统

2024-01-02 18:18

本文主要是介绍不同硬件平台上移植Android的Camera系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文:http://blog.csdn.net/wxzking/article/details/6311977

对于一个芯片公司,当一款芯片成型后,往往会根据不同客户的不同需求,设计不同的开发板卡,使用不同的外设,但它们的“芯”却是同一颗芯。对于我们刚成型的芯片XP8008(因设计公司机密,随便命名作为代称),就面临着很多这样的情况。

一、        硬件环境描述

当初使用芯片XP8008做Android平台下camera移植时,我们自己设计了开发板卡,使用了公司常用的sensor。Sensor的厂家很多,而且不同sensor都各有利弊。对于sensor的选择,一方面考虑芯片的支持能力,另一方面考虑客户的需求。这里,我假设我们开发阶段使用的sensor型号分别为SSA5526和SSA9076.,SSA5526做为后摄像头,200万像素,SSA9076做为前摄像头,30万像素。目前,已经在这样的硬件环境下,将Android的Camera系统移植了上去。该项目叫做PHONE001。

       最近有一家客户要使用我们的芯片XP8008,但是他们要用的sensor型号为:SSB0520和SSB0903。这两款sensor来自于另外一个厂家。它们的功能与我开发阶段用的相似,像素值完全一样。但不同的是,每个厂家都有自己的寄存器地址选择和bit位意义,而且上电流程也未必一样。

       从整个硬件平台上来看,由于所用芯片相同,只有sensor型号不同,所以可以说整个Camera系统的移植,实际上就是不同sensor驱动的移植。

二、        Camera硬件系统分析

从sensor本身的引脚来看,它们一般有如下一些需要配置的引脚:RESET,PWRDWN,VSYNC,HSYNC,PCLK,MCLK,SCA,SCL,AVDD,DVDD,IOVDD,还有就是数据引脚了。对于30万像素的sensor有8个数据引脚:D0——D7,对于200万像素的sensor有10个数据引脚:D0——D9。

这些引脚的意义大致如下:

RESET:用来reset sensor;RESET一般是低有效,当脉冲为低时,reset sensor,而正常工作时,应该为高。SSA5526中,其为低有效。

PWRDWN:power down引脚,切断供电。PWRDWN一般高有效,当脉冲为高时,进入省电模式,而正常工作时为低。但有些sensor却是低有效,比如SSB0520。在使用不同sensor时,就需要注意这点。SSA5526中,其为高有效。

HSYNC:行同步,sensor在抓取一行数据开始的时刻,通过HSYNC引脚向Camera interface发出信号,告知其。SSA5526中,其为高有效。

VSYNC:帧同步,这个与HSYNC对应,在sensor抓取一帧数据开始时,通过VSYNC引脚向Camera interface发出信号,告知其。SSA5526中,其为低有效。

PCLK:理解为sensor抓取一个像素的脉冲高低。SSA5526中,其为低有效。

MCLK:sensor工作的时钟频率。

SCA和SCL:这是I2C的两条总线线路:SDA为串行数据线,SCL为串行时钟线。它们的工作原理,可以参考注1。

AVDD,DVDD,IOVDD为电压引脚。AVDD为模拟电源引脚,DVDD和IOVDD为数字电源引脚。DVDDIOVDD的关系有待确认。AVDD和IOVDD的关系参考注2。

根据sensor自身的引脚,我们就可以推想出芯片中Camera部分的引脚。如果芯片只支持一个Camera,那芯片只需要上述的引脚即可。但是当芯片支持双Camera时,就需要额外的引脚。PWRDWN需要两个引脚,分别控制不同的sensor,这是因为不同sensor的PWRDWN有效脉冲不一样。另外,数据传输引脚采用CCIR656标准,统一设计了8个数据引脚。

三、        Sensor驱动框架设计

由于不同客户对Sensor的需求不同,可能随时更换不同型号的sensor,所以应该设计一套统一的sensor驱动接口。当sensor型号发生变化时,只需更换对应的文件即可。调用sensor驱动的程序不用变化。鉴于此,我设计如下几个文件:sensor_driver.c/sensor_driver.h用于定义并实现sensor的统一接口。Sensor_SSA5526.c/ Sensor_SSA9076.c/ Sensor_SSB0520.c/ Sensor_SSB0903.c用于不同型号的sensor去实现支持sensor的统一接口。

在文件sensor_driver.h中,定义一个可以描述sensor所有信息的结构体struct sensor_info_t。它包含成员:

I2C读写地址,SSA5526中,I2C写地址为0x60,读地址为0x61;

RESET,PWRDWN,VSYNC,HSYNC,PCLK的有效电平配置;

AVDD,DVDD,IOVDD的电压值配置;

Sensor型号识别信息;

Sensor所支持的捕获图像的最大长和宽,以及图像的格式等;

Sensor支持不同长和宽捕获图像数据时的相应寄存器配置;

Sensor支持的特效的函数接口,比如白平衡调节,亮度变化,饱和度变化,防闪烁等;

这些信息包含了整个Sensor的所有属性及功能,通过获取该结构体,对其操作,可以控制该Sensor。

定义两个这样的结构体:

struct sensor_info_t sensor_front_t;

struct sensor_info_t sensor_back_t;

文件Sensor_SSA5526.c/ Sensor_SSB0520.c去实现sensor_back_t,作为后摄像头;文件Sensor_SSA9076.c/ Sensor_SSB0903.c去实现sensor_front_t,作为前摄像头。在文件sensor_driver.c使用sensor_front_t和sensor_back_t即可。

在文件sensor_driver.h中也定义了供V4L2驱动所调用的sensor统一接口,包含如下接口:

Int sensor_init(uint32_t sensor_id);根据场景,选择前或后sensor,进行初始化;

Int sensor_deinit(void);注销当前使用的sensor;

Int sensor_ioctl(uint32_t cmd, uint32_t arg);通过IOCTRL,调用sensor的特效函数;

Int sensor_set_size(uint32_t width, uint32_t height);设置sensor所要抓取的图像的大小;

这几个接口在sensor_driver.c中实现。

项目不同,使用的sensor也不同。在Makefile中,可以根据项目名称来选择编译哪些型号的sensor文件。比如,当前项目为PHONE002,使用的sensor为SSB0520和SSB0903,以前的项目为PHONE001,使用的sensor为SSA5526和SSA9076,就可以这样写:

Obj-$(CONFIG_PHONE001) += SSA5526.o SSA9076.o

Obj-$(CONFIG_PHONE002) += SSB0520.o SSB0903.o

当编译不同项目时,就会编译对应的sensor驱动文件。

四、        Sensor驱动移植

根据上面描述的Sensor驱动框架设计,在移植sensor驱动时,需要做的就是实现SSB0520.c/SSB0903.c,然后修改Makefile文件即可。对于文件SSB0520.c/SSB0903.c的实现,应该参考SSA5526.c/SSA9076.c的实现,使所有的sensor驱动文件都保持同样的风格,有利于以后的驱动修改。

五、        Camera系统测试

Sensor驱动移植完了,别的文件都不用修改,直接编译。等新的code下载到新的板卡上去后,就可以开机进行Camera测试了。对于新的sensor,我们必须进行全面的功能测试,以确保sensor驱动的正确性。

六、        参考

[注1]I2C工作原理

ISDA数据,SCL时钟.时钟是单片机工作的必要条件之一.单片机的工作必要条件有三个,电源,时钟,复位电路.SDA是单片机工作时传输各种数据的接口。

I2C 总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。在I2C 总线上传送的一个数据字节由八位组成。总线对每次传送的字节数没有限制,但每个字节后必须跟一位应答位。数据传送首先传送最高位(MSB)。首先由主机发出启动信号“S”(SDA在SCL 高电平期间由高电平跳变为低电平),然后由主机发送一个字节的数据。启动信号后的第一个字节数据具有特殊含义:高七位是从机的地址,第八位是传送方向位,0 表示主机发送数据(写),1表示主机接收数据(读)。被寻址到的从机设备按传送方向位设置为对应工作方式。标准I2C 总线的设备都有一个七位地址,所有连接在I2C 总线上的设备都接收启动信号后的第一个字节,并将接收到的地址与自己的地址进行比较,如果地址相符则为主机要寻访的从机,应答在第九位时钟脉冲时向SDA 线送出低电平作为应答。除了第一字节是通用呼叫地址之外第二字节开始即数据字节。数据传送完毕,由主机发出停止信号“P”(SDA在SCL 高电平期间由低电平跳变为高电平)。

[注2] AVDD和IOVDD的关系

AVDD是模拟电源引脚,IOVDD是数字电源引脚,它们应该分别供电,即最好不要采用一个电源供电,在不得不采用一个电源供电时,需要采取隔离、退耦措施,以避免数据电路电源上的噪声对模拟电路通过模拟电源产生干扰。在采用两个电源分别对模拟电路和数字电路分别供电时,可以采用不同的电源电压。如对模拟电路供电的电源电压为3.0V而对数字电路供电的电源电压为3.3V;或者反过来。更多描述,可参考

http://www.eefocus.com/html/09-08/79319s.shtml

Revision History

修订历史记录

Version

版本

Date

日期

Author

作者

Brief Description

变更简要

0.0.1

2011-04-09

Wangxiaozhe

wxiaozhe@163.com

QQ:1226062415

Init draft.

这篇关于不同硬件平台上移植Android的Camera系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/563275

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、