找回密码
 注册
搜索
查看: 13981|回复: 49

手机开发感想篇(连载)

[复制链接]
发表于 2005-10-10 11:17:00 | 显示全部楼层 |阅读模式
首先我要说明的是,我对手机开发的了解还是很少,开发的时间也比较短,可是说还是入门阶段,但在从事在方面的工作过程中,个人确实有很多感想,现想拿出来给大家分享分享。如有不到之处,还请大侠们斧正啊!
我毕业有3年多了,早期主要是从事一些DSC的开发,也就是fireware方面的开发了,直到去年七月份才真正走入手机开发这个行列中来。
对于第一次接触这个东东,确实有些茫然,但由于早期开发的经验和个人对研发产品的理解,我在第一阶段就对手机研发做了如下一些分解。
软件分解:
1、os:(这是系统的kernel,一般现在我们采用的os还多数是国外的,由于
   我对此不感兴趣,再者也没有机会接触到,所以就把他当成库来用。:))
2、MMI:这个大家都知道了。后面在详细描述。
3、底层驱动:包括midi,audio,lcd,keyboard等相关的驱动。
4、media ic驱动。这主要是mp3,mpeg和dsc的驱动。
5、短信:这个是手机不可少的。
6、输入法:嘿嘿,这个东有点难的。
7、电话本相关的管理:这个比较重要。
8、手机的一些其它服务:包括闹钟等相关附加功能。
9、wap:主要是上网等功能。
硬件:
1、基带芯片:多半是arm+DSP soc cpu。
2、电源管理芯片:这个不可少的。
3、附加多媒体芯片:(如果用的不是mtk平台的话,基本都要加吧)
4、audio 芯片:不可少的哦,没它就每哟声音。
5、midi芯片:4和5这两宽目前有很多方案都能合成到一个芯片上了。
6、lcd屏:没它,大家能看到什么:)
7、射频模块:用的都是集成的ic。且要bb支持。
还有就是键盘,基本也就这些了,其它的都是小模块。重要,但都可以划分到大模块中去。

今天就说到此,下次再对每个模块的开发过程谈谈自己的感想。需要一些时间哦:)

[br]<p align=right><font color=red>+5 RD币</font></p>
发表于 2005-10-10 12:57:00 | 显示全部楼层
写的不错!!7月份才入行,楼主学的很快了
点评回复

使用道具 举报

发表于 2005-10-21 16:51:00 | 显示全部楼层
怎么不继续了呢,难得见到文笔好的
点评回复

使用道具 举报

发表于 2005-10-21 20:05:00 | 显示全部楼层
特别想知道一些对手机电源管理这一块的看法............
点评回复

使用道具 举报

 楼主| 发表于 2005-10-24 10:52:00 | 显示全部楼层
真是不好意思,这些天太忙了,同时在开发4个项目啊,太累了。
现在我描述下当初我一开始在对软件和硬件做了简单的分类后,个人是如何在分类的基础上学习的。
由于我们所在公司用的是国外手机平台,所以在做任何事情前,首先得了解下这个平台的
运行机制。
对于平台的理解和学习我主要从下面3个方面着手:
1、编译原理和仿真原理;
2、平台的驱动架构;
3、平台的应用架构;
一个成功的平台,其必然有自己一套程序的软件仿真机制和一个download到手机
中的编译系统。在我们采用的平台中,软件仿真IDE用的是.net,这个东东,刚开始
我还不知道是什么东东呢,不过以我之前接触过嵌入式IDE的经历,对它简单的应用上手
还是很快了,不就模拟用用,呵呵,简单啊!(这里有个误区,就是很多人在开始学习的时候,
是多么希望把整个系统搞的很熟很熟,她们认为这样才是学东西,可是我却不这么认为,因为整
个东西你是不可能学会的,你只需要选些你感兴趣并且是热门的知识点就可以了,其它的你只要了解下,
并能简单用用就可以了。把主要精力放在你爱学的方面,学专了,你就是专家,就不愁什么了啊:))
有信心就学会了,软件仿真花了2天时间从安装到模拟,嘿嘿,通过。接着是如何了解编译下载到手机中
的软件的机制;这方面,看了平台提供的手册,发现基本采用linux的makefile编译机制,
唯一不同的是,具体编译过程用的是tcc、ADS以及dos批处理,呵呵,这个我以前比较熟悉,
所以也没有费什么时间就搞定了,注意我所谓的搞定就是她们的运行原理,而不是理解他编译系统中设计
的所以dso批处理及相关的命令操作。对编译和仿真系统了解后,就开始学习真正的平台软件了。
(我之所以要重复走上面的路,是因为我来公司时候,公司对平台的培训早完成了,所以以后所有的学习都是我自学的!)

