2008年11月1日星期六

模电知识 三极管知识2

三极管的三种工作状态

截止 放大 饱和
1、截止区:ube小于死区电压,即:ube<0.7v,ubc<0,ib=0,ic=iceo=0.>
2、放大区:发射结正偏,集电结反偏。即:ube>0.7V,ubc<0v,ic=bib.>

3、饱和区:发射结正偏,集电结正偏。即:ube>0.7V,ubc>0V.bib>ic.

三极管放大电路的连接方式
放大电路在放大信号时,总有两个电极作为信号的输入端,同时也应有两个电极作为输出端。根据半导体三极管三个电极与输入、输出端子的连接方式,可归纳为三种:共发射极电路、共基极电路以及共集电极电路。

注意:所说的共XXX,都是根据三极管对交流信号的作用来说的。

1、共发射极。有电压放大,有电流放大,有功率放大,且增益都比较大。多用于多级放大电路的中间极。输入输出反向,输入阻抗小,输出阻抗高。 2、共集电极。无电压放大,有电流放大,有功率放大,多用于输入级输出级或者是缓冲级,作电压跟随器(电压增益接近1,且同相)。输入输出同相。输入阻抗高,输出阻抗低。
3、共基极。有电压放大,无电流放大,有功率放大,多用于高频或宽频电路及恒流源电路,作电流跟随器(电流增益接近1且同相)输入输出同相,输入阻抗小,输出阻抗高。

判断是那种接法很简单,除去信号输入端和输出端.另一极就是共的了。

如共发射极放大电路,输入是基极,输出是集电极,发射极就是共的了。

如共集电极放大电路,输入是基极,输出是发射极,集电极就是共的了。

如共基极放大电路,输入是发射极,输出是集电极,基极就是共的了。

模电知识 三极管知识1

三级管-BJT(Bipolar Junction Transistor)

三极管的分类
1)按材料分为硅管和锗管。
2)按极性分为NPN和PNP
3)按功率分有小功率三极管、中功率三极管、大功率三极管。  
4)按工作频率分有低频三极管、高频三极管和超高频三极管。  
5)按制作工艺分有平面型三极管、合金型三极管、扩散型三极管。  
6)按外形封装的不同可分为金属封装三极管、玻璃封装三极管、陶瓷封装三极管、塑料封装三极管等。
7)按用途分有高、中频放大管、低频放大管、低噪声放大管、光电管、开关管、高反压管、达林顿管、带阻尼的三极管等。

一些常用的模式介绍
1、低频小功率三极管:一般指特征频率在3MHz以下,功率小于1W的三极管。一般作为小信号放大用
2、高频小功率三级管:一般指特征频率大于3MHz,功率小于1W的三极管。主要用于高频振荡,和小信号放大。
3、低频大功率三极管:频率小于3MHz,功率大于1W。低频大功率管品种多,一般用于电子音响设备功率放大电路,在各种大电流输出稳压电源中作调整管。
高频大功率三极管:频率大于3MHz,功率大于1W。主要用于通讯设备中作为功率驱动、放大。 4、开关三极管:利用其控制饱和区和截止区转换工作。开关的响应时间长短表示了三极管特性的好坏。
5、差分对管:是吧两只性能一致的三极管封装在一起,它以最简单的方式构成了性能优良的差分放大器。
6、复合三极管:分别选用各种极性的三级管进行复合链接。这些三极管按照一定的方式连接后可以看成一个高B(放大率)的三极管。连接顺序是第一个管的发射极电流方向与第二个管子的基极电流方向相同,其极性取决于第一个管子。复合三极管多用于较大功率输出电路中。

三极管的结构






三极管的半导体要求
1)基区掺杂浓度最低,且基区最薄,以有效地传输载流子
2)发射区的掺杂浓度最高,以有效的发射载离子
3)集电区面积最大,且掺杂浓度小于发射区大于基区,以有效地收集载流子。


三极管的内部载离子的传输过程(NPN型为例)



为使发射区发射子,集电区收集电子,前提条件就是发射结加正向电压,即是V(b->e)为正,集电结加反向电压,即是V(b->c)为负。如上图。

在此条件下:由于发射结正偏,发射区的多数载流子(电子)和极基区的多数载流子(空穴)很容易地越过发射结互相向反方向各扩散,但因发射极的浓度大于集电极,所以通过发射结的电流基本上是电子流向基极流去。由于基区很薄,注入基区的电子只有很少(1-10%)的电子在基区的空穴进行复合,从而形成了基极电流Ib。被复合掉的基区空穴由基极电源重新补给。由于集电结加的是反偏电压(集电极区的多数载流子电子已经被电源吸收,基极的电子很容易越过集电结,到达集电极区),大部分越过集电结进入集电区而形成集电集电流Ic,

三极管的极间电流分配关系
Ie=Ic+Ib
设Ic=αIe则有
Ic/Ib=αIe/(Ie-Ic)=αIe/(Ie-αIe)=α/(1-α)=β
β>1


三极管工作原理比喻描述法
三极管的三种工作状态 放大,饱和导通,截止
对三极管放大作用的理解,切记一点:能量不会无缘无故的产生,所以,三极管一定不会产生能量。
但三极管厉害的地方在于:它可以通过小电流控制大电流
放大的原理就在于:通过小的交流输入,控制大的静态直流。
假设三极管是个大坝,这个大坝奇怪的地方是,有两个阀门,一个大阀门,一个小阀门。小阀门可以用人力打开,大阀门很重,人力是打不开的,只能通过小阀门的水力打开。
所以,平常的工作流程便是,每当放水的时候,人们就打开小阀门,很小的水流涓涓流出,这涓涓细流冲击大阀门的开关,大阀门随之打开,汹涌的江水滔滔流下。
如果不停地改变小阀门开启的大小,那么大阀门也相应地不停改变,假若能严格地按比例改变,那么,完美的控制就完成了。
在这里,Ube就是小水流,Uce就是大水流,人就是输入信号。当然,如果把水流比为电流的话,会更确切,因为三极管毕竟是一个电流控制元件。
如果某一天,天气很旱,江水没有了,也就是大的水流那边是空的。管理员这时候打开了小阀门,尽管小阀门还是一如既往地冲击大阀门,并使之开启,但因为没有水流的存在,所以,并没有水流出来。这就是三极管中的截止区。
饱和区是一样的,因为此时江水达到了很大很大的程度,管理员开的阀门大小已经没用了。
如果不开阀门江水就自己冲开了,这就是二极管的击穿。
在模拟电路中,一般阀门是半开的,通过控制其开启大小来决定输出水流的大小。没有信号的时候,水流也会流,所以,不工作的时候,也会有功耗。
而在数字电路中,阀门则处于开或是关两个状态。当不工作的时候,阀门是完全关闭的,没有功耗。


三极管的主要参数
1、直流参数
1)集电极一基极反向饱和电流Icbo,发射极开路(Ie=0)时,基极和集电极之间加上规定的反向电压Vcb时的集电极反向电流,它只与温度有关,在一定温度下是个常数,所以称为集电极一基极的反向饱和电流。良好的三极管,Icbo很小,小功率锗管的Icbo约为1~10微安,大功率锗管的 Icbo可达数毫安,而硅管的Icbo则非常小,是毫微安级。
2)集电极一发射极反向电流Iceo(穿透电流)基极开路(Ib=0)时,集电极和发射极之间加上规定反向电压Vce时的集电极电流。Iceo 大约是Icbo的β倍即Iceo=(1+β)Icbo o Icbo和Iceo受温度影响极大,它们是衡量管子热稳定性的重要参数,其值越小,性能越稳定,小功率锗管的Iceo比硅管大。
3)发射极---基极反向电流Iebo 集电极开路时,在发射极与基极之间加上规定的反向电压时发射极的电流,它实际上是发射结的反向饱和电流。
4)直流电流放大系数β1(或hEF) 这是指共发射接法,没有交流信号输入时,集电极输出的直流电流与基极输入的直流电流的比值,即: β1=Ic/Ib2

交流参数
1)交流电流放大系数β(或hfe) 这是指共发射极接法,集电极输出电流的变化量△Ic与基极输入电流的变化量△Ib之比,即: β= △Ic/△Ib 一般晶体管的β大约在10-200之间,如果β太小,电流放大作用差,如果β太大,电流放大作用虽然大,但性能往往不稳定。
2)共基极交流放大系数α(或hfb) 这是指共基接法时,集电极输出电流的变化是△Ic与发射极电流的变化量△Ie之比,即: α=△Ic/△Ie 因为△Ic<△Ie,故α<1。高频三极管的α>0.90就可以使用 α与β之间的关系: α= β/(1+β) β= α/(1-α)≈1/(1-α)
3)截止频率fβ、fα 当β下降到低频时0.707倍的频率,就是共发射极的截止频率fβ;当α下降到低频时的0.707倍的频率,就是共基极的截止频率fαo fβ、fα是表明管子频率特性的重要参数,它们之间的关系为: fβ≈(1-α)fα
4)特征频率fT因为频率f上升时,β就下降,当β下降到1时,对应的fT是全面地反映晶体管的高频放大性能的重要参数。

3、极限参数
1)集电极最大允许电流ICM 当集电极电流Ic增加到某一数值,引起β值下降到额定值的2/3或1/2,这时的Ic值称为ICM。所以当Ic超过ICM时,虽然不致使管子损坏,但β值显著下降,影响放大质量。
2)集电极-基极击穿电压BVCBO 当发射极开路时,集电结的反向击穿电压称为BVEBO。
3)发射极-基极反向击穿电压BVEBO 当集电极开路时,发射结的反向击穿电压称为BVEBO。 4)集电极-发射极击穿电压BVCEO 当基极开路时,加在集电极和发射极之间的最大允许电压,使用时如果Vce>BVceo,管子就会被击穿。
5)集电极最大允许耗散功率PCM 集电流过Ic,温度要升高,管子因受热而引起参数的变化不超过允许值时的最大集电极耗散功率称为PCM。管子实际的耗散功率于集电极直流电压和电流的乘积,即Pc=Uce×Ic.使用时庆使Pc<PCM。 PCM与散热条件有关,增加散热片可提高PCM。




2008年10月31日星期五

数电知识 数电常识

什么是数字电路:
数字电路是处理数字信号并能完成数字运算的电路。

什么是数字信号:
电信号通常分为模拟信号和数字信号两类。
模拟信号是连续变化的信号,
数字信号是断续变化(离散)的信号。
数字信号目前取二值信息,他用两个有一定数值范围的高低电平来表示,高电平为“1”, 低电平为“0”。

数字电路的特点:
1、处理的是数字信号,完成数字运算。还可以进行逻辑运算与判断。
2、电路结构简单,容易制造,便于集成,成本低,使用方便
3、工作准确可靠,精度高。

数字电路的分类:
按电路组成结构分类:分离电路和集成电路
按所用器件分类:双极型(DTL、TTL、ECL、IIL、HTL)和单极型(NMOS、PMOS、CMOS)。
按逻辑功能分类:组合逻辑电路和时序逻辑电路

数电知识 数字电路的竞争冒险

什么是竞争冒险
信号在通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信号 的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变 化,成为“竞争”;往往导致出现一些不正确的尖峰信号,这些尖峰信号称为"毛刺"。
如果一个组合逻辑电路中有"毛刺"出现,就说明该电路存在“冒险”。冒险是由变量的竞争引起的。冒险又分为逻辑冒险和功能冒险。
简言之:在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争,竞争产生冒险。

竞争冒险产生的原因?
1)根本原因:延迟
2)详细分析:竞争冒险的产生受到四个要素的制约,即:时间延迟、过渡时间、逻辑关系和延迟信号相位。
[1]时间延迟,即信号在传输中受路径、器件等因素影响,输入端信号间出现的时间差异
[2]过渡时间,即脉冲信号状态不会发生突变,必须经历一段极短的过渡时间
[3]逻辑关系,即逻辑函数式
[4]延迟信号相位,即延迟信号状态间的相位关系,涵盖延迟信号同相位和延迟信号反相位两个方面。 延迟信号状态变化相同的则是延迟信号同相位,反之则是反相位。
时间延迟和过渡时间要素是竞争冒险的产生原因,逻辑关系和延迟信号相位要素是竞争冒险的产生机制。由原因和机制,构成竞争冒险的产生条件。当电路满足产生条件时,则一定产生毛刺。

如何判断有竞争冒险?
1、 逻辑冒险的判断方法有两种:
1). 代数法: 在逻辑函数表达式中,若某个变量同时以原变量和反变量两种形式出现,
例如:逻辑函数在一定条件下可简化为Y=A+A反或Y=A*A反就具备了竞争条件。去掉其余变量(也就是将其余变量取固定值0或1),留下有竞争能力的变量,如果表达式为F=A+A~(用A~表示A的反变量,以下同),就会产生0型冒险(F应该为1而实际却为0);如果表达式为F=AA~,就会产生1型冒险。
例如:表达式 F=AB+CB~,当A=C=1时,F=B+B~,在B发生跳变时,可能出现0型冒险。
2). 卡诺图法:将函数填入卡诺图,按照函数表达式的形式圈好卡诺圈。
A\BC 00 01 11 10
--------------------
0 0 0 0 1
1 0 1 1 1
F=AC+BC~的卡诺图(将101和111的1圈一起,010和110的1圈一起) 通过观察发现,这两个卡诺圈相切。则函数在相切处两值间跳变时发生逻辑冒险。(前提是这两个卡诺圈没有被其他卡诺圈包围)
2 、功能冒险的判断:
功能冒险是当多个输入信号同时变化的瞬间,由于变化快慢不同而引起的冒险。
卡诺图法:依然用上面的卡诺图,按同样函数圈好。举例F=AC+BC~中,ABC从111变为010时,A和C两个变量同时发生了跳变,若A先变化,则 ABC的取值出现了过渡态011,由卡诺图可以知道此时函数输出F为0,然而ABC在变化的前后的稳定状态输出值为1,此时就出现了0型冒险。
这种由过渡 态引起的冒险是由于电路的功能所致,因此成为功能冒险。
3、 综合逻辑冒险和功能冒险: 例 :F=CD+BD~+AC~,自己画及圈卡诺图,可以发现信号ABCD从0100变化到1101可能存在0型功能冒险,不存在逻辑冒险。从0111变化到1110不存在功能冒险,而可能存在逻辑冒险。
4 、总结判断竞争-冒险的方法:
1)、逻辑函数在一定条件下可简化为Y=A+A反或Y=A*A反;
2)、真值表卡诺图法;
3)、计算机辅助分析。
4. 如何消除竞争冒险?
消除竞争-冒险的方法:
1)、引入封锁脉冲;
2)、引入选通脉冲;
3)、修改逻辑设计,增加冗余乘积项;
4)、接入滤波电容。
顺便提一句:时序逻辑中的竞争冒险可以用D触发器,格雷码计数器,同步电路等优秀的设计方案消除。

模电知识 二极管知识2

二极管的主要参数介绍用来表示二极管的性能好坏和适用范围的技术指标,称为二极管的参数。不同类型的二极管有不同的特性参数。但是必须了解以下几个主要参数:1、额定正向工作电流  是指二极管长期连续工作时允许通过的最大正向电流值。因为电流通过管子时会使管芯发热,温度上升,温度超过容许限度(硅管为140左右,锗管为90左右)时,就会使管芯过热而损坏。所以,二极管使用中不要超过二极管额定正向工作电流值。例如,常用的IN4001-4007型锗二极管的额定正向工作电流为 1A。2、最高反向工作电压  加在二极管两端的反向电压高到一定值时,会将管子击穿,失去单向导电能力。为了保证使用安全,规定了最高反向工作电压值。例如,IN4001二极管反向耐压为50V,IN4007反向耐压为1000V。3、反向电流  反向电流是指二极管在规定的温度和最高反向电压作用下,流过二极管的反向电流。反向电流越小,管子的单方向导电性能越好。值得注意的是反向电流与温度有着密切的关系,大约温度每升高10,反向电流增大一倍。例如2AP1型锗二极管,在25时反向电流若为250uA,温度升高到35,反向电流将上升到 500uA,依此类推,在75时,它的反向电流已达8mA,不仅失去了单方向导电特性,还会使管子过热而损坏。又如,2CP10型硅二极管,25时反向电流仅为5uA,温度升高到75时,反向电流也不过160uA。故硅二极管比锗二极管在高温下具有较好的稳定性。4、正向电压降VF:二极管通过额定正向电流时,在两极间所产生的电压降。5、结电容C:电容包括电容和扩散电容,在高频场合下使用时,要求结电容小于某一规定数值。6、最大整流电流(平均值)IOM:在半波整流连续工作的情况下,允许的最大半波电流的平均值。7、最高工作频率FM:二极管具有单向导电性的最高交流信号的频率。二极管的原理晶体二极管为一个由p型半导体和n型半导体形成的p-n结,在其界面两侧形成空间电荷层,并建有自建电场。当不存在外加电压时,由于p-n 结两边载流子浓度差引起的扩散电流和自建电场引起的漂移电流相等而处于电平衡状态。当外界有正向电压偏置时,外界电场和自建电场的互相抑消作用使载流子的扩散电流增加引起了正向电流。当外界有反向电压偏置时,外界电场和自建电场进一步加强,形成在一定反向电压范围内与反向偏置电压值无关的反向饱和电流I0。当外加的反向电压高到一定程度时,p-n结空间电荷层中的电场强度达到临界值产生载流子的倍增过程,产生大量电子空穴对,产生了数值很大的反向击穿电流,称为二极管的击穿现象。

模电知识 二极管知识1

二极管的分类

一、根据构造分类  
半导体二极管主要是依靠PN结而工作的。与PN结不可分割的点接触型和肖特基型,也被列入一般的二极管的范围内。包括这两种型号在内,根据PN结构造面的特点,把晶体二极管分类如下:
1、点接触型二极管  点接触型二极管是在锗或硅材料的单晶片上压触一根金属针后,再通过电流法而形成的。因此,其PN结的静电容量小,适用于高频电路。但是,与面结型相比较,点接触型二极管正向特性和反向特性都差,因此,不能使用于大电流和整流。因为构造简单,所以价格便宜。对于小信号的检波、整流、调制、混频和限幅等一般用途而言,它是应用范围较广的类型。
2、键型二极管  键型二极管是在锗或硅的单晶片上熔接或银的细丝而形成的。其特性介于点接触型二极管和合金型二极管之间。与点接触型相比较,虽然键型二极管的PN结电容量稍有增加,但正向特性特别优良。多作开关用,有时也被应用于检波和电源整流(不大于50mA)。在键型二极管中,熔接金丝的二极管有时被称金键型,熔接银丝的二极管有时被称为银键型。
3、合金型二极管  在N型锗或硅的单晶片上,通过合金铟、铝等金属的方法制作PN结而形成的。正向电压降小,适于大电流整流。因其PN结反向时静电容量大,所以不适于高频检波和高频整流。
4、扩散型二极管  在高温的P型杂质气体中,加热N型锗或硅的单晶片,使单晶片表面的一部变成P型,以此法PN结。因PN结正向电压降小,适用于大电流整流。最近,使用大电流整流器的主流已由硅合金型转移到硅扩散型。
5、台面型二极管  PN结的制作方法虽然与扩散型相同,但是,只保留PN结及其必要的部分,把不必要的部分用药品腐蚀掉。其剩余的部分便呈现出台面形,因而得名。初期生产的台面型,是对半导体材料使用扩散法而制成的。因此,又把这种台面型称为扩散台面型。对于这一类型来说,似乎大电流整流用的产品型号很少,而小电流开关用的产品型号却很多。
6、平面型二极管  在半导体单晶片(主要地是N型硅单晶片)上,扩散P型杂质,利用硅片表面氧化膜的屏蔽作用,在N型硅单晶片上仅选择性地扩散一部分而形成的PN结。因此,不需要为调整PN结面积的药品腐蚀作用。由于半导体表面被制作得平整,故而得名。并且,PN结合的表面,因被氧化膜覆盖,所以公认为是稳定性好和寿命长的类型。最初,对于被使用的半导体材料是采用外延法形成的,故又把平面型称为外延平面型。对平面型二极管而言,似乎使用于大电流整流用的型号很少,而作小电流开关用的型号则很多。
7、合金扩散型二极管  它是合金型的一种。合金材料是容易被扩散的材料。把难以制作的材料通过巧妙地掺配杂质,就能与合金一起过扩散,以便在已经形成的PN结中获得杂质的恰当的浓度分布。此法适用于制造高灵敏度的变容二极管。
8、外延型二极管  用外延面长的过程制造PN结而形成的二极管。制造时需要非常高超的技术。因能随意地控制杂质的不同浓度的分布,故适宜于制造高灵敏度的变容二极管。
9、肖特基二极管  基本原理是:在金属(例如铅)和半导体(N型硅片)的接触面上,用已形成的肖特基来阻挡反向电压。肖特基与PN结的整流作用原理有根本性的差异。其耐压程度只有40V左右。其特长是:开关速度非常快:反向恢复时间trr特别地短。因此,能制作开关二极和低压大电流整流二极管。

