摩托罗拉SE4500 德州仪器TI Omap37xx/AM3715/DM3730/AM3530 wince6.0/Windows Mobile 6.5平台 二维软解调试记录及相关解释
现在安卓大行其道,不是高通,就是MTK,甚至于很多人不知道还有德州仪器这个平台了,关于如何在德州仪器Omap37xx平台上调试SE4500,网络上除了针对SE4500的几个pdf文档介绍之外,没有任何资料可供参考,相信本文对你很有帮助,不必感谢。本文出自C.S.D.N原创(转载标明来源)。
一、SE4500因为工作在3.3V,德州仪器的Omap37xx工作在1.8V,所以之间必须要进行电平转换,建议使用德州仪器的TXB0104/08进行转换(看好了是TXB0104/08不是TXS0104/08,两者都是QFN封装,价钱应该是一样的,但是支持的最高转换频率是不一样的),因为SE4500属于图像采集,所以要求频率超过24Mbps,所以必须使用TXB系列的电平转换芯片。
二、SE4500在不上电时,会将I2C总线的电平拉低,严格意义上讲,摩托罗拉的SE4500应该是兼容I2C协议,不是标准I2C协议,标准I2C协议要求总线上不工作的器件应该是高阻状态,而不是把I2C总线电平拉低,导致总线上的其他设备无法正常工作。
三、PCB layout的时候,camera信号线最好走等长线,这样图像采集的信号干扰少,会好很多。
四、CAM_Open,CAM_Close莫名其妙被调用多次,导致CAM domain在系统休眠时无法进入休眠
以下部分注册表取自TI平台SE4500驱动的注册表部分:[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CAM]
"Dll"="cam_SE4500.dll"
"Prefix"="CAM"
"Index"=dword:1
"Order"=dword:200
"BufferSize"=dword:80000
"BufferCount"=dword:4
"IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}" ; CE_DRIVER_POWER_MANAGEABLE_GENERIC_GUID
"PowerFlags"=dword:00000103 ; send pre/post device state changes
摩托罗拉给的注册表配置基本上是这个样子,通过在CAM_Init、CAM_Open、CAM_Close函数开头部分添加打印信息。 我们发现,在驱动加载时候,按理说,应该只有CAM_Init被device.exe调用,后面的CAM_Open和CAM_Close只有程序调用了 CreateFile("CAM1:",**)和CloseHandle以后才会分别调用CAM_Open和CAM_Close。 Log信息显示,驱动加载的时候,CAM_Init被调用一次,CAM_Open被连续调用了两次,CAM_Close被调用了一次,导致 refCount在调用CAM_Close的时候不为零,所以导致Camera的clock无法关闭,因为只有refCount等于零时才会关掉FCLK 和ICLK。 为什么会出现上面这种情况呢,我们经过分析,发现是注册表中IClass后面的值有问题,原来摩托罗拉(现在是斑马,Zebra Technologies)在配置这个参数的时候,是没有考虑整个EVM3530平台是否进入休眠的,只关心SDL软解功能是否能够正常工作。 我们修改了Iclass的值如下: "IClass"=multi_sz:"{0AE2066F-89A2-4D70-8FC2-29AEFA68413C}=%b","{CB998A05-122C-4166-846A-933E4D7E3C86}=%b"
经过测试,此时在驱动加载时,只有CAM_Init被调用了。通过修改Drvr_intf.cpp和hw_intf.cpp源代码,我们在摩托罗拉提供的 驱动代码基础上解决了驱动在加载时就给SE4500上电的问题,此时如果应用程序不使用4500的话,它有20多mA的电流消耗,除非在应用程序中配置为AudoIdle,所以我们这样做,在驱动加载时不上电,只有在SDL调用CAM_Open的时候再给SE4500上电,调用CAM_Close时再给断电。 但这时有个问题,就是系统进入休眠时会切断控制SE4500上电的三极管的控制脚的电压,除非你的系统没有真正进入休眠(CORE或者PER domain没有关闭,这样当然不会切断1.8V电压,你的LDO肯定不会关掉), 所以SE4500的3.3V在休眠时就会断电,之前启动应用程序后给里面通过I2C发送的配置参数都会丢失,一唤醒系统,再进休眠,此时SE4500又有20多mA的电流消耗,所以,我们在驱动中动态调用pin Mux,就是如果应用程序打开了SE4500,再进入休眠的话,我们动态设置pin Mux为OFF_INPUT_PULL_UP,也就是OFF MODE使能,INPUT使能,上拉使能(Omap3平台的内部上拉下拉只在引脚作为输入功能时有效,故我们设置为输入,而非输出)。 注意:SE4500使用了"Index"=dword:1,所以SDL中一定是使用CreateFile("CAM1:",***)这样的方式打开的,为了不至于冲突,系统的Camera的Index不能使用1,可以使用除1以外的其他可用值。
五、SE4500驱动和系统自带Camera驱动同时加载时(两个都使用Camera总线,但是分时复用,理论上不会冲突)。系统Camera能使用,能预览能拍照,但是SE4500能出光,不能解码了,这是怎么回事?
经过测试,我们发现是在camera驱动加载时,注册了IRQ_CAM0中断,导致SE4500的SDL软解库中无法注册该中断,所以后面就只能出光不能解码,发现该问题,我们修改了camera驱动的实现,让其只有camera打开时,才注册该中断,通过一个互斥机制,camera打开时会检测SE4500是否在工作,如果在工作,就提示ISP被占用,打开失败,反之亦然。该问题迎刃而解。
摩托罗拉SE4500 德州仪器TI Omap37xx/AM3715/DM3730/AM3530 wince6.0/Windows Mobile 6.5平台 二维软解调试记录及相关解释的更多相关文章
- 摩托罗拉SE4500 三星 S3C6410 Wince6.0平台软解码调试记录以及驱动相关问题解释
虽然S3C6410出来很多年了,甚至于已经停产了,出货的几乎都有依赖于库存,SE4500也出来很多年了,但是网上依旧不会有调试资料帮助你,一切源于自私.希望本文能帮到你,不必感谢.本文来自C.S.D. ...
- 【转载】如何在德州仪器网站查找和下载PCB封装
德州仪器的网站做得相当不错,查找IC资料和下载IC封装样样给力.那么如何在TI网站上能够快速查找到自已需要的PCB封装呢?下面我来告诉你. 1. 在浏览器中输入网址http://weben ...
- 主流芯片解决方案Ambarella的高清网络摄像机、德州仪器和控制海思
(本文由四川艾普作为数码科技有限公司 苏斌.范清华 收集) 高清网络视频监控发展到今天.正的高清时代.诸多有实力的高清摄像机厂家的产品线也逐渐完好起来,高清网络视频监控的配套产品有更加丰富和成熟.与此 ...
- 【DSP开发】德州仪器达芬奇五年之路七宗罪,嵌入式处理器架构之争决战2012
芯片是产业链上游重要的一个环节,一颗小小的芯片具有极高的技术含量和价值,半导体行业每年都会有一个各大厂商营业额的排名,除去2009年,常年盘踞在前三名位置的分别是英特尔,三星半导体和德州仪器,英特尔凭 ...
- 【DSP开发】回马枪要你命 德州仪器发布最强ARM芯片Keystone II
之前许多传闻称德州仪器将会彻底放弃OMAP系列ARM处理器,从此离开手持设备的江湖.如果你信以为真,那可就太小看德州仪器这个老狐狸了--要知道德州仪器诞生的比Intel都还早几年.三小时前,德州仪器宣 ...
- 摩托罗拉SE955 One Discrete Length,Two Discrete Lengths,Length Within Range 相关解释
motorola scanner datasheet相关解释(下面通过Simple Serial Interface(SSI)进行设置,非扫描官方datasheet的设置条码): One Discre ...
- TI(德州仪器) TMS320C674x逆向分析之一
一.声明 作者并不懂嵌入式开发,整个逆向流程都是根据自身逆向经验,一步一步摸索出来,有什么错误请批评指正,或者有更好的方法请不吝赐教.个人写作水平有限,文中会尽量把过程写清楚,有问题或是写的不清楚的地 ...
- TI(德州仪器) TMS320C674x逆向分析之二
TI官网文档: http://www.ti.com/product/tms320c6745/technicaldocuments 里面资料非常详细,可以对着里面一个个看,用的比较多的两个文档: TMS ...
- TI推出SimpleLink低能耗蓝牙CC2541
TI推出SimpleLink低能耗蓝牙CC2541 日前,德州仪器 (TI) 宣布推出 SimpleLink™ 低能耗蓝牙 (Bluetooth®Low Energy) CC2541-Q1, 这是一款 ...
随机推荐
- ViewModel在MVC3中的应用:一个view显示多个model
在mvc3中,默认是一张数据表对应一个model,一个视图 view只显示一个model. 但是有些时候,我们一个视图上可能需要显示多个model的内容,即一个网页可能要展示多张表的信息,那怎么办呢, ...
- 手机端js实现滑块推动
代码编写:(写的格式有点差,凑合看吧,但是功能是实现了的) <html><head><meta http-equiv="Content-Type" c ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON DirectFile
zw版[转发·台湾nvp系列Delphi例程]HALCON DirectFile unit Unit1;interfaceuses Windows, Messages, SysUtils, Varia ...
- 【ruby】安装Ruby
系统需求 首先确定操作系统环境,不建议在 Windows 上面搞,所以你需要用: Mac OS X 任意 Linux 发行版本 配置系统包 $ sudo apt-get install -y buil ...
- 九、Java基础---------面向对象封装、继承、多态
封装 1.1 基本概念 封装(encapsulation)是面向对象三大特征之一,它是指将对象的状态信心隐藏在对象的内部,不允许外部直接进行访问,而是通过该类提供的方法来实现对内部信息的操作和访问. ...
- 如何对HashMap按键值排序
Java中HashMap是一种用于存储“键”和“值”信息对的数据结构.不同于Array.ArrayList和LinkedLists,它不会维持插入元素的顺序. 因此,在键或值的基础上排序HashMap ...
- Java笔试题解答和部分面试题
面试类 银行类的问题 问题一:在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环? HashMap本身没有什么问题,有没有问题取决于你是如何使用它的.比如,你 ...
- 161017、SQL必备知识点
经典SQL语句大全 基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql ser ...
- Intel Edison 参考链接2
Edison的breakout板子的引脚: http://iotdk.intel.com/docs/master/mraa/java/edison.html Edison的引脚 http://www. ...
- 给文件加ip访问限制
获取IP: function getIP(){ return isset($_SERVER['HTTP_X_FORWARDED_FOR'])? $_SERVER['HTTP_X_FORWARDED_F ...