[br]<p align=right><font color=red>+5 RD币</font></p>
点评回复

使用道具 举报

发表于 2005-10-24 11:21:00 | 显示全部楼层
<P>ADS1。2</P><P>every thing' OK</P>
点评回复

使用道具 举报

发表于 2005-10-25 11:06:00 | 显示全部楼层
<P>很不错的文章,继续啊 ! </P>
点评回复

使用道具 举报

发表于 2005-10-27 01:33:00 | 显示全部楼层
<P>我都不觉的怎样,只是写手机有什么?怎样开发的没有说!</P>
点评回复

使用道具 举报

 楼主| 发表于 2005-10-27 11:23:00 | 显示全部楼层
<P 0cm 0cm 0pt">现在就开始主要讲具体的开发了,有些朋友好像等的不耐烦了啊:)</P><P 0cm 0cm 0pt"><FONT face="Times New Roman"> <p></p></FONT></P><P 0cm 0cm 0pt">二、对于平台的驱动架构,我进行了几个分类:</P><P 0cm 0cm 0pt"><FONT face="Times New Roman">1</FONT>、DI的运行原理;</P><P 0cm 0cm 0pt"><FONT face="Times New Roman">2</FONT>、键盘的运行流程;</P><P 0cm 0cm 0pt"><FONT face="Times New Roman">3</FONT>、如果外扩media芯片,了解扩充机制;</P><P 0cm 0cm 0pt"><FONT face="Times New Roman">4</FONT>、audio和midi的运行流程;</P><P 0cm 0cm 0pt"><FONT face="Times New Roman"> <p></p></FONT></P><P 0cm 0cm 0pt">由于我刚进公司,老大就安排我先把公司demo显示搞定,呵呵,所以我就的先了解LCD的驱动,以及我们平台的di运行原理。</P><P 0cm 0cm 0pt"><FONT face="Times New Roman"> <p></p></FONT></P><P 0cm 0cm 0pt">当时,我们LCM是直接沿用公司早期开发手机LCM模块,那个lcm和logic(<FONT face="Times New Roman">30</FONT>万image处理chip)芯片组合在一起的;lcd控制器是<FONT face="Times New Roman">HD66773</FONT>,<FONT face="Times New Roman">65</FONT>Kcolor;我们平台lcd的设计采用的是bypass模式,lcd是直接接在multimedia芯片上(采用的是台湾芯片,具体型号不好说),BB通过A<FONT face="Times New Roman">2</FONT>和A<FONT face="Times New Roman">3</FONT>地址线来选通主副lcd,lcd的硬件复位直接与系统复位接在一起,bypass控制直接用bb一个gpio口控制。刚开始是第一次接触这种彩色lcd;所以花了<FONT face="Times New Roman">2</FONT>天时间来看厂商提供的lcd驱动程序,看后觉得基本掌握了日系列的lcd控制器的基本原理,她们的控制器能控制的寄存器也就<FONT face="Times New Roman">40</FONT>几个左右,主要分为:power控制,reset控制,display控制,area控制,gamma控制等。掌握以上的控制流程,基本可以点亮lcd了,当然,lcd的效果调试比较难,需要细细研究,我到现在也不太会,虽然我调试了<FONT face="Times New Roman">20</FONT>几款lcd。在对LCD的驱动和硬件设计有个初步的了解并编写代码后,基本完成了lcd的驱动级别设计,当然随后的工作最重要,就如何把这些驱动代码放到我们平台的驱动架构中去,接着就是必不可少的调试。在我们的平台当中,对lcd驱动的初始化放在对ARM做了最基本的初始化后,平台提供的源程序有lcd驱动的程序,我没有花多少时间就找到了,然后就是用我的lcd驱动替代它的lcd驱动。这步做完后,我并没有马上去了解我们平台的di刷新原理,因为我认为这个时候最重要的就是要把lcd调亮,然后再去看系统di机制。在具体调试lcd的过程中,那简直不是人过的日子啊,我整整调试了<FONT face="Times New Roman">1</FONT>个多星期,最后才调试出来。之所以花这么多时间才调试成功,关键是我首先要了解multimedia芯片的基本bypass原理,代image cpu lcm具体控制,以及硬件电路的正确否。最后在总结工作中发现,我主要花的时间在对带了image cpu lcm的控制上。因为lcm上多了一个cpu,所以我要通过image</P><P 0cm 0cm 0pt">cpu来控制lcd的控制器,当然,由于当初的lcd硬件电路上和bb的bus时序还有些问题。(对于以上的具体我将不描述了,因为这种现象一般大家很难遇到啊!)在lcd调试成功后,我得赶紧看我们平台的di运行机制,这方面我请教了我们公司其它的员工,花了一天的时间,大概了解运行原理。在我们这个平台,把显示作为一个task来运行,当运行这个task的时候,就会调用lcd的的刷新函数,把需要刷新的数据刷到lcd上,当然,系统开了一个lcd刷新数据的buffer,用来存储MMI层刷逻辑lcd的数据。在lcd驱动这块,就直接把这个buffer刷到lcd上。在完完全全走通上面的工程中,我花了<FONT face="Times New Roman">2</FONT>周多时间,同时对DI的运行原理有了一个比较系统,但是不是很详细的了解。</P>[br]<p align=right><font color=red>+5 RD币</font></p>
点评回复