二、根据用途分类
1、检波用二极管  就原理而言,从输入信号中取出调制信号是检波,以整流电流的大小(100mA)作为界线通常把输出电流小于100mA的叫检波。锗材料点接触型、工作频率可达400MHz,正向压降小,结电容小,检波效率高,频率特性好,为2AP型。类似点触型那样检波用的二极管,除用于检波外,还能够用于限幅、削波、调制、混频、开关等电路。也有为调频检波专用的特性一致性好的两只二极管组合件。
2、整流用二极管  就原理而言,从输入交流中得到输出的直流是整流。以整流电流的大小(100mA)作为界线通常把输出电流大于100mA的叫整流。面结型,工作频率小于KHz,最高反向电压从25伏至3000伏分A~X共22档。分类如下:①硅半导体整流二极管2CZ型、②硅桥式整流器QL型、③用于电视机高压硅堆工作频率近100KHz的2CLG型。
3、限幅用二极管  大多数二极管能作为限幅使用。也有象保护仪表用和高频齐纳管那样的专用限幅二极管。为了使这些二极管具有特别强的限制尖锐振幅的作用,通常使用硅材料制造的二极管。也有这样的组件出售:依据限制电压需要,把若干个必要的整流二极管串联起来形成一个整体。
4、调制用二极管  通常指的是环形调制专用的二极管。就是正向特性一致性好的四个二极管的组合件。即使其它变容二极管也有调制用途,但它们通常是直接作为调频用。
5、混频用二极管  使用二极管混频方式时,在500~10,000Hz的频率范围内,多采用肖特基型和点接触型二极管。
6、放大用二极管  用二极管放大,大致有依靠隧道二极管和体效应二极管那样的负阻性器件的放大,以及用变容二极管的参量放大。因此,放大用二极管通常是指隧道二极管、体效应二极管和变容二极管。
7、开关用二极管  有在小电流下(10mA程度)使用的逻辑运算和在数百毫安下使用的磁芯激励用开关二极管。小电流的开关二极管通常有点接触型和键型等二极管,也有在高温下还可能工作的硅扩散型、台面型和平面型二极管。开关二极管的特长是开关速度快。而肖特基型二极管的开关时间特短,因而是理想的开关二极管。2AK型点接触为中速开关电路用;2CK型平面接触为高速开关电路用;用于开关、限幅、钳位或检波等电路;肖特基(SBD)硅大电流开关,正向压降小,速度快、效率高。
8、变容二极管 用于自动频率控制(AFC)和调谐用的小功率二极管称变容二极管。日本厂商方面也有其它许多叫法。通过施加反向电压, 使其PN结的静电容量发生变化。因此,被使用于自动频率控制、扫描振荡、调频和调谐等用途。通常,虽然是采用硅的扩散型二极管,但是也可采用合金扩散型、外延结合型、双重扩散型等特殊制作的二极管,因为这些二极管对于电压而言,其静电容量的变化率特别大。结电容随反向电压VR变化,取代可变电容,用作调谐回路、振荡电路、锁相环路,常用于电视机高频头的频道转换和调谐电路,多以硅材料制作。
9、频率倍增用二极管  对二极管的频率倍增作用而言,有依靠变容二极管的频率倍增和依靠阶跃(即急变)二极管的频率倍增。频率倍增用的变容二极管称为可变电抗器,可变电抗器虽然和自动频率控制用的变容二极管的工作原理相同,但电抗器的构造却能承受大功率。阶跃二极管又被称为阶跃恢复二极管,从导通切换到关闭时的反向恢复时间trr短,因此,其特长是急速地变成关闭的转移时间显著地短。如果对阶跃二极管施加正弦波,那么,因tt(转移时间)短,所以输出波形急骤地被夹断,故能产生很多高频谐波。
10、稳压二极管  是代替稳压电子二极管的产品。被制作成为硅的扩散型或合金型。是反向击穿特性曲线急骤变化的二极管。作为控制电压和标准电压使用而制作的。二极管工作时的端电压(又称齐纳电压)从3V左右到150V,按每隔10%,能划分成许多等级。在功率方面,也有从200mW至100W以上的产品。工作在反向击穿状态,硅材料制作,动态电阻RZ很小,一般为2CW型;将两个互补二极管反向串接以减少温度系数则为2DW型。
11、PIN型二极管(PIN Diode)  这是在P区和N区之间夹一层本征半导体(或低浓度杂质的半导体)构造的晶体二极管。PIN中的I是"本征"意义的英文略语。当其工作频率超过100MHz时,由于少数载流子的存贮效应和"本征"层中的渡越时间效应,其二极管失去整流作用而变成阻抗元件,并且,其阻抗值随偏置电压而改变。在零偏置或直流反向偏置时,"本征"区的阻抗很高;在直流正向偏置时,由于载流子注入"本征"区,而使"本征"区呈现出低阻抗状态。因此,可以把PIN二极管作为可变阻抗元件使用。它常被应用于高频开关(即微波开关)、移相、调制、限幅等电路中。
12、 雪崩二极管 (Avalanche Diode)  它是在外加电压作用下可以产生高频振荡的晶体管。产生高频振荡的工作原理是栾的:利用雪崩击穿对晶体注入载流子,因载流子渡越晶片需要一定的时间,所以其电流滞后于电压,出现延迟时间,若适当地控制渡越时间,那么,在电流和电压关系上就会出现负阻效应,从而产生高频振荡。它常被应用于微波领域的振荡电路中。
13、江崎二极管 (Tunnel Diode)  它是以隧道效应电流为主要电流分量的晶体二极管。其基底材料是砷化镓和锗。其P型区的N型区是高掺杂的(即高浓度杂质的)。隧道电流由这些简并态半导体的量子力学效应所产生。发生隧道效应具备如下三个条件:①费米能级位于导带和满带内;②空间电荷层宽度必须很窄(0.01微米以下);简并半导体P型区和N型区中的空穴和电子在同一能级上有交叠的可能性。江崎二极管为双端子有源器件。其主要参数有峰谷电流比(IP/PV),其中,下标"P"代表"峰";而下标"V"代表"谷"。江崎二极管可以被应用于低噪声高频放大器及高频振荡器中(其工作频率可达毫米波段),也可以被应用于高速开关电路中。
14、快速关断(阶跃恢复)二极管 (Step Recovary Diode)  它也是一种具有PN结的二极管。其结构上的特点是:在PN结边界处具有陡峭的杂质分布区,从而形成"自助电场"。由于PN结在正向偏压下,以少数载流子导电,并在PN结附近具有电荷存贮效应,使其反向电流需要经历一个"存贮时间"后才能降至最小值(反向饱和电流值)。阶跃恢复二极管的"自助电场"缩短了存贮时间,使反向电流快速截止,并产生丰富的谐波分量。利用这些谐波分量可设计出梳状频谱发生电路。快速关断(阶跃恢复)二极管用于脉冲和高次谐波电路中。
15、肖特基二极管 (Schottky Barrier Diode)  它是具有肖特基特性的"金属半导体结"的二极管。其正向起始电压较低。其金属层除材料外,还可以采用金、钼、镍、钛等材料。其半导体材料采用硅或砷化镓,多为N型半导体。这种器件是由多数载流子导电的,所以,其反向饱和电流较以少数载流子导电的PN结大得多。由于肖特基二极管中少数载流子的存贮效应甚微,所以其频率响仅为RC时间常数限制,因而,它是高频和快速开关的理想器件。其工作频率可达100GHz。并且,MIS(金属-绝缘体-半导体)肖特基二极管可以用来制作太阳能电池或发光二极管。
16、阻尼二极管  具有较高的反向工作电压和峰值电流,正向压降小,高频高压整流二极管,用在电视机行扫描电路作阻尼和升压整流用。
17、瞬变电压抑制二极管  TVP管,对电路进行快速过压保护,分双极型和单极型两种,按峰值功率(500W-5000W)和电压(8.2V~200V)分类。
18、双基极二极管(单结晶体管)  两个基极,一个发射极的三端负阻器件,用于张驰振荡电路,定时电压读出电路中,它具有频率易调、温度稳定性好等优点。
19、发光二极管  用磷化镓、磷砷化镓材料制成,体积小,正向驱动发光。工作电压低,工作电流小,发光均匀、寿命长、可发红、黄、绿单色光。

三、根据特性分类 点接触型二极管,按正向和反向特性分类如下。
1、一般用点接触型二极管 这种二极管正如标题所说的那样,通常被使用于检波和整流电路中,是正向和反向特性既不特别好,也不特别坏的中间产品。如:SD34、SD46、1N34A等等属于这一类。
2、高反向耐压点接触型二极管  是最大峰值反向电压和最大直流反向电压很高的产品。使用于高压电路的检波和整流。这种型号的二极管一般正向特性不太好或一般。在点接触型锗二极管中,有SD38、1N38A、OA81等等。这种锗材料二极管,其耐压受到限制。要求更高时有硅合金和扩散型。
3、高反向电阻点接触型二极管  正向电压特性和一般用二极管相同。虽然其反方向耐压也是特别地高,但反向电流小,因此其特长是反向电阻高。使用于高输入电阻的电路和高阻负荷电阻的电路中,就锗材料高反向电阻型二极管而言,SD54、1N54A等等属于这类二极管。
4、高传导点接触型二极管  它与高反向电阻型相反。其反向特性尽管很差,但使正向电阻变得足够小。对高传导点接触型二极管而言,有SD56、1N56A等等。对高传导键型二极管而言,能够得到更优良的特性。这类二极管,在负荷电阻特别低的情况下,整流效率较高。

四、按封装分类
1、玻璃封装的。
2、塑料封装的。
3、金属封装的等几种。

模电知识 半导体常识

半导体材料按化学成分和内部结构,大致可分为以下几类
1.元素半导体
有锗、硅、硒、硼、碲、锑等。50年代,锗在半导体中占主导地位,但 锗半导体器件的耐高温和抗辐射性能较差,到60年代后期逐渐被硅材料取代。用硅制造的半导体器件,耐高温和抗辐射性能较好,特别适宜制作大功率器件。因此,硅已成为应用最多的一种增导体材料,目前的集成电路大多数是用硅材料制造的。
2.无机化合物半导体
分为二元系、三元系、多元系和有机化合物半导体。二元系化合物半导体有Ⅲ-Ⅴ族(如砷化镓、磷化镓、磷化铟等)、Ⅱ-Ⅵ族(如硫化镉、硒化镉、碲化锌、硫化锌等)、Ⅳ-Ⅵ族(如硫化铅、硒化铅等)、Ⅳ-Ⅳ族(如碳化硅)化合物。三元系和多元系化合物半导体主要为三元和多元固溶体,如镓铝砷固溶体、镓锗砷磷固溶体等。
3.有机化合物半导体
已知的有机半导体材料有几十种,包括萘、蒽、聚丙烯腈、酞菁和一些芳香族化合物等,目前尚未得到应用 。
4.非晶态和液态半导体材料,
这类半导体与晶态半导体的最大区别是不具有严格周期性排列的晶体结构。
目前主要的非晶态半导体有两大类。
硫系玻璃。含硫族元素的非晶态半导体。例如As-Se、As-S,通常的制备方法是熔体冷却或汽相沉积。
四面体键非晶态半导体。如非晶Si、Ge、GaAs等,此类材料的非晶态不能用熔体冷却的办法来获得,只能用薄膜淀积的办法(如蒸发、溅射、辉光放电或化学汽相淀积等),非晶态半导体在技术
非晶态半导体的应用存在著很大的潜力,非晶硫早已广泛应用在复印技术中,由S.R.奥夫辛斯基首创的 As-Te-Ge-Si系玻璃半导体制作的电可改写主读存储器已有商品生产,利用光脉冲使碲微晶薄膜玻璃化这种性质制作的光存储器正在研制之中。对於非晶硅的应用目前研究最多的是太阳能电池。非晶硅比晶体硅制备工艺简单,易於做成大面积,非晶硅对於太阳光的吸收效率高,器件只需大约1微米厚的薄膜材料,因此,可望做成一种廉价的太阳能电池,现已受到能源专家的重视。最近已有人试验把非晶硅场效应晶体管用於液晶显示和集成电路。

半导体材料的特性参数 
半导体材料虽然种类繁多但有一些固有的特性,称为半导体材料的特性参数。这些特性参数不仅能反映半导体材料与其他非半导体材料之间的差别,而且更重要的是能反映各种半导体材料之间甚至同一种材料在不同情况下特性上的量的差别。
常用的半导体材料的特性参数有:禁带宽度、电阻率、载流子迁移率(载流子即半导体中参加导电的电子和空穴)、非平衡载流子寿命、位错密度。
禁带宽度由半导体的电子态、原子组态决定,反映组成这种材料的原子中价电子从束缚状态激发到自由状态所需的能量。
电阻率、载流子迁移率反映材料的导电能力。
非平衡载流子寿命反映半导体材料在外界作用(如光或电场)下内部的载流子由非平衡状态向平衡状态过渡的弛豫特性。
位错是晶体中最常见的一类晶体缺陷。
位错密度可以用来衡量半导体单晶材料晶格完整性的程度。当然,对于非晶态半导体是没有这一反映晶格完整性的特性参数的。


价电子:半导体材料原子最外层轨道导航的四个电子称为价电子。
共价键:相邻两个原子之间由价电子组成的共价键连接。
电导率:导电能力的强弱,与材料单位体积内含电荷载离子的数量有关。
本征激发:载常温下,价电子获得足够的随机热震动能量而挣脱共价键的束缚,成为自由电子。
空穴:当电子挣脱共价键的束缚成为自由的电子之后,共价键中就留下一个空位,这个空位就称为空穴。

本征半导体:是一种完全纯净的,结构完整的半导体晶体。自由电子和空穴总是成对出现的。
杂质半导体:根据掺杂的杂质不同分为
空穴(P型)半导体:在硅或者是锗中加入三价的元素,如硼,铟等。多数载离子是空穴。
电子(N型)半导体:在硅或者是锗中加入五价的元素,如磷,砷,锑等。多数载离子是电子。
在杂质半导体中多子的数量跟掺杂的浓度有关。
在杂质半导体中少子的数量跟温度有关。温度升高时,少子的数量增多。
在外加电场的作用下P型半导体中的电流主要是空穴电流,N型半导体中的电流主要是电子电流。
PN结的形成
由于P型半导体中掺杂了三价的元素,因此多数载离子是空穴。
由于N型半导体中掺杂了五价的元素,因此多数载离子是电子。
P型半导体和N半导体结合后,在他们两边出现电子和空穴的浓度差。P区空穴多,电子少。N区电子多,空穴少。这样空穴和电子都要从浓度高的地方向浓度低的地方扩散,扩散的结果就是P区失去空穴,留下带负电的杂质。N区一边失去电子,留下带正电的杂质。虽然杂质带电,由于结构的原因,他们是不能移动的,不参与导电。因此就形成了一个空间电荷区,也即PN结。这个结电阻率很好。PN结的单向导电性
在外加电场(P正,N负)的作用下,P区的空穴向PN结移动,N区的电子也向PN结移动。当P区的空穴进入PN结后,就会和原来的一部分负离子(杂质)中和,使得P区的空间电荷量减少,PN结变窄。同样,当N区的电子进入PN结后,就会和原来的一部分正离子(杂质)中和,使N区的空间电荷量减少,PN结变窄。PN结的电阻减小,导电性能增加。

在外加电场(P负,N正)的作用下,P区的空穴向外加电场移动,使得P区的空穴减少,PN结的空间电荷增加,PN结变宽,在外加电场的作用下,N区的电子也向外加电场移动,使得N区的电子减少,PN结的空间电荷增加,PN结变宽,PN结的电阻增大,导电性能减弱。

PN结的反向击穿


PN结的反向击穿分为:热击穿和电击穿。
当PN结两端的反向电压增大到一定数值时,反向电流突然增加。这个现象就称为PN结的反向击穿(电击穿)。发生击穿所需的反向电压VBR称为反向击穿电压。

PN结电击穿从其产生原因又可分为雪崩击穿和齐纳击穿两种类型。
1、雪崩击穿: 当PN结反向电压增加时,空间电荷区中的电场随着增强。通过空间电荷区的电子和空穴,在电场作用下获得的能量增大,在晶体中运动的电子和空穴,将不断地与晶体原子发生碰撞,当电子和空穴的能量足够大时,通过这样的碰撞,可使共价键中的电子激发形成自由电子—空穴对,这种现象称为碰撞电离。新产生的电子和空穴与原有的电子和空穴一样,在电场作用下,也向相反的方向运动,重新获得能量,又可通过碰撞,再产生电子—空穴对,这就是载流子的倍增效应。当反向电压增大到某一数值后,载流子的倍增情况就像在陡峻的积雪山坡上发生雪崩一样,载流子增加得多而快,使反向电流急剧增大,于是PN结就发生雪崩击穿。 雪崩击穿多发生在杂质浓度较低的二极管,一般需要比较高的电压(>6V),击穿电压与浓度成反比。 2、齐纳击穿: 在加有较高的反向电压下,PN结空间电荷区中存在一个强电场,它能够破坏共价键将束缚电子分离出来造成电子—空穴对,形成较大的反向电流。发生齐纳击穿需要的电场强度约为2*105V/cm,这只有在杂质浓度特别大的PN结中才能达到,因为杂质浓度大,空间电荷区内电荷密度(即杂质离子)也大,因而空间电荷区很窄,电场强度就可能很高。一般整流二极管掺杂浓度没有这么高,它在电击穿中多数是雪崩击穿造成的。 齐纳击穿多数出现在杂质浓度较高的二极管,如稳压管(齐纳二极管)。 必须指出,上述两种电击穿过程是可逆的,当加在稳压管两端的反向电压降低后,管子仍可以恢复原来的状态。但它有一个前提条件,就是反向电流和反向电压的乘积不超过PN结容许的耗散功率,超过了就会因为热量散不出去而使PN结温度上升,直到过热而烧毁,这种现象就是热击穿。所以热击穿和电击穿的概念是不同的。电击穿往往可为人们所利用(如稳压管),而热击穿则是必须尽量避免的。



二极管正向V-I特性建模:


1、理想模型
正向偏置时管压降为零,反向截至时电阻无穷大,电流为零。
2、恒压降模型
正向导通时管压降为恒定的0.3或者0.7
3、折线模式
认为二极管的管压降随电流的增加而增加
4、小信号模型
认为二极管在某个范围内工作时,内阻随电流是变化的。

经济学常识 谁在主导A股走势?

