SD 总线协议
SD总线通信是基于指令和数据比特流,起始位开始和停止位结束。SD总线通信有三个元素:
Command:由host发送到卡设备,使用CMD线发送;
Response:从card端发送到host端,作为对前一个CMD的相应,通过CMD线发送;
Data:即能从host传输到card,也能从card传输到host,通过data线传输。
Commands
以下是四种用于控制卡设备的指令类型,每个command都是固定的48位长度:
1、 broadcast commands(bc), no response:广播类型的指令,不需要有响应;
2、 broadcast commands with response(bcr):广播类型的指令且需要响应;
3、 addressed(point-to-point) commands(ac):由HOST发送到指定的卡设备,没有数据的传输;
4、 address(point-to-point) data transfercommands(adtc):由HOST发送到指定的卡设备且伴随有数据传输。
指令格式:
Card register
几个主要的寄存器:OCR,CID,CSD,RCA和SCR。
Operation condition register(OCR):32位的OCR包含卡设备支持的工作电压表;
Card identification number register (CID):包含用于在卡识别阶段的卡信息,包括制造商ID,产品名等;
Card specific data register(CSD):CSD寄存器提供了如何访问卡设备的信息,包括定义了数据格式,错误校验类型,最大访问次数,数据传输率等;
Relative card address register(RCA):存放在卡识别阶段分配的相对卡地址,缺省相对卡地址为0000h;
SD card configuration register(SCR):SCR是一个配置寄存器,用于配置SD memory card的特殊功能。
Response
所有的response都通过CMD线发送到host端,R4和R5响应类型是SDIO中特有的:
1、 R1(normal response command):用来响应常用指令;
2、 R2(CID,CSD register):用来响应CMD2和CMD10或CMD9,并把CID或CSD寄存器作为响应数据;
3、 R3(OCR register):用来响应ACMD41指令,并把OCR寄存器作为响应数据;
4、 R6(published RCA response):分配相对卡地址的响应;
5、 R7(card interface condition):响应CMD8,返回卡支持的电压信息;
6、 R4(CMD5):响应CMD5,并把OCR寄存器作为响应数据;
7、 R5(CMD52):CMD52是一个读写寄存器的指令,R5用于CMD52的响应;
Response 格式:
***详情请参考spec***
图片来源BBC网站
我的一生都奉献给了计算机事业,更准确地说是奉献给了计算机网络。这个领域一贯是创新的代名词,我们不断地打破昨天的禁锢,创造出等待明日来超越的今天。行业内有一个说法,只有明天的网速才够快。我们今日所拥有的、使用中的一切,恰都是昨日难以想象的。虽然我今日小有所成,但我很明白,自己之所以能取得今日的成就,很大程度依赖前人打下的基础。如果没有他们,就不会有我,更不会有计算机的今天。
今年,2012年,是一个伟人的百年诞辰。即使我们把所有崇高的致意奉献给他都不为过。他就是阿兰·图灵。100年前,阿兰·图灵诞生在一个文化和科技水平都与现在完全不同的时代里,但这并不影响他成为今天最伟大最值得纪念的人之一。
阿兰·图灵拥有传奇的一生。他拥有的数学天赋帮助拯救了数以万计的生命,然而作为同性恋者却被当时的社会所谴责遗弃,无奈中选择结束自己的生命。他的存在充满光芒,结局却是黯淡。他为计算机领域奠定了不可埋没的基础,没有他就没有计算机的今天。1936年,还在剑桥国王学院就读的阿兰·图灵发表重要论文《论可计算数及其在判定问题上的应用》(On Computable Numbers, with an Application to the Entscheidungsproblem),提出“算法(algorithms)”和“计算机(computing machines)”两个核心概念,一直让我们受用到今天。
阿兰·图灵和计算机
谈及图灵时不得不提他在二战时为盟军所作的结出贡献。当时他在布莱切利公园(Bletchley Park)担任解码专家,于1940年创造出可以破译德军密报的机器Bombe,为盟军的胜利立下了汗马功劳。
图灵的Bombe机 图片来源:techrepublic.com
战后,他任职于泰丁顿国家物理研究所(Teddington National Physical Laboratory),开始从事“自动计算机”(Automatic Computing Engine)的逻辑设计和具体研制工作。1946年,图灵发表论文阐述存储程序计算机的设计。他的成就与研究离散变量自动电子计算机(Electronic Discrete Variable Automatic Computer)的约翰·冯·诺伊曼(John von Neumann)同期。图灵的自动计算机与诺伊曼的离散变量自动电子计算机都采用了二进制,都以“内存储存程序以运行计算机”打破了那个时代的旧有概念。
程序被储存在电脑内存中意味着程序可以自动运行,此项突破为计算机领域打开了一扇人工智能的大门。值得一提的是,1947年与图灵同在国家物理研究所研究自动计算机的哈里·哈斯基(Harry Huskey )在1954将自动计算机的设计概念应用于Bendix公司的G-15计算机上,而也就是在这一年,阿兰·图灵选择结束了自己的生命。
1949年,图灵成为曼切斯特大学(University of Manchester )计算实验室的副院长,致力研发运行Manchester Mark 1型号储存程序式计算机所需的软件。1950年他发表论文《计算机器与智能》( Computing Machinery and Intelligence),为后来的人工智能科学提供了开创性的构思。提出著名的“图灵测试”,指出如果第三者无法辨别人类与人工智能机器反应的差别,则可以论断该机器具备人工智能。
图灵的成就不得地让我们联想,是否等到人类灭亡之后会留下机器人来统治这个世界。——文特·瑟夫以上对图灵一生成就的陈述只是他所有成就的一个片段,语言很难概述他具体为我们现在科技的繁荣做出了多大的贡献。不过对于我来说,每一件事都令我动容。我出生在1943年6月23日,有幸和这个伟人拥有相同的生日。在我出生的那年,他正处于解码事业的顶峰时期。更巧的是,我此生接触的第一台计算机就是Bendix G-15。当时我才十几岁,有幸和最好的朋友斯蒂芬·克罗克( Stephen Crocker)一起在加州大学洛杉矶分校(UCLA)接触到这一时代的巨制。如今,由美国计算机协会(The Association for Computing Machinery )设立图灵奖为其最高奖项,该奖项包含的250000美元奖金又部分由我所供职的谷歌所资助。在2004年,我和我的同事罗伯特·卡恩(Robert Kahn)因我们在计算机领域的努力而获此殊荣。
图灵留下的伟大思想还在演化前进,它依旧让世人惊讶,让人向之前进,让人为之兴奋。他在处理难题时表现出的才华与无畏几十年来都是这条朝圣路上的标杆。他清晰的思维和无与比拟的创造力激励着与他一起工作的每一位同事;他提出的概念,比如图灵机,又在为可计算性(computability)和可判断性(decidability)提供理论基石。因他被赋予生命的每一台计算机与计算机器,比如解码器“图灵甜点”与“自动计算机”,驱散了计算机领域的迷云,为21世纪计算机的产业腾飞指明了道路。
如果他能够活到今年,不知他看到今日的景象会有如何的感想,又能为我们提出哪些值得思考的问题。我花了一辈子研究计算机和网络,可是时时还会期盼图灵能够在身边回答我的疑问。相信如果有他在,很多问题都能够迎刃而解。
为了给人们带来更快的网络体验,为了给计算机领域和通讯领域带去更好的繁荣,我常常独自陷入思考,一思考就是几个小时。我在想,如何才能够规划出太阳系范围内的长距离网络通讯。
因为光的速度有限,星球又在不停的运动之中,我和我的同事们不得不重新思考大规模网络架构的基础定律。星际网络问题的棘手程度超乎大家的想象,不过既然人类要发展,要走出地球走向宇宙,这个问题就必须得到解决。
我们的寿命有限,这是人类无法突破的自我局限性,它注定了我们在某些时候不得不停下自己探索的脚步。不过图灵的人工智能理论给我们提供了一个参考答案,我们可以借助人工智能来弥补自己生命的短暂。机器人们可以背负人类的使命,代替人类走向太空。
对于许多谷歌的工程师而言,图灵他们是心中的英雄。能够站图灵的肩膀上研究、奋斗是我们这一群人的荣幸。去年,谷歌为布莱切利园提供了一笔资金,让他们购买图灵曾发表的论文以供在他们的博物馆中展览之用。
近期,我们又与伦敦科学博物馆( London Science Museum)合作,为他们提供资金,支持他们最新的布展——“解码师:歌颂图灵(Codebreaker: celebrating the life and legacy of Alan Turing)”
他们在展会中展出了大量的文物,之前从未在公众面前出现过的官方情报机构“政府通讯总部(GCHQ)”也向展会出借了部分展品。让人们最难以忘怀的不是这些文物本身,而是这些机构的态度。他们同心同力不仅仅是为了纪念一位曾经的伟人所取得的成就,而是纪念这个伟人本身。这让人感动,让人感到温暖。展会为每个人生动地勾画出了图灵的形象,用深入浅出的方式向每人宣扬了图灵的伟大之处。
我希望能够借这个机会向圈外的人们展示这一个伟大的人物,他值得我们去敬爱,值得我们去颂扬。对于科技圈内的人们,2012年是当之无愧的“阿兰·图灵之年”,全世界都在举办纪念他的论坛和活动,我也参加了其中的一部分。为了纪念他的诞辰(也是我的生日),我会在曼切斯特大学举办的“图灵百年诞辰纪念大会(Turing Centenary Conference)上发表演说。我希望大家能够身体力行地支持这一活动,只因为他是图灵,他是我们的传奇,我们的英雄。
本文作者文特·瑟夫(Vint Cerf)与罗伯特·卡恩(Robert E. Kahn)一同创立了TCP/IP协议,被称为“互联网之父”。他从2005年加入谷歌,至今担任谷歌首席互联网专家。
1、Toast源码分析:
Toast的默认view是在transient_notification.xml中定义的一个TextView,如果需要设置Toast的界面,可以通过setView方法实现;如果需要设置Toast默认显示的位置,可以通过setGravity或者setMargin方法进行设置,值得一提的是setMargin方法的参数范围是0-1即它是屏幕的百分比,如setMargin(0.1,0.1)。
Toast 的构造函数,会实例化TN对象,TN对象拥有show和hide两个方法,可以控制Toast的显示和消失。那么又是什么来完成调用和何时调用这两个方法的呢?我们可以从Toast的show方法中找到答案:
该方法,首先会判断待显示的view对象是否为null;然后获取单例的INotificationManager的对象,最后把当前Toast的请求加入到显示队列,同时把该Toast需要显示的时间也传了进去。enqueueToast的方法如下:
可以看到该方法,通过transact方法调用了底层代码,即使用了binder的机制。service最终根据duration,调用TN的show和hide方法显示和隐藏Toast界面。
2、如何修改Toast的显示时间
Toast默认有两种显示时间,分别是LENGTH_SHORT和LENGTH_LONG。如果我们需要Toast显示的时间,小于LENGTH_SHORT,那么非常容易实现,直接调用Toast的cancel方法即可。那么我们如果想Toast的显示时间大于LENGTH_LONG,那就没有办法实现了,因为何事调用TN的hide方法,不是由你控制的。
下面通过Java的反射机制,拿到TN的show和hide方法,自己来控制Toast的显示和隐藏。
在外部,我们可以调用ReflectToast的show和cancel方法,来实现控制Toast的显示和隐藏。完成~~~~~~~~~