之前没接触过三星的开发板,更不了解S5PV210,TW9912这款AD芯片也是第一次接触,三星FAE又不给力(其实是没有),调试camera过程中,一会怀疑TW9912配置不对,一会怀疑三星FIMC驱动有问题,比较痛苦,今天终于调出了正确的图像,发贴和大家分享一下

TW9912 配置

TW9912这款AD芯片,TechWell FAE给了几组寄存器配置:

PAL in 656P out --- PAL做输入,输出为BT656的逐行方式

PAL in 656i out --- PAL做输入, 输出为BT656的隔行方式

NTSC in 656P out --- NTSC做输入,输出为BT656的逐行方式

NTSC in 656i out --- NTSC做输入,输出为BT656的隔行方式

考虑到后端FIMC对隔行的处理极其怪异(到现在我还没明白它输出的四个buffer后,怎么组合成一帧完整图像的),所以我选择了逐行输出,PAL输入(我的摄像头是PAL制式),FAE给的PAL in 656P out配置是可以正常工作的

TechWell FAE给的配置寄存器值,是一次性逐个设置,顺序无所谓,这也是很神奇的地方啊,不过日后我还是要扩展一下,自动检测制式后,再设入相应的参数,这是后话。

在这插点跑题的话:说到逐行输出,我花了很多时间怀疑逐行BT656输出有问题,因为标准的BT656信号是不支持逐行的,我不知哪家油菜的厂商,扩展了标准的BT656,更牛逼的是,一个厂家产品输出逐行BT656信号,另外的厂家接收处理这个逐行BT656信号,他们居然配合的很好。网上有人讨论过这个逐行BT656是什么东西,就是BT656的F位总是0。

TW9912配置为逐行输出后,pixclk为54Mhz,相比隔行输出的pixclk=27Mhz,增大了一倍,因此帧数也增大了一倍由25->50,或者30->60。

pixclk频率有个大概的算法: 行数据 * 行数 * 帧率

PAL: (1440 + 280 + 4 + 4) * 625 * 25 = 27000000

NTSC: (1440 + 280 + 4 + 4) * 525 * 30 = 2721600

FIMC驱动

Samsung的camera后端是FIMC控制器,Samsung写了一个FIMC驱动框架,代码在drivers/media/video/samsung/fimc/下,fimc驱动框架我后面会分析

fimc的代码和mx51的camera驱动框架比起来,要简单清晰很多。但是还是有几个地方要修改一下,才能把camera驱动正确跑起来

1. 在arch/arm/mach-s5pv210/mach-smdkc210.c 中添加一个s3c_platform_camera设备

       .id     = CAMERA_PAR_A,.type       = CAM_TYPE_ITU,.fmt        = ITU_656_YCBCR422_8BIT,.order422   = CAM_ORDER422_8BIT_YCBYCR,.i2c_busnum = 1,  .info       = &tw9912_i2c_info,.pixelformat = V4L2_PIX_FMT_YUYV,.srclk_name = "mout_mpll",.clk_name   = "sclk_cam0",.clk_rate   = 44000000,.line_length = 1440,.width      = 720,.height     = 576,.window     = {.left   = 0,.top    = 0,.width  = 720,.height = 576,},/* Polarity */.inv_pclk   = 0,.inv_vsync  = 0,.inv_href   = 0,.inv_hsync  = 0,

.id = CAMERA_PAR_A, 查看自己的原理图,看看使用哪个物理camera接口

FIMC共支持三个camera接口,其中两个为ITU类型,所谓ITU类型就是支持BT601或者BT656协议,另外一个是MIPI接口

.type = CAM_TYPE_ITU 这个毫无疑问了,我们使用的就是ITU接口类型

.srclk_name = "mout_mpll",

.clk_name = "sclk_cam0",

.clk_rate = 44000000

因为我使用的是外部晶振,不需要提供mclk,所以这几行实际没什么意义,但是如果你的camera需要FIMC提供mclk,那么要正确设置这个mclk

.line_length = 1440 这一行没什么用,随便设

.width = 720,

.height = 576,

PAL制式摄像头的标准宽高

2. 修改FIMC工作模式BT601->BT656模式

FIMC对于ITU接口,缺省的工作模式是BT601,需要改成BT656。我猜samsung的开发人员用的sensor只支持BT601,所以他们也仅验证了BT601

3. 修改DMA分配的对齐方式

DMA对齐问题折磨了我一个礼拜,因为缺省情况下,fimc驱动对DMA内存的分配对齐方式是没有要求的,而FIMC硬件在有些情况下需要DMA地址必须是4K对齐,如果你给了一个非4k对齐的地址如0x4abc5800,那么DMA是不会从这个地址开始写camera数据的,而是从0x4abc5000开始写数据,这就导致拍出来的图片发生了错位,如下图中间偏左的粗黑线。