A股从2007年10月16日的6124.04点最高点到2008年8月19日的1500点的最低点,市场有过各种各样的剖析,其实最关键的原因也许只有一个,那就是,在金融全球化的今天,A股的中长期走势是由国际资本决定的,而非国内资本决定的。至于国际资本对A股的操纵,有两条传导链,一条是通过全球股市联动,另一条传导链,在近期金融海啸中的巨大作用,即通过汇率市场上主要货币的中长期走势,通过国际资本在不同币种不同市场的流动,引导包括A股在内全球股市的中长期走势。
近四十年历史上,美联储持续降息周期与持续升息周期的轮回,与其对应的是弱势美元周期与强势美元周期的轮回,每一个弱势美元周期都会引导国际资本流入新兴市场制造股市房市泡沫,而每一个强势美元周期引导国际资本回流美国,导致新兴市场股市房市泡沫破裂。
2006年以来A股的大牛市与大调整似乎完美地验证了上述规律,2006年5月美联储持续两年加息周期结束,意味着着一个弱势美元周期的到来 (2006年-2008年3月美元指数下跌20%,其间人民币的升值进一步强化了弱势美元),预示着2006年开始A股及新兴市场将在国际资本支持下进入牛市。值得注意的是,2005年11月美元指数92.63的中级顶,比美联储加息周期结束提前半年,但滞后于A股牛市大底998五个月形成,而2008年3月美元指数70.68中级底,同样滞后于A股牛市大顶6124五个月形成(而受益于石油牛市俄罗斯巴西见顶则与美元大底同步),至于其是比美联储降息周期结束提前半年还是九个月,可拭目以待。
近日美联储降息50个基点,把利率降至2003年以来最低的1%,以及伯南克甚至表示不排除12月把把利率降至零,把仍无法改变美元8月以来的井喷强势。或许说明,美联储持续降息周期即将结束,而对应的可能是又一个强势美元周期的到来,而A股及新兴市场可能在国际资本持续回流美国的背景下,陷入长期低迷,直到下一个弱势美元周期的到来。
如果说,美元对A股大底大顶的影响属滞后确认,那么日元对A股的影响或同步或提前。2007年6月美元兑日元见124之大底,比A股牛市大顶6124提前四个月,是否说明日元套利盘热钱当时开始净流出A股?其后两年日元升值30%,其中,115-95,110-90两波20%升值高点95,90,与A股3516,1664中级底几乎同步。说明巨额日元套利盘持续平仓离场,尤其是恐慌性平仓买回日元,也是A股及全球股市大跌的原因。日元3%的波动,可以使用30倍杠杆进行日元套利对冲基金赔完老本。

2008年10月30日星期四

硬件知识 常用电平电压

RS232电平或者说串口电平,有的甚至说计算机电平,所有的这些说法,指得都是计算机9针串口 (RS232)得电平,采用负逻辑,
-15v ~ -3v 代表1
+3v ~ +15v 代表0
RS485电平 和RS422电平 由于两者均采用 差分传输(平衡传输)的方式,所以他们的电平方式,一般有两个引脚 A,B
发送端 AB间的电压差
+2 ~ +6v 1
-2 ~ -6v 0
接收端 AB间的电压差
大于 +200mv 1 定义逻辑1为B>A的状态
小于 -200mv 0 定义逻辑0为A>B的状态
AB之间的电压差不小于200mv

一对一通讯的情况下
RS232 可做到双向传输,全双工通讯 最高传输速率 20kbps
RS422 只能做到单向传输,半双工通讯,最高传输速率10Mbps
RS485 双向传输,半双工通讯, 最高传输速率10Mbps

总结各电平标准。现在常用的电平标准有TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232、RS485等,还有一些速度比较高的 LVDS、GTL、PGTL、CML、HSTL、SSTL等。下面简单介绍一下各自的供电电源、电平标准以及使用注意事项。

TTL:Transistor-Transistor Logic 三极管结构。
Vcc:5V;VOH>=2.4V;VOL<=0.5V;VIH>=2V;VIL<=0.8V。
因为2.4V与5V之间还有很大空闲,对改善噪声容限并没什么好处,又会白白增大系统功耗,还会影响速度。所以后来就把一部分“砍”掉了。也就是后面的LVTTL。
LVTTL又分3.3V、2.5V以及更低电压的LVTTL(Low Voltage TTL)。
3.3V LVTTL:Vcc:3.3V;VOH>=2.4V;VOL<=0.4V;VIH>=2V;VIL<=0.8V。
2.5V LVTTL:Vcc:2.5V;VOH>=2.0V;VOL<=0.2V;VIH>=1.7V;VIL<=0.7V。
更低的LVTTL不常用就先不讲了。多用在处理器等高速芯片,使用时查看芯片手册就OK了。TTL使用注意:TTL电平一般过冲都会比较严重,可能在始端串22欧或33欧电阻;
TTL电平输入脚悬空时是内部认为是高电平。要下拉的话应用1k以下电阻下拉。
TTL输出不能驱动CMOS输入。

CMOS:Complementary Metal Oxide Semiconductor PMOS+NMOS。
Vcc:5V;VOH>=4.45V;VOL<=0.5V;VIH>=3.5V;VIL<=1.5V。相对TTL有了更大的噪声容限,输入阻抗远大于TTL输入阻抗。对应3.3V LVTTL,出现了LVCMOS,可以与3.3V的LVTTL直接相互驱动。3.3V LVCMOS:Vcc:3.3V;VOH>=3.2V;VOL<=0.1V;VIH>=2.0V;VIL<=0.7V。2.5V LVCMOS:Vcc:2.5V;VOH>=2V;VOL<=0.1V;VIH>=1.7V;VIL<=0.7V。CMOS使用注意:CMOS结构内部寄生有可控硅结构,当输入或输入管脚高于VCC一定值(比如一些芯片是0.7V)时,电流足够大的话,可能引起闩锁效应,导致芯片的烧毁。ECL:Emitter Coupled Logic 发射极耦合逻辑电路(差分结构)Vcc=0V;Vee:-5.2V;VOH=-0.88V;VOL=-1.72V;VIH=-1.24V;VIL=-1.36V。速度快,驱动能力强,噪声小,很容易达到几百M的应用。但是功耗大,需要负电源。为简化电源,出现了PECL(ECL结构,改用正电压供电)和LVPECL。PECL:Pseudo/Positive ECLVcc=5V;VOH=4.12V;VOL=3.28V;VIH=3.78V;VIL=3.64VLVPELC:Low Voltage PECLVcc=3.3V;VOH=2.42V;VOL=1.58V;VIH=2.06V;VIL=1.94VECL、PECL、LVPECL使用注意:不同电平不能直接驱动。中间可用交流耦合、电阻网络或专用芯片进行转换。以上三种均为射随输出结构,必须有电阻拉到一个直流偏置电压。(如多用于时钟的LVPECL:直流匹配时用130欧上拉,同时用82欧下拉;交流匹配时用82欧上拉,同时用130欧下拉。但两种方式工作后直流电平都在1.95V左右。)前面的电平标准摆幅都比较大,为降低电磁辐射,同时提高开关速度又推出LVDS电平标准。LVDS:Low Voltage Differential Signaling 差分对输入输出,内部有一个恒流源3.5-4mA,在差分线上改变方向来表示0和1。通过外部的100欧匹配电阻(并在差分线上靠近接收端)转换为±350mV的差分电平。LVDS使用注意:可以达到600M以上,PCB要求较高,差分线要求严格等长,差最好不超过10mil(0.25mm)。100欧电阻离接收端距离不能超过500mil,最好控制在300mil以内。下面的电平用的可能不是很多,篇幅关系,只简单做一下介绍。如果感兴趣的话可以联系我。CML:是内部做好匹配的一种电路,不需再进行匹配。三极管结构,也是差分线,速度能达到3G以上。只能点对点传输。GTL:类似CMOS的一种结构,输入为比较器结构,比较器一端接参考电平,另一端接输入信号。1.2V电源供电。Vcc=1.2V;VOH>=1.1V;VOL<=0.4V;VIH>=0.85V;VIL<=0.75VPGTL/GTL+:Vcc=1.5V;VOH>=1.4V;VOL<=0.46V;VIH>=1.2V;VIL<=0.8VHSTL是主要用于QDR存储器的一种电平标准:一般有V¬CCIO=1.8V和V¬¬CCIO= 1.5V。和上面的GTL相似,输入为输入为比较器结构,比较器一端接参考电平(VCCIO/2),另一端接输入信号。对参考电平要求比较高(1%精度)。SSTL主要用于DDR存储器。和HSTL基本相同。V¬¬CCIO=2.5V,输入为输入为比较器结构,比较器一端接参考电平1.25V,另一端接输入信号。对参考电平要求比较高(1%精度)。HSTL和SSTL大多用在300M以下

单片机 什么是单片机

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成(如图1所示)。

还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。

现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
单片机的应用领域 :
1.单片机在智能仪器仪表中的应用;
2.单片机在工业测控中的应用;
3.单片机在计算机网络和通讯技术中的应用;
4.单片机在日常生活及家电中的应用;
5.单片机在办公自动化方面。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

2008年10月29日星期三

PCB设计 设计PCB时抗静电放电的方法

设计PCB时抗静电放电的方法
 在pcb板的设计当中,可以通过分层、恰当的布局布线和安装实现PCB的抗ESD设计。通过调整PCB布局布线,能够很好地防范ESD。*尽可能使用多层PCB,相对于双面PCB而言,地平面和电源平面,以及排列紧密的信号线-地线间距能够减小共模阻抗和感性耦合,使之达到双面PCB的1/10到1/100。对于顶层和底层表面都有元器件、具有很短连接线。
  来自人体、环境甚至电子设备内部的静电对于精密的半导体芯片会造成各种损伤,例如穿透元器件内部薄的绝缘层;损毁MOSFET和CMOS元器件的栅极;CMOS器件中的触发器锁死;短路反偏的PN结;短路正向偏置的PN结;熔化有源器件内部的焊接线或铝线。为了消除静电释放(ESD)对电子设备的干扰和破坏,需要采取多种技术手段进行防范。
  在pcb板的设计当中,可以通过分层、恰当的布局布线和安装实现PCB的抗ESD设计。在设计过程中,通过预测可以将绝大多数设计修改仅限于增减元器件。通过调整PCB布局布线,能够很好地防范ESD。以下是一些常见的防范措施。  *尽可能使用多层PCB,相对于双面PCB而言,地平面和电源平面,以及排列紧密的信号线-地线间距能够减小共模阻抗和感性耦合,使之达到双面PCB的1/10到1/100。尽量地将每一个信号层都紧靠一个电源层或地线层。对于顶层和底层表面都有元器件、具有很短连接线以及许多填充地的高密度PCB,可以考虑使用内层线。  *对于双面PCB来说,要采用紧密交织的电源和地栅格。电源线紧靠地线,在垂直和水平线或填充区之间,要尽可能多地连接。一面的栅格尺寸小于等于60mm,如果可能,栅格尺寸应小于13mm。
  *确保每一个电路尽可能紧凑。
  *尽可能将所有连接器都放在一边。
  *如果可能,将电源线从卡的中央引入,并远离容易直接遭受ESD影响的区域。
  *在引向机箱外的连接器(容易直接被ESD击中)下方的所有PCB层上,要放置宽的机箱地或者多边形填充地,并每隔大约13mm的距离用过孔将它们连接在一起。  *在卡的边缘上放置安装孔,安装孔周围用无阻焊剂的顶层和底层焊盘连接到机箱地上。
  *PCB装配时,不要在顶层或者底层的焊盘上涂覆任何焊料。使用具有内嵌垫圈的螺钉来实现PCB与金属机箱/屏蔽层或接地面上支架的紧密接触。
  *在每一层的机箱地和电路地之间,要设置相同的“隔离区”;如果可能,保持间隔距离为0.64mm。
  *在卡的顶层和底层靠近安装孔的位置,每隔100mm沿机箱地线将机箱地和电路地用1.27mm宽的线连接在一起。与这些连接点的相邻处,在机箱地和电路地之间放置用于安装的焊盘或安装孔。这些地线连接可以用刀片划开,以保持开路,或用磁珠/高频电容的跳接。
  *如果电路板不会放入金属机箱或者屏蔽装置中,在电路板的顶层和底层机箱地线上不能涂阻焊剂,这样它们可以作为ESD电弧的放电极。
  *要以下列方式在电路周围设置一个环形地:
  (1)除边缘连接器以及机箱地以外,在整个外围四周放上环形地通路。
  (2)确保所有层的环形地宽度大于2.5mm。
  (3)每隔13mm用过孔将环形地连接起来。
  (4)将环形地与多层电路的公共地连接到一起。
  (5)对安装在金属机箱或者屏蔽装置里的双面板来说,应该将环形地与电路公共地连接起来。不屏蔽的双面电路则应该将环形地连接到机箱地,环形地上不能涂阻焊剂,以便该环形地可以充当ESD的放电棒,在环形地(所有层)上的某个位置处至少放置一个0.5mm宽的间隙,这样可以避免形成一个大的环路。信号布线离环形地的距离不能小于0.5mm。
  *在能被ESD直接击中的区域,每一个信号线附近都要布一条地线。
  *I/O电路要尽可能靠近对应的连接器。
  *对易受ESD影响的电路,应该放在靠近电路中心的区域,这样其他电路可以为它们提供一定的屏蔽作用。
  *通常在接收端放置串联的电阻和磁珠,而对那些易被ESD击中的电缆驱动器,也可以考虑在驱动端放置串联的电阻或磁珠。
  *通常在接收端放置瞬态保护器。用短而粗的线(长度小于5倍宽度,最好小于3倍宽度)连接到机箱地。从连接器出来的信号线和地线要直接接到瞬态保护器,然后才能接电路的其他部分。
  *在连接器处或者离接收电路25mm的范围内,要放置滤波电容。
  (1)用短而粗的线连接到机箱地或者接收电路地(长度小于5倍宽度,最好小于3倍宽度)。
  (2)信号线和地线先连接到电容再连接到接收电路。
  *要确保信号线尽可能短。
  *信号线的长度大于300mm时,一定要平行布一条地线。
  *确保信号线和相应回路之间的环路面积尽可能小。对于长信号线每隔几厘米便要调换信号线和地线的位置来减小环路面积。
  *从网络的中心位置驱动信号进入多个接收电路。
  *确保电源和地之间的环路面积尽可能小,在靠近集成电路芯片每一个电源管脚的地方放置一个高频电容。
  *在距离每一个连接器80mm范围以内放置一个高频旁路电容。
  *在可能的情况下,要用地填充未使用的区域,每隔60mm距离将所有层的填充地连接起来。  *确保在任意大的地填充区(大约大于25mm×6mm)的两个相反端点位置处要与地连接。
  *电源或地平面上开口长度超过8mm时,要用窄的线将开口的两侧连接起来。
  *复位线、中断信号线或者边沿触发信号线不能布置在靠近PCB边沿的地方。
  *将安装孔同电路公地连接在一起,或者将它们隔离开来。
  (1)金属支架必须和金属屏蔽装置或者机箱一起使用时,要采用一个零欧姆电阻实现连接。
  (2)确定安装孔大小来实现金属或者塑料支架的可靠安装,在安装孔顶层和底层上要采用大焊盘,底层焊盘上不能采用阻焊剂,并确保底层焊盘不采用波峰焊工艺进行焊接。
  *不能将受保护的信号线和不受保护的信号线并行排列。  *要特别注意复位、中断和控制信号线的布线。
  (1)要采用高频滤波。  (2)远离输入和输出电路。
  (3)远离电路板边缘。
  *PCB要插入机箱内,不要安装在开口位置或者内部接缝处。
  *要注意磁珠下、焊盘之间和可能接触到磁珠的信号线的布线。有些磁珠导电性能相当好,可能会产生意想不到的导电路径。
  *如果一个机箱或者主板要内装几个电路板,应该将对静电最敏感的电路板放在最中间

C语言 指针详解

一:概念
指针---是个变量。
指针---它里面存储的值被解释成为内存的一个地址。
也就是说变量的值是一个内存地址。
指针正确的定义格式:type+*+空格+变量名。char* ptr;
要分析指针要从四个方面分析:
1、指针的类型,
指针的类型就是指变量的类型(指针就是一个变量)。从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。
2、指针所指向的内存区的类型,
当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。 从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。在指针的算术运算中,指针所指向的类型有很大的作用。 指针的类型(即指针本身的类型)和指针所指向的类型是两个概念,区分"指针的类型"和"指针所指向的类型"这两个概念,是精通指针的关键点之一。
3、指针的值或者叫指针所指向的内存区,
或者叫指针所指向的内存区或地址。指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。 指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。 指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。 以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里?
4、指针本身所占据的内存区。
定义一个后,肯定也是要给它分配一个存储空间的。只要用函数sizeof(指针的类型)测一下就知道了。在32位平台里,指针变量本身占据了4个字节的长度。 指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。
指针的类型 指针指向的内存类型 指针的值 指针本身所占据的内存区
int*ptr; int* int sizeof( int *)=4 Sizeof(int*) = 4
char*ptr; char* char sizeof(char*)=1 Sizeof(char*) = 4
int**ptr; int** int* sizeof(int**)=4 Sizeof(int**) = 4
int*ptr[2]; int*[2] int[2] sizeof(int*[2])=8 Sizeof(int*[3]) = 4
int(*ptr)[3]; int(*)[3] int()[3] sizeof(int(*)[3])=12 Sizeof(int(*)[3]) = 4
char(*ptr)[3]; char(*)[3] char()[3] sizeof(char(*)[3])=3 Sizeof(char(*)[3]) = 4
int*(*ptr)[4]; int*(*)[4] int*()[4] sizeof(int*(*)[4])=16 Sizeof (int*(*)[4]) = 4

二:运算符和表达式
C语言中有两个运算符
&运算符:取地址运算符,&a即是变量a的地址。书上叫做"间接运算符"。
*运算符:指针运算符,*ptr表示其所指向的变量。
&a的运算结果是一个指针,指针的类型是a的类型加个*,指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a的地址。
*p的运算结果就五花八门了。总之*p的结果是p所指向的东西,这个东西有这些特点:它的类型是p指向的类型,它所占用的地址是p所指向的地址。
例如:
int a=12;
int b;
int*p;
int**ptr;
p=&a;//&a的结果是一个指针,类型是int*,指向的类型是int,指向的地址是a的地址。 *p=24;//*p的结果,在这里它的类型是int,它所占用的地址是p所指向的地址,显然,*p就是变量a。
ptr=&p;//&p的结果是个指针,该指针的类型是p的类型加个*,在这里是int **。该指针所指向的类型是p的类型,这里是int*。该指针所指向的地址就是指针p自己的地址。
*ptr=&b;//*ptr是个指针,&b的结果也是个指针,且这两个指针的类型和所指向的类型是一样的,所以用&b来给*ptr赋值就是毫无问题的了。
**ptr=34;//*ptr的结果是ptr所指向的东西,在这里是一个指针,对这个指针再做一次*运算,结果就是一个int类型的变量。
一个表达式的最后结果如果是一个指针,那么这个表达式就叫指针表达式。
下面是一些指针表达式的例子:
int a,b;
int array[10];
int*pa;
pa=&a;//&a是一个指针表达式。
int**ptr=&pa;//&pa也是一个指针表达式。
*ptr=&b;//*ptr和&b都是指针表达式。
pa=array;
pa++;//这也是指针表达式。

char*arr[20];
char**parr=arr;//如果把arr看作指针的话,arr也是指针表达式
char*str;
str=*parr;//*parr是指针表达式
str=*(parr+1);//*(parr+1)是指针表达式
str=*(parr+2);//*(parr+2)是指针表达式
由于指针表达式的结果是一个指针,所以指针表达式也具有指针所具有的四个要素:指针的类型,指针所指向的类型,指针指向的内存区,指针自身占据的内存。
好了,当一个指针表达式的结果指针已经明确地具有了指针自身占据的内存的话,这个指针表达式就是一个左值,否则就不是一个左值。 在上上例中,&a不是一个左值,因为它还没有占据明确的内存。*ptr是一个左值,因为*ptr这个指针已经占据了内存,其实*ptr就是指针pa,既然pa已经在内存中有了自己的位置,那么*ptr当然也有了自己的位置。

