Archive for the ‘mobile’ Category

[转] 移动互联网的终端革命

Friday, May 2nd, 2008

From: http://www.bouhe.com/mobile-marketing/1694

诺基亚、爱立信公司的首席技术技官都已驻扎在硅谷办公,他们不得不来到这里,因为他们突然发现苹果和谷歌已经开始威胁到他们的业务。2007年,iPhone、Gphone无疑是最热门的词汇,就连微软也提出了Mphone(Multi-phone)的概念,认为手机应该融合多种无线技术、多种输入技术和多种应用功能。

“2008年会成为MID(移动互联网设备)元年。”业内人士预测。这一判断主要是基于明年上半年英特尔公司即将推出可以放在口袋里的移动终端,而45纳米技术的突破以及多核技术的应用,可以满足MID芯片的移动性和无处不在的计算,并同时降低功耗和尺寸。作为PC互联网时代的最大赢家,英特尔希望将其霸主地位延伸到移动终端领域。就连全球最大的网络书店亚马逊也新推出了手持终端——电子书阅读器,开始软硬兼备。

随着手机和互联网的融合,越来越多的公司开始涉足手机及其他移动终端的生意,硅谷已然变成了手机谷。而围绕着终端的变革,原有的硬件、软件、服务、内容等公司都开始跨越产业链上的多个环节,致使原有的产业边界越来越模糊。以往我们耳熟能详的公司如诺基亚、苹果、谷歌等已经不能单一定位了,它们早已不单是手机、电脑和搜索公司了,而是在移动互联网的大背景下,走到了同一条竞争线上。

随着微软、英特尔、诺基亚、谷歌、苹果等全球巨头加入到移动互联网的战役中,既有的产业格局也会出现新的变化。苹果和谷歌已经成为事实上的虚拟运营商,在它们的平台上会开发和开放各种应用,移动运营商未来的地位会下降。事实上,苹果公司一直和AT&T等移动运营商捆绑销售,并和运营商进行分成。而谷歌打算用46亿美元竞拍美国700MHz的一个无线频段,更有传言,谷歌会收购美国第三大电信运营商Sprint Nextel。

相比苹果、谷歌对移动通信市场的入侵,中国的移动互联网行业还呈现比较封闭的状态,但这并没影响到国内众多创业公司的参与热情。曾有VC感慨,现在只要是和手机相关的商业计划书,十之八九都是手机客户端软件,例如手机聊天、手机下载等各色各样的手机软件。这些公司几乎百分之百都号称要做成手机平台,以黏住用户。

移动终端的影响力之大,在于其离用户最近。作为最终用户,人们与外界的联系节点已由最早家庭的邮政编码,到PC时代的一串IP地址,再转移到移动电话的手机号码。联系的终端越变越小,但却越来越跟随、紧贴用户。在众多公司抢占终端的过程中,用户需求成为最终的变量。在这一点上,无论是iPhone还是Wii的热卖,在于其最先洞察并引领用户需求,通过改善人际交互的界面方式,将用户从键盘中解放出来,满足用户对于自由的渴望。

但仅仅成为一个酷品还不足够,用户更需要终端上的服务和内容。在这一点上,iPhone还远远不够。移动互联网不仅仅是将互联网搬到手机上,看YouTube、上Facebook,随着医疗健康、教育、金融等服务在手机上实现,一定会诞生新的商业模式。

一台便携的移动终端,随时随地连接互联网,围绕这个目标,移动运营商、芯片厂商、终端厂商、互联网服务商、内容提供商史无前例地集体参战,成为过去一年最热闹的场景。而在这场战争背后,首先是对终端的争夺,人机交互界面从键盘到多点触控(multi-touch)率先成为风潮。

当苹果公司的iPhone在欧美手机市场刮起旋风的时候,另外一个手机“门外汉”也把自己的利益触角伸向了这个领域,这家公司就是全球最大的互联网公司谷歌。

对于这家在互联网上取得了巨大成就的公司来说,谷歌进入手机市场并不需要像苹果公司一样自己设计并制造出一款特立独行的酷品手机GPhone来争取用户,而是采用了它更为擅长的方式——用开放的软件平台使自己成为一个联盟的组织者,就像在互联网上用AdSense建立了自己的广告联盟一样。

在2007年11月5日谷歌宣布的手机联盟中有34家企业成员,包括摩托罗拉、T-、HTC(宏达电)、高通及中国移动等34家全世界不同国家和地区的移动运营商、手机芯片提供商和手机生产商等等。谷歌将为联盟的成员免费开放一个基于的手机操作系统平台“Android”。谷歌称,这个平台是完全开放的综合性移动平台,供联盟成员在此基础上开发新产品、改进服务和压缩用户成本。

在互联网上,谷歌用这种免费提供软件的方式获得了大量的广告收入,2007年前三个季度,谷歌的广告收入达到了约118亿美元,它的这种模式将一直靠卖操作系统软件为生的微软搞得非常被动,如今谷歌又希望能在手机平台上重演这一幕。

在苹果、谷歌这样的新势力纷纷用新模式、新平台进入封闭的电信市场的背景下,以手机为最终表现形式的移动通信市场会发生怎样的深刻变化?也许我们可以从25年前发生在PC行业上的一切来寻找答案。

25年前,整个PC行业还处于群雄割据的状态,没有一个整体性的产业标准,各个PC制造商都有属于自己的一套独立的操作系统,他们靠自己强大的渠道和产品设计能力去争取用户,而微软在这个时候却用软件捆绑机器的销售方式统一了大多数的PC平台,一定意义上这也统一了PC行业。

回到现在正在发生剧烈变化的手机行业里,当手机作为基本语音通话工具时,固定标准是存在的,而当手机逐渐发展成为一个个人随身数据平台,类似于一台小型PC时,这似乎又回到了25年前PC行业的混乱时代,在这个混乱的各自为政的时代,用何种模式、何种平台来统一手机终端就成为了未来这个产业中最大的悬念,在这个悬念破解之后,又会在其背后引发一系列更大更复杂的产业变革。

统一平台下的入侵计划

中国是全球最大的移动市场,在2007年11月底,中国手机用户数已经超过了5.39亿。如此庞大的市场也驱使众多的风险投资及创业者在其中淘金,北京天腾时空信息科技有限公司就是其中之一。

这家由创业基金扶持的公司成立于 2005 年,号称拥有领先的移动多媒体通信和软件研发实力,他们正在开发适用于不同型号手机的第三方客户端软件。这项工作并不容易,因为中国市场上的手机型号实在是太多了,他们要根据系统的不同、机型的不同来对开发出的软件做出调整。尽管如此,天腾时空的CEO马腾对未来还是充满着信心:“我们正在构建一个移动生活圈,把互联网上的东西都带到手机上,我们的目标就是让所有人自由,让大家的网络生活摆脱那根网线和电源线。”

把互联网上的所有东西带进小小的手机终端,这个梦想驱使着中国无数的创业公司在其中寻找着机会,尽管他们坚信手机与互联网的结合是未来的趋势,但是以他们的力量,在中国移动把持的移动运营市场上还是显得太薄弱,现在有了全球最大的互联网公司谷歌的加入,互联网侵入手机的征程就显得不再那么坎坷了。

在谷歌看来,全球有30亿部手机,但是在大多数情况下,手机只被设定为语音通信和发送短消息的一种工具,通过手机上网获取及发布信息的功能被忽略掉了。“这给用户带来了不必要的麻烦,并限制了他们可以享用到的服务。”谷歌移动服务总监Andy Rubin认为,这样的缺陷实际上是过去几十年间移动通信行业迅猛发展的副产品,尤其是移动电话的市场割据更加深了这一点。在这种情况下,手机制造商有充足的商业理由来开发他们各自的受保护的软件,而且运营商也更在意他们眼前所能获得的利益。

这种“各自为政”的发展方式意味着应用服务的提供商必须花大量的精力来实现不同系统的兼容,他们大量的精力和技术人员都花在了如何让自己的软件能顺畅地运行在不同型号的手机上,而不是从用户的利益出发进行创新。

缺乏共享软件平台,也打击了移动领域外的商业力量的积极性,他们不愿意投入更多的时间和资金来挖掘手机更广泛的应用潜力。每当提起正在做手机客户端及免费WAP的公司,风险投资商们都会苦笑着摇摇头。“这种缺乏统一平台的做法使研发的成本居高不下,从而阻碍了创新。”Andy Rubin说。

谷歌的Android平台至少让我们能看到这样一种可能,即在开放的互联网运作模式下,一个如YouTube、Facebook这样的创意,都能通过一个统一的平台将服务惠泽于互联网上的每个人。这也是互联网上能产生对用户有利并促进商业公司收入增长的新服务及新模式的主要原因。

现在,要让互联网顺利的入侵进手机,谷歌所要做的就是用免费提供软件的方式先尽可能地统一手机的平台,然后再依托互联网向这个被自己洞开的门户源源不断地输入各种应用和内容。