黑线左边还有条细黑线,这个是TW9912的问题,调整VDELAY VACTIVE HDELAY HACTIVE几个参数就可以消掉,这个太搞笑了,也是调camera驱动过程中 一直怀疑TW9912有问题的原因

测试

用测试程序抓取图片,就可以验证了

Android S5PV210 camera驱动(tw9912)小结相关推荐

  1. MTK6735 Android之Camera驱动移植篇

    MTK6735 Android之Camera驱动移植篇 首先我们需要向sensor原厂拿到我们对应平台型号的驱动hal层和kernel层的代码. 1.拷贝hal层代码到\vendor\mediatek ...

  2. S5PV210 camera 驱动分析(android)

    一.Camera 工作原理介绍 1. 结构 . 一般来说,camera 主要是由 lens 和 sensor IC 两部分组成,其中有的 sensor IC 集成 了 DSP,有的没有集成,但也需要外 ...

  3. Android MTK Camera驱动代码分析

    一.Camera调用过程:      imgsensor起到承上启下的作用,在系统起来时会创建整个camera驱动运行的环境,其中主要的文件和函数如下框图所示,先设备挂载时会调用注册platform设 ...

  4. Android MTK Camera博客分享

    MTK Camera博客分享 MTK Camera OTP调用过程 MTK Camera Flashlight调用过程 MTK Camera 应用层到底层过程 MTK Camera HAL层分析 深入 ...

  5. android camera(四):camera 驱动 GT2005

    关键词:android  camera CMM 模组 camera参数  GT2005 摄像头常见问题 平台信息: 内核:linux 系统:android 平台:S5PV310(samsung exy ...

  6. android 驱动之 camera 驱动 GT2005

    关键词:Android  camera CMM 模组 camera参数  GT2005 摄像头常见问题 平台信息: 内核:linux 系统:android 平台:S5PV310(samsung exy ...

  7. Android高通平台调试Camera驱动全纪录

    项目比较紧,3周内把一个带有外置ISP,MIPI数据通信,800万像素的camera从无驱动到实现客户全部需求. 1日 搭平台,建环境,编译内核,烧写代码. 我是一直在Window下搭个虚拟机登服务器 ...

  8. android usb多个,android、windows上多个USB Camera同时使用实验小结

    android.windows上多个USB Camera同时使用实验小结 (2013-05-18 19:19:46) 标签: 小结 实验 使用 杂谈 android.windows上多个USB Cam ...

  9. Android Camera驱动开发入门必备知识

    camera驱动开发所需要具备基础知识,如果你还没有了解过camera模块,那么这些基础必备的知识,将会对你比较有用,俗话说"磨刀不误砍柴工",基本功配置好了,相信你在做camer ...

最新文章

  1. 牛逼的python代码_牛逼了!Python代码补全利器,提高效率告别996!
  2. 赛诺朗基智能安全保障平台——安全着你的安全!
  3. 玩玩自动化测试之selenium篇
  4. Python进阶【第七篇】文件处理
  5. VS2013安装oepncv2.4.10 以及opencv 3.0.0
  6. 计算机专业考研数据结构比较,计算机专业考研科目:数据结构重点汇总
  7. Linux下如何安装最新版本工具
  8. 玩家可以输入辅助指令_最后生还者 第二部辅助功能详解 盲人玩家也能玩
  9. 【汇编优化】之ARM32与AARCH64指令集优化总结
  10. 路由算法之LS算法和DV算法全面分析
  11. matlab qpsk调制程序,MATLAB QPSK调制及解调.doc
  12. 永不消逝的电波(一):无线电入门篇
  13. 图像处理学习路线总结 python
  14. 【html】【微信小程序】将图片压缩,文件上传的方法
  15. current account(经常账户)
  16. react-native引入react-native-vector-icons
  17. 电脑都面的没电了,我是如何通过腾讯云恐怖的一面面试的?
  18. 中山大学HCP Lab系列论文:AI解题新突破,神经网络推开数学推理大门
  19. 如何保证数据在传输过程中的安全
  20. 计算机主机重启键,重启(计算机术语)_百度百科

热门文章

  1. 威客理论看维基经济学的三个漏洞
  2. 长文对话实录:国内物联网10年沉浮,AIoT技术如何破局?| AIoT+智慧城市峰会...
  3. Iphone X HTML 齐刘海 过招篇
  4. jmeter-1-apache ant-集成测试
  5. CSS预处理器的对比 — Sass、Less和Stylus
  6. 1909升级卡64_雨林木风win10 1909升级卡在60%的解决教程
  7. mysql 自定义函数报错_Mysql自定义函数报错解决方法 | 学步园
  8. 金融科技开题资源汇总
  9. 10大理由告诉你为什么要学习Python
  10. 软件测试——你所应该知道的内功心法