三:指针的算术运算
指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。例如:
Char a[20];
int* ptr=(int*)a; ...
ptr++;
printf("%c\n",*(ptr+1)); //会打印出a[4]的值,
编译器是这样处理的:它把指针ptr的值加上了sizeof(int),printf(“%d\n”*(ptr+1)); //打印a[4],a[5],a[6],a[7]各二进制位组成的int型值
ptr += 5;// 编译器是这样处理的:将指针ptr的值加上5乘sizeof(int),
printf(“%d\n”*ptr);//指针访问了a[20]之后的内存,结果未知,若是写操作,会有危险
在上例中,指针ptr的类型是int*,它指向的类型是int,它被初始化为指向整形变量a。接下来的第3句中,指针ptr被加了1,编译器是这样处理的:它把指针ptr的值加上了sizeof(int),在32位程序中,是被加上了4。由于地址是用字节做单位的,故ptr所指向的地址由原来的变量a的地址向高地址方向增加了4个字节。 由于char类型的长度是一个字节,所以,原来ptr是指向数组a的第0号单元开始的四个字节,此时指向了数组a中从第4号单元开始的四个字节。
总结一下,一个指针ptrold加上一个整数n后,结果是一个新的指针ptrnew, ptrnew的类型和ptrold的类型相同,ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值增加了n乘sizeof(ptrold所指向的类型)个字节。就是说,ptrnew所指向的内存区将比ptrold所指向的内存区向高地址方向移动了n乘sizeof(ptrold所指向的类型)个字节。 一个指针ptrold减去一个整数n后,结果是一个新的指针ptrnew,ptrnew的类型和ptrold的类型相同,ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值减少了n乘sizeof(ptrold所指向的类型)个字节,就是说,ptrnew所指向的内存区将比ptrold所指向的内存区向低地址方向移动了n乘sizeof(ptrold所指向的类型)个字节。

四: 指针类型转换
赋值运算符“=”号成立的条件是:
1 、左边的值必须为可修改的左值(l-value)
2、“=”号两边的表达式结果类型必须一致。如果“=”号两边是指针表达式,它还必须符合第三个条件
3、“=”号两边的指针表达式所指向的类型必须一致。
当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向的类型是一样的。
float f=12.3;
float*fptr=&f;
int*p;
在上面的例子中,假如我们想让指针p指向实数f,应该怎么搞?是用下面的语句吗?
p=&f; 不对。因为指针p的类型是int*,它指向的类型是int。表达式&f的结果是一个指针,指针的类型是float*,它指向的类型是float。两者不一致,直接赋值的方法是不行的。为了实现我们的目的,需要进行"强制类型转换":
p=(int*)&f; 如果有一个指针p,我们需要把它的类型和所指向的类型改为TYEP1*和TYPE2, 那么语法格式是: (TYPE1*)p; 这样强制类型转换的结果是一个新指针,该新指针的类型是TYPE1*,它指向的类型是TYPE2,它指向的地址就是原指针指向的地址。而原来的指针p的一切属性都没有被修改。(还必须要注意一点TYPE1和TYPE2的类型还必须一直)
一个函数如果使用了指针作为形参,那么在函数调用语句的实参和形参的结合过程中,也会发生指针类型的转换。 例
void fun(char*);
int a=125,b;
fun((char*)&a);
... ...
void fun(char*s)
{
char c;
c=*(s+3);*(s+3)=*(s+0);*(s+0)=c;
c=*(s+2);*(s+2)=*(s+1);*(s+1)=c;
}
注意这是一个32位程序,故int类型占了四个字节,char类型占一个字节。函数fun的作用是把一个整数的四个字节的顺序来个颠倒。注意到了吗?在函数调用语句中,实参&a的结果是一个指针,它的类型是int*,它指向的类型是int。形参这个指针的类型是char*,它指向的类型是char。这样,在实参和形参的结合过程中,我们必须进行一次从int*类型到char*类型的转换。结合这个例子,我们可以这样来想象编译器进行转换的过程:编译器先构造一个临时指针char*temp, 然后执行temp=(char*)&a,最后再把temp的值传递给s。所以最后的结果是:s的类型是char*,它指向的类型是char,它指向的地址就是a的首地址。
们已经知道,指针的值就是指针指向的地址,在32位程序中,指针的值其实是一个32位整数。那可不可以把一个整数当作指针的值直接赋给指针呢?就象下面的语句:
unsigned int a;
TYPE*ptr;//TYPE是int,char或结构类型等等类型。
... ...
a=20345686
ptr=20345686;//我们的目的是要使指针ptr指向地址20345686(十进制 )
ptr=a;//我们的目的是要使指针ptr指向地址20345686(十进制)
编译一下吧。结果发现后面两条语句全是错的。
那么我们的目的就不能达到了吗?不,还有办法:
unsigned int a;
TYPE*ptr;//TYPE是int,char或结构类型等等类型。
... ...
a=某个数;这个数必须代表一个合法的地址
ptr=(TYPE*)a;//呵呵,这就可以了。
严格说来这里的(TYPE*)和指针类型转换中的(TYPE*)还不一样。
这里的(TYPE*)的意思是把无符号整数a的值当作一个地址来看待。
上面强调了a的值必须代表一个合法的地址,否则的话,在你使用ptr的时候,就会出现非法操作错误。
unsigned char* s_cfque = (unsigned char*)0x800000;
想想能不能反过来,把指针指向的地址即指针的值当作一个整数取出来。完 全可以。
下面的例子演示了把一个指针的值当作一个整数取出来,然后再把这个整数当作一个地址赋给一个指针:
int a=123,b;
int* ptr=&a;
char* str;
b=(int)ptr;//把指针ptr的值当作一个整数取出来。
str=(char*)b;//把这个整数的值当作一个地址赋给指针str。
好了,现在我们已经知道了,可以把指针的值当作一个整数取出来,也可以把一个整数值当作地址赋给一个指针。

C语言 编译原理

编译:将原程序转化成二进制格式的目标文件。
汇编:将源程序翻译成目标程序(针对的是汇编代码)
连接:根据二进制的目标文件中的内容,将使用到的程序库合并成可执行程序。
交叉编译:简单地说,就是在一个平台上生成另一个平台上的可执行代码。
Makefile编译:根据makefile文件指定的编译链接过程来完成编译。

一:c语言的编译流程(c语言是如何变成可执行文件的)
源代码(.c)--->预处理器(预编译)--->编译器(编译生成.o文件)--->优化处理---->汇编(处理程序中的汇编语言)--->链接器(链接生成可执行文件)。
1。预编译,把源代码中的宏展开并把包含的文件的源代码插入程序的源代码中.
编译预处理读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理
伪指令主要包括以下四个方面
1)宏定义指令,如#define Name TokenString,#undef等。对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的 Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。
2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif,等等。这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉
3) 头文件包含指令,如#include "FileName"或者#include 等。在头文件中一般用伪指令#define定义了大量的宏(最常见的是字符常量),同时包含有各种外部符号的声明。采用 头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再 在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。包含到c源 程序中的头文件可以是系统提供的,这些头文件一般被放在/usr/include目录下。在程序中#include它们要使用尖括号(< >)。另外开发人员也可以定义自己的头文件,这些文件一般与c源程序放在同一目录下,此时在#include中要用双引号("")。
4)特殊符号,预编译程序可以识别一些特殊的符号。例如在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称。预编译程序对于在源程序中出现的这些串将用合适的值进行替换。预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令
2。编译,把源代码编译成二进制的目标文件.但是此时目标文件还是不可执行的.
经过预编译得到的输出文件中,将只有常量。如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{,}, +,-,*,\,等等。预编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
3。优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系。
一种优化是对中间代码的优化。 这种优化不依赖于具体的计算机。
另一种优化则主要针对目标代码的生成而进行的。
我们将优化阶段放在编译程序的后面,这是一种比较笼统的表示。
对于前一种优化,主要的工作是删除公共表达式、循环优化(代码外提、强度削弱、变换循环控制条件、已知量的合并等)、复写传播,以及无用赋值的删除,等等。
后一种类型的优化同机器的硬件结构密切相关,最主要的是考虑是如何充分利用机器的各个硬件寄存器存放的有关变量的值,以减少对于内存的访问次数。另外,如何根据机器硬件执行指令的特点(如流水线、RISC、CISC、VLIW等)而对指令进行一些调整使目标代码比较短,执行的效率比较高,也是一个重要的研究 课题。经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行。
4。汇编,这一步主要是处理源代码中的汇编代码。
汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。目标文件由段组成。通常一个目标文件中至少有两个段:代码段  该段中所包含的主要是程序的指令。该段一般是可读和可执行的,但一般却不可写。 数据段  主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。 UNIX环境下主要有三种类型的目标文件:
1)可重定位文件  其中包含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据
2)共享的目标文件  这种文件存放了适合于在两种上下文里链接的代码和数据。第一种事链接程序可把它与其它可重定位文件及共享的目标文件一起处理来创建另一个目标文件;第二种是动态链接程序将它与另一个可执行文件及其它的共享目标文件结合到一起,创建一个进程映象
3)可执行文件   它包含了一个可以被操作系统创建一个进程来执行之的文件。汇编程序生成的实际上是第一种类型的目标文件。对于后两种还需要其他的一些处理方能得到,这个就是链接程序的工作了。
5。连接,把目标代码和二进制的库文件以及其它内容合并成最终的可执行文件.
由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。例如,某个源文件中的函数可能引用了另一个 源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够诶操作系统装入执行的统一整体。根据开发人员指定的同库函数的链接方式的不同,链接处理可分为两种:
1)静态链接 在这种链接方式下,函数的代码将从其所在地静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。
2) 动态链接  在此种方式下,函数的代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所作的只是在最终的可执行程序中记录下共享对象的 名字以及其它少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。动态链接程序将根据可执行程序中记录 的信息找到相应的函数代码。
对于可执行文件中的函数调用,可分别采用动态链接或静态链接的方法。使用动态链接能够使最终的可执行文件比较 短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。 在某些情况下动态链接可能带来一些性能上损害。


编译的各个阶段:



二:交叉编译:

“既然我们已经有了主机编译器,那为什么还要交叉编译呢?”其实答案很简单,没办法啊!有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器了。所以只能在主机上安装目的平台的编译器(或者是目的平台的改进编译器)。

三:Makefile编译

makefile是用于自动编译和链接的一个文件,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接-----但是不是所有的文件都需要重新编译,makefile能够纪录文件的信息,决定在链接的时候需要重新编译哪些文件!

在unix系统下,makefile是与make命令配合使用的

2008年10月28日星期二

硬件知识 GSM的原理

GSM900和DCS1800就是我们平常讲的双频网络,它们都是GSM标准。两个系统功能相同,主要是频率不同,GSM900工作在900MHZ,DCS1800工作在1800MHZ。我国最早使用的是GSM900,随着通信网络规模和用户数量的迅速发展,原有的GSM900网络频率变得日益紧张,为更好地满足用户增长的需求,我国近期引入了DCS1800,并采用以GSM900网络为依托, DCS1800网络为补充的组网方式,构成GSM900/DCS1800双频网,以缓和高话务密集区无线信道日趋紧张的状况。只要用户使用的是双频手机,就可在GSM900/DCS1800两者之间自由切换,自动选择最佳信道进行通话,即使在通话中手机也可在两个网络之间自动切换而用户毫无察觉,而且手机选择了最佳信道,接通率得到了提高。为适应这个趋势,进一步抢占市场份额,诺基亚、摩托罗拉、爱立信等世界著名移动电话设备生产厂商竞相开发并推出多频段手机。
(一)GSM系统的网络结构
GSM的历史可以追溯到1982年,当时,北欧四国向CEPT(Conference Europe of Post and Telecommunications)提交了一份建议书,要求制定900MHZ频段的欧洲公共电信业务规 范,以建立全欧统一的蜂窝系统。同年,成立了移动通信特别小组(GSM-Group Special Mobile)。在1982年~1985年期间,讨论焦点是制定模拟蜂窝网标准还是制定数字蜂窝网 标准问题,直到1986年决定为制定数字蜂窝网标准。1986年,在巴黎对不同公司、不同 方案的系统(8个)进行了比较,包括现场试验。1987年5月选定窄带TDMA方案。与此同时,18个国家签署了谅解备忘录,相互达成履行规范的协议。1988年颁布了GSM标准, 也称泛欧数字蜂窝通信标准。在现阶段,GSM包括两个并行的系统:GSM900和DCS1800, 这两个系统功能相同,主要是频率不同。在GSM建议中,未对硬件作出规定,只对功能和接口制定了详细规定,这样便于不同产品可以互通。GSM建议共有12个系统。
1.GSM系统的主要组成   
GSM数字蜂窝通信系统的主要组成部分可分为移动台、基站子系统和网络子系统。
基站子系统(简称基站BS)由基站收发台(BTS)和基站控制器(BSC)组成;
网络子系 统由移动交换中心(MSC)和操作维护中心(OMC)以及原地位置寄存器(HLR)、访问 位置寄存器(VLR)、鉴权中心(AUC)和设备标志寄存器(EIR)等组成。
2.GSM的区域、号码、地址与识别
1)区域划分
从地理位置范围来看,GSM系统分为GSM服务区,公用陆地移动网(PLMN)业务区、移动 交换控制区(MSC区)、位置区(LA)、基站区和小区。   
*GSM服务区   由联网的GSM全部成员国组成,移动用户只要在服务区内,就能得到系统的各种服 务,包括完成国际 漫游。   
*PLMN业务区    由GSM系统构成的公用陆地移动网(GSM/PLMN)处于国际或国内汇接交换机的级别上,该区域为PLMN业务区,它可以与公用交换电信网(PSTN)、综合业务数字网(ISDN) 和公用数据网(PDNN)互连,在该区域内,有共同的编号方法及路由规划。一个PLMN 业务区包括多个MSC业务区,甚至可扩展全国。   
*MSC业务区    在该区域内,有共同的编号方法及路由规划。由一个移动交换中心控制区域称为 MSC业务区。一个MSC区可以由一个或多个位置区组成。   
*位置区    每一个MSC业务区分成若干位置区(LA),位置区由若干基站区组成,它与一个或 若干个基站控制器(BSC)有关。在位置区内移动台移动时,不需要作位置更新。当寻 呼移动用户时,位置区内全部基站可以同时发寻呼信号。系统中,位置区域以位置区 识别码(LAI)来区分MSC业务区的不同位置区。   
*基站区   一般指一个基站控制器所控制若干个小区的区域称为基站区。   
*小区    小区也叫蜂窝区,理想形状是正六边形,一个小区包含一个基站,每个基站包含 若干套收,发信机,其有效覆盖范围决定于发射功率、天线高度等因素,一般为几公 里。基站可位于正六边形中心,采用全向天线,称为中心激励;也可位于正六边形顶 点(相隔设置),采用120度或60度定向天线,称为顶点激励。    若小区内业务量激增时,小区可以缩小(一分为四),新的小区俗称“小小区”, 在蜂窝网中称为小区分裂。
2)识别号码   
GSM网络是十分复杂的,它包括交换系统,基站子系统和移动台。移动用户可以 与市话网用户、综合业务数字网用户和其它移动用户进行接续呼叫,因此必须具有多 种识别号码。   
1>国际移动用户识别码(IMSI)    国际移动用户识别码是用于识别GSM/PLMN网中用户,简称用户识别码,根据GSM 建议,IMSI最大长度为15位十进制数字。MCC MNC MSIN/NMSI3位数字 1或者2位数字 10-11位数字MCC-移动国家码,3位数字。如中国的MCC为460。MNC-移动网号,最多2位数字。用于识别归属的移动通信网(PLMN)。MSIN-移动用户识别码。用于识别移动通信网中的移动用户。NMSI-国内移动用户识别码。由移动网号和移动用户识别码组成。   
2>临时用户识别码(TMSI)为安全起见,在空中传送用户识别码时用TMSI来代替IMSI,因为TMSI只在本地有效(即 在该MSC/VLR区域内),其组成结构由管理部门选择,但总长不超过4个字节。  
3>国际移动设备识别码(IMEI) IMEI是唯一的,用于识别移动设备的号码。用于监控被窃或无效的这一类移动设备, IMEI的构成如下图所示。IMEI=TAC+FAC+SNR+SP(15位数)。TAC FAC SNR SP6位数字 2位数字 6位数字 1位数字TAC - Type Approval Code (TAC) 型号批准码,由欧洲型号批准中心分配。 前2位为国家码。(例如:Nokia的,Ericsson的,Motorola的,又各式各样不同型号的 批准码又不尽相同,如同是Ericsson的,GH388和GF388就不一样,虽然只差有无盖; 但只要是同一型号的,前六码一定一样,如果不一样,可能是冒牌货!)FAC - Final Assembly Code (FAC)最后装配码,表示生产厂或最后装配地, 由厂家编码。如40的话,是Motorola在英国(UK)的工厂,07也是Motorola的工厂,在 德国,67的话也是,在美国本地。对Nokia,FAC是51。 SNR - Serial Number (SNR)序号码,独立地、唯一地识别每个TAC和FAC移 动设备,所以同一个牌子的同一型号的SNR是不可能一样的。SP - Spare备用码,通常是0。   
4>移动台PSTN/ISDN号码(MSISDN)MSISDN用于公用交换电信网(PSTN)或综合业务数字网(ISDN)拨向GSM 系统的号码,构成如下:MSISDN=CC+NDC+SN(总长不超过15位数字)CC=国家码(如中国为86),NDC=国内地区码,SN=用户号码  
5>移动台漫游号码(MSRN) 当移动台漫游到另一个移动交换中心业务区时,该移动交换中心将给移动台分配 一个临时漫游号码,用于路由选择。漫游号码格式与被访地的移动台PSTN/ISDN号码格 式相同。当移动台离开该区后,被访位置寄存器(VLR)和原地位置寄存器(HLR)都 要删除该漫游号码,以便可再分配给其它移动台使用。  MSRN分配过程如下:    市话用户通过公用交换电信网发MSISDN号至GSMC、HLR。HLR请求被访MSC/VLR分配 一个临时性漫游号码,分配后将该号码送至HLR。HLR一方面向MSC发送该移动台有关参 数,如国际移动用户识别码(IMSI);另一方面HLR向GMSC告知该移动台漫游号码, GMSC即可选择路由,完成市话用户->GMSC->MSC->移动台接续任务。   
6>位置区识别码(LAI)    LAI用于移动用户的位置更新。LAI=MCC+MNC+LAC 。MCC=移动国家码,识别国家, 与IMSI中的三位数字相同。MNC=移动网号,识别不同的GSMPLMN网,与IMSI中的MNC相 同。LAC=位置区号码,识别一个GSMPLMN网中的位置区。LAC的最大长度为16bits,一 个GSMPLMN中可以定义65536个不同的位置区。   
7>小区全球识别码(CGI)    CGI是用来识别一个位置区内的小区。它是在位置区识别码(LAI)后加上一个小 区识别码(CI)。    CGC=MCC+MNC+LAC+CI。   CI=小区识别码,识别一个位置区内的小区,最多为16bits。   
8>基站识别码(BSIC)   BSIC用于移动台识别不同的相邻基站,BSIC采用6比特编码。
(二)GSM系统信道分类   
蜂窝通信系统要传输不同类型的信息,包括业务信息和各种控制信息,因而要在物理 信道上安排相应的逻辑信道。这些逻辑信道有的用于呼叫接续阶段,有的用于通信进行 当中,也有的用于系统运行的全部时间内。
1、业务信道(TCH)传输话音和数据   
话音业务信道按速率的不同,可分为全速率话音业务信道(TCH/FS)和半速率话音业务信道(TCH/HS)。   
同样,数据业务信道按速率的不同,也分为全速率数据业务信道(如TCH/F9.6, TCH/F4.8,TCH/F2.4)和半速率数据业务信道(如 TCH/H4.8,TCH/H2.4)(这里的数 字9.6,4.8和2.4表示数据速率,单位为kb/s)。
2、控制信道(CCH)传输各种信令信息   
制信道分为三类:   
1)广播信息(BCH)是一种“一点对多点”的单方向控制信道,用于基站向所有移 动台广播公用信息。传输的内容是移动台入网和呼叫建立所需要的各种信息。其中又分 为:   
a、频率校正信道(FCCH):传输供移动台校正其工作频率的信息;   
b、同步信道(SCH):传输供移动台进行同步和对基站进行识别的信息;   
c、广播控制信道(BCCH):传输通用信息,用于移动台测量信号强度和识别小区 标志等。
2)公共控制信道(CCCH)是一种“一点对多点”的双向控制信道,其用途是在呼 叫接续阶段,传输链路连接所需要的控制信令与信息。其中又分为:   
a、寻呼信道(PCH):传输基站寻呼移动台的信息; 
b、随机接入信道(RACH):移动台申请入网时,向基站发送入网请求信息;   
c、准许接入信道(AGCH):基站在呼叫接续开始时,向移动台发送分配专用控制 信道的信令。   
3)专用控制信道(DCCH)是一种“点对点”的双向控制信道,其用途是在呼叫接 续阶段和在通信进行当中,在移动台和基站之间传输必需的控制信息。其中又分为:   
a、独立专用控制信道(SDCCH):传输移动台和基站连接和信道分配的信令;   
b、慢速辅助控制信道(SACCH):在移动台和基站之间,周期地传输一些特定的信 息,如功率调整、帧调整和测量数据等信息;SACCH是安排在业务信道和有关的控制信 道中,以复接方式传输信息。安排在业务信道时,以SACCH/T表示,安排在控制信道时, 以SACCH/C表示,SACCH/常与SDCCH联合使用。   
c、快速辅助控制信道(FACCH):传送与SDCCH相同的信息。使用时要中断业务信息(4帧),把FACCH插入,不过,只有在没有分配SDCCH的情况下,才使用这种控制信 道。这种控制信道的传输速率较快,每次占用4帧时间,约18.5ms。   
由此可见,GSM通信系统为了传输所需的各种信令,设置了多种专门的控制信道。 这样做,除因为数字传输为设置多各逻辑信道提供了可能外,主要是为了增强系统的控 制功能(比如后面将要提到的,为提高过境切换的速度而采用移动台辅助切换技术), 也为了保证话音通信质量,在模拟蜂窝系统中,要在通话进行过程中,进行控制信息的 传输,必须中断话音信息的传输(100ms),这就是所谓的“中断一猝发”的控制方式。 信道中断100ms,会使话音产生可以听得到的喀喇声。如果这种中断过于频繁,势必明 显地降低话音质量,因此,模拟蜂窝系统必须限制在通话过程中传输控制信息的容量。 与此不同,GSM蜂窝系统采用专用控制信道传输控制信息,除去FACCH外,不在通信过 程中中断话音信息,因而能保证话音的传输质量。其中FACCH虽然也采取“中断一猝发” 控制方式,但是只在特定场合下才使用,而且占用的时间短(18.5ms),其影响明显 减小。GSM蜂窝系统还采用信息处理技术,来估计并补偿这种因为插入FACCH而被删除 的话音。