“用这款诺基亚6131i手机坐公交车可以直接当公交卡使用”,“可以直接在诺基亚手机上学习新东方的英语课程。”2007年12月11日,在北京举办的诺基亚“完全互联生活2008”大会的一侧,众多诺基亚旗下的公司及合作伙伴展示着诺基亚基于移动互联网推出的新的应用服务。其全球副总裁邓元鋆也宣布诺基亚从2007年开始已经成为了一家互联网公司。2007年8月,诺基亚就已经在全球宣布推出了Ovi(芬兰语中意为“门户”)网络服务,服务内容包括了在线地图、在线游戏和在线音乐商店。

最近几年来,诺基亚在全球收购了一大批提供各种互联网应用服务的公司:2006年8月,斥资6000万美元收购了拥有160万首歌曲的音乐网站Loudeye;2007年7月,收购美国多媒体公司Twango,Twango主要提供为互联网上共享、发布多媒体信息搭建平台的服务;紧接着在9月份,他们又收购了一家名为Enpocket的移动广告公司;10月初,诺基亚又宣布以81亿美元收购美国的Navteq公司,Navteq是汽车导航系统、个人导航设备和其他企业数字地图及基于网络地图系统的主要供应商,同时还拥有提供美国交通信息的Traffic.com网站,这也是诺基亚迄今为止最大的一笔收购; 12月,诺基亚又收购了为手机用户提供共享电脑文件的Avvenu公司。

一系列的收购行动使这家全球最大的手机制造商逐渐成为了一家提供互联网综合服务的公司,通过整合一系列的应用,他们将互联网服务引入到了自己生产的手机平台上。

诺基亚是全球手机行业的霸主,在全球手机市场上的市场占有率接近40%,在中国,2007年的前三季度,他们就卖出了5050万部手机,目前约有超过1.3亿中国用户在使用诺基亚。作为一家处于产业链下游的公司,诺基亚已经不满足于只是制造和销售手机了,它不仅要牢牢掌握住终端,而且还想把握住这个未来的信息渠道。

谷歌成立的Android联盟在一定程度上也在威胁着诺基亚。诺基亚是另一个手机软件平台Symbian的控制者,虽然诺基亚控制的Symbian联盟不具备像Android联盟这样将移动终端、芯片、运营、软件应用、设计等产业链的各个层面的力量都集成在一起的能力。不过依靠市场占有率的绝对优势,诺基亚并不惧怕手机领域的新闯入者,2007年上半年Symbian智能手机在全球共出货3460万部,Symbian智能手机累计出货量已经达到1.45亿部,在智能手机市场的份额达到72%。目前诺基亚、摩托罗拉和索尼爱立信手握全球六成以上的市场占有率,这意味着Symbian至少将在相当一段时间内横行智能手机市场。

诺基亚想用自己的实际行动证明,诺基亚的手机霸主地位是任何一家公司都无法撼动的,现在它在维持霸主地位的同时正主动向互联网靠拢。显然不用怀疑诺基亚适应变化的能力,它已有将近140年的历史,之前卖过劳保用品,也制造过电视机,因此,诺基亚公司坚信,与其自身所经历过的困难相比,目前向互联网转型的所有困难都显得微不足道。

重构手机价值链

整个移动通信领域,2007年最受关注的公司是苹果。自从6月份推出iPhone以来,iPhone至今已销售了超过140万部。更为重要的是,iPhone的出现开启了一个新型的与电信运营商分享收益的模式。

苹果运用的是彻底封闭型平台策略,苹果通过与当地电信运营商的业务捆绑销售产品,从用户收入中抽取一定分成。苹果在美国与运营商AT&T、在德国与T-、在英国与O2、在法国与Orange都采取了这样的合作方式。以苹果与AT&T的合作为例:苹果公司每月从已经与AT&T签署iPhone服务协议的每位用户中可抽取3美元费用;而新用户,苹果每月则可从每位用户中抽取高达11美元的费用。

为什么苹果能与移动运营商分成?答案之一就是,苹果的iPhone能通过WiFi的方式接入互联网,使得每位用户的ARPU值增加,为运营商带来除语音通话之外的数据业务收入。

曾传言苹果在2007年11月份与中国移动探讨过这种合作模式,但是对于靠语音及短信业务为主、且在移动产业链中处于主导地位的中国移动来说,他们并不喜欢手机产业中新出现的一些商业模式。这也证明了谷歌移动服务总监Andy Rubin对封闭的电信行业的判断,利润流向了少数的几家具有垄断性质的手机制造商与移动运营商那里,这种方式有碍于这个行业创新应用的产生。

随着谷歌这样的互联网公司将触角逐渐伸向电信领域,并且诺基亚也在主动向着互联网转型,曾经强硬封闭的运营商也只能慢慢地走向开放。移动业务价值链势必会有一个重构的过程。

据悉,谷歌打算用46亿美元竞拍美国700MHz的一个无线频段,并向美国联邦通信委员会(FCC)提出了参加拍卖的四个条件:要求获胜者向手机用户开放应用,开放设备,向移动运营商开放批发服务,向内容提供商开放网络。这就意味着,谷歌决意要彻底改变原有电信业的商业模式。除此之外,又有传言说谷歌会收购美国第三大电信运营商Sprint Nextel。

全球最大的互联网公司反过来收购一家电信运营商,如果这样的事情真的在2008年发生,那整个电信行业就会步入一个新的时代,不管怎么说,互联网入侵移动通信市场的序幕已经真的拉开了。

狂欢吧,身体!

在电影《迷失东京》中,女主角斯佳丽·约翰逊用好奇的眼神观看着一名玩着跳舞游戏的日本男子,他大汗淋漓,正操作一种需要手舞足蹈甚至360度旋转身体才能配合画面节拍的游戏。在东京,拥有这种运动式大型游戏机的游戏厅非常多,电影选择这个场景也是有意突出西方人对奇特的日式娱乐的惊讶。

然而,从2006年底开始,一款由日本任天堂公司开发的名为“Wii”的游戏机迅速风靡欧美家庭,这款电视遥控器般大小的游戏机正像上世纪80年代的卡拉OK一样,它凭借更接近自然的交互方式让全家老少都能参与到游戏中来。一时间,自由交互式操控的复兴给整个游戏机产业注入了新的活力。

在Wii诞生之前,游戏业多少有些尴尬:上班族没时间玩,老年人上手又太难,小孩子受到家长的严格监督和管制。实际上,大多数人的游戏经验都只停留在童年,游戏随着玩家长大成人遭到放弃甚至厌恶和抵制。多数人后天的发展不仅没有打开体验的更广阔天地,反而是一步步进入专业化、职业化的路径,再也没机会感受自身生活范围以外的世界。

Wii的出现改变了这一切,Wii的设计师宫本茂也因此成为英国《经济学人》的“年度创新大奖”的获得者,“当今电子游戏界的关键人物”的评价也从另一个角度证明了Wii的创新价值。

Wii的重要性在于,设计者宫本茂坚信,游戏必须与每个人的日常生活发生联系;游戏必须更加深入社会,得到整个社会的理解。这可以看作这位游戏设计大师的游戏世界观,正是这样的信仰产生了Wii的颠覆性创想。这种信仰也正好道出了游戏的本质——游戏本来就是生活的延伸,是人们工作之余的一种经验扩展,游戏让人获得习以为常的生活里难以体会到的感受,甚至是经验和知识,怎么能将大部分人隔离于游戏之外呢?

被束缚的自由

“硅谷海盗”乔布斯似乎比一般人更加难以忍受密密麻麻的按键和狭小的屏幕给人的束缚感,素来爱凭自我感受来判断技术趋势的他坚信:技术进步不应该成为束缚人自由的枷锁。iPhone证明乔布斯又“赌”对了。这款手机在把实体按键简化到只剩一个之后,更是利用多点触控(multi-touch)屏幕让自由轻松的触控体验发挥到了极致。他曾经描述,自己过去在使用手机时,看着密密麻麻的按键却找不到一个简单的功能时,头脑中就只有把手机砸掉的冲动,何谈使用它正常工作。

交互设计大师、“Macintosh”之父杰夫·拉斯基(Jaf Raskin)早就指出,好的设计不会让使用者养成对今后工作不利的习惯,但设计人员却经常有意无意地给用户设下坏习惯的陷阱。事实上,良好的设计应该在给用户带来帮助的同时,把对其未来可能出现的限制性障碍降到最低,保持使用者自由的可扩展性。

实际上,界面的不自由长久以来是一个被忽视并且有点积重难返的问题,越来越复杂的设备和使用者界面,大大增加了拉斯基所说的陷阱的数量,而解放使用者自由就需要下更大的决心和冒更大的风险颠覆传统。