使用道具 举报

发表于 2005-10-27 13:07:00 | 显示全部楼层
<P>不错,讲得比较详细!~!</P>
点评回复

使用道具 举报

发表于 2005-10-30 11:56:00 | 显示全部楼层
OK,thanks[em15]
点评回复

使用道具 举报

发表于 2005-10-30 21:34:00 | 显示全部楼层
<P>不错,我全篇粘下来了,作为进入手机领域的入门。newcomer</P>
点评回复

使用道具 举报

发表于 2005-10-31 23:29:00 | 显示全部楼层
写的真的很不错,先粘下来再好好细读!
点评回复

使用道具 举报

发表于 2005-11-4 11:11:00 | 显示全部楼层
<P>楼主写的不错,支持!</P>
点评回复

使用道具 举报

 楼主| 发表于 2005-11-4 13:49:00 | 显示全部楼层
<P 0cm 0cm 0pt">四、</P><P 0cm 0cm 0pt"><FONT face="Times New Roman">       </FONT>写得太慢了,让各位大侠等急了啊:)</P><P 0cm 0cm 0pt">上次讲了下关于我们手机平台的DI运行原理,如有不正之处,请大侠们指出来。这回我就讲讲键盘的运行流程;说到键盘,估计各位都或多或少的写过相关的程序,我在接触手机键盘之前,也写过一些嵌入式设备的简单键盘驱动程序,记得最复杂的一次键盘驱动是用cpld写了一个20个键的键盘扫描驱动,cpld把扫描到的键值通过bus传给51cpu(当初我是用c51做主cpu的:),当时的设计是把51外扩地址0x7fff作为键盘值存放地址。),cpu这边我是做了一个时间片轮系统,对于键盘的扫描是没20ms做一次,去抖2ms,当时用起来还算比较稳定,没有任何问题。可是如今我接触到我们手机平台的键盘处理,感觉自己以前的键盘处理简直是太笨了,想法太简单。我们目前BB端都有直接的键盘接口, 5X5的键盘,硬件只要把横竖5条线直接接到10 个键盘口上就可以了,至于当有按键的时候,键盘io口有中断响应,上面我之所以说我们平台的手机键盘做的好,主要是说它的驱动做的好。从我对程序代码的理解,我们平台的键盘驱动主要由以下一些状态组成:<p></p></P><P 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">1、  键盘硬件中断:这块主要是键盘口有电压变化,从而触发键盘的中断,BB端cpu就会进入中断处理程序块;<p></p></P><P 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><FONT face="Times New Roman">2、  </FONT>中断程序入口:这块写的特别巧,所有的中断初始化,中断处理程序都统一放到一个具有回调功能的数组里处理,对编写程序的人员来说,整个系统中断管理清晰,代码简洁,关于其具体代码这里就不一一描述。</P><P 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><FONT face="Times New Roman">3、  </FONT>中断服务程序:这段也做了一些特殊的处理,当键盘中断来了后,首先是通过上面的中断程序入口的回调直接到中断服务程序中去,中断服务程序首先是扫描中断过来的键码,在得到键码后,马上启动一个最高级别的定时器,其大概是<FONT face="Times New Roman">20</FONT>ms,在<FONT face="Times New Roman">20</FONT>ms的定时器到后,又来扫描这个时候的键盘键码,如果键码一样,就把这个键码发到应用处理层的task中去。如果在定时器还没有到的时候,有键盘中断来,那么前面一次的处理全部释放,定时器解除,直接处理下次中断。</P><P 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><FONT face="Times New Roman">4、  </FONT>以上就是关于我们手机平台的底层键盘驱动的大致框架,个人认为这个框架对嵌入式的设备的键盘处理都有很好的借鉴作用。当然,关于上层键盘的应用处理也是十分关键的,不过底层的键盘处理时间短,那么整个系统对按键的响应比较快,对整个手机的菜单处理就越有利;</P><P 0cm 0cm 0pt">关于键盘的流程我就简单将将,因为这块我想了想,实在不好描述啊,如果是看过一些相关代码的话,对其理解就更好了,当然我不能直接移植代码到这里来,所以不太理解的地方,欢迎各位一起来探讨。</P>[br]<p align=right><font color=red>+5 RD币</font></p>
点评回复