硬件知识 移动通信系统介绍

移动通信系统的分类方法:按信号性质分,按调制方式分,按多址连接方式分。
按信号性质分,可分为模拟、数字;
按调制方式分,可分为调频、调相、调幅;
按多址连接方式分,可分为频分多址(FDMA)、时分多址(TDMA)和码分多址(CDMA)。
中国联通、中国移动所使用的GSM移动电话网采用的便是FDMA和TDMA两种方式的结合。
中国联通的CDMA业务使用的是CDMA方式。
GSM比模拟移动电话有很大的优势,但是,在频谱效率上仅是模拟系统的3倍,容量有限;在话音质量上也很难达到有线电话水平;TDMA终端接入速率最高也只能达到9.6kbit/s;TDMA系统无软切换功能,因而容易掉话,影响服务质量。因此,TDMA并不是现代蜂窝移动通信的最佳无线接入。
CDMA移动通信网是由扩频、多址接入、蜂窝组网和频率复用等几种技术结合而成,含有频域、时域和码域三维信号处理的一种协作,因此它具有抗干扰性好,抗多径衰落,保密安全性高,同频率可在多个小区内重复使用,容量和质量之间可做权衡取舍等属性。这些属性使CDMA比其它系统有很大的优势。
(1) 系统容量大 理论上,在使用相同频率资源的情况下,CDMA移动网比模拟网容量大20倍,实际使用中比模拟网大10倍,比GSM要大4-5倍。
(2) 系统容量的配置灵活 在CDMA系统中,用户数的增加相当于背景噪声的增加,造成话音质量的下降。但对用户数并无限制,操作者可在容量和话音质量之间折衷考虑。另外,多小区之间可根据话务量和干扰情况自动均衡。 这一特点与CDMA的机理有关。CDMA是一个自扰系统,所有移动用户都占用相同带宽和频率,打个比方,将带宽想像成一个大房子,所有的人将进入惟一的大房子。如果他们使用完全不同的语言,他们就可以清楚地听到同伴的声音而只受到一些来自别人谈话的干扰。在这里,屋里的空气可以被想像成宽带的载波,而不同的语言即被当作编码,我们可以不断地增加用户直到整个背景噪音限制住了我们。如果能控制住用户的信号强度,在保持高质量通话的同时,我们就可以容纳更多的用户。
(3) 通话质量更佳 TDMA的信道结构最多只能支持4Kb的语音编码器,它不能支持8Kb以上的语音编码器。而CDMA的结构可以支持13kb的语音编码器。因此可以提供更好的通话质量。CDMA系统的声码器可以动态地调整数据传输速率,并根据适当的门限值选择不同的电平级发射。同时门限值根据背景噪声的改变而变,这样即使在背景噪声较大的情况下,也可以得到较好的通话质量。另外,TDMA采用一种硬移交的方式,用户可以明显地感觉到通话的间断,在用户密集、基站密集的城市中,这种间断就尤为明显,因为在这样的地区每分钟会发生2至4次移交的情形。而CDMA系统“掉话”的现象明显减少,CDMA系统采用软切换技术,“先连接再断开”,这样完全克服了硬切换容易掉话的缺点。
(4) 频率规划简单 用户按不同的序列码区分,所以不相同CDMA载波可在相邻的小区内使用,网络规划灵活,扩展简单。
(5)建网成本低 CDMA技术通过在每个蜂窝的每个部分使用相同的频率,简化了整个系统的规划,在不降低话务量的情况下减少所需站点的数量从而降低部署和操作成本。CDMA网络覆盖范围大,系统容量高,所需基站少,降低了建网成本。
CDMA数字移动技术与现在众所周知的GSM数字移动系统不同。模拟技术被称为第一代移动电话技术,GSM是第二代,CDMA是属于移动通讯第二代半技术,比GSM更先进。

GSM的历史可以追溯到1982年,当时,北欧四国向CEPT(Conference Europe of Post and Telecommunications)提交了一份建议书,要求制定900MHZ频段的欧洲公共电信业务规 范,以建立全欧统一的蜂窝系统。同年,成立了移动通信特别小组(GSM-Group Special Mobile)。在1982年~1985年期间,讨论焦点是制定模拟蜂窝网标准还是制定数字蜂窝网 标准问题,直到1986年决定为制定数字蜂窝网标准。1986年,在巴黎对不同公司、不同 方案的系统(8个)进行了比较,包括现场试验。1987年5月选定窄带TDMA方案。与此同时,18个国家签署了谅解备忘录,相互达成履行规范的协议。1988年颁布了GSM标准, 也称泛欧数字蜂窝通信标准。在现阶段,GSM包括两个并行的系统:GSM900和DCS1800, 这两个系统功能相同,主要是频率不同。在GSM建议中,未对硬件作出规定,只对功能和接口制定了详细规定,这样便于不同产品可以互通。GSM建议共有12个系统。

硬件知识 基带信号和宽带信号及多路复用技术

基带信号就是将数字信号 1 或 0 直接用两种不同的电压来表示,然后送到线路上去传输。
特征:
*保持数据波形的原样
* 数字信号为电脉冲或者光脉冲
* 信号传输将占用整个信道的带宽
* 数据波信号会随着距离的增加而衰减,随着频率的增加而容易发生畸变,因此它不适合高速和远距离的传输
宽带信号则是将基带信号进行调制后形成的频分复用模拟信号。
多路复用是指两个或多个用户共享公用信道的一种机制。通过多路复用技术,多个终端能共享一条高速信道,从而达到节省信道资源的目的,
  多路复用技术的基本原理是:各路信号在进入同一个有线的或无线的传输媒质之前,先采用调制技术把它们调制为互相不会混淆的已调制信号,然后进入传输媒质传送到对方,在对方再用解调(反调制)技术对这些信号加以区分,并使它们恢复成原来的信号,从而达到多路复用的目的。
  常用的多路复用技术有频分多路复用(FDMA),时分多路复用(TDMA),码分多路复用(CDMA),波分多路复用(WDM)几种。
频分多路复用(FDMA)
频分制是将传输频带分成N部分,每一个部分均可作为一个独立的传输信道使用。这样在一对传输线路上可有N对话路信息传送,而每一对话路所占用的只是其中的一个频段。频分制通信又称载波通信,它是模拟通信的主要手段。
时分多路复用(TDMA)
时分制是把一个传输通道进行时间分割以传送若干话路的信息。把N个话路设备接到一条公共的通道上,按一定的次序轮流的给各个设备分配一段使用通道的时间。当轮到某个设备时,这个设备与通道接通,执行操作。与此同时,其它设备与通道的联系均被切断。待指定的使用时间间隔一到,则通过时分多路转换开关把通道联接到下一个要连接的设备上去。时分制通信也称时间分割通信,它是数字电话多路通信的主要方法,因而PCM通信常称为时分多路通信。时分多路复用技术广泛应用于数字通讯。
码分多路复用(CDMA)
CDMA技术不是一项新技术,作为一种多址方案它已经成功地应用于卫星通信和蜂窝电话领域,并且显示出许多优于其他技术的特点。但是,由于卫星通信和移动通信中带宽的限制,所以CDMA技术尚未充分发挥优点。光纤通信具有丰富的带宽,能够很好地弥补这个缺陷。近年来,OCDMA已经成为一项备受瞩目的热点技术。
波分多路复用(WDM)
波分复用(WDM)是将两种或多种不同波长的光载波信号(携带各种信息)在发送端经复用器(亦称合波器,Multiplexer)汇合在一起,并耦合到光线路的同一根光纤中进行传输的技术; 在接收端,经解复用器(亦称分波器或称去复用器,Demultiplexer)将各种波长的光载波分离,然后由光接收机作进一步处理以恢复原信号。这种在同一根光纤中同时传输两个或众多不同波长光信号的技术,称为波分复用。这种用于光纤通信的“波分复用”技术,现在正在迅速发展之中。
频分多路复用与时分多路复用的区别如下:
(1)微观上,频分多路复用的各路信号是并行的,而时分多路复用是串行的。
(2)频分多路复用较适合于模拟信号,而时分多路复用较适用于数字信号。
频分多路复用是将传输介质的可用带宽分割成一个个“频段”,以便每个输入装置都分配到一个“频段”。传输介质容许传输的最大带宽构成一个信道,因此每个“频段”就是一个子信道。 频分多路复用的特点是:每个用户终端的数据通过专门分配给它的予信道传输,在用户没有数据传输时,别的用户也不能使用。频分多路复用适合于模拟信号的频分传输,主要用于电话和电缆电视(CATV)系统,在数据通信系统中应和调制解调技术结合使用。

arm硬件知识 arm处理器的存储模式

ARM体系结构将存储器看作是从零地址开始的字节的线性组合(即所说的平板地址空间)。从零字节到三字节放置第一个存储的字数据,从第四个字节到第七个字节放置第二个存储的字数据,依次排列。作为32位的微处理器,ARM体系结构支持最大寻址空间为4GB(2^32)字节。
在ARM体系结构中,每个字单元包含4字节单元或者2个半字单元,1个半字单元包含2字节单元。但是在字单元中,4字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式,通常称为大端格式或者小端格式,也就是big-endian格式和little-endian格式。大/小端的选择对于不同的芯片来说有一些不同的选择方式,一般都可以通过外部的引脚或内部的寄存器来选择。具体要参见处理器的数据手册。
大端格式:

小端格式:在ARM体系结构中通常希望字单元的地址是字对齐的(地址的低两位是0b00),半字单元的地址是半字对齐的(地址的最低位为0b0),
但在存储单元中地址没有遵守上述的对齐规则,称为非对齐的存储访问操作,在ARM体系结构的伪指令集中有专门的align指令来指定对齐格式。



2008年10月27日星期一

arm硬件知识 arm处理器MMU

一:在ARM系统中,存储管理单元MMU主要完成工作:
1、虚拟存储空间到物理存储空间的映射。在ARM中采用了页式虚拟存储管理。
2、存储器访问权限的控制。
3、设置虚拟存储空间的缓冲的特性。
二:开启MMU时存储访问过程:

禁止MMU时存储访问过程:
① 先要确定芯片是否支持cache和write buffer。如果芯片规定当禁止MMU时禁止cache和write buffer,则存储访问将不考虑C和B控制位。如果芯片规定当禁止MMU时可以使能cache和write buffer,则数据访问时,C=0,B=0;指令读取时,如果使用分开的TLB,那么C=1,如果使用统一的TLB,那么C=0。
② 存储访问不进行权限控制,MMU也不会产生存储访问中止信号。
③ 所有的物理地址和虚拟地址相等,即使用平板存储模式。

三: MMU中的地址变换过程:通过两级页表实现。
a)一级页表中包含有以段为单位的地址变换条目以及指向二级页表的指针。一级页表是实现的地址映射粒度较大。以段为单位的地址变换过程只需要一级页表。
b)二级页表中包含有以大页和小页为单位的地址变换条目。有一种类型的二级页表还包含有以极小页为单位的地址变换条目。以页为单位的地址变换过程需要二级页表。

arm硬件知识 arm和thumb

ARM7TDMI核以后,T变种的ARM微处理器有两种工作状态
ARM状态
Thumb状态
ARM是32位指令集
Thumb是16位指令集,功能是ARM指令集的功能子集。

在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且该转变不影响处理器的工作模式和相应寄存器中的内容。

ARM指令集和Thuumb指令集均有切换处理器状态的指令,并可以再两种工作状态之间切换,但是ARM微处理器在开始执行代码时,应该处于ARM状态。
进入Thumb状态:当操作数寄存器的状态位(位[0])为1时,执行BX指令使微处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态时发生异常(如IRQ,FIQ,Undef,Abort,SWI等),则异常处理返回时,自动切换到Thumb状态。
进入ARM状态:当操作数寄存器的状态位(位[0])为0时,执行BX指令使微处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。

2008年10月26日星期日

arm硬件知识 arm处理器的寄存器

ARM寄存器介绍

在移植操作系统的时候,尤其是在移植Boot Loader的时候必须了解ARM处理器的寄存器。在Boot Loader里有一段很重要的处理器初始化程序是用ARM汇编写的,有几个关键参数需要传递,关于这些参数在后面介绍Boot Loader时会有详细的描述。
ARM处理器含有37个寄存器,这些寄存器包括以下两类寄存器。
(1)31个通用寄存器:包括程序计数器PC等,这些寄存器都是32位寄存器。
(2)6个状态寄存器:状态寄存器也是32位的寄存器,但是只使用了其中的12位。
1. 通用寄存器

在ARM处理器的7种模式下都有一组对应的寄存器组。在任意时刻,可见的寄存器组包括15个通用寄存器R0~R14、一个或两个状态寄存器和PC。在所有的寄存器中,有些是各种模式下共用的同一个物理寄存器,有些是各种模式自己独立拥有的物理寄存器。详细如表1-3所示。


通用寄存器通常又可以分为下面3类。

未备份寄存器:包括R0~R7。
备份寄存器:包括R8~R14。
程序计数器PC:即R15。
1)未备份寄存器R0~R7对于每个未备份寄存器来说,在所有的处理器模式下指的都是同一个物理寄存器,在异常中断造成处理器模式切换时,由于不同的处理器模式使用相同的物理寄存器,可能造成寄存器中数据被破坏。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未备份寄存器。

2)备份寄存器R8~R14备份寄存器中的每个寄存器对应于两个不同的物理寄存器。例如,当使用快速中断模式下的寄存器时,寄存器R8和寄存器R9分别记做R8_fiq和R9_fiq,当使用用户模式下的寄存器时,寄存器R8和寄存器R9分别记做R8_usr和R9_usr等。在这两种情况下使用的是不同的物理寄存器,系统没有将这几个寄存器用于任何的特殊用途。中断处理非常简单,仅仅使用R8~R14寄存器时,FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而可以使中断处理过程很迅速。对于备份寄存器R13、R14来说,每个寄存器对应于6个不同的物理寄存器,其中的一个是用户模式和系统模式共用的,另外的5个则对应于其他5种处理器模式,采用下面的方法来标识。R13_mode,其中mode是usr、svc、abt、und、irq和fiq的一种。R13通常用做堆栈指针。每一种模式都拥有自己的物理R13。程序初始化R13,使其指向该模式专用的栈地址。当进入该模式时,可以将需要使用的寄存器保存在R13所指的栈中,当退出该模式时,将保存在R13所指的栈中的寄存器值弹出。这样就实现了程序的现场保护。寄存器R14又被称为连接寄存器(LR),在ARM中有下面两种特殊用途。① 每一种处理器模式在自己的物理R14中存放当前子程序的返回地址。当通过BL或者BLX指令调用子程序时,R14被设置成该子程序的返回地址。在子程序中,当把R14的值复制到程序计数器PC中时,就实现了子程序返回。具体的汇编调用方式是:MOV PC,LR或BX LR。② 当发生异常中断的时候,该模式下的特定物理R14被设置成该异常模式将要返回的地址。

3)程序计数器PC→R15由于ARM处理器采用的是流水线机制,当正确地读取了PC值时,该值为当前指令地址值加8字节。也就是说对于ARM指令来说,PC指向当前指令的下两条指令的地址,由于ARM指令是字对齐的,PC值的第0位和第1位总是为0。当成功地向PC写入一个地址数值时,程序将跳转到该地址执行。在ARM系统进行代码级调试时对于R13、R14及PC的跟踪很重要,可以用来分析系统堆栈及PC指针值的变化等。

2.程序状态寄存器CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。每一种模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常退出时,可以用SPSR中保存的值来恢复CPSR。CPSR的具体格式如下。

1)条件标志位N(Negative)、Z(Zero)、C(Carry)及V(oVerflow)统称为条件标志位。大部分的ARM指令可以依据CPSR中的这些标志位来选择性地执行。各条件标志位的具体含义,
N
本位设置成当前指令运算结果的bit[31]的值
当两个补码表示的有符号整数运算时,N=1表示运算的结果为负数,N=0 表示结果为正数或零
Z
Z=1表示运算结果是0,Z=0表示运算结果不是零
对于CMP指令,Z=1表示进行比较的两个数大小相等
C
在加法指令中(包括比较指令CMN),结果产生进位了,则C=1,表示无符号数运算发生上溢出,其他情况下C=0
在减法指令中(包括比较指令CMP),结果产生借位了,则C=0,表示无符号数运算发生下溢出,其他情况下C=1
对于包含移位操作的非加/减法运算指令,C中包含最后一次被溢出的位的数值,对于其他非加/减法运算指令,C位的值通常不受影响
V
对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出
其他的指令通常不影响V位

2)Q标志位在ARM v5的E系列处理器中,CPSR的bit[27]称为Q标志位,主要用于指示增强的DSP指令是否发生了溢出,同样的,SPSR的bit[27]也称为Q标志位,用于在异常中断发生时保存和恢复CPSR中的Q标志位。

3)CPSR中的控制位CPSR的低8位I、F、T及M[4:0]统称为控制位,当异常中断发生时这些位发生变化。在特权级的处理器模式下,软件可以修改这些控制位。① I中断禁止位当I=1时禁止IRQ中断。当F=1时禁止FIQ中断。通常一旦进入中断服务程序可以通过置位I和F来禁止中断,但是在本中断服务程序退出前必须恢复原来I、F位的值。② T控制位,用来控制指令执行的状态,即说明本指令是ARM指令还是Thumb指令。对于不同版本的ARM处理器,T控制位的含义是有些不同的。对于ARM v3及更低的版本和ARM v4的非T系列版本的处理器,没有ARM和Thumb指令的切换,所以T始终为0。对于ARM v4及更高版本的T系列处理器,T控制位含义如下。当T=0,表示执行ARM指令。当T=1,表示执行Thumb指令。对于ARM v5及更高的版本的非T系列处理器,T控制位的含义如下。当T=0表示执行ARM指令。当T=1表示强制下一条执行的指令产生为定义指令中断。③ M 控制位控制位M[4:0]称为处理器模式标识位,具体说明如下
M[4:0] 处理器模式 可访问的寄存器
0b10000 User PC,R14~R0,CPSR
0b10001 FIQ PC,R14_fiq~R8_fiq,R7~R0,CPSR,SPSR_fiq
0b10010 IRQ PC,R14_irq~R13_irq,R12~R0,CPSR,SPSR_irq
0b10011 Supervisor PC,R14_svc~R13_svc,R12~R0,CPSR,SPSR_svc
0b10111 Abort PC,R14_abt~R13_abt,R12~R0,CPSR,SPSR_abt
0b11011 Undefined PC,R14_und~R13_und,R12~R0,CPSR,SPSR_und
0b11111 System PC,R14~R0,CPSR(ARM v4及更高版本)