当互联网信息过载让人们淹没在信息海洋中时,谷歌充当了颠覆者的角色,它只在网页上显示一个输入框;当手机开始附加各种原来PC的功能而变得日益复杂,学习成本上升时,iPhone开创性地只保留一个实体按钮。大刀阔斧地删减界面信息、按钮和选项,使用户不用进行多余的思考,即可快速进入想要达成的任务。

Wii mote被设计成客厅里最具亲和力的电视遥控器样式,让你接触无距离感,拿起它你就知道如何使用,而玩好它却又需要时间和技巧。正如谷歌简单的输入框背后有复杂的运算;苹果电脑薄薄的《使用说明》上第一句话是,“你的苹果电脑被设计为你能很快设置并且马上开始使用”,说明书的封面上印着一行灰字:“Congratulations,you and your MacBook were made for each other.”很有从此“人机合一,形影相随,只有我懂你”的性感意味。

正是因为这样,根据互补资源价值相关的原理,心理需求上互补的、无线的、可移动的和能带来真实触感的资源将变得稀缺而更有价值。这就是解放四肢的Wii和自由触控的iPhone之所以获得极大成功的深层社会心理学原理。

从芯片到设备的连锁爆发

基于社会心理学上的新需求是商业应用市场爆发的充分而非必要条件,Wii、iPhone等颠覆键盘和鼠标操作方式的产品之所以在2007年爆发,也必须有一些上游技术方面的必要条件。

实际上,从1980年施乐实验室帕洛阿尔托研究中心(PARC)的计算机“STAR”算起,“鼠标+图像化界面”在计算机上的应用已经走过了37年历史,最早的鼠标连线还是在其后部,更像是老鼠的尾巴 。其实正是CPU芯片计算能力的增强,使得计算机可以模拟出更丰富的图形化界面效果,鼠标这种低技术含量但实用的发明才有用武之地。

同样,iPhone的多点触控技术和更简单的Wii mote手柄的单点触控技术都不是新发明,它们之所以在2007年大行其道,除了符合人们普遍对密密麻麻的键盘和狭小屏幕的厌烦心理,更根本的原因是芯片计算能力的进一步增强。 LUPA开源社区’B!I*G2^ m5T-P1^

英特尔高级副总裁、前CTO 帕特·基辛格在谈到45纳米芯片的突破以及“多核”技术的未来影响时表示,更低功耗、更强性能和更丰富功能的芯片为无线的、模拟图形的和能感知触觉的计算提供了更好的技术准备。用户可以不用为了机器刻意改变行为习惯,而机器具备了更精确的识别人的动作并做出更丰富反馈的能力。

简单说,计算能力的进步使得我们已经可以抛弃“计算机中古时代”的键盘和鼠标,拥抱更现代、更性感和更自由的多点触控技术。它为交互性更强的应用打开了新的天地,比如,当iPhone靠近人脸时,多点触控屏幕会自动感应,让触控点全部关闭,因为这时候你正在接听电话,不需要任何按键,而当机器感受到你进入其他场景的信号时,你正好需要的按键又会聪明地出现。当机器能以人的自然动作为中心时,机器的操作大大降低了门槛,几乎不需要学习。

从购买和使用Wii的人群也可以看出,难以掌握复杂操作的学龄前儿童和对新的电子设备接受度最差的中老年人,都可以轻松学会使用Wii。这更加证明了过去繁琐的操作和束缚自然动作的低级交互方式扼杀了许多人获得新鲜体验的自由。Wii也成为了圣诞节流行的一款送给小孩子的礼品。虽然这会让使用者耗费更多的动作及体力,不过,却能够在操控过程中获得更多的乐趣。这种操作方式抛弃了目前所使用的键盘(按钮)、鼠标,将进一步体现出人性化操控界面的未来趋势。

到目前为止,Wii已经销售了超过1300万台,Xbox360早推出1年,但是已经不敌Wii的风头,以几十万台的差距落后,而PS3则只有500多万台售出,而且增长缓慢。虽然市场上开始出现拙劣模仿者和盗版游戏,就像当初MP3厂商模仿iPod一样,而且同类厂商开始降价应对Wii的冲击,但Wii依然在营造产品紧缺的状态,坚持不降价,保证了极高的利润率。任天堂的市值也一路攀升,超过索尼近一倍,成为日本证券市场上仅次于丰田的第二大市值的公司。

宫本茂已经沿着解放身体的思路把Wii驶入家庭健身器市场,Wii fit系列游戏包括了滑雪、跳舞、瑜伽、俯卧撑、呼啦圈和英式足球等。设备上,Wii又推出了平衡板(Wii balance),可通过在上面运动和改变姿势来操控屏幕上的虚拟角色。

微软的客厅战争也打算以多点触控技术作为杀手锏。去年春天,网上开始流传一段Microsoft Surface的视频,其演示的多点触控技术令观者赞叹不已。Surface大大的触摸屏可以响应很多种手势,而且,当你把电子设备放在它的触摸屏上时,Surface电脑马上会“看到”你的设备(通过隐藏的多个摄像头),并即时在屏幕上展现出各种可能的操作。比如你放个数码相机上去,它就会问你是否要查看照片,这种简单的操作一旦推向市场很可能像Wii一样改变家庭PC产业。

苹果公司也已经展示了下一代应用触控屏幕的台式电脑iMac,惠普公司的PDA产品iPaq在触控技术上也做了独特的尝试,主要是实现了在小小屏幕上用手指实现精确到毫米的控制。三星电子全球CEO尹钟龙也认为下一代手机要性感并且易于操作,今年他们推出了触摸屏手机SGH-P520,以应对来势汹汹的iPhone。而iPhone也在触感互动上深入探索,在申请按压虚拟按钮仍然有弹回感觉的技术专利。

苹果公司预计iPhone的销量在2008年1月14日的Mac world大会之前达到500万部,但从近20%的产品被购买后没有开通AT&T的服务,可推测这些产品是流入了非美国市场破解后使用,看来iPhone病毒式的扩散威力还只是开了个头。

iPhone的热销引发了同类厂商的跟随效应。去年,在芯片技术领域,国内厂商美芯半导体的销售人员惊奇地发现,他们投资的适合计算空间平衡改变的芯片,其销售业绩大大高于其他芯片产品。这些芯片主要应用于交互式的游戏机、可感知使用者行为的手机等设备上。

实际上,通过iPhone的热卖我们完全可以预见到,下一阶段的芯片必须为下一代手机等电子产品的这些特点做足准备:用容量有限的电池(意味着芯片的功耗必须是低的),功能越来越丰富(意味着芯片支持更多任务同时运行),越来越便携(意味着更好的支持无线通信)而且更讲求视觉和触感体验(意味着模拟计算等能力更强)。目前,唯一独立存在的GPU(图形处理器)厂商Nvidia公司,就是由于专注于这个越来越重视视觉体验的消费电子市场,才取得了这两年的高速成长。可以预测适合这些特点的芯片的爆发性需求应该会在2008年日渐明显。

另外,IT咨询顾问公司InStart的殷建松认为,2008年值得期待的是46英寸屏幕的电子设备的出现,iPhone和iPod Touch的屏幕是3.5英寸,而46英寸的屏幕视觉和触觉体验效果更好,并且仍然能放入口袋中。像iPod Touch一样仅仅作为游戏、娱乐和信息浏览器的工具也是46英寸的屏幕最为合适,它恰好是体验和便携性的平衡。

以上种种都为我们描绘出一个能够更加全面和丰富地感知人的自然行为的未来世界,这个世界的基础应该是一种无所不在的感知、收集、识别,最后做出更丰富和人性化反馈的计算机。在这个用户体验极大丰富和更自由交互的世界面前,引领时代的厂商们已经占好了跑道,各就各位。

[转]AT指令集及S寄存器

Wednesday, January 16th, 2008

AT命令使计算机或终端与调制解调器通讯,所有命令行必须由ASCII字符“AT”开始并由 <Enter> 结束。除了A/指令和推出(缺省为+++)。这些将在后面讨论。字母”AT”用以提醒调制解调器注意,其后将有一条或多条命令出现, “AT”及其后的字母可以是大写或小写。

AT必须同为大写或小写。如”At”或”aT”是不允许的。

    一串命令可以写在一行里。为了便于阅读可以加或不加空格。命令中或命令间的空格会被忽略,命令行的最多字符数为39(包括”AT”)。在输入一条命令期间,可以用退格键(backspace)改正除”AT”以外的错误。若命令行中任一处出现语法错误,本行其后的内容将被忽略,并返回ERROR。大数带有超出正常范围的参数的命令将不被接收并返回 ERROR.本章列出所有设置调制解调器的命令。包括控制ACTIVE调制解调器的贺氏标准AT命令集。贺氏V系列命令集和扩展命令集

AT命令集的描述

      符号 * 表明该命令的设置可用AT&Wn命令存于两个用户方案中的一个

A/        重执行命令