使用道具 举报

发表于 2005-11-6 22:10:00 | 显示全部楼层
<P><FONT face="Times New Roman">
</FONT>中断服务程序:这段也做了一些特殊的处理,当键盘中断来了后,首先是通过上面的中断程序入口的回调直接到中断服务程序中去,中断服务程序首先是扫描中断过来的键码,在得到键码后,马上启动一个最高级别的定时器,其大概是<FONT face="Times New Roman">20</FONT>ms,在<FONT face="Times New Roman">20</FONT>ms的定时器到后,又来扫描这个时候的键盘键码,如果键码一样,就把这个键码发到应用处理层的task中去。如果在定时器还没有到的时候,有键盘中断来,那么前面一次的处理全部释放,定时器解除,直接处理下次中断。
</P><P>在20ms延时未到的时候是不会响应键盘中断的,否则的话键盘扫描程序容易受环境干扰。</P><P>20ms延时最好写在中断处理函数外面,否则中断处理太耗时间而影响菜单操作感以及屏幕反应速度</P>[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2005-11-6 23:56:00 | 显示全部楼层
即将开始的设计也牵涉到这方面的知识,很有启发。
点评回复

使用道具 举报

 楼主| 发表于 2005-11-9 12:39:00 | 显示全部楼层
<P 0cm 0cm 0pt">五、</P><P 0cm 0cm 0pt"><FONT face="Times New Roman">       </FONT>关于<B>aquasnake</B><B>兄说的建议非常之好,不过我们平台确实可以在启动</B><B>2</B><B>0MS的定时器期间可以响应键盘中断,同时我说的最高级别定时器,其意义在于这个定时不在中断内,而是在系统最高定时器所在的task中运行。当时间到了之后,会回调定时器启动时候写入的回调函数。</B></P><P 0cm 0cm 0pt"><FONT face="Times New Roman"> <p></p></FONT></P><P 0cm 0cm 0pt">外扩media芯片的问题。</P><P 0cm 0cm 0pt"><FONT face="Times New Roman"> <p></p></FONT></P><P 0cm 0cm 0pt">其实我最主要的时间就是花在这块上,所以对于这块我将会详细讲讲,让大家和我一起分享下media中的乐趣。我们外扩media芯片用的是台湾sunplus公司的;相信各位对此都有些了解。sunplus的手机media芯片在目前的市场上,其性能只能算中等,与韩国一些芯片相当,比ti级别的要差些,但sunplus的价格还可以,在做中端手机选择sunplus还是有些优势,不过就是在运行mp<FONT face="Times New Roman">3</FONT>功能的时候,功耗偏大。闲话就不说了,回归到我刚开始接触这款media时候的情景吧。刚开始接触的时候,我以为我们公司会叫我负责media芯片功能的维护,谁知道,后来和sunplus沟通后,发现我们只是在bb端来调用sunplus已经做好的api,让后用这些api来实现类是于mp3,mp4等功能,乍一听做这些,感觉挺没有意思的,就是用用api,感觉太简单了,可是在后来的应用中发现,其难度还是很大的,尤其是做好,那难度还是非常之大啊。</P><P 0cm 0cm 0pt"><FONT face="Times New Roman">       </FONT>前面讲过了lcd的调试,其实在LCD的调试过程中,就已经涉及到了media芯片的bypass功能,直接通过media芯片的bypass high功能把总线上的lcd数据通过media芯片送到lcd上,之所以要通过media芯片接lcd,是因为,在后续的拍照。录像,lcd的数据是直接由media送到lcd上,而不是通过bb送到lcd,提高刷屏速度,减少bb端cpu的资源。</P><P 0cm 0cm 0pt"><FONT face="Times New Roman">       </FONT>说到bypass功能,相信各位都很熟悉啊,我对此也上了解,谈不上深刻,不过bypass的功能于具体的media芯片有关系,如果media芯片做的好的话,bypass功能的高低切换基本不需要做什么延时,对于国内的c<FONT face="Times New Roman">625</FONT>,我只是看过一些资料,但没有详细用过,不知道其bypass功能性能,但我调试过台湾两家其它小公司的media芯片,发现其bypass功能的切换时间比较长,需要延时,所以在调试过程中要特别注意。在理解了bypass功能之后,我就研究下media和bb端的通信协议,根据sunplus提供的一些上层代码,同时再听她们FAE讲解了一些关于通信协议的问题,我基本了解了这种通信机制,这种通信机制硬件主要采用的是总线i86接法,软件能用的是master和slave通信原理,bb是master,media是slave,bb端下cmd给media,然后查询cmd是否发送成功已经media是否正确执行cmd;这样的机制很简单,便于软件和硬件的连接和驱动,可是其由于简单的通信机制,会给bb对整个系统的可靠运行增加负担,比如说cmd命令不成功,bb端将如何处理等问题。当然sunplus底层的软件跑的还是非常稳定。很少出现这样的问题。在理解了bypass和通信机制后,在bb做相应的驱动和应用api就简单多了。</P>[br]<p align=right><font color=red>+5 RD币</font></p>
点评回复

使用道具 举报

发表于 2005-11-10 19:33:00 | 显示全部楼层
我也是个新手,做的时间不长,感觉写的很好.
点评回复

使用道具 举报

发表于 2005-11-10 22:43:00 | 显示全部楼层
<P>你的键盘延时内如果不屏蔽键盘中断,就有问题</P><P>请你做ESD测试的时候在键盘上开启一个小马达,看是否会有干扰到键盘扫描识别</P>[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-4-28 11:39 , Processed in 0.052811 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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