CPSR的其他位用于将来ARM版本的扩展,程序可以先不操作这些位。
MRS:状态寄存器到通用寄存器的传送指令。MSR:通用寄存器到状态寄存器的传送指令。

arm硬件知识 arm处理器工作模式

ARM处理器共有7种运行模式如表。

处理器模式 描 述
用户模式(User,usr) 正常程序执行的模式
快速中断模式(FIQ,fiq) 用于高速数据传输和通道处理
外部中断模式(IRQ,irq) 户通常的中断使用
特权模式(Supervisor,sve) 供操作系统使用的一种保护模式
数据访问中止模式(Abort,abt)用于虚拟存储及存储保护
未定义指令中止模式(Undefin- ed,und) 用于支持通过软件仿真硬件的协处理器
系统模式(System,sys) 用于运行特权级的操作系统任务

除了用户模式以外,其他6种处理器模式可以称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。
其中除了系统模式外的其他5种特权模式又称为异常模式。
处理器模式可以通过软件来切换,在ARM Linux操作系统中,只有运行在内核态的程序才有可能更改处理器模式,用户态的程序是不能访问受操作系统保护的系统资源的,更不能直接进行处理器模式的切换。当需要处理器模式切换的时候,用户态的程序可以中断,内核态的中断处理程序开始响应并做出处理。

以上7种模式对应了系统中的中断向量表,这在移植操作系统的时候值得注意的。系统中所有的调度都是围绕着中断向量表展开的。在不用操作系统的系统中也就是通常所谓的裸机系统程序中,对于中断向量表的处理也很关键。这种情况下,这个向量表一般加载在CPU复位执行的开始地址的一段空间(这与单片机一致)。

在移植ARM Linux操作系统时,Boot Loader程序的移植需要考虑这些问题,而一旦Boot Loader移植成功,运行起来以后,开发人员就不需要再考虑这个问题了。

单片机 单片机的处理器结构

对单片机处理方式而言,目前单片机的系统结构有两种类型:
一种是将程式和资料记忆体分开使用,即哈佛(Harvard)结构,当前的单片机大都是这种结构。
另一种是采用和PC机的冯.诺依曼(Von Neumann)类似的原理,对程式和资料记忆体不作逻辑上的区分,即普林斯顿(Princeton)结构。

硬件知识 主要的嵌入式处理器

MCU的架构而言,可分为两大主流;RISC(Reduced Instruction Set Computer)与CISC(Complex Instruction Set Computer),

主要的嵌入式处理器有ARM、MIPS、PowerPC、X86、68K/Cold fire等,下面对这些处理器进行一些简单介绍。
ARM是Advanced RISC Machines的缩写,顾名思义ARM处理器自然也是一种典型的精简指令集处理器。ARM处理器的核心技术来自于英国的一家IC软核设计公司——ARM公司。

MIPS是Microprocessor without Inter-locked Pipeline Stages的缩写,是由MIPS技术公司开发的一种处理器内核标准。目前有32位和64位MIPS芯片,芯片也是由MIPS技术公司生产的。

PowerPC是早期Motorola公司和IBM公司联合为Apple公司的MAC机开发的CPU芯片,商标权同时属于IBM和Motorola两家公司,并一度成为他们的主导产品。IBM公司主要的PowerPC产品有PowerPC 604s(深蓝内部的CPU)、PowerPC 750、PowerPC G3(1.1GHz)。Motorola公司则主要有MC和MPC系列。尽管他们产品不一样,但都采用PowerPC的内核。这些产品在电信、金融和其他许多行业都具有广泛的应用。

x86系列处理器起源于Intel架构的8080,然后发展出286、386、486直到现在的奔腾处理器乃至双核处理器等。从嵌入式市场来看,486DX也应该是和ARM、68K、MIPS和SuperH齐名的5大嵌入式处理器之一。目前市场上的PC104产品基本都是基于x86体系结构,在工业控制领域里面PC104产品的占有量仍然很大。

Motorola 68K是出现比较早的一款嵌入式处理器,采用的是CISC(复杂指令集系统计算机)结构,设计经典,在全球各种嵌入式应用领域中取得巨大成功。Sun微系统公司也把这款处理器应用于早期的工作站中。

arm硬件知识 arm处理器主要内核及其主要区别

ARM处理器当前主要有6个系列产品:ARM7、ARM9、ARM9E、ARM10E、SecurCore 及最新的ARM11 系列。进一步的产品则来自于ARM公司的合作伙伴,如Intel公司的StrongARM产品和XScale微体系结构等,不过Intel公司已经于2006年将该架构出售给Marvell Technology Group Ltd了。ARM公司还把ARM IP Core提供给其他芯片设计公司用于设计ARM+DSP、ARM+FPGA等SOC结构的芯片。现在用得比较多的如TI公司的OMAP,达芬奇系列大部分是含有ARM+DSP双核处理器的产品。Actel公司的带M7标识的ProASIC3E系列芯片则是FPGA+ARM7的SOC系统芯片。这些多功能IC的发展也拓宽了ARM处理器的应用范围。

arm7内核是0.97MIPS/MHz 三级流水线 80MHz 冯·诺伊曼结构 0.06mw/MHz
arm9内核是1.1MIPS/MHz 五级流水线 200MHz 哈佛结构 0.19mw/MHz
arm10内核是1.3MIPS/MHz 六级流水线 300MHz 哈佛结构 0.5mw/MHz
arm11内核是1.2MIPS/MHz 八级流水线 500MHz 哈佛结构 0.4mw/MHz

arm指令集:v4t v5te v5tej v6

arm7,arm966E没有mmu,
arm720T,arm9是有mmu的,
arm940T,arm946E只有Memory protection unit.不是一个完整的MMU。
arm10,arm11是有mmu的。

在ARM处理器内核中有多个功能模块可供生产厂商根据不同用户的不同要求来配置生产。这些模块分别用T、D、M、I、E、J、F、S等来表示,这些模块一般从处理器的内核版本上可以区分出来。
T:表示支持Thumb指令,说明该内核可从16位Thumb指令集扩充到32位ARM指令集。
D:表示支持Debug,说明该内核中放置了用于调试的结构,通常它为一个边界扫描链JTAG,可使CPU进入调试模式,从而方便地进行断点设置、单步调试。
M:表示Multiplier,说明处理器内部带有8位乘法器。
I:表示Embedded ICE Logic,用于实现断点观测及变量观测的逻辑电路部分,其中的TAP控制器可接入到边界扫描链。
除了以上一些特性外,ARM处理器内核中还有一些处理器内核带EJ-S模块。
E:表示DSP Enhancement,即增加了前导零处理和饱和运算等一些常用的DSP运算指令,极大地改善音、视频处理程序的性能。
J:表示Jazelle DBX(Direct Bytecode eXecution),这是ARM公司推出的Java加速解决方案。Jazelle不是一个简单的加速硬件,它是融入于处理器流水线之中的一项专门针对Java指令执行的硬件功能,使得CPU可以直接接收一部分Java指令,并加以译码执行。通过这里的介绍,读者可以试着分析一下ARM926EJ的具体含义。
F:表示向量浮点单元。
S:表示可综合的软核softcore。

冯·诺伊曼结构特点:

哈佛结构特点:

ARM流水线对比

单指令周期流水线:

多指令周期流水线:







2008年9月25日星期四

硬件知识 AT91SAM9263在工控行业的优势。

AT91SAM9263的特点及优势:
200M主频,决定了使用方向就是面向工控,也决定了其价格。
低功耗,决定了发热量,决定了应用环境。
双总线结构,主要目的是用于显示缓存,可能对工控行业不太实用,不过用他来扩展总线是另外的一大用途。
image sensor interface:可用于视频监控。
LCD:人机界面
网络接口:可用于大数据量传输,组网控制。
三个串口:可扩展484,红外,GPS等串口接口的设备。
can总线:
ac97接口:人机接口的语音输出
MCI接口:稳定便宜的存储设备
CF卡,IDE:大存储设备
两个SPI:强大的外部设备的扩展
4路PWM:满足一般的应用
TWI:设备扩展,
还有一大特点就是其大量的IO口。一共有160个。

以下是用AT91SAM9263开发的工控板,其应用可以涵盖工控领域。
CPU:AT91SAM9263
SDRAM:64M
DataFlash:4-16M
NandFlash:256M
LCD:16位(565)
触摸屏: SPI扩展芯片。
矩阵键盘: TWI扩展芯片
音频:输入,输出
网络: 10/100M
CAN总线:c
an2.0A和2.0B兼容
串口: 一个调试口,一个五线,两个三线,都支持红外,485功能。
USB: USB2.0
IDE,CF卡:二选一
PWM:
GPIO:60-80个
RTC,watchdog,beep。
扩展8位或者16位总线:
扩展SPI:

硬件知识 工控行业的特点

跟工控打交道几年了,没有总结过这个行业的特点。没事谈谈一点看法。
工控最最主要的就是要求“稳定,可靠”。什么东西都要求能“按章”工作。不能胡来。这也就对应了相应的一个特点:简单,朴实。产品可能不像消费产品那样“花哨”。
另外的一些特点:
电源稳定可靠,不能起火,不能爆炸,不能时有时无等。
接口兼容性,一般设备都要求留接口以供他用,接口的兼容性问题就很重要。
像一般的AD电压0-±2.5v、0-±5v、0-±10v、4-20mA等。
像一般的控制信号都是TTL电平。
人机界面方面在工控要求也较高。像输入的键盘,输出的LCD,VGA显示等,现在很多的还要求触摸屏,usb鼠标,usb键盘,语音输入,语音输出等。
在工控产品中,数据量存储要求也较高,要求的存储量要大,存储时间长,存储介质要可靠。
在通讯接口方面,工控行业一般要求很高,一般都使用标准的稳定可靠的协议,
像RS232,RS485,CAN,网络等。工业上应用的无线技术,包括Zigbee,RFID,Wireless HART等

2008年9月8日星期一

杂记 真是一头懒熊,都一个多月两个月没有来了

可能这就是我的致命的缺点--没有毅力。
我看过一本测命的书就这么说的,属羊的人就是做事没有恒心,易犯冷热病。
不知道要怎么才能改正呢???

2008年7月29日星期二

wince学习 wince5.0下EP9315串口驱动结构,移植到AT91SAM9263下的方法

EP9315内部串口驱动结构:
EP9315内部串口采用分层的驱动结构。
对内核层的接口函数,在
E:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\SERIAL文件夹中的Mdd.c文件中。
他的目的是建立驱动的结构,
COM_Init
COM_Deinit
COM_Open
COM_Close
COM_Read
COM_Write
COM_Seek
COM_PowerDown
COM_PowerUp
COM_IOControl
其中还有中断的处理进程。
然后一层是最底层的硬件操作层
COM层函数通过一个结构体调用这一层函数。
在E:\WINCE500\PLATFORM\Eac0921\Src\Drivers\Serial文件夹中的p1010com.c文件定义。
Const HW_VTBL IoVTbl = {
SerInit,
SL_PostInit,
SerDeinit,
SerOpen,
SerClose,
SL_GetInterruptType,
SL_RxIntr,
SL_TxIntrEx,
SL_ModemIntr,
SL_LineIntr,
SL_GetRxBufferSize,
SerPowerOff,
SerPowerOn,
SL_ClearDTR,
SL_SetDTR,
SL_ClearRTS,
SL_SetRTS,
SerEnableIR,
SerDisableIR,
SL_ClearBreak,
SL_SetBreak,
SL_XmitComChar,
SL_GetStatus,
SL_Reset,
SL_GetModemStatus,
SerGetCommProperties,
SL_PurgeComm,
SL_SetDCB,
SL_SetCommTimeouts,
};
调用方法如下:
PHWOBJ GetSerialObject(DWORD DeviceArrayIndex)
{
PHWOBJ pSerObj;
// Unlike many other serial samples, we do not have a statically allocated
// array of HWObjs. Instead, we allocate a new HWObj for each instance
// of the driver. The MDD will always call GetSerialObj/HWInit/HWDeinit in
// that order, so we can do the alloc here and do any subsequent free in
// HWDeInit.
// Allocate space for the HWOBJ.
pSerObj = (PHWOBJ)LocalAlloc( LMEM_ZEROINITLMEM_FIXED ,sizeof(HWOBJ) );
if ( !pSerObj )
return (NULL);
// Fill in the HWObj structure that we just allocated.
pSerObj->BindFlags = THREAD_AT_OPEN; // Have MDD create thread when device is first opened.
pSerObj->dwIntID = 0; // SysIntr is filled in at init time
pSerObj->pFuncTbl = (HW_VTBL *) &IoVTbl; // Return pointer to appropriate functions
// Now return this structure to the MDD.
return (pSerObj);
}
其中的SL开头的函数都是在p1010ser.c文件中定义。


EP9315外扩串口的驱动结构。
EP9315外部串口也采用分层的驱动结构。不同的是EP9315外扩串口将所有的代码都在
E:\WINCE500\PLATFORM\Eac0921\Src\Drivers\Ext_uart文件夹中。
其驱动结构如下:
对内核层的接口函数,在Mdd.c文件中。
COM_Init
COM_Deinit
COM_Open
COM_Close
COM_Read
COM_Write
COM_Seek
COM_PowerDown
COM_PowerUp
COM_IOControl
其中还有中断的处理进程。
然后一层是最底层的硬件操作层
COM层函数通过一个结构体调用这一层函数。
在CCSer_pdd.c文件中。
Const HW_VTBL SerIoVTbl= {
CCSerInit,
SL_PostInit,
CCSerDeinit,
CCSerOpen,
CCSerClose,
SL_GetInterruptType,
SL_RxIntr,
SL_TxIntrEx,
SL_ModemIntr,
SL_LineIntr,
SL_GetRxBufferSize,
CCSerPowerOff,
CCSerPowerOn,
SL_ClearDTR,
SL_SetDTR,
SL_ClearRTS,
SL_SetRTS,
CCSerEnableIR,
CCSerDisableIR,
SL_ClearBreak,
SL_SetBreak,
SL_XmitComChar,
SL_GetStatus,
SL_Reset,
SL_GetModemStatus,
CCSerGetCommProperties,
SL_PurgeComm,
SL_SetDCB,
SL_SetCommTimeouts,
SL_Ioctl
};
调用方法如下:
//HWOBJ for EXT_UART1 product serial
HWOBJ SerObj4 =
{
THREAD_AT_OPEN,
0,
(PHW_VTBL) &SerIoVTbl
};

//HWOBJ for EXT_UART2 product serial
HWOBJ SerObj5 =
{
THREAD_AT_OPEN,
0,
(PHW_VTBL) &SerIoVTbl
};

//HWOBJ for EXT_UART3 product serial
HWOBJ SerObj6 =
{
THREAD_AT_OPEN,
0,
(PHW_VTBL) &SerIoVTbl
};

//HWOBJ for EXT_UART4 product serial
HWOBJ SerObj7 =
{
THREAD_AT_OPEN,
0,
(PHW_VTBL) &SerIoVTbl
};

其中的SL开头的函数都是在Ser16550.c文件中定义。


扩展串口驱动从EP9315移植到AT92SAM9263下:
1、直接将驱动代码文件夹Ext_uart拷贝到AT92SAM9263的driver下。
2、修改Ext_uart文件夹中的sources文件
!if 0
Copyright (c) Microsoft Corporation. All rights reserved.
!endif
!if 0
Use of this source code is subject to the terms of the Microsoft end-user
license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
If you did not accept the terms of the EULA, you are not authorized to use
this source code. For a copy of the EULA, please see the LICENSE.RTF on your
install media.
!endif

!IF ("$(BSP_NOEXTSERIAL)" == "1") && ("$(BSP_BIN)" != "1")
SKIPBUILD=1
!ENDIF


RELEASETYPE=PLATFORM
TARGETNAME=at91sam9263ek_extserial
TARGETTYPE=DYNLINK
TARGETLIBS= \
$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib \

SOURCELIBS= \
$(_PLATCOMMONLIB)\$(_CPUDEPPATH)\at91sam926x_serial.lib \

SOURCES= \
mdd.c \
ccser_pdd.c \
ser16550.c

DLLENTRY=DllMain
DEFFILE=at91sam9263ek_extserial.def
FILE_VIEW_RESOURCE_FOLDER= \
at91sam9263ek_extserial.def \
at91sam9263ek_serial_extusart.reg \

FILE_VIEW_INCLUDES_FOLDER= \
serial.h \

WINCETARGETFILES= \
$(WINCETARGETFILES) \
CopyFilesToSDK \

SDK_H_FILES=
SDK_LIB_FILES=
3、建立一注册表文件,名为at91sam9263ek_serial_extusart.reg
4、修改注册表文件内容。
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_4]
"SysIntr"=dword:2b
; "Irq"=dword:3
"MemBase"=dword:10000070
"MemLen"=dword:8
"Index"=dword:3
"DeviceArrayIndex"=dword:4
"Prefix"="COM"
"Dll"="ext_uart.dll"
"Order"=dword:0
; "Priority256"=dword:fa
; "IsrDll"="isr16550.dll"
; "IsrHandler"="ISRHandler"
"FriendlyName"="Serial Cable on COM4:"

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_5]
"SysIntr"=dword:2c
; "Irq"=dword:3
"MemBase"=dword:10000068
"MemLen"=dword:8
"Index"=dword:4
"DeviceArrayIndex"=dword:5
"Prefix"="COM"
"Dll"="ext_uart.dll"
"Order"=dword:0
; "Priority256"=dword:fa
; "IsrDll"="isr16550.dll"
; "IsrHandler"="ISRHandler"
"FriendlyName"="Serial Cable on COM5:"

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_6]
"SysIntr"=dword:2d
; "Irq"=dword:3
"MemBase"=dword:10000058
"MemLen"=dword:8
"Index"=dword:5
"DeviceArrayIndex"=dword:6
"Prefix"="COM"
"Dll"="ext_uart.dll"
"Order"=dword:0
; "Priority256"=dword:fa
; "IsrDll"="isr16550.dll"
; "IsrHandler"="ISRHandler"
"FriendlyName"="Serial Cable on COM6:"

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_7]
"SysIntr"=dword:2e
; "Irq"=dword:3
"MemBase"=dword:10000038
"MemLen"=dword:8
"Index"=dword:6
"DeviceArrayIndex"=dword:7
"Prefix"="COM"
"Dll"="ext_uart.dll"
"Order"=dword:0
; "Priority256"=dword:fa
; "IsrDll"="isr16550.dll"
; "IsrHandler"="ISRHandler"
"FriendlyName"="Serial Cable on COM7:"
5、将Ext_uart文件夹下mdd.def文件名改为at91sam9263ek_extserial.def
6、在别的驱动文件夹下拷贝文件
makefile.inc文件到Ext_uart文件夹下
7、修改BSP包的CEC文件,添加一扩展串口项
AT91SAM9263 EXTSERIAL
BSP_ AT91SAM9263_EXTSERIAL
BSP_NOEXTSERIAL
8、在PB中加入扩展串口的BSP包,编译,调试。

2008年7月27日星期日

硬件知识 关于LI离子电池保护电路的问题