重执行前一AT命令行,主要用于连接时占线,无应答或号码错误。这一命令必须单独构成一命令行并由”/”字符结束,(<Enter> 不能用于结束命令)。

+++       退出字符 缺省:+

切换调制解调器从在线状态到命令状态,而不会中断数据连接。可以通过改变S寄存器S2的值来改变这一字符。

AT=x      写入被选的S寄存器

这一命令将数值x写入当前被选的S寄存器,一个S寄存器可由ATSn命令选择,若 x 是一个数字,所有S 寄存器将返回 OK 响应。

AT?       读被选的S寄存器

  这一命令读并且显示被选的S寄存器的内容。一个S寄存器可由ATSn命令选择。

ATA       应答

它必须是命令行中的最后一条指令。调制解调器在应答方式下继续执行连接程序。在与远端调制解调器交换载波后进入连接状态,如果在由寄存器S7规定的时间内(缺省值=50秒)没有检测到载波, 调制解调器将挂机。在连接过程中,通过DTE输入的任何一个字母都将中断这一命令。

ATBn*     选择ITU-T或Bell模式 缺省=0

 ATB0 选择在1200和300bps速率下通讯的ITU-T V.22和V.21协议
 ATB1 选择在1200和300bps速率下通讯的Bell 212A和103协议

ATCn      载波控制缺省=1

包含这一命令只是为了保证兼容性,执行号只是返回一结果码而没有其它作用。
ATC1 正常传输载波切换

ATDn      拨号

它必须是命令行中的最后一条指令, ATD命令使调制解调器摘机后, 根据输入的参数拨号,以建立连接。如果不带参数,调制解调器摘机后,不拨号进入发起方式。

使用标点可使命令更易读懂。圆括号,连字符和空格符会被忽略。拔号命令行中如果出现了非法字符,则该字符及其后的内容将被忽略。调制解调器允许的拨号命令长度为36个字符。

参数:0-9 A B C D * # L P T R ! @ W , ; ^ S=n
0-9     DTMF 符号0到9
A-D     DTMF 符号A,B,C和D。在一些国家中不使用这些符号
*       “星”号(仅用于音频拨号)
#       “#”号(仅用于音频拨号)
J       为本次呼叫执行在可提供的最高速率下的MNP10链路协商(可选)
K       使本次呼叫MNP10链路协商期间电源电平可调(可选)
L       重拨上一次拨过的号码
P       脉冲拨号
T       双音频拨号
R       逆叫方式。允许调制解调器使用应答方式呼叫只能作为发起使用的调制解调        器, 必须作为命令行中的最后一个字符输入。
!       使调制解调器按照S29中规定的值挂机一段时间再摘机。
@       使调制解调器等待5秒钟的无声回答
w       按照寄存器S7中规定的时间,在拨号前等待拨号音。
,       在拨号过程中,按照寄存器S8中规定的时间,暂停
;       拨号后返回命令状态
^       打开呼叫音
()      被忽视,用于格式化号码串
-       被忽视,用于格式化号码串
<space> 被忽视,用于格式化号码串
S=n     用AT&Zn 命令存在地址n处的号码拨号

ATE*     命令回应           缺省:1

ATE0 关闭命令回应
ATE1 打开 命令回应

ATHn     摘挂机控制       缺省:0

ATH0 使调制解调器挂机
ATH1 当调制解调器处于挂机状态,使调制解调器摘机,返回响 OK,等待进一步的命令。

ATIn     识别

I0 报告产品代码
I1 报告ROM中预先计算的校验和
I2 计算校验和并与ROM中的校验和比较,返回”OK”或”ERROR”结果码
I3 报告固件修正
I4 报告OEM定义的识别串
I5 报告国家代码参数
I6 报告固件修正
I7 报告调制解调器数据泵类型

ATLn*    扬声器音量       缺省:2

ATL0 扬声器低音量
ATL1 扬声器低音量
ATL2 扬声器中音量
ATL3 扬声器高音量

ATMn*    扬声器控制       缺省:1

ATM0 关闭扬声器
ATM1 扬声器在呼叫建立握手阶段打开至检测到来自于远端调制解调器的载波后关闭
ATM2 扬声器持续开
ATM3 扬声器在应答期间打开。当检测到来自于远端的调制解调器的载波和拨号时关闭

ATNn*     调制握手       缺省:1

 ATN0 要求调制解调器S37选择连接速率,若S37=0,则连接速率必须与发出的上一条AT命令的速率相匹配。如果所选择的速率可用不止一个通讯标准实现(如Bell212A或ITU-T V.22 速率在 1200bps)调制解调器同时参考ATB 命令选择。ATN1 允许时使用双方调制解调器都支持的任一速率握手,使能够自动检测。在这一方式下,ATB命令被忽视,调制解调器只用ITU-T方式连接。

ATOn     进入数据在现状态 缺省:0

ATO0 使调制解调器从命令在现状态直接返回数据在线状态,不经过自动均衡。
ATO1 使调制解调器从命令在现状态返回数据在状态,经过自动均衡。

ATP*     设脉冲拨号为缺省
 

ATQn*    结果码显示        缺省:0

ATQ0 调制解调器向DTE发送结果码
ATQ1 禁止调制解调器向DTE发送结果码

点击查看S寄存器详解!

ATSn     设S寄存器n为缺省寄存器
 ATSn?    读S寄存器

读S寄存器中的内容,所有的S寄存器都可以读

ATSn=x   写入S寄存器

将 x值写入指定的S寄存器n

ATT*     设音频拔号为缺省
 

ATVn*    结束码类型 (消息控制)        缺省:1

ATV0 发送短型 (数字型) 结果码
ATV1 发送长型 (字符型) 结果码

ATWn*    协商进程报告                缺省:0

ATW0 不报告纠错呼叫进程
ATW1 报告纠错呼叫进程
ATW2 不报告纠错呼叫进程,CONNECT xxxx指示DCE速率。

ATXn*     扩展结果码            缺省:4

ATX0 调制解调器忽视拨号音和忙音。当由盲拨建立连接时,发送CONNECT信息。ATX1 调制解调器忽视拨号音和忙音。当由盲拨建立连接时,CONNECT XXXX 反映的是比特速率

ATX2 调制解调器忽视忙音,但在拨号前等待拨号音,如果5秒钟内检测不到拨号音,则发送NO DIAL TONE 信息,连接建立后 发送 CONNECT xxxx反映比特速率。

ATX3 调制解调器忽视拨号音,若检测到忙音,发送BUSY信息,当由盲拨建立起连接时, CONNECT XXXX 反映的是比特速率。

ATX4 如果5秒钟内检测不到拨号音,发送NO DIAL TONE 讯息,检测到忙音, 发送BUSY信息。连接建立后发送CONNECT XXXX 反映比特速率。

ATYn*     控制长间隔拆接         缺省:0

ATY0 不允许长间隔拆接
ATY1 允许长间隔拆接

ATZn      复位                缺省:0

重新调出由用户方案规定的动态配置
ATZ0 软复位并重新调出用户方案0
ATZ1 软复位并重新调出用户方案1

AT&An*    握手异常终止(备选)    缺省:1

 AT&A0 在握手时禁止用户进行异常终止。当拨号或应答时,握手不能异常终止,只有DTR 信号下降。AT&A1 用户可以在握手时进行异常终止.在接收到DTE的字符后,发起和应答可以在握手期间随时进行异常终止.

AT&Cn*     RS232-C DCD          设置缺省:1

AT&C0 DCD为ON,不论来自远端的调制解调器的数据载波的状态为何。
AT&C1 DCD 跟随来自于远端调制解调器的数据载波的状态

AT&Dn*    RS232-C DTR          设置缺省:2

决定了调制解调器与来自串口的DTR信号相关的操作。由于跟踪DTR的下降引起的操作在下表列出:

 
&D0 
&D1 
&D2 
&D3 
&Q0 
NONE 
&Q1 
&Q2 
&Q3 
&Q4 
&Q5 
NONE 
&Q6 
NONE 

1 调制解调器断开连接并发送结果码OK
2 若在数据状态下,则进入命令状态,并发送结果码OK
3 调制解调器断开连接并发送结果码OK, DTR 为 OFF时不能自动应答
4 调制解调器执行热启动(即与ATZ命令相同)

AT&Fn     重新调用工厂            设置缺省:0

&F0 重新调用作为V.42bis自动可靠方式的出厂缺省设置
&F1 重新调用作为MNP5自动可靠方式的出厂缺省设置
&F2 重新调用作为DIRECT方式的出厂缺省设置
&F3 重新调用作为MNP10方式自动可靠方式的出厂缺省设置(可选)

AT&Gn*    设置保护音            缺省:0

AT&G0 无保护音
AT&G1 无保护音
AT&G2 1800HZ保护音

AT&Jn*    电话插头选择          缺省:0
 

