找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2554|回复: 2
收起左侧

LINUX下OMAP3530接MT9P031的摄像头驱动调试 给力的一周

[复制链接]
ID:114320 发表于 2016-5-10 02:42 | 显示全部楼层 |阅读模式

    最近有两个项目都挺着急的,尤其是LINUX下OMAP3530接MT9P031的摄像头驱动弄了很长时间。本来是让新来的兄弟负责驱动开发来着,无奈兄弟没有接触过硬件,也没有linux下视频驱动开发的经验,捣鼓了一个多月还没理清驱动注册的流程,而且也没有什么思绪——的确,这个对一个刚毕业的学生来说的确难度比较大……想着这个项目对今年的计划非常重要,而项目还没赢利,我每月还要拿那么多银子,心里就待不住了。只有硬赶鸭子上树了,不管怎么着,今年的几个项目必须得做出来。上个月设计完一个新板子就马上转移精力到这个驱动开发上了。
    开始看到一堆堆代码,一层层的看着就头大的不行。后来在网上查了些驱动架构的资料,又找了些SENSOR的驱动还有一些杂七杂八的材料就泡了起来。到现在现学驱动架构的话时间上来不急了,于是先找了一些OMAP3530相关的摄像头驱动,模拟的、数字的,各个LINUX内核版本下的驱动找了好几个。然后就是总结这些驱动的异同,这些异同一出来,相同的部分参考移植,不同的部分参考修改……只要这些异同不会整理错,直觉告诉我——能成……
    计划实施的还算比较顺利,经过一周多时间这些异同都圈出来了,于是开始组装调试自己的驱动。驱动的调试还是挺麻烦的,以前用仿真器习惯了,现在调LINUX下的驱动,真是有力使不出啊。有时候一个小小的疏忽导致LINUX内核都跑不起来,串口什么打印信息也没有,只能使出硬件调试的野路子——在内核编译结果中查打印信息所在的内存地址,连上仿真器,直接去内存里面抓ASC码,抓寄存器……呵呵,相信很多做过N年LINUX开发的都没有见过这么干的……没有办法,虽然土,但也还有效果。
    设备注册上了……
    I2C检测到了MT9P031传感器型号(起初两块样板都有焊接问题,无法进行I2C通讯)……
    OMAP3530 ISP输出时钟有了……
    MT9P031设置通过了……
    MT9P031锁相环配置通过了,所有输出与预期一致……
    感觉每天都会有进展,心里总会不停的激动,似乎总能感觉到自己渴望的东西离自己越来越近,似乎就要能听到它的呼吸。
    上周末的时候截取到了疑似图像帧,当前景亮度明显变化的时候可以看到帧内数据有符合规律的变化。于是断定,它不远了……
    这周自己写了一个把MT9P031的BAYER格式图像数据转存bmp文件的应用程序,还写了一个将BAYER格式图像直接显示到电视机的程序。结果前两天都出一些奇怪的图。后来跟老师讨论这个奇怪现象的时候,老师发现了我应用程序里的一个移位的语法错误,修改后bmp文件赫然出现了清晰的图像……这就像不再是听它呼吸,而是看到了它清秀可人的面庞!虽然表面淡定,可心里还是相当的那啥……
    不过,还有一个问题,也是最后一个关键问题。当时虽然得到了图像,但LINUX并无法得知有可用帧准备好。当时获取图像是以非阻塞模式打开的摄像头,所以是硬把帧缓冲地址取出来做的处理。LINUX无法得知可用帧,怀疑要么没进帧中断,要么帧中断有问题而没有对帧缓冲作操作处理。
    周五下午在茫茫码海里找到了那个帧中断,在里面加上了打印信息,从串口打印信息里可以推断,帧中断的确发生了,而且发生频率和自己配置的帧率一致。范围进一步缩小了,基本确定是中断里没有通知操作系统……周五晚上有约,就没有进一步确认问题,但能肯定问题发生在什么地方了。
    周六没什么事,心里放不下那么问题,就去加了下班。对比了一些其他版本内核的帧中断处理和我用的内核版本程序,发现我使用的代码里帧中断只处理了PAL或NTSC间行扫描类型的奇场,而一判断是逐行扫描的类型就直接退出了。不知道是这个版本本身就有的问题,还是给我们提供代码的开发板商作过修改……于是在其中加入了逐行扫描的处理。
    然后从串口打印信息里面可以推断出LINUX已经识别到了可用帧。最后一块石头终于落地了,所有能算得上困难的问题都解决了……心里一个舒畅,给同学打电话想聚众三国杀来着,铁杆杀友居然独自去爬山……哎,回家又是无聊,就在实验室里继续修改那个把视频显示到电视上的程序,不长时间就修改好了,在电视里可以实时看到采集的视频图像。
    所有的主要问题都搞定了,悲剧的是居然找不到人一起吃饭,只能晚上一个人去吃小火锅。
    另外,这个过程中我还负责着另一个产品的样机生产和传感器控制逻辑编写,这周控制逻辑也写完了。
    总的来看,这周相当给力!有我欠着人家饭的兄弟姐妹,以及觉得我该请吃饭的街坊邻居,下周抓紧联系啊……

回复

使用道具 举报

ID:114320 发表于 2016-5-10 02:42 | 显示全部楼层
    上周调MT9P031出了一堆印象派艺术画,今天终于找到了原因。是我在10位 BAYER转24位BMP文件的时候数据拼错了。忙了一个来月的MT9P031驱动也算有一个小结了。上个图先。还有一点小问题,LINUX不能获知有可用帧,所在只有一个缓冲区不停的刷图,目前用非阻塞方式打开的摄像头,可以“强行”取出图像数据。应当是OMAP3530的视频接口配置还有些问题,明后两天不出意外的话能解决掉。


回复

使用道具 举报

ID:114320 发表于 2016-5-10 02:44 | 显示全部楼层


        今天又游一趟天津。去帮一个朋友看一个产品里的问题,下午去看望了认识了N久的何老师。老工程师精神太好了,又极为热情。何老师的包子味道太好了,吃光才走……一边吃一边欣赏何老师珍藏的各种风格音乐,音响也很强,连电源插座也是专业的,老先生太会生活了……当然,最主要的还是探讨了N多电子方面的问题……

        刚回到北京,买了张夜场的3D加勒比海盗,嘿嘿,熬半个通宵看个电影……明天去加班,抓紧把CMOS在OMAP3530下的LINUX驱动搞定……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表