经常看到这样一种观点:"长时间充电对锂离子电池不会有损害,这是因为有保护电路的存在."   有两个问题要澄清:   
1.长时间对锂离子电池充电,如果是用的原装正品的充电器或座充,确实是不会有损害的.这个不是因为保护线路的功劳,而是充电线路的严格精确的设计来保证的.   
2.有保护线路的存在,并不能完全的防止锂离子电池的过充的发生,保护线路只有在电池过充的时候才会起防止进一步过充的作用.   
这是几个保护芯片的数据 RICOH推出的R5400N系列适合4.2V锂离子电池的保护芯片,其过充保护电压是4.25V-4.35V+/-0.05V,适合4.2V锂离子电池的保护芯片,其过充保护电压是4.275V+/-0.025V   
而锂离子电池充饱的时候,其电池电压应该落在4.20V+/-0.04V之间,并没有触发保护线路动作.之所以厂家说明长时间充电不会过充是因为手机的充电管理确保在电池电压已经到达4.20V以后不会继续充电.而是保持监视状态.   
等到了过充保护的电压,比如4.275V,这个锂离子电池已经是过充了,此时保护线路才被切断.防止进一步过充的危险.   
讲完了这个认识误区,下面带大家认识一下手机锂离子电池的内部机构.主要谈一下锂离子的保护线路的功能及其工作原理.
一般用户接触到手机锂离子电池,在外面看到的除了电池外壳,还有就是几个五金触片了,如图中"电池正极,电池负极"就是的电池正负极输出.
┃ ┏━Fuse━━━━━━━┳━━━━━━━━━┫电池正极      
┃ ┃ R1      
┃ ┃ ┃
┃ ┃ ┃
┃ ┇ ┏┻━━┓      
┃ ┏┻┓       ┃保护IC┃    
┃┏┻━┻┓     ┏┫   ┃    
┃┃   ┃     ┃┗━━┳┛   ┏━━┫标识电阻    
┃┃锂离子┃     ┃   ┃    ┃    
┃┃电芯 ┃     ┃   ┃    R2    
┃┃   ┃     ┃   ┃    ┃    
┃┗━┳━┛     ┃   ┻ Mosfet ┃      
┃ ┃    ┃  ┏╈┓   ┃
┃ ┗━━━━━━━┻━━┻┛┗━━━┻━━┫电池负极
而实际真正供电的源泉是电池塑料壳里面的锂离子电池芯,但是由于锂离子电芯的"娇嫩"的特性,比如过充和过放,大电流放电,短路等非常规动作都会对锂离子电芯造成极大的伤害.所以保护线路的功能就是在上述非常规动作发生时及时的切断回路.保护锂离子电芯.而这些保护动作就是图中的保护IC来判断,由它来控制一对Mosfet场效应管来导通和切断主供电回路,对锂离子电芯进行保护.     市面上常用的这种保护IC的生产厂商有SEIKO精工,RICOH理光,Motorala摩托罗拉半导体等.   以理光R5400N系列芯片来具体介绍各项保护功能.   
众所周知,以恒压充电限制电压来划分,锂离子电池有4.1V恒压充电和4.2V恒压充电两种类型.现在4.1V的版本已经很少,绝大多数是4.2V的恒压充电类型的.下面的数据就只针对4.2V恒压充电的锂离子电池来讨论.     
保护IC+Mosfet可以实现的功能如下(四大保护):   
1.过充保护,当电池芯的电压超过设定值时,由保护IC切断Mosfet管.等电芯电压回归到允许的电压是,重新恢复Mosfet管的导通.   
过充检测电压:4.275V+/-0.025V,电芯电压一超过这个值,就触发过充保护   
过充释放电压:4.175V+/-0.030V,处于过充保护的电芯电压只有降到这个值时才会停止保护.   过充保护延时:1秒.当电压持续超过过充检测电压1秒以上才会触发过充保护,这个是为了防止误判和误操作而设置的.   
2.过放保护,当电池芯的电压降低得超过设定值时,由保护IC切断Mosfet管.等电芯电压回归到允许的电压时,重新恢复Mosfet管的导通.   
过放检测电压:2.3V+/-0.08V   
过放释放电压:2.4V
过放保护延时:125毫秒   
参数的含义与过充保护的类似,不赘述.   
3.过流保护,当工作电流超出设定值时,由保护IC切断Mosfet管.等工作电流回归到允许的电压是,重新恢复Mosfet管的导通.   
过流电流压降:0.1V,这里保护IC判断的是电流流过Mosfet而产生的压降,用这个电压除以Mosfet的导通阻抗就可以近似得到过流保护的电流.一般在3~5A左右.   
4.短路.其实这个功能是过流保护的扩展,当保护IC检测电池输出正负极之间电压小于规定值时,认为此时电池处于短路状态,立即切断回路.等短路的故障排除再恢复回路.短路时电池的输出正负极的电压为零,而实际电芯的电压还是正常的.   
短路检测延时:10微秒,这个延时更是短暂,几乎是短路的瞬间就切断了回路,可以避免短路对电池带来的巨大损伤.   
还有一个参数,称为保护IC的自耗,如上图,可以看到,保护IC是通过电阻R1利用了电芯的电压来进行工作的.不可避免的要消耗一部分电池的容量.一般保护IC的功耗是做的非常小的.在3微安左右,最大不超过6微安.   
在保护回路里面还有一个器件,如上图标示的Fuse,就是保险丝.它是串联在电池的回路中.它的作用是在保护线路失效的情况下,作为最后的防线,对于过流或高温的锂离子电池进行切断回路的动作.该Fuse根据工作原理分为一次性保险丝(就象家里电表下用的那种)和可恢复保险丝(又称为PTC). 有了如此完备的保护线路,一般用户想用坏锂离子电池都有点困难.但是这并不是意味着用户可以随意的滥用锂离子电池.同样有许多的地方是需要注意的.   
下图是根据锂离子电池电压根据实际使用划分的几个区域.      
高压危险区   ---------------保护线路过充保护电压(4.275~4.35V)   
高压警戒区 ---------------锂离子电池充电限制电压4.20V   
正常使用区   ---------------锂离子电池放电终止电压(2.75~3.00V)   
低压警戒区   ---------------保护线路过放保护电压(2.3~2.5V)   
低压危险区      
1.在正常使用区内.锂离子电池可以正常发挥其特性,也没有危险.   
2.高压警戒区.虽然这个区域处于保护线路的保护范围之内,并不意味着此时锂离子电池也是安全的.长期处于这种程度的过充,会很快的降低电池的循环寿命. 据我测试,将新锂离子电池充电到4.3V使用可以比充电到4.2V的锂离子电池提高15%左右的容量,但是在50次循环以后,其容量衰减到原来的 80%,寿命整整缩短了10倍.记得网友battery老兄喜欢把锂离子电池过充了用,这样可以暂时提高前几次循环的容量,容量不够了就换一节新的.我们广大网友恐怕没有这个资本,还是老老实实的使用吧.这种低度过充的锂离子电池往往在几十次循环以后就会产生发鼓等变形.   
3.低压警戒区. 处于该区域的锂离子电池不适合快速充电,要先用小电流将电池电压提升到3.0V以上才可以快速充电.否则容易导致锂离子极性材料发生不良反应,影响电池性能.而这个电压的锂离子电池也非常容易因为电池本身的自耗和锂离子保护线路的自耗很快的掉近低压危险区.那就危险了.而且这个自耗是保护线路无法保护的.   
4.低压危险区,长期处于低压危险区的锂离子电池,性能将近一步恶化. 在低电压(小于2V)或更低的电压情况下,正极材料的钴锂酸(又称尖晶石)晶格发生变化,其晶体机构会以枝晶形式生产.这种枝晶发展长大的话会戳穿正负极的隔膜,导致电池微短路.进一步恶化电池的性能.甚至导致电池发生膨胀,彻底报废.
5.高压危险区.此时保护线路已经失效,或者根本没有保护线路.在这个区域的锂离子电池(特别是4.8V以上),锂离子内部会发生剧烈的反应,产生强大的热量,导致电池内压正极,使电芯变形,不同于低度过充,这种变化是一次性的,即一次高度过充就可以造成电池发鼓.甚至爆炸.
以下是几点锂离子电池的与保护线路相关的注意事项   
1.不要试图直接短路锂离子电池来强行放电.这样做只有两种结果,一是保护线路起作用,那么什么事也不会发生.二是保护线路失效,那样就会造成过流或直接电芯的短路,就会触发fuse动作,如果里面也没有fuse的保护(很多杂牌锂离子电池就是没有fuse或PTC),那么这种短路的瞬间电流将达到十几甚至几十安培,足以烧毁线路板,使导线发红.要是碰上皮肤那就更惨了.   
2.不要使用不合格(没有认证)的充电器或座充,锂离子电池的充电过充需要严格的电压控制,这点做的不好的充电器会对锂离子电池造成低度过充,虽然最后有保护线路的保护,但是已经过充了.   3.不要在电池两端加高压,保护芯片也有极限的承受电压,一般在12V左右,在往上往往会击穿保护芯片.   
4.不要逆接电池正负极进行充电,同样会损伤保护IC   
5.注意锂离子电池的使用环境,潮湿,高温,静电会导致保护IC或Mosfet失效的.手机落入水中,在记得吹干手机主板的同时,也要对锂离子电池进行晾干处理,但不要用电吹风吹干.高温(60度以上)对锂离子电池是有害的.
很有趣的是第一点.有兴趣的网友可以根据锂离子电池保护线路的短路保护功能来测试一下你的保护线路是否有效.最后找一个指针式的直流电流表(5A量程左右),对电池的正负极直接短路,你可以看到电流表指针会动一下并迅速归零.这就说明在几个微妙之内保护线路已经动作了.这是检测你的锂离子电池有没有保护线路的一个简单有效的办法.采用数字式的电流表也行,都要把量程设成最大的安培档(2A以上的).        
以上谈论的是单节锂离子电池的保护线路,不包括串联两节以上的保护IC,道理大同小异.      在第一个图中,画了一个标识电阻R2,如果这个电阻是个常规的定值电阻,那么就是手机用来区别电池类型用的.三星的手机在隐藏菜单中可以看到这个电阻值.他们的手机用不同的电阻来区分不同容量的电池(厚薄电)如果这个电池是个热敏电阻(NTC),那么它就可以告诉手机或充电器电池的温度,因此手机或充电器就有了对电池温度的检测能力.当电池温度超出范围(比如0度~40度以外),手机或座充就不对锂离子电池进行充电动作.这也是对锂离子电池的保护.   
有些电池会有两个以上的标识电阻(一个常规电阻,一个热敏电阻)或专用的识别芯片来执行这个功能.原理都是一样的.目的就是确保更好的的使用锂离子电池.

硬件知识

硬件技术 MIC的结构、原理、性能参数

一、MIC的电路原理
C:是一个可以通过膜片震动而改变电容量的电容,声电转换的主要部件。
FET:(场效应管)MIC的主要器件,起到阻抗变换和放大的作用。
C1,C2:是为了防止射频干扰而设置的,可以分别对两个射频频段的干扰起到抑制作用。
C1一般是10PF,C2一般是33PF,10PF滤波1800Mhz,33PF滤波GSM900Mhz。
RL:负载电阻,它的大小决定灵敏度的高低。
VS:工作电压,MIC提供工作电压。
Co::隔直电容,信号输出端。
二、由声信号到电信号的转换原理
由静电学可知,对于平行板电容器,有如下的关系式:C=ε·S/L① 即电容的容量与介质的介电常数成正比,与两个极板的面积成正比,与两个极板之间的距离成反比。另外,当一个电容器充有Q量的电荷,那麽电容器两个极板要形成一定的电压,有如下关系式;C=Q/V② 对于一个驻极体传声器,内部存在一个由振膜,垫片和极板组成的电容器,因为膜片上充有电荷,并且是一个塑料膜,因此当膜片受到声压强的作用,膜片要产生振动,从而改变了膜片与极板之间的距离,从而改变了电容器两个极板之间的距离,产生了一个Δd的变化,因此由公式①可知,必然要产生一个ΔC的变化,由公式②又知,由于ΔC的变化,充电电荷又是固定不变的,因此必然产生一个ΔV的变化。由于这个信号非常微弱,内阻非常高,不能直接使用,因此还要进行阻抗变换和放大。FET场效应管是一个电压控制元件,漏极的输出电流受源极与栅极电压的控制。由于电容器的两个极是接到FET的S极和G极的,因此相当于FET的S极与G极之间加了一个Δv的变化量,FET的漏极电流I就产生一个ΔID的变化量,因此这个电流的变化量就在电阻RL上产生一个ΔVD的变化量,这个电压的变化量就可以通过电容C0输出,这个电压的变化量是由声压引起的,因此整个传声器就完成了一个声电的转换过程。

三、参数
在讲参数之前讲讲驻极体
驻极体是一种能长久保持电极化状态的电介质,这种电介质是一种高分子聚合物,它的工作原理是电容式的:由一片单面涂有金属的振动膜与一个带有若干小孔贴有驻极体薄膜的金属电极(称为背极)构成。驻极体面与振动膜相对,中间有一极小的空气隙,这就形成一个以空气隙和驻极体作绝缘介质,以背极和振动膜上的金属层作为两个电极的介质电容器,电容器的两极之间并接一只电阻,这只电阻是麦克风的阻抗变换器或前置放大器的输入电阻。由于驻极体上分布有自由电荷,于是在电容器的两极之间就有了电荷量,当声波使振动膜振动而产生位移时,改变了电容器的电容量,电容量的改变使电容器的输出端产生了相应的交变电场,交变电场作用于R就形成了与声波信号对应的电信号,于是就完成子声——电转换的功能。
驻极体麦克风是按电容式原理工作的,因此它具有电容式电声器件的很多优点,如频带宽、音质好、失真小、瞬态响应好,对机械振动不敏感等特点。
下面以麦克风的主要电声性能为例讲述有关设计理论。

1、输出阻抗 影响驻极体麦克风阻抗的主要因素是阻抗变换器或放大器的输出阻抗。对手机用驻极体麦克风而言,阻抗变换器或放大器的输出阻抗主要决定于场效应管(FET)与输出端并接的两只抗RF干扰的滤波电容,由于FET及电容的性能有差异,因此驻极体麦克风的输出阻抗会在一定范畴内变化,选用一致性、稳定性好的FET及电容,严格控制SMT等生产过程,可使阻抗性能的一致性和稳定性达到理想状态。

2、灵敏度 影响驻极体麦克风灵敏度的因素较多,归纳起来主要有以下几项:
A、驻极体表面电荷密度的大小
B、振膜的张力
C、振膜与背极间的距离
D、阻抗变换器或放大器的性能。
驻极体麦克风的灵敏度与驻极体表面电荷密度成正比。表面电荷密度越大,则驻极体麦克风灵敏度就越高。但驻极体表面电荷密度过大将会导致振膜附到背极上,使麦克风处于不稳定状态。解决的办法是增大振膜与背极的距离或增加膜片的张力,由此会导致灵敏度降低和频响曲线改变。另外表面电荷密度大,其稳定性就差,因此对客户要求的灵敏度来讲应选取合适的电荷密度,确保其稳定性。 驻极体麦克风的灵敏度与振膜的张力成反比关系。张力越大灵敏度就越低,张力越小灵敏度就越高,但张力的大小会受材料及生产工艺的影响,振膜张力过大可导致振膜产生不可逆的蠕变,从而影响稳定性。振膜张力过小可使频响变差,同样出现性能不稳定。因此对客户要求的灵敏度来讲应选取合理的张力设计,确保其性能稳定。 麦克风的灵敏度同振膜与背极间距成反比关系。间距越大,灵敏度就越低;间距越小,灵敏度就越高。合理的间距设计需考虑客户对灵敏度的要求及稳定性的好坏等多方面的因素。 麦克风的灵敏度同阻抗变换器(放大器的影响量)成正比关系。FET放大倍数越大,则灵敏度高。过大的放大量会导致噪音的增大,影响使用效果。合适的放大量或合适的阻抗对灵敏度设计的影响是很重要的。 在影响灵敏度的诸多因素之间,我们会根据客户的需要综合考虑,不是片面追求灵敏度的高低为目标,而应以追求稳定性为目标。

3、频率响应 影响驻极体麦克风的频率响应的因素有振膜的张力、背极板上孔的数量、孔径的大小、孔位以及与孔相连的后腔体积大小等。对一个已经定型的驻极体麦克风而言,其背极板上孔径、孔位及孔的数量均已确定与孔相连的后腔体积也已基本确定,而容易变化的则是振膜的张力,振膜的张力大,它的共振频率就高,驻极体麦克风的频率响应就平坦。但张力过大,长时间工作,同样使振膜产生不可逆的蠕变,从而影响麦克风的稳定性。除振膜张力影响频率响应外,FET的频率特性及由于生产过程封变影响造成180度方向产生过大的声压作用等也会影响麦克风的频率响应。

4、信噪比(S/N) 影响信噪比(S/N)的因素很多:设计时应考虑PCB的高频分布电容,分布电感; 阻抗的匹配,RF的干扰,FET的本底噪音,电容极头的屏蔽性,接地电阻等诸多因素。 解决以上问题,从抗高频干扰角度合理设计PCB布线,并经严格的IQC检测;选用优质低噪的FET,并加抗RF干扰电容;严格极头制作工艺和装配工艺,使噪音降到最小,从而使S/N达到理想的最大值。

5.指向性 又称为方向性,是指传声器对不同角度入射的声波的响应。当声波以不同角度入射到振漠时,振膜所受到的作用力不同,相应的输出也不同。这种因入射声波的入射角不同而使传声器灵敏度产生变化的特性,称为传声器的指向性。这里的声波入射角是声波与振膜法线的角。
在工作中,避免数学计算,通常采用极坐标图形表示。称为传声器指向性图形。有时也采用不同入射角的频响曲线表示法。
话筒的指向:分为心形、超心形、8字形、枪式、全向指向等。见下图

至于这些指向究竟是怎么回事,你可找个话筒试试。如图中,箭头所指方向为话筒所指正前方,虚线为可拾音的大致范围,在范围之外,拾音将不灵敏。有条件,建议还是找个多指向的话筒试用一下,就知道怎么回事了。
6.降电压特性、最大工作电压及消耗电流 降电压特性、最大工作电压及消耗电流主要取决于FET的性能。设计时针对不同客户,通过FET设计验证结果择优选用,使降电压特性的变化最小,使最大工作电压及消耗电流的余量最大。消耗电流除受FET出厂性能影响外,实际的生产环境洁净度、湿度等因素也必须考虑。

四、应用实例

MIC在手机上的使用条件,其中包括工作电压,负载电阻。另外在以下情况下还要对MIC的工作电流进行限定,例如有的手机给MIC的供电电压为1.8V,而负载电阻为2.2K,因为Vd=Vsd+Id*R, Id = (Vs- Vsd)/ RL为了保证MIC中的FET工作在线性工作区,不进入饱和区,应使Vsd≥0.7V,因此Id≤(1.8V- 0.7V)/ 2.2K=0.5 mA,因此在这种情况下,选用的FET的电流不能大于500μA。从下面这个MIC的参数就可以看的出来。
灵敏度 -43+/-2dB RL=2.2KΩ Vs=2.0V(DC)(1KHz 0dB=1V/Pa)
输出电阻 最大2.2KΩ 1KHz(RL=2.2KΩ)
频率 50-12000Hz
电流损耗 最大0.5mA RL=2.2KΩ Vs=2.0V(DC)
操作电压范围 1.0V-10V(DC)
最大输出声压 115dB S.P.L
信噪比 58dB 1KHz,0dB=1V/Pa
灵敏度变化 2.0V-1.5V灵敏度减小3dB

2008年7月24日星期四

经济学常识 “次贷危机”是货币经济下经济危机的表现形式!

现代商品经济与传统商品经济有什么不同?其不同点仅在于“国家货币”的出现。就其分水岭,就是基于凯恩斯思想的“新经济模式”。

据考证,我国的“国家货币”早在1000年前的宋朝就有了,还有人考证,宋朝就是亡于通货膨胀,与蒋氏民国之亡有点类似

马克思主义政治经济学中经济危机的原理并未过时,但它推导的“经济危机”的结论,只是道出了经济运行秩序在数理的不可能再循环关系,而他又跳跃地道出了人类社会运动的关系上,会出现新的社会形式或新的“朝代”的必然,这是需要分辩开的。

货币经济的出现,使得经济数理关系的不能顺利循环,并不一定导致社会形态变迁的必然(现代社会的政治关系,则更是可以换一届政府而不必亡国),但它最简单直接的结果,是造成会计帐面的的“坏帐”或所需的“撇帐”。凯恩期的国家注资干预,只是其中的一种具体的进一步的表现形式罢了。