包含这一命令只是基于兼容性的考虑,没有任何功能
AT&J0 不操作任何功能
AT&J1 不操作任何功能

AT&Kn*    DTE/调制解调器流    控制缺省:3

AT&K0 关闭流控制
AT&K3 使用RTS/CTS流控
AT&K4 使用XON/XOFF流控
AT&K5 使用透明XON/XOFF流控
AT&K6 使用RTS/CTS和XON/XOFF流控(作为传真方式下的缺省)

AT&Ln*    传输线类型            缺省:0

AT&L0 拨号线
AT&L1 二线专线 (备选)
AT&L2 四线专线 (备选)

AT&Mn*    通讯方式

与AT&Q0-3相同

AT&Pn*    拨号脉冲占空比        缺省:0

AT&P0 39%61%占空比@10PPS
AT&P1 33%67%占空比@10PPS
AT&P2 39%61%占空比@20PPS
AT&P3 33%67%占空比@20PPS

AT&Qn*    通讯方式             缺省:5

AT&Q0 选择直接异步操作
AT&Q1 选择同步模式一操作
AT&Q2 选择同步模式二操作
AT&Q3 选择同步模式三操作
AT&Q4 选择自动同步模式操作
AT&Q5 选择纠错模式操作
AT&Q6 选择标准模式下的异步操作

AT&Rn*    RS232-C RTS/CTS   设置缺省:0

AT&R0 CTS跟踪RTS, 本地DTE发送的RTS由OFF变为ON经过由寄存器S26所规定的以10微秒为增量的延迟后,CTS变为ONAT&R1 调制解调器忽视RTS,除非使用了AT&K3命令,CTS保持为ON

AT&Sn*    RS232-C DSR       设置缺省:0

AT&S0 DSR始终为ON
AT&S1 DSR根据EIA-232-C的规定操作

AT&Tn*    测试和诊断            缺省:4

测试只能在非纠错方式下(标准或直接模式)下的异步操作中进行,除参数7和8以外,要中止正在进行中的测试必须首先敲入退出符。若S18非零,则测试经由S18规定的时间后自动中止并显示OK。AT&T0 终止进行中的测试
AT&T1 启动本地模拟回环
AT&T3 在本地启动远端数字回环·,若连接未建通,返回ERROR
AT&T4 允许调制解调器响应来自远端的进行远程数字环回测试的请求
AT&T5 拒绝调制解调器响应来自远端的进行远程数字环回测试的求
AT&T6 启动远端数字环回测试,若连接未通,返回ERROR
T&T7 启动远端数字环回自测试,若连接未建通,返回ERROR
AT&T8 启动本地模拟环回自测试
 

AT&V     看当今配置及用户参数

AT&V0 查看当前配置、用户方案和存储的电话号码
AT&V1 显示最后一次数据连接的详细情况

AT&Wn    储存用户参数              缺省:0

AT&W0 作为用户0存贮
AT&W1 作为用户1存贮

AT&Xn*    选择同步时钟源             缺省:0

AT&X0 调制解调器提供传输时钟,内部时钟。 AT&X1 DTE提供传输时钟,外部时钟。
AT&X2 由调制解调器从接外载波信号中提供传输时钟,从属接收时钟

AT&Yn*    指示缺省用户参数            缺省:0

在硬复位后可选择将使用的用户方案。
AT&Y0 选择用户方案0
AT&Y1 选择用户方案1

AT&Zn=x   储存电话号码(n=0-3)         缺省:0

将一36位数字电话号码(x)存放在一指定电话号码表中(n), 作以后拨号用(参见命令ATDS=n)

AT\An 最大MNP块的大小缺省:2
AT\A0 设最大块为64个字符
AT\A1 设最大块为128个字符
AT\A2 设最大块为192个字符
AT\A3 设最大块为256个字符

AT\Bn     发送中断信号(n=1-9)        缺省:3

当在非MNP连接期间输入此命令,调制解调器向远端调制解器发送一中断信号,中断信号长度参数为n值的100倍(以毫秒            为单位),在MNP模式下,输入此命令,调制解调器向远端调制解调器发送一链路注意码PDU

AT\Gn     调制解调器到调制解调器的流控制    缺省:0

AT\G0 关闭流控(XON/XOFF)
AT\G1 打开流控(XON/XOFF)
 

AT\Jn     DTE速率自动调整控制            缺省:0

AT\J0 关闭匹配线路速率的DTE速率调整功能
AT\J1 打开匹配线路速率的DTE速率调整功能
 

AT\Kn     中断控制                     缺省:5

在数据传输期间收到来自DTE的中断信号时,调制解调器作出如下响应AT\K0,2,4 调制解调器进入连机命令状态,而不向远端发送中断信号
AT\K1 调制解调器清空终端的缓冲器并向远端调制解调器发送中断信号
AT\K3 调制解调器不清空终端的缓冲器,但向远端调制解调器发送中断信号
AT\K5 调制解调器随发送的数据发送中断信号. 调制解调器在连机命令状态时数据传输过程中,做如下操作
AT\K0,1 调制解调器清空终端的缓冲器,并向远端调制解调器发送中断信号
AT\K2,3 调制解调器不清空缓冲器,但向远端调制解调器发送中断信号
AT\K4,5 调制解调器随传输的数据按顺序发送中断信号 在非纠错模式下收到来自DTE的中断信号时,调制解调器做如下操作
AT\K0,1 调制解调器清除终端的缓冲器,并向本地DTE发送中断信号
AT\K2,3 调制解调器不清除缓冲器,但向本地DTE发送中断信号
AT\K4,5 调制解调器随接收的数据按顺序发送中断信号
 
 

AT\Ln     MNP块传输控制                 缺省:0

AT\L0 对于MNP链路连接使用流模式
AT\L1 对于MNP链路连接使用块模式
 

AT\Nn     操作模式控制                 缺省:3

AT\N0 选择标准速度缓存模式(无纠错)
AT\N1 选择直接模式(等效于&M0,&Q0)
AT\N2 选择可靠模式,可靠连接失败会使调制解调器挂机
AT\N3 选择自动可靠模式
AT\N4 选择LAPM纠错模式,LAPM纠错连接失败会使调制解调器挂机
AT\N5 选择MNP纠错模式,MNP纠错连接失败会使调制解调器挂机

AT\Vn     单线连接信息                 缺省:0

AT\V0 关闭单线连接信息。
AT\V1 打开单线连接信息。

AT%C*    压缩控制                    缺省: 3

AT%C0 关闭数据压缩 AT%C1 打开MNP5数据压缩
AT%C2 打开V.42bis数据压缩
AT%C3 打开MNP5和V.42bis数据压缩

AT%En    开/关自动均衡                缺省:2
 

控制是使调制解调器自动监听线路质量并请求均衡(%E1)还是当线路质量不好时降速,线路质量好时升速。

AT%E0 关闭线路质量监听和自动均衡。
AT%E1 打开线路质量监听和自动均衡。
AT%E2 打开线路质量监听和速率自动调整上升或下降。
AT%E3 打开线路质量监听和采用快速挂机的自动均衡。

AT%L     报告接收灵敏度

返回接收信号的电平值,提供以下数值

001=-1dBm接收电平
002=-2dBm接收电平
: :
043=-43dBm接收电平

AT%On     选择应答或呼叫模式             缺省:1

AT%O0 选择应答式模
AT%O1 选择发起式模

AT%Rn     选择接收灵敏度 (适用於专线型号) 缺省:0

AT%R0 -43dBm
AT%R1 -33dBm
备选:适用於拔号线型号,JP2跳线:-33dBM 连接1-2 针;-43 连接2-3针

AT%Q     显示线路信号质量

返回眼图指标(EQM)值的高字节,该字节的表示范围为0到127,当这一数值为70DC±10(依赖于线路速率)或更大时,若已使用了AT%E1命令则调制解调器将自动均衡,标准连接时这一数在0到15之间。到60时则为较差连接。

AT#CIDn   呼叫者身份鉴定                 缺省:0

AT#CID=0关闭呼叫者身份鉴定
AT#CID=1打开DTE格式化形式的呼叫者身份鉴定
AT#CID=2打开DTE非格式化形式的呼叫者身份鉴定
AT#CID? 从调制解调器中恢复当前呼叫者身份鉴定方式
AT#CID=? 返回调制解调器允许模式的列表,表中各部分间用逗号隔开

AT-SDR=n  鉴别性振铃                    缺省:0

AT-SDR=0 允许任何振铃、并报告”RING”
AT-SDR=1 允许一类型振铃
AT-SDR=2 允许二类型振铃
AT-SDR=3 允许一及二类型振铃
AT-SDR=4 允许三类型振铃
AT-SDR=5 允许一及三类型振铃
AT-SDR=6 允许二及三类型振铃
AT-SDR=7 允许一、二及三类型振铃

