S5PV210有三个CAMIF单元,分别为CAMIF0 CAMIF1和CAMIF2。对应着驱动中的fimc0, fimc1, fimc2。在三星datasheet和驱动代码中CAMIF和FIMC(Fully Interactive Mobile Camera)这两个术语基本上可以互换的,后面我们都用FIMC代替CAMIF。这两个术语的称呼有很强的模糊性,尤其刚刚接触三星平台,会觉得这三个接口设备都是用来控制camera,实际上三个接口并不局限于只控制camera。
我们先看下datasheet中定义的CAMIF feature - 输入支持
1. ITU-R BT601/656/709 mode
2. DMA模式
3. MIPI(CSI)模式
4. Direct FIFO 模式
1 和3是典型的camera输入接口,用来处理输入的camere sensor的信号
而2则是DMA内存输入模式,FIMC的输入是DMA内存中的图像数据,FIMC负责进行图像color space 的转换,图像的scaler处理。
因此,每个FIMC既可以做为camera 输入ITU或MIPI的处理单元,此时就为capture设备,也可以作为内存图像的处理单元,此时做为output 设备或者overlay设备。
Camera A, Camera B,Camera C这三个物理接口和FIMC们也不是一回事,下图说明了前者和后者的关系,当FIMC工作在1,3模式(做为capture设备)时,Camera A/B/C是FIMC的输入。
Camera A/B是ITU类型;Camera C是MIPI类型的接口,配置FIMC寄存器决定FIMC从Camera A/B/C中的哪一个获取camera数据。
注意一个物理接口可以同时作为多个FIMC的输入源。
在android平台上:
FIMC0 用于拍照 以及preview时,从camera sensor获取数据
FIMC1 用于camera 的preview环节或者视频播放器的视频输出,S5PV210 overlay功能的驱动部分就是通过FIMC1来实现的
FIMC2 用于录像时,从camera sensor获取数据,提供给上层应用使用。
注意,在驱动层并没有对这三个控制器进行上述功能的划分,三个控制器是通用的。上诉功能的划分完全是CameraHAL和OverlayHAL实现的。
关键字:S5PV210 Camera Interface
引用地址:
S5PV210 三个Camera Interface/CAMIF/FIMC的区别
推荐阅读最新更新时间:2026-03-20 12:15
S5PV210 三个Camera Interface/CAMIF/FIMC的区别
S5PV210有三个CAMIF单元,分别为CAMIF0 CAMIF1和CAMIF2。对应着驱动中的fimc0, fimc1, fimc2。在三星datasheet和驱动代码中CAMIF和FIMC(Fully Interactive Mobile Camera)这两个术语基本上可以互换的,后面我们都用FIMC代替CAMIF。这两个术语的称呼有很强的模糊性,尤其刚刚接触三星平台,会觉得这三个接口设备都是用来控制camera,实际上三个接口并不局限于只控制camera。 我们先看下datasheet中定义的CAMIF feature - 输入支持 1. ITU-R BT601/656/709 mode 2. DMA模式 3.
[单片机]
Linux-3.0.8中基于S5PV210的IRQ模块代码追踪和分析
init/main.c: 1 asmlinkage void start_kernel(void) 2 { 3 ...... 4 early_irq_init(); 5 init_IRQ(); 6 ...... 7 } early_irq_init()函数有两种实现,一种是基于radix tree,一种是定义静态数组,如果要使用radix tree实现的,那么需要打开SPARSE_IRQ配置选项,由于我对数据结构不了解,所以分析以下静态数组实现方式版本的。 /kernel/irq/irqdesc.c 1 struct irq_desc irq_desc __cacheline_aligned_in_
[单片机]
S5PV210 点亮Led
GPC1CON, R/W, Address = 0xE020_0080 GPC1DAT, R/W, Address = 0xE020_0084 举例 #define GPC1CON *((volatile unsigned int*)0xE0200080) #define GPC1DAT *((volatile unsigned int*)0xE0200084) *(unsigned int*)GPC1CON &= ~(0xf 12); *(unsigned int*)GPC1CON |= (0x1 12); *(unsigned int*)GPC1DAT &= ~(0x1 3); *(un
[单片机]
s5pv210 的启动
1、开发板已启动从0x0获取数据(内部64k的硬盘,里面含有三星固化的BL0段代码),将其读到a8软核中,进行运算,主要用于初始化时钟,96k的内部IRAM.并负责 指定启动设备(通常为外部硬盘),从指定的启动设备中拷贝BL1段代码(不超过16k)到I RAM中(96k),并从BL1代码的启示位置开始运行. 2、BL1段代码再从启动设备中取BL1段后面的代码BL2段代码,也将其拷贝到96k的IRAM中(BL1,BL2属于u-boot部分)。并从BL2的起始地址开始运行。 3、然后BL2段代码初始化外部内存以及其他的配置,并将硬盘启动设备中的内核,根文件系统加载到SDRAM中(512m)再到OS开始的起始位置开始运行,并挂载根文件
[单片机]
【ARM裸机s5pv210 】程序烧录
1.SD卡刷uboot 准备工作 (1)securcrt(115200,数据流控制全不选) (2)usb转串口驱动 (3)破坏iNand中的bootloader已从SD2启动 (4)九鼎x210_fusingtool.exe (5)准备好的uboot.bin 流程 (1)使用x210_fusingtool将uboot.bin刷入SD卡 (2)板子启动方式选择emmc启动 板子启动流程 开机- 读iNand的uboot失败 - 读SD卡uboot成功 - 运行nandflash中的系统 2.用fastboot刷机 准备工作 (1)OTG数据线,禁用数字签名 (2)fastboo
[单片机]
u-boot1.3.4向S5PV210移植
一、串口无输出 按源码编译后,串口无输出。开发板供电锁存成功。 进入start.S中查看,发现多了PMIC_InitIp,即电源管理模块初始化。屏蔽后发现串口可以输出。 二、DDR配置信息修改 从启动打印信息,以及bdinfo命令中可以看到SDRAM的设置错误。 使用md和mw命令测试内存,发现20000000和40000000开头的内存都是可以用的,说明代码中DDR初始化部分是正确的,只是size错了。 改用如下配置 #define MEMORY_BASE_ADDRESS 0x30000000 #define CONFIG_NR_DRAM_BANKS 2 /* we have 2 ban
[单片机]
Tiny210v2( S5PV210 )平台下创建基本根文件系统
0. 概要介绍 ========================================================= 根文件系统的建立,可以有多种方式。 * 直接利用开发板供应商提供的根文件系统; * 利用开源社区的发行版,比如debian/ubuntu for arm; * 利用meego/tizen/moblin/android提供的根文件系统; * 自己建立。 其中最方便的还是利用别人已经完成的成果,避免重新发明轮子。 但如果别人已有的成果不能满足自己需求,或者想要体验一下根文件系统如何建立的话,还是需要自己来实践一下。 在这里记录一下我建立最小根文件系统的过程,以防忘记。 这个方法不一定是正统方法,只是一个可
[单片机]
S5PV210开发系列八_Yaffs的移植
Nand作为市面上最基本的非易失性闪存技术之中的一个,应用在各种固态大容量存储解决方式中。因为Nand flash自身的特点,Nand存储器往往须要一款专用的Nand文件系统进行管理。开源的Yaffs文件系统因为其优异的性能,在Nand flash中受到广泛的应用,笔者此处就Yaffs的移植作一个简单的介绍。 1. Yaffs概述 Yaffs是由Aleph One公司所发展出来的Nand flash文件系统,专门为Nand flash存储器设计,适用于大容量的存储设备。在GPL协议下公布,可在其官网上免费获得源代码。 Yaffs是基于日志的文件系统,提供了坏块管理、磨损平衡和掉电恢复的健壮性,保证数据在系统对文件系统改动的过程
[单片机]