最近搞起了手机驱动,刚开始接手的工作都是MTK平台的功能机方案,从6250开始到6260,一边学习一边搞了LCD、Camera、Flash、Keypad、LED等。虽然是刚上手吧,但是我有深厚的单片机基础,又在学习STM32时候学习果uCOSII,学过ARM+Linux,所以对于搞功能机的驱动也是毫无困难。最近刚搞的是MT6261的,搞6250和6260时候还有个参考,有以前好使的代码,比猫画虎都能完成任务,但是6261的公司以前都没搞过,代码也是最原始的,所以这也是自己又一个台阶吧!
自我感觉以后要改一改以前学习的习惯,不能搞过了就搞过了,没过多久就忘了,时间一长看看自己曾经搞过的东西都怀疑那是谁的作品。以后要多做总结,不能懒,最好将自己的点点滴滴都记录一下,这样才有利于不断的总结,不断的进步!
言归正传,说说最近搞6261的过程吧!
搞6261其实挺蛋疼的,遇到不少麻烦。首先,拿到原始代码和板子之后首要任务就是先能够编译程序、下载、并且开机。原始代码经过一些定制后先要能够编译通过,这个经过老大一阵忙活就OK了。但是当我拿到板子,按照板子的原理设计,根据所选Flash型号在代码中更改后怎么也无法下载。一直提示的内容是软件的Flash_ID 和检测到的不一样,于是我就查找原因,正常情况下改Flash的配置只需要改动MemoryDeviceList和custom_MemoryDevice.h就可以,在custom_MemoryDevice.h中改成自己用到的Flash型号,在MemoryDeviceList中查找自己用的Flash型号,如果没有的话添加。别的地方没必要改动啊,这个纠结,一顿忙活,后来怀疑是Flash_Tool有问题,但是后来又搞了搞几个版本的都一样的,又在软件上一顿怀疑一顿改,但是都是不行,知道一周多厚查出来是硬件设计的问题,BB芯片上和Flash的接口应该是GPIO4~GPIO9,但是却接到了GPIO3~GPIO8,措了一个脚,简直晕死!查到原因后先做了简单的飞线,虽然丑,但是总算可以下载程序了!
为了更多的验证问题,下载OK后我又改动了一些内容,发现了一个问题:我用的Flash型号是W25Q128FWPIM,原来的MemoryDeviceList中有MTK_INTERNAL_W25Q128FWIM,用MTK_INTERNAL_W25Q128FWIM是不可以的,另外,在MemoryDeviceList_MT6250_Since11BW1212.xls中有W25Q128FWPIM这一栏,但是复制这一栏到MemoryDeviceList_MT6261_Since11CW1352.xls后却无法正常开机,现象为按下开机键后有开机画面但是停顿大概2秒后黑屏死机。这些关于Flash的配置区别在于后边的时序不一样,由此得出结论:Flash的配置关键是custom_MemoryDevice.h文件中改成自己选用的Flash型号,该型号和MemoryDeviceList中要完全一致,并且MemoryDeviceList中该Flash的时序等信息要准确无误!还有一个比较奇怪的问题是,这个下载不了的额问题确实和Flash_Tool下载工具有关系,我用1413和1432版本的无法下载,用1416和1420的可以下载,由此可见无法下载的问题和Flash_Tool确实有一定得关系。具体要看相关的支持文档。
程序可以正常下载后新的问题更让人头疼,下载后无法开机。按下开机键时候电流8MA----40MA变化,不稳定,松开开机键就掉到0MA,从串口看打印信息是这样的:
F1: 0000 0000
V0: 0000 0000 [0001]
00: 0000 0000
U0: 0000 0001 [0000]
G0: 0002 0000 [0000]
T0: 0000 00BE
Jump to BL
Init Start
Init done, 0xe1d713a
Jump to ExtBL, 0x6060
~~~ Welcome to MTK Bootloader V005 (since 2005) ~~~
**===================================================**
怎么改动就是这些,改了几个宏之后想抓Log,但是什么也没得到,在网上也找了很多相关资源,最后也没能说出个123,我手上除了自己公司的板子还有一块别的公司已经量产了的板子,出现的是同样问题,所以怀疑是软件问题,而软件问题究竟出现在哪里却不得而知。期间我还换了一块GD的Flash试了试,问题依旧、现象相同。从网上查资料问伙伴得到的唯一有用的信息就是说换一套代码试试,无奈之下又想办法搞了一套代码,本来想着这回手到擒来肯定就能开机了,但是却跟之前的代码一个现象,顿感蛋疼难忍啊!后来偶然的机会用公司其他的直流电源一试竟然奇迹般的开机了,闹了几天原来是我用的直流电源有问题,汗啊!不用直流电源改用电池,很快自己的板子和另外一块板子都能正常开机!不过后来注意到的是:
project.mak文件中
DCM_COMPRESSION_MAUI_INIT = TRUE
DCM_COMPRESSION_AUDIO_EFFECT = TRUE
DCM_COMPRESSION_SUPPORT = TRUE
DCM_COMPRESSION_MAUI_INIT = TRUE
这几个宏如果不开的话也不能正常开机。
手机终于开机了,下边就要调试LCD屏,没有显示接口调其他东西就想漆黑夜里走路,你很难知道自己是什么情况=----是对还是错?!
而调试移植LCD就相对简单了,打电话问了LCD的FAQ关于LCD的接口什么的信息就动手改了起来,我用的屏是四,1data串口接法,数据传输MCU是8Bit,color是8Bit-565,这样配置接口信息,然后将LCD厂家给的LCD的Init设置填到LCD的Init函数中重新编译LCD就正常点亮了,至于其他的屏的旋转、镜像什么的额只需改动Init函数中相关寄存器的值就OK!此时需要注意的是如果数据接口配置不正确就会造成数据传输有问题,虽然也会有一定的显示,但是都是不正常的,比如我刚开配置接口信息是三线2data模式,LCD一直白屏;设置成MCU是16Bit,color是16Bit-565就出现色彩一场并且LCD只有一半显示,并且显示的是在LCD
1/4空间显示并排显示两个屏。
到此为止驱动的初步工作算是结束了,下一步再调什么也就比较顺畅了!
总结,其实这次遇到这么多的麻烦,话费这么大的精力和时间是做了很多无用功的,下载不了和不开机其实主要都是硬件的问题,但是却在软件上找了好几天。以后的驱动工作中一定要注意,遇到问题一定要先从硬件查起,在确定硬件没问题的时候再怀疑软件。