振铃类型 
振铃时段模式 
响2秒、停4秒
响0.8秒、停0.4秒、响0.8秒、停4秒
响0.4秒、停0.2秒、响0.4秒、停0.2秒、响0.8秒、停4秒

AT+MS*     选择线路调制方式

命令格式为(336型号):
AT+MS=<模式>,<自动模式>,<最小速率>,<最大速率>
缺省值为 AT+MS=11,1,300,33600 (336型号)命令格式为(560型号):
AT+MS=<模式>,<自动模式>,<最小速率>,<最大速率>,
<x_law>,<rb_signal>,<maxup_rate>
缺省值为 AT+MS=12,1,300,56000,33600 (560型号)

AT+MS?  向包含所选选项的DTE发送一信息流

AT+MS=? 向包含所提供选项的DTE发送一信息流
 
 

自动模式 
选 项 
关闭自动模式 
打开自动模式 
模式 
  调制方式选择
可能 波特率(bps) <最小 波特率> <最大 波特率> 
V.21 300
V.22 1200
V.22bis 2400或1200
V.23 1200
V.32 9600或4800
10 
V.32bis 14400,12000,9600,7200 或4800
11 
V.34 33600,31200,28800,26400,24000,21600,19200, 16800,14400,12000, 
9600,7200,4800或2400
12 
V.90 56000,54667,53333,52000,50667,49333,48000,46667,45333,42667, 
41333,40000,38667,37333,36000,34667,33333,32000,30667,29333, 
28000 (560型号适用)
56 
K56flex 56000,54000,52000,50000,48000,46000,44000,42000,40000,38000, 
36000,34000,32000 (560型号适用)
64 
Bell 103 300
69 
Bell 212 1200

<x_law> 是一个可选的数字,用来确定码类型,选择是:

0 = u-Law 1 = A-Law注意:ATZ命令将复位<x_law>值为0 (u-Law)。
 

<rb_signaling> 是一个可选的数字,用于配置一个发送数据的调制解调器产生“丢失位”信号或不产生“丢               失位”信号;或配置一台接收数据的调制解调器检测“丢失位”信号或不检测“丢失位”信               号。选择是:

0 = 发送数据的调制解调器产生丢失位信号。接收数据的调制解调器检测丢失位信号。1= 发送数据的调制解调器不产生丢失位信号。接收数据的调制解调器不检测丢失位信号。

注意:ATZ命令将复位<rb_signaling>值为0。
 

Maxup_rate : 连接速率的最大值。

Trackback: http://tb..csdn.net/TrackBack.aspx?PostId=1535176

[转]内存种类知多少

Monday, January 14th, 2008
    终于知道为什么都被CPU当做Internal 来用。
    凡是对电脑有所了解的朋友都知道内存这玩意,可是,可能有不少朋友对内存的认识仅仅局限在和DDR 这两种类型,事实上,内存的种类是非常多的,从能否写入的角度来分,就可以分为(随机存取存储器)和ROM(只读存储器)这两大类。每一类别里面有分别有许多种类的内存。以下就让我们看看内存到底有些什么种类吧!

 
  一、(Random Access Memory,随机存取存储器)
 

 
  的特点是:电脑开机时,操作系统和应用程序的所有正在运行的数据和程序都会放置其中,并且随时可以对存放在里面的数据进行修改和存取。它的工作需要由持续的电力提供,一旦系统断电,存放在里面的所有数据和程序都会自动清空掉,并且再也无法恢复。
 
  根据组成元件的不同,内存又分为以下十八种:
 
  01.DRAM(Dynamic ,动态随机存取存储器):
 

 
  这是最普通的,一个电子管与一个电容器组成一个位存储单元,DRAM将每个内存位作为一个电荷保存在位存储单元中,用电容的充放电来做储存动作,但因电容本身有漏电问题,因此必须每几微秒就要刷新一次,否则数据会丢失。存取时间和放电时间一致,约为2~4ms。因为成本比较便宜,通常都用作计算机内的主存储器。
 
  02.SRAM(Static ,静态随机存取存储器)
 

 
  静态,指的是内存里面的数据可以长驻其中而不需要随时进行存取。每6颗电子管组成一个位存储单元,因为没有电容器,因此无须不断充电即可正常运作,因此它可以比一般的动态随机处理内存处理速度更快更稳定,往往用来做高速缓存。
 
  03.VRAM(Video ,视频内存)
 

 
  它的主要功能是将显卡的视频数据输出到数模转换器中,有效降低绘图显示芯片的工作负担。它采用双数据口设计,其中一个数据口是并行式的数据输出入口,另一个是串行式的数据输出口。多用于高级显卡中的高档内存。
 
  04.FPM DRAM(Fast Page Mode DRAM,快速页切换模式动态随机存取存储器)
 

 
  改良版的DRAM,大多数为72Pin或30Pin的模块。传统的DRAM在存取一个BIT的数据时,必须送出行地址和列地址各一次才能读写数据。而FRM DRAM在触发了行地址后,如果CPU需要的地址在同一行内,则可以连续输出列地址而不必再输出行地址了。由于一般的程序和数据在内存中排列的地址是连续的,这种情况下输出行地址后连续输出列地址就可以得到所需要的数据。FPM将记忆体内部隔成许多页数Pages,从512B到数KB不等,在读取一连续区域内的数据时,就可以通过快速页切换模式来直接读取各page内的资料,从而大大提高读取速度。在96年以前,在486时代和PENTIUM时代的初期,FPM DRAM被大量使用。
 
  05.EDO DRAM(Extended Data Out DRAM,延伸数据输出动态随机存取存储器)
 

 
  这是继FPM之后出现的一种存储器,一般为72Pin、168Pin的模块。它不需要像FPM DRAM那样在存取每一BIT 数据时必须输出行地址和列地址并使其稳定一段时间,然后才能读写有效的数据,而下一个BIT的地址必须等待这次读写操作完成才能输出。因此它可以大大缩短等待输出地址的时间,其存取速度一般比FPM模式快15%左右。它一般应用于中档以下的Pentium主板标准内存,后期的486系统开始支持EDO DRAM,到96年后期,EDO DRAM开始执行。。
 
  06.BEDO DRAM(Burst Extended Data Out DRAM,爆发式延伸数据输出动态随机存取存储器)
 
  这是改良型的EDO DRAM,是由美光公司提出的,它在芯片上增加了一个地址计数器来追踪下一个地址。它是突发式的读取方式,也就是当一个数据地址被送出后,剩下的三个数据每一个都只需要一个周期就能读取,因此一次可以存取多组数据,速度比EDO DRAM快。但支持BEDO DRAM内存的主板可谓少之又少,只有极少几款提供支持(如VIA APOLLO VP2),因此很快就被DRAM取代了。
 
  07.MDRAM(Multi-Bank DRAM,多插槽动态随机存取存储器)
 

 
  MoSys公司提出的一种内存规格,其内部分成数个类别不同的小储存库 (BANK),也即由数个属立的小单位矩阵所构成,每个储存库之间以高于外部的资料速度相互连接,一般应用于高速显示卡或加速卡中,也有少数主机板用于L2高速缓存中。
 
  08.WRAM(Window ,窗口随机存取存储器)
 

 
  韩国Samsung公司开发的内存模式,是VRAM内存的改良版,不同之处是它的控制线路有一、二十组的输入/输出控制器,并采用EDO的资料存取模式,因此速度相对较快,另外还提供了区块搬移功能(BitBlt),可应用于专业绘图工作上。
 
  09.RDRAM(Rambus DRAM,高频动态随机存取存储器)
 

 
  Rambus公司独立设计完成的一种内存模式,速度一般可以达到500~530MB/s,是DRAM的10倍以上。但使用该内存后内存控制器需要作相当大的改变,因此它们一般应用于专业的图形加速适配卡或者电视游戏机的视频内存中。
 
  10.(Synchronous DRAM,同步动态随机存取存储器)
 

 
  这是一种与CPU实现外频Clock同步的内存模式,一般都采用168Pin的内存模组,工作电压为3.3V。 所谓clock同步是指内存能够与CPU同步存取资料,这样可以取消等待周期,减少数据传输的延迟,因此可提升计算机的性能和效率。
 
  11.SGRAM(Synchronous Graphics ,同步绘图随机存取存储器)
 

 
  的改良版,它以区块Block,即每32bit为基本存取单位,个别地取回或修改存取的资料,减少内存整体读写的次数,另外还针对绘图需要而增加了绘图控制器,并提供区块搬移功能(BitBlt),效率明显高于
 
  12.SB SRAM(Synchronous Burst SRAM,同步爆发式静态随机存取存储器)
 
  一般的SRAM是非同步的,为了适应CPU越来越快的速度,需要使它的工作时脉变得与系统同步,这就是SB SRAM产生的原因。
 
  13.PB SRAM(Pipeline Burst SRAM,管线爆发式静态随机存取存储器)
 
  CPU外频速度的迅猛提升对与其相搭配的内存提出了更高的要求,管线爆发式SRAM取代同步爆发式SRAM成为必然的选择,因为它可以有效地延长存取时脉,从而有效提高访问速度。
 
  14.DDR (Double Data Rate二倍速率同步动态随机存取存储器)
 

 
  作为的换代产品,它具有两大特点:其一,速度比有一倍的提高;其二,采用了DLL(Delay Locked Loop:延时锁定回路)提供一个数据滤波信号。这是目前内存市场上的主流模式。
 
  15.SLDRAM (Synchronize Link,同步链环动态随机存取存储器)
 
 

 
 
 
  这是一种扩展型结构内存,在增加了更先进同步电路的同时,还改进了逻辑控制电路,不过由于技术显示,投入实用的难度不小。
 
  16.CDRAM(CACHED DRAM,同步缓存动态随机存取存储器)
 
  这是三菱电气公司首先研制的专利技术,它是在DRAM芯片的外部插针和内部DRAM之间插入一个SRAM作为二级使用。当前,几乎所有的CPU都装有一级来提高效率,随着CPU时钟频率的成倍提高,不被选中对系统性能产生的影响将会越来越大,而 DRAM所提供的二级正好用以补充CPU一级之不足,因此能极大地提高CPU效率。
 
  17.DDRII (Double Data Rate Synchronous DRAM,第二代同步双倍速率动态随机存取存储器)
 

 
  DDRII 是DDR原有的SLDRAM联盟于1999年解散后将既有的研发成果与DDR整合之后的未来新标准。DDRII的详细规格目前尚未确定。
 
  18.DRDRAM (Direct Rambus DRAM)
 

 
  是下一代的主流内存标准之一,由Rambus 公司所设计发展出来,是将所有的接脚都连结到一个共同的Bus,这样不但可以减少控制器的体积,已可以增加资料传送的效率。
 
  二、ROM(READ Only Memory,只读存储器)
 
  ROM是线路最简单半导体电路,通过掩模工艺,一次性制造,在元件正常工作的情况下,其中的代码与数据将永久保存,并且不能够进行修改。一般应用于PC系统的程序码、主机板上的 BIOS (基本输入/输出系统Basic Input/Output System)等。它的读取速度比慢很多。
 
  根据组成元件的不同,ROM内存又分为以下五种:
 
  1.MASK ROM(掩模型只读存储器)
 
  制造商为了大量生产ROM内存,需要先制作一颗有原始数据的ROM或EPROM作为样本,然后再大量复制,这一样本就是MASK ROM,而烧录在MASK ROM中的资料永远无法做修改。它的成本比较低。
 
  2.PROM(Programmable ROM,可编程只读存储器)
 
  这是一种可以用刻录机将资料写入的ROM内存,但只能写入一次,所以也被称为“一次可编程只读存储器”(One Time Progarmming ROM,OTP-ROM)。PROM在出厂时,存储的内容全为1,用户可以根据需要将其中的某些单元写入数据0(部分的PROM在出厂时数据全为0,则用户可以将其中的部分单元写入1), 以实现对其“编程”的目的。
 
  3.EPROM(Erasable Programmable,可擦可编程只读存储器)
 

 
  这是一种具有可擦除功能,擦除后即可进行再编程的ROM内存,写入前必须先把里面的内容用紫外线照射它的IC卡上的透明视窗的方式来清除掉。这一类芯片比较容易识别,其封装中包含有“石英玻璃窗”,一个编程后的EPROM芯片的“石英玻璃窗”一般使用黑色不干胶纸盖住, 以防止遭到阳光直射。
 
  4.EEPROM(Electrically Erasable Programmable,电可擦可编程只读存储器)
 

 
  功能与使用方式与EPROM一样,不同之处是清除数据的方式,它是以约20V的电压来进行清除的。另外它还可以用电信号进行数据写入。这类ROM内存多应用于即插即用(PnP)接口中。
 
  5. Memory(快闪存储器)
 

 
  这是一种可以直接在主机板上修改内容而不需要将IC拔下的内存,当电源关掉后储存在里面的资料并不会流失掉,在写入资料时必须先将原本的资料清除掉,然后才能再写入新的资料,缺点为写入资料的速度太慢。