这次次贷危机,本质就是经济危机的一种,是现代货币经济下的经济危机的一种,要缓和它的后果与冲击,最快的只能靠央行注资,而另一方面,它后续还需要对民间消费(货币)关系的重新注入。

现代经济与传统经济还有一样不同的是,某一国的货币会被它国接受。如中国就接受了15000亿美元。所以,如果中国愿将其美元货币以某一种形式(如美国国债)回流到美国的话,也相当于一种政府的注资,为美国人解了围。如果说这种做法,相当于中国人民为美国人的住房消费永远埋单,则是另一回事了。

就次贷危机的现实,之后的美国是“美联储注资度日”还是“美国借国债度日”,本质是没有太大分别的,美国经济体从原则上讲是不会出很大的问题,只是“帐”算到谁的头上。全世界的人民自愿地继续那么喜欢美元,美国人不用说谢谢也是可以的。

经济学常识 没有硝烟的掠夺,日本佬被搞得很惨

1980年,日本的GDP就快到美国的一半了。但有一件事情却在1985年发生了。

1985年美国拉拢其它五国(7国集团)逼迫日本签署了广场协议。以“行政手段”迫使日元升值。其实的一个中心思想就是日本央行不得“过度”干预外汇市场。日本当时手头有充足的美元外汇储备,如果日本央行干预,日元升不了值。可惜呀,日本是被去了势的太监。美国驻军、政治渗透、连宪法都是美国人帮它度身定做的,想不签广场协议都不可能。日本最后的结局大家也知道了。

1985年9月的广场协议至1988年初.美国要求日元升值。根据协议推高日元,日元兑美元的汇率从协议前的1美元兑240日元上升到1986年5月时的1美元兑160日元。由于美国里根政府坚持认为日元升值仍不到位,通过口头干预等形式继续推高日元。这样,到1988年年初,日元兑美元的汇率进一步上升到1美元兑120日元,正好比广场协议之前的汇率上升了一倍。

美国人满足了吗?没有。接着看下去,从1993年2月至1995年4月,当时克林顿政府的财政部长贝茨明确表示,为了纠正日美贸易的不均衡,需要有20左右的日元升值,当时的日元汇率大致在1美元兑120日元左右,所以,根据美国政府的诱导目标,日元行情很快上升到1美元兑100日元。以后,由于克林顿政府对以汽车摩擦为核心的日美经济关系采取比较严厉的态度。到了1995年4月,日元的汇率急升至1美元兑79日元,创下历史最高记录。

日元升值的后果是什么?洛克菲勒广场重新回到了美国人手中,通用汽车在这个广场的一卖一买中净赚4亿美元!日资在艰难度日中大规模亏本退出美国。美国人民胜利了!成功的击退了日本的经济进攻!我们可以从事例中看看1995年之后,日本和美国的GDP之比重新拉开了距离,而且越来越大!

可能有些网友还是没有明白,日元升值怎么啦?跟我们的谈论有什么关系?日元升值,就是美国对日本的一次经济阻击战!成功的把日本20多年的发展财富大转移到了美国去了。

时下美元对人民币汇率一降再降,人民币连续升值,这是美国佬的又一次掠夺开始了。

开心一刻 人和猪的关系

人=吃饭+睡觉+上班+玩  
猪=吃饭+睡觉  
人=猪+上班+玩  
人-玩=猪+上班  
结论:不懂玩的人=会上班的猪

男人=吃饭+睡觉+挣钱  
猪=吃饭+睡觉  
男人=猪+挣钱  
猪=男人-挣钱  
结论:男人不挣钱等于猪

女人=吃饭+睡觉+花钱  
猪=吃饭+睡觉  
女人=猪+花钱  
女人-花钱=猪  
结论:女人不花钱的都是猪

综合以上: 男人为了让女人不变成猪而挣钱  
女人为了让男人不变成猪而花钱   
男人+女人=猪+挣钱+猪+花钱=两头猪

wince学习 wince下的一些小技巧

要重新建立文件系统时,必需要先擦除原来的文件系统。
不知道为什么???

注意大小写;
Bsp包的名字一定要大写。例如:BSP_TIMER_DRIVER
前缀名要大写
由"Prefix"="TIM"定义
在.cpp文件中要使用的,它最长允许3个字母。

代码驱动的加载方法;
一是由设备管理器直接加载管理
二是由用户程序加载,用户程序直接调用.dll加载,然后直接使用其内部封装的函数。


可以用Build OS下的open release directory窗口的set命令来查看编译的所有的关联信息。
可以看加入的组件有什么。


EP9315公板原来的Wince5.0BSP包的RTC会隔一段时间就区读时间。

Wince的中文包一般在10M左右
如果flash的大小不够的话就要考虑是否要用中文了。

在Driver目录下的目录中总能找到一个文件中有如下函数:
extern DWORD XXXX_Init(DWORD dwContext)
extern BOOL XXXX_Deinit(DWORD hDeviceContext)
extern DWORD XXXX_Open(DWORD hDeviceContext, DWORD AccessCode,
DWORD ShareMode)
extern BOOL XXXX_Close(DWORD hOpenContext)
extern BOOL XXXX_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn,
DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut)
extern DWORD XXXX_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
extern DWORD XXXX_Write(DWORD hOpenContext, LPCVOID pSourceBytes,
DWORD NumberOfBytes)
extern DWORD XXXX_Seek(DWORD hOpenContext, LONG Amount, DWORD Type)
extern void XXXX_PowerUp(DWORD hDeviceContext)
extern void XXXX_PowerDown(DWORD hDeviceContext)
这些函数就构成了驱动的一个结构。


Wince下删除工程的方法
可能有时候在建立工程时忘记或者时多选了某些选项,但是这个错误的工程又占用了你的工程名,因此你就可能想删除这个错误的工程。
操作步骤:
1、 保证工程没有被打开
2、 进入manage item catalog,删除此工程使用的BSP包
3、 进入PBWorkspaces下,删除你想删除的工程文件夹。
希望你不会报错。

wince学习 wince下将EP9315用两个调试串口改为一个的方法

EP9315下载口和调试口不是用的同一个串口,这样用起来不方便。
下面是修改成同一个串口的方法:
1、在BSP 文件安装目录 \WINCE500\PLATFORM\Ep93xx\Src\Kernel\Hal\Common\ 下, 寻找到文件
“debug.c”,打开文件,对串口配置进行修改;
#ifndef DEBUG_UART_PORT //( 约57行 )
#define DEBUG_UART_PORT 1 // 3,进行修改,改用COM1为调试串口
#endif // DEBUG_UART_PORT
2、在BSP文件安装目录 \WINCE500\PLATFORM\Ep93xx\Src\Inc\下,寻找到文件“options.h”,打开文件,对串
口配置进行修改;
#ifdef EDB9307_12_15 //( 约43行 )
#define EBOOT_PLATFORM_STRING "EDB9307/1X"
#define EBOOT_CS8950_MAC_ADDRESS {0x2400, 0x1020, 0x5678}
#define DEBUG_UART_SPEED 38400
#define DEBUG_UART_PORT 1 // 3,进行修改,改用COM1为调试串口
3、在BSP 文件安装目录 \WINCE500\PLATFORM\Ep93xxSrc\Kernel\Hal\Common\ 下, 寻找到文件
“oempreinit.c”,用编辑工具打开文件,对串口配置部分进行修改;
……//(约70行)
//*CSC_DEVCFG = DEVCFG_U1EN DEVCFG_U2EN DEVCFG_U3EN DEVCFG_TIN DEVCFG_SHENA //modify for com1
*CSC_DEVCFG = DEVCFG_U1EN DEVCFG_U2EN DEVCFG_U3EN DEVCFG_TIN DEVCFG_CPENA
DEVCFG_SHENA
#ifndef EDB9301_02
// Trun off IrDA on UART2 because EDB9301/02 have not implement it.
; // DEVCFG_IONU2
4、在BSP文件安装目录 \WINCE500\PLATFORM\Ep93xx\Files下,寻找到文件“platform-1x07.reg”,用编辑工具打开文件,对串口配置部分进行修改;
IF BSP_EP93XX_SERIAL
;[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_1]
; "DeviceArrayIndex"=dword:1
; "Prefix"="COM"
; "Dll"="pl010serial.Dll"
; "Order"=dword:0
;[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_1\Unimodem]
; "Tsp"="Unimodem.dll"
; "DeviceType"=dword:0
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_2]
"DeviceArrayIndex"=dword:2
"Prefix"="COM"
"Dll"="pl010serial.Dll"
"Order"=dword:0
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_3]
"DeviceArrayIndex"=dword:3
"Prefix"="COM"
"Dll"="pl010serial.Dll"
"Order"=dword:0
ENDIF

当然按照这种方法,也可以不要调试口。将调试串口改成普通串口用。

wince学习 将wince内核编译成-NK保存在norflash中,然后从norflash读到SDRAM运行模式

将wince内核编译成-NK保存在norflash中,然后从norflash读到SDRAM运行模式

1、加组件BSP_EP93XX_COPY_FLASH_TO_RAM

2、修改E:\WINCE500\PLATFORM\Ep93xx\Src\Kernel\Hal\Edb9307_1x下的startup.s文件

将下面的几句在原文中注释掉。
; mov sp, #0x40000
; bl SysconSetup

; create a temporary stack below kernel memory from config.bib

ExecuteFromRam
; mov sp, #0x40000
; bl SysconSetup

; clear out magic words for memory and heap
; (r0) = physical address of OEMAddressTable
; Calculate the physical address of the table.

然后把这两句拷贝到下面的位置
;
; Configure the flash chips
;
IF EP93XX_FLASH_TYPE = "FLASH_TYPE_AMD" :LOR:\
EP93XX_FLASH_TYPE = "FLASH_TYPE_C3" :LOR: \
EP93XX_FLASH_TYPE = "FLASH_TYPE_P3"

ldr r0, =0x2000FFEF

ELSE
ldr r0, =((4:SHL:SMCBCR_WST2_SHIFT) :or: \
(15:SHL:SMCBCR_WST1_SHIFT) :or: \
(1 :and:SMCBCR_IDCY_MASK) :or: \
SMCBCR_MW_32BIT :or: \
SMCBCR_WP :or: \
SMCBCR_PME :or: \
SMCBCR_RBLE)

ENDIF

ldr r1, =0x80080018
str r0, [r1]
nop
;This sets up the System Control Registers。To set clock tree and the SMC timings.

mov sp, #0x40000
bl SysconSetup

; If we want an image that copies from flash to ram use the following.

IF COPY_FLASH_TO_RAM ;开始拷贝NK到SDRAM






上面这段的目的就是在拷贝前先将SMC和NORFlash初始化。

也可以在此驱动LCD,然后将LOGO图片数据先弄出来,系统就会显示LOGO。
这就是一些公司引以自豪的LOGO方案。

wince学习 wince下MMU虚拟地址对实际地址转换表

wince下MMU虚拟地址对实际地址转换表

在\WINCE500\PLATFORM\yourplatform\Src\Inc文件夹下cfg.inc文件定义
;------------------------------------------------------------------------------
; FirstBoot Param !! these values are also defined in bsp_cfg.h. Modify both files if needed !!
;------------------------------------------------------------------------------
FIRSTBOOT_MAX_SIZE EQU 0x00007800 ;30 ko
FREE_AREA_SIZE EQU 0x00000800 ; 2 ko
AT91C_RAM_MAX_SIZE EQU 0x00008000 ;32 ko

;------------------------------------------------------------------------------
; EBoot Param !! these values are also defined in bsp_cfg.h. Modify both files if needed !!
;------------------------------------------------------------------------------
EBOOT_MAX_SIZE EQU 0x00014000 ;80ko
OEM_RESERVED_MEMORY_SIZE EQU 0x2000 ;8ko
EBOOT_FLASH_ADDR EQU FIRSTBOOT_MAX_SIZE + FREE_AREA_SIZE + OEM_RESERVED_MEMORY_SIZE

; Export Definition

EXPORT g_oalAddressTable[DATA]

; Make sure that this value match with those in eboot.bib and config.bib

AT91SAM9261EK_VA_BASE_REG EQU 0x9FF00000
AT91SAM9261EK_VA_BASE_DM9000 EQU 0x9FE00000
AT91SAM9261EK_VA_BASE_NAND EQU 0x9EA00000
AT91SAM9261EK_VA_BASE_SRAM EQU 0x9E700000
AT91SAM9261EK_VA_BASE_NOR EQU 0x9DF00000
AT91SAM9261EK_VA_BASE_SDRAM EQU 0x80000000

AT91SAM9261EK_BASE_SRAM EQU 0x00300000
AT91SAM9261EK_BASE_SDRAM EQU 0x20000000
AT91SAM9261EK_BASE_DM9000 EQU 0x30000000
AT91SAM9261EK_BASE_NAND EQU 0x40000000
AT91SAM9261EK_BASE_NOR EQU 0x10000000
AT91SAM9261EK_BASE_REG EQU 0xFFF00000

;------------------------------------------------------------------------------
; TABLE FORMAT
; cached address, physical address, size
;------------------------------------------------------------------------------
ALIGN
g_oalAddressTable

DCD AT91SAM9261EK_VA_BASE_SDRAM, AT91SAM9261EK_BASE_SDRAM, 64
; AT91SAM9261EK SDRAM (64MB).
DCD AT91SAM9261EK_VA_BASE_NOR, AT91SAM9261EK_BASE_NOR, 8
; NOR Flash memory (8MB).
DCD AT91SAM9261EK_VA_BASE_SRAM, AT91SAM9261EK_BASE_SRAM, 1
; INTERNAL SRAM (160KB).
DCD AT91SAM9261EK_VA_BASE_NAND, AT91SAM9261EK_BASE_NAND, 5
; NAND Flash memory (1MB).
DCD AT91SAM9261EK_VA_BASE_DM9000, AT91SAM9261EK_BASE_DM9000, 1
; DM9000 registers.
DCD AT91SAM9261EK_VA_BASE_REG, AT91SAM9261EK_BASE_REG, 1
; Internal registers.
DCD 0x00000000, 0x00000000, 0
; end of table

;------------------------------------------------------------------------------
END

wince学习 wince5.0组件及其相关连组件选择

wince5.0组件及其相关连组件选择。

usb设备驱动:
core os
core os services
usb host support
usb human input
usb HID keboard and mouse--USB键盘和鼠标
usb HID keboard only--USB键盘
usb HID mouse only--USB鼠标
usb storage class driver--U盘驱动

如果要运行EVC程序,一般要加MFC组建
application and service devlopment
Microsoft Foundation classes (MFC)

如果是加了CF卡或者是PC卡要加下面组件
device drivers
Storage Device
compact flash/Pc card storage

如果是加了IDE硬盘就要加下面组件
device drivers
Storage Device
ATAPI PCI/IDE storage block Driver
ATAPI PCI/IDE Storage Block Driver
Promise controler ATAPI driver

如果是要加矩阵键盘,要加如下的组件
Third Party
BSPs
EAC0921
device driver
EP93XX Cherry US English keypad

加了存储设备之后一定要记得加文件系统组件
core os
windows ce device
file system and data store
storage manage
FAT file system

要调试的话就要加下面的组件
Platform manager
Platform manager

要将注册表保存到flash中的话就要加Hive-Base registry
core os
windows ce device
file system and data store
registry storge (choose 1)
Hive-Base registry
Ram-Base registry

wince学习 wince下cs4202音频芯片驱动注册表修改

wince下cs4202音频芯片驱动注册表修改
如果要使用cs4202的音频芯片,一定要记得取消UseAC97项前的注释

IF BSP_EP93XX_AUDIO
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\WaveDev]
"Prefix"="WAV"
"Dll"="wavedev.dll"
"Index"=dword:1
"Order"=dword:0
; Specify support I2S codec support
; "I2SCodec"=dword: 10af - CS4271, 1084 - CS4228, default:4228

; Use I2SVolume Control for Wave Volume.
; Note: The I2S volume control interferes with the PS/2 Keyboard.
; This is why it is used.
; "UseI2SVolumeControl"=dword:1 ; 0- disabled, 1 - Enabled , defualt 1
; ************************************************************************
; AC97 Hardware Settings
; EDB9312 board:
; Make sure the JP67, JP68, JP70- JP72 are jumpered 2-3 for
; AC97 audio and 1-2 for I2S audio.
; EDB9315 & EDB9307 board:
; JP2 is jumpered for I2S and open for AC97 audio.
; ************************************************************************
"IClass"=multi_sz:"{E92BC203-8354-4043-A06F-2A170BF6F227}",
"{37168569-61C4-45fd-BD54-9442C7DBA46F}",
"{A32942B7-920C-486b-B0E6-92A702A99B35}"

; Uncomment the following lines to enable AC97 audio and disable I2S audio:
"UseAC97"=dword:1

ENDIF

注册表的修改涉及到很多的东西,尤其是很多的键值。
驱动中可能会调用一些键值来配置程序等、

一般是根据别人的可用的工程的键值来修改。这也是wince的开发方法。

wince学习 wince将注册表保存到norflash中的方法

wince将注册表保存到norflash中的方法

1、必须保证norflash已经驱动了。

2、添加组件
将registry storage(choose 1)下的Hive-Base registry添加到工程

3、修改注册表。
IF BSP_EP93XX_FLASH
; This file is to be included in platform.reg if required.
;
; It use the top 4MB space of flash (EDB931x):
; uncached base address = A9e00000; memory size= 200000

IF BSP_SAVEDREGISTRY_NORFLASH !

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NORFlash]
"Dll"="ep93xxnorflash.dll"
"Order"=dword:2
"Prefix"="DSK"
"Ioctl"=dword:4
"Profile"="MSFlash"
"IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
"MemBase"=multi_sz:"A8000000","A9e00000"
"MemLen" =multi_sz:"2000000","200000"

; Override names in default profile[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash]
"Name"="Ep93xx NOR Flash"
"Folder"="NORFlash"
"AutoMount"=dword:1
"AutoPart"=dword:1
"AutoFormat"=dword:1

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\MSFlash] "DriverPath"="Drivers\\BuiltIn\\NORFlash"
; LoadFlags 0x01 == load synchronously
"LoadFlags"=dword:1
"Order"=dword:0

ENDIF ;END NO SAVE REGISTRY IN NORFLASH

IF BSP_SAVEDREGISTRY_NORFLASH
;;;*******************************************************************
;;;;;; HIVE REGISTRY BOOT SECTION
;;;;;;*******************************************************************

;真正的保存设置是下面这一项而已。
[HKEY_LOCAL_MACHINE\init\BootVars]
"SystemHive"="system.hv"
"Start DevMgr"=dword:1
"DefaultUser"="default"
"Flags"=dword:1
"RegistryFlags"=dword:0

;其实下面的都是norflash的属性,
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NORFlash]
"Dll"="ep93xxnorflash.dll"
"Order"=dword:0
"Prefix"="DSK"
"Ioctl"=dword:4
"Profile"="NORFlash"
"Flags"=dword:1000
"IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
"MemBase"=multi_sz:"A8000000","A9e00000" ;文件系统信息
"MemLen" =multi_sz:"2000000","200000"

;;; Override names in default profile在根目录显示的属性[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NORFlash]
"Name"="Ep93xx NOR Flash"
"Folder"="NORFlash"
"DefaultFileSystem"="FATFS"
"PartitionDriver"="mspart.dll"
"AutoMount"=dword:1
"AutoPart"=dword:1
"AutoFormat"=dword:1

;文件系统属性
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NORFlash\FATFS] "Dll"="fatfsd.dll"
"Flags"=dword:00000000
"Util"="fatutil.dll"
"Paging"=dword:1
"CacheSize"=dword:0
"EnableCache"=dword:0
"MountFlags"=dword:2

;[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\NORFlash]
; "DriverPath"="Drivers\\BuiltIn\\NORFlash"
; LoadFlags 0x01 == load synchronously
; "LoadFlags"=dword:1
; "BootPhase"=dword:0
; "Order"=dword:0

;
[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]
"EnableCache"=dword:0
"CacheSize"=dword:0

ENDIF ; END HIVE BOOT SECTION


ENDIF ;END IF BSP_EP93XX_FLASH

编译内核,下载。在第一次启动时系统会建立文件系统。