[转]嵌入式系统 Boot Loader 技术内幕

Monday, January 14th, 2008

级别: 初级

詹荣开 (zhanrk@sohu.com), 爱好者

2003 年 12 月 01 日

本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― 的概念、软件设计的主要任务以及结构框架等内容。

1. 引言

在专用的嵌入式板子运行 GNU/ 系统已经变得越来越流行。一个嵌入式 系统从软件的角度看通常可以分为四个层次:

1. 引导加载程序。包括固化在固件(firmware)中的 代码(可选),和 两大部分。

2. 内核。特定于嵌入式板子的定制内核以及内核的启动参数。

3. 文件系统。包括根文件系统和建立于 内存设备之上文件系统。通常用 disk 来作为 root fs。

4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:MicroWindows 和 MiniGUI 懂。

引导加载程序是系统加电后运行的第一段软件代码。回忆一下 PC 的体系结构我们可以知道,PC 机中的引导加载程序由 BIOS(其本质就是一段固件程序)和位于硬盘 MBR 中的 OS (比如,LILO 和 GRUB 等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 读到系统的 中,然后将控制权交给 OS 的主要运行任务就是将内核映象从硬盘上读到 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。

而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 来完成。比如在一个基于 ARM7TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址 0×00000000 处开始执行,而在这个地址处安排的通常就是系统的 程序。

本文将从 的概念、 的主要任务、 的框架结构以及 的安装等四个方面来讨论嵌入式系统的


回页首

2. 的概念

简单地说, 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

通常, 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 几乎是不可能的。尽管如此,我们仍然可以对 归纳出一些通用的概念来,以指导用户特定的 设计与实现。

1. 所支持的 CPU 和嵌入式板

每种不同的 CPU 体系结构都有不同的 。有些 也支持多种体系结构的 CPU,比如 U- 就同时支持 ARM 体系结构和MIPS 体系结构。除了依赖于 CPU 的体系结构外, 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU 而构建的,要想让运行在一块板子上的 程序也能运行在另一块板子上,通常也都需要修改 的源程序。

2. 的安装媒介(Installation Medium)

系统加电或复位后,所有的 CPU 通常都从某个由 CPU 制造商预先安排的地址上取指令。比如,基于 ARM7TDMI core 的 CPU 在复位时通常都从地址 0×00000000 取它的第一条指令。而基于 CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或 等)被映射到这个预先安排的地址上。因此在系统加电后,CPU 将首先执行 程序。

下图1就是一个同时装有 、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。
图1 固态存储设备的典型空间分配结构

3. 用来控制 的设备或机制

主机和目标机之间一般通过串口建立连接, 软件在执行时通常会通过串口来进行 I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。

4. 的启动过程是单阶段(Single Stage)还是多阶段(Multi-Stage)

通常多阶段的 能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的 大多都是 2 阶段的启动过程,也即启动过程可以分为 stage 1 和 stage 2 两部分。而至于在 stage 1 和 stage 2 具体完成哪些任务将在下面讨论。

5. 的操作模式 (Operation Mode)

大多数 都包含两种不同的操作模式:”启动加载”模式和”下载”模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看, 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。

启动加载( loading)模式:这种模式也称为”自主”(Autonomous)模式。也即 从目标机上的某个固态存储设备上将操作系统加载到 中运行,整个过程并没有用户的介入。这种模式是 的正常工作模式,因此在嵌入式产品发布的时侯, 显然必须工作在这种模式下。

下载(Downloading)模式:在这种模式下,目标机上的 将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 保存到目标机的 中,然后再被 写到目标机上的 类固态存储设备中。 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用 的这种工作模式。工作于这种模式下的 通常都会向它的终端用户提供一个简单的命令行接口。

像 Blob 或 U- 等这样功能强大的 通常同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。比如,Blob 在启动时处于正常的启动加载模式,但是它会延时 10 秒等待终端用户按下任意键而将 blob 切换到下载模式。如果在 10 秒内没有用户按键,则 blob 继续启动 内核。

6. BootLoader 与主机之间进行文件传输所用的通信设备及协议

最常见的情况就是,目标机上的 通过串口与主机之间进行文件传输,传输协议通常是 xmodem/ymodem/zmodem 协议中的一种。但是,串口传输的速度是有限的,因此通过以太网连接并借助 TFTP 协议来下载文件是个更好的选择。

此外,在论及这个话题时,主机方所用的软件也要考虑。比如,在通过以太网连接和 TFTP 协议来下载文件时,主机方必须有一个软件用来的提供 TFTP 服务。

在讨论了 BootLoader 的上述概念后,下面我们来具体看看 BootLoader 的应该完成哪些任务。


回页首

3. 的主要任务与典型结构框架

在继续本节的讨论之前,首先我们做一个假定,那就是:假定内核映像与根文件系统映像都被加载到 中运行。之所以提出这样一个假设前提是因为,在嵌入式系统中内核映像与根文件系统映像也可以直接在 ROM 或 这样的固态存储设备中直接运行。但这种做法无疑是以运行速度的牺牲为代价的。

从操作系统的角度看, 的总目标就是正确地调用内核来执行。

另外,由于 的实现依赖于 CPU 的体系结构,因此大多数 都分为 stage1 和 stage2 两大部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而 stage2 则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。

的 stage1 通常包括以下步骤(以执行的先后顺序):

  • 硬件设备初始化。
  • 为加载 的 stage2 准备 空间。
  • 拷贝 的 stage2 到 空间中。
  • 设置好堆栈。
  • 跳转到 stage2 的 C 入口点。

的 stage2 通常包括以下步骤(以执行的先后顺序):

  • 初始化本阶段要使用到的硬件设备。
  • 检测系统内存映射(memory map)。
  • 将 kernel 映像和根文件系统映像从 上读到 空间中。
  • 为内核设置启动参数。
  • 调用内核。

3.1 的 stage1

3.1.1 基本的硬件初始化

这是 一开始就执行的操作,其目的是为 stage2 的执行以及随后的 kernel 的执行准备好一些基本的硬件环境。它通常包括以下步骤(以执行的先后顺序):

1. 屏蔽所有的中断。为中断提供服务通常是 OS 设备驱动程序的责任,因此在 的执行全过程中可以不必响应任何中断。中断屏蔽可以通过写 CPU 的中断屏蔽寄存器或状态寄存器(比如 ARM 的 CPSR 寄存器)来完成。

2. 设置 CPU 的速度和时钟频率。

3. 初始化。包括正确地设置系统的内存控制器的功能寄存器以及各内存库控制寄存器等。

4. 初始化 LED。典型地,通过 GPIO 来驱动 LED,其目的是表明系统的状态是 OK 还是 Error。如果板子上没有 LED,那么也可以通过初始化 UART 向串口打印 的 Logo 字符信息来完成这一点。

5. 关闭 CPU 内部指令/数据

3.1.2 为加载 stage2 准备 空间

为了获得更快的执行速度,通常把 stage2 加载到 空间中来执行,因此必须为加载 的 stage2 准备好一段可用的 空间范围。

由于 stage2 通常是 C 语言执行代码,因此在考虑空间大小时,除了 stage2 可执行映象的大小外,还必须把堆栈空间也考虑进来。此外,空间大小最好是 memory page 大小(通常是 4KB)的倍数。一般而言,1M 的 空间已经足够了。具体的地址范围可以任意安排,比如 blob 就将它的 stage2 可执行映像安排到从系统 起始地址 0xc0200000 开始的 1M 空间内执行。但是,将 stage2 安排到整个 空间的最顶 1MB(也即(RamEnd-1MB) - RamEnd)是一种值得推荐的方法。

为了后面的叙述方便,这里把所安排的 空间范围的大小记为:stage2_size(字节),把起始地址和终止地址分别记为:stage2_start 和 stage2_end(这两个地址均以 4 字节边界对齐)。因此:

stage2_end=stage2_start+stage2_size

另外,还必须确保所安排的地址范围的的确确是可读写的 空间,因此,必须对你所安排的地址范围进行测试。具体的测试方法可以采用类似于 blob 的方法,也即:以 memory page 为被测试单位,测试每个 memory page 开始的两个字是否是可读写的。为了后面叙述的方便,我们记这个检测算法为:test_mempage,其具体步骤如下:

1. 先保存 memory page 一开始两个字的内容。

2. 向这两个字中写入任意的数字。比如:向第一个字写入 0×55,第 2 个字写入 0xaa。

3. 然后,立即将这两个字的内容读回。显然,我们读到的内容应该分别是 0×55 和 0xaa。如果不是,则说明这个 memory page 所占据的地址范围不是一段有效的 空间。

4. 再向这两个字中写入任意的数字。比如:向第一个字写入 0xaa,第 2 个字中写入 0×55。

5. 然后,立即将这两个字的内容立即读回。显然,我们读到的内容应该分别是 0xaa 和 0×55。如果不是,则说明这个 memory page 所占据的地址范围不是一段有效的 空间。

6. 恢复这两个字的原始内容。测试完毕。

为了得到一段干净的 空间范围,我们也可以将所安排的 空间范围进行清零操作。

3.1.3 拷贝 stage2 到

拷贝时要确定两点:(1) stage2 的可执行映象在固态存储设备的存放起始地址和终止地址;(2) 空间的起始地址。

3.1.4 设置堆栈指针 sp

堆栈指针的设置是为了执行 C 语言代码作好准备。通常我们可以把 sp 的值设置为(stage2_end-4),也即在 3.1.2 节所安排的那个 1MB 的 空间的最顶端(堆栈向下生长)。

此外,在设置堆栈指针 sp 之前,也可以关闭 led 灯,以提示用户我们准备跳转到 stage2。

经过上述这些执行步骤后,系统的物理内存布局应该如下图2所示。

3.1.5 跳转到 stage2 的 C 入口点

在上述一切都就绪后,就可以跳转到 的 stage2 去执行了。比如,在 ARM 系统中,这可以通过修改 PC 寄存器为合适的地址来实现。
图2 bootloader 的 stage2 可执行映象刚被拷贝到 空间时的系统内存布局

3.2 的 stage2

正如前面所说,stage2 的代码通常用 C 语言来实现,以便于实现更复杂的功能和取得更好的代码可读性和可移植性。但是与普通 C 语言应用程序不同的是,在编译和链接 这样的程序时,我们不能使用 glibc 库中的任何支持函数。其原因是显而易见的。这就给我们带来一个问题,那就是从那里跳转进 main() 函数呢?直接把 main() 函数的起始地址作为整个 stage2 执行映像的入口点或许是最直接的想法。但是这样做有两个缺点:1)无法通过main() 函数传递函数参数;2)无法处理 main() 函数返回的情况。一种更为巧妙的方法是利用 trampoline(弹簧床)的概念。也即,用汇编语言写一段trampoline 小程序,并将这段 trampoline 小程序来作为 stage2 可执行映象的执行入口点。然后我们可以在 trampoline 汇编小程序中用 CPU 跳转指令跳入 main() 函数中去执行;而当 main() 函数返回时,CPU 执行路径显然再次回到我们的 trampoline 程序。简而言之,这种方法的思想就是:用这段 trampoline 小程序来作为 main() 函数的外部包裹(external wrapper)。

下面给出一个简单的 trampoline 程序示例(来自blob):

.text .globl _trampoline _trampoline: 	bl	main 	/* if main ever returns we just call it again */ 	b	_trampoline

可以看出,当 main() 函数返回后,我们又用一条跳转指令重新执行 trampoline 程序――当然也就重新执行 main() 函数,这也就是 trampoline(弹簧床)一词的意思所在。

3.2.1初始化本阶段要使用到的硬件设备

这通常包括:(1)初始化至少一个串口,以便和终端用户进行 I/O 输出信息;(2)初始化计时器等。

在初始化这些设备之前,也可以重新把 LED 灯点亮,以表明我们已经进入 main() 函数执行。

设备初始化完成后,可以输出一些打印信息,程序名字字符串、版本号等。

3.2.2 检测系统的内存映射(memory map)

所谓内存映射就是指在整个 4GB 物理地址空间中有哪些地址范围被分配用来寻址系统的 单元。比如,在 SA-1100 CPU 中,从 0xC000,0000 开始的 512M 地址空间被用作系统的 地址空间,而在 Samsung S3C44B0X CPU 中,从 0×0c00,0000 到 0×1000,0000 之间的 64M 地址空间被用作系统的 地址空间。虽然 CPU 通常预留出一大段足够的地址空间给系统 ,但是在搭建具体的嵌入式系统时却不一定会实现 CPU 预留的全部 地址空间。也就是说,具体的嵌入式系统往往只把 CPU 预留的全部 地址空间中的一部分映射到 单元上,而让剩下的那部分预留 地址空间处于未使用状态。 由于上述这个事实,因此 的 stage2 必须在它想干点什么 (比如,将存储在 上的内核映像读到 空间中) 之前检测整个系统的内存映射情况,也即它必须知道 CPU 预留的全部 地址空间中的哪些被真正映射到 地址单元,哪些是处于 “unused” 状态的。

(1) 内存映射的描述

可以用如下数据结构来描述 地址空间中的一段连续(continuous)的地址范围:

typedef struct memory_area_struct { 	u32 start; /* the base address of the memory region */ 	u32 size; /* the byte number of the memory region */ 	int used; } memory_area_t;

这段 地址空间中的连续地址范围可以处于两种状态之一:(1)used=1,则说明这段连续的地址范围已被实现,也即真正地被映射到 单元上。(2)used=0,