做嵌入式体系开发,常常要触摸硬件,需求对数字电路和模仿电路要有必定的了解,这样才干深化的研讨下去。那些刚刚触摸嵌入式,总觉得很难,其实做什么作业,都要把最根底的常识把握结实,才干终究走上大神的路途。下面咱们简略地介绍一下嵌入式开发中的一些硬件相关的概念。
电平(Level)
在数字电路中,分为高电平和低电平,分别用1和0表明。一个数字电路的管脚,总是存在一个电平的,要么高要么低,或许说要么1要到0(其实,还有另一种状况,后边会提到)。
总线(Bus)
在嵌入式体系中必定会有一块处理器芯片,此外,还有其它的芯片作为外部设备(后边简称外设),这些芯片与处理器协作完结产品的功用。杂乱的产品往往是由许多的芯片组成的。那么不可避免的是咱们需求将一切的外设与处理器进行相连,最为简略的是将一切的外设都选用独立(留意是独立)的信号线衔接至处理器。
这样的优点是简单了解,但问题是:不可行。由于处理器芯片需求引出太多的线了,从芯片的出产和产品的出产视点来看都不实践。加之,处理器(在此咱们假定处理器是单核的,而不是多核的)处理事务在微观上是串行的,也便是说在某一时刻假如要对外设进行读写操作,那只或许是对许多外设中的一个进行,即多个外设不或许在微观上被处理器一起拜访。需求留意的是,这儿提出了微观这一概念,这是为了差异于微观。
从微观上来讲,一个处理器中能够有多个使命一起运转,但这些使命在微观上却是一个一个运转的(后边会用串行来描绘这儿所说的“一个一个”),多使命的串行运转完结是由操作体系扮演着重要的人物来完结的。回到咱们的论题,即然将每个外设选用独立的信号线连到处理器不可行,且处理器在单一时刻内只会对一个外设进行拜访,那咱们能不能选用同享的信号线将一切的芯片连在一起呢?这便是总线概念的由来。
浅显的说,假如咱们周围有十个家庭,为了让这十个家庭每两个之间都能来往,咱们并不需求为每两个家庭修一条独自(留意是独自)的路(假如这样,要修45条路),而是能够修一条大道,然后,每个家都与大道相连。
关于总线,咱们往往说总线是处理器的,而其它的外设是挂在总线上的。那有一个问题,咱们每一时刻只能拜访挂在总线上的一个外设,那怎么差异这些外设呢?和咱们的路相同,咱们需求用地址来差异每一个家庭,在总线上,也是选用地址来进行差异的。这样,总线就根据其功用分为两类了。一类是地址总线,这一总线上的数据只会是从处理器向外设“流”,是单向的。
另一类则是数据总线,用来将数据从处理器传送到外设(从处理器的视点来说是写操作)或许是将数据从外设传送到处理器(从处理器的视点来说是读操作),明显,数据总线是双向的。也便是说,在咱们的嵌入式体系中一起存在地址总线和数据总线将一切需求与处理器进行通讯的芯片连在一起的。
总线是有宽度的,正如咱们的路分为“三车道”或是“四车道”,咱们说32位处理器,是指其数据总线宽度是32位,也便是“有32辆车能一起跑”,明显,宽度越是宽咱们的处理器速度就越是快,由于咱们从外设芯片存取数据的速度会更快,这便是为什么咱们的计算机向64位开展的原因。相同的,地址总线也是有宽度的,关于32位处理器其最大宽度也便是32位。
总线的概念有了,那接下来的一个问题是,即使是每一个外设都有一个地址,那这一地址记在哪里呢?是放在外设芯片上吗?假如这样的话,那就有一个问题,每一类外设的地址有必要是不能堆叠的,而当一个产品中需求两块相同的芯片的话,两块芯片的地址就无法差异了,看来这样操作存在问题。还有,假如这样的话每一个外设也得与(比方,32根)数据总线彻底相连,并监听数据线以了解处理器是不是在“叫”自己,这样很是杂乱。此外,地址也有或许由于外设品种的增多而用光。总的来说地址不能存放在外设芯片,那怎么让外设知道,此刻它是被处理器招换然后需求进行读写拜访的呢?答案便是芯片的片选(CS, chip select)信号,或许又号使能(ENable)信号。
片选(CS或EN)
片选信号关于外设芯片来讲,便是一个(也是一根)告知信号,告知芯片“嘿,请开门,我要放些东西进来,或是拿些东西走”,这儿的东西只能是数据,不或许是玉米棒什么的。那有个问题,这个信号源从哪里来呢?明显,只能从处理器来。那是不是也是像总线那样,每一个芯片都共用一根线连在一起呢?假如这样,或许处理器“一叫开门”一切的芯片都将“门”翻开了。
假如是处理器写数据,那或许一切的芯片都被写入相同的数据。而取数据时,每个外设芯片都向外“扔”数据,这必定会形成数据总线抵触,由于有的芯片向总线上“扔”1,有的则“扔”0,这种情况下处理器必定会“发疯”的,由于它不知道应当得到1仍是0。
已然这样,那明显不能将一切的片选信号连在一起了,只能是各芯片的片选信号独立。前面提到了地址总线,咱们是选用一根地址线连一个外设芯片呢?仍是选用其它的办法。假如选用一根地址线连一个外设芯片,那或许最多只能挂接32个芯片了,这明显不可。其实,在实际中,是选用32位的数字来表明一个外设芯片的地址的,比方1能够表明芯片A,而6534能够表明别的一个芯片B,等等。
由此看来,理论上咱们能够表明2的32次方(4294967296)个设备,之所以说理论上,是由于有的设备要占用许多的地址。即然这样,那还有一个问题,假如将32位的地址总线转化成芯片的一根片选信号呢?这需求引进译码(器)的概念。
译码器(Decoder)
译码器将一个数据转化成一根信号线上的信号,比方3/8译码器,能够将一个位宽是3位的数据转化成8根(2的3次方)彻底独立的信号线,当向数据侧写入二进制的011时,对应的是8根线的第3根,当输入二进制的111时,对应的是8根线中的最终一根。有了译码器,处理器的地址线就简化了,只需32根地址线加上外面的译码器,就能够拜访许多的外设芯片了。外部设备的挑选问题,咱们现已处理了,现在还得回头看一看数据总线。
图1 3/8译码器
在嵌入式体系中,一切芯片的数据总线能够了解成是直接相连的。之所以用了“能够了解”一词,是由于为了进步总线的负载才干,其间会参加总线驱动器。为了了解,咱们看一看咱们日子中的自来水,比方,在北京理论上或许一切的水管是连在一起的,但中心或许为了进步水压,存在许多小的水站用来添加供水压力,而不或许全北京一切的自来水自接来自一个水厂。
已然一切的数据总线是连在一起的,那就或许会有问题。当向外部设备写数据时,处理器先向地址总线运送方针外设的地址,地址译码器将其转化成一根信号的片选信号送到了方针外设,方针外设收到这一信号后,将“门”翻开。接下来处理器即将传送到外设的数据往数据总线上一放,由于只要方针外设芯片翻开了“门”,所以数据只会进入到方针外设,而其它的外设什么也不会收到。
接下来看一看读。读的话,由于数据是从外设运送到处理器的,尽管咱们选用和写相同的办法翻开方针外设的“门”,但此刻,其它的外设也在数据总线上,它们有或许处于1也或许处于0,是不是会影响处理器读取方针外设的数据呢?成果当然不会,但咱们得引进另一个概念:高阻态。
高阻态
很明显,当处理器从方针外设读数据时,咱们期望其它没有被选上的芯片的数据总线不会对方针外设所要传送的数据有影响,那怎么办呢?实践上,当芯片没有被选中时,其数据总线都处于高阻态。所谓的高阻态,咱们能够了解成这一管脚在外设芯片内部是断开的,如此一来,明显不会对处理器从方针外设读取数据形成任何的影响了。咱们说当一个芯片没有被选中或是没有被使能时,其数据总线必定是处于高阻态的。前面用了“门”的开和关来打比方,那“门”是指什么呢?是指外设的数据总线,片选信号的效果便是操控将外设的数据总线与处理器的数据总线相连或是断开。
驱动
总线上的数据是谁放上去的咱们就说谁是那一时刻的驱动者。也便是说,当处理器向外设写数据时,它是在驱动数据总线的,而当处理器从方针外设读取数据时,方针外设是在驱动数据总线的。关于地址总线,由于只或许从处理器向方针外设写,所以地址总线永远是由处理器驱动的。当一个芯片没有被选中时,咱们说它并不驱动数据总线。
三态门
前面咱们提到外设芯片的数据总线在没有被选中时其处于高阻态,当被选中时,其电平或许是高(1)或是低(0)。如此一来,咱们说外设的数据总线其芯片管脚是归于三态门的,即存在高电平、低电平和高阻态,三个状况。
电平的有用性
前面咱们了解了什么是片选信号,也讲到了三态门,需求指出的是片选信号一般不是三态门,其只存在两个状况,即高电平或是低电平。前面咱们也说了,片选信号是用来“开门”的,而片选信号又有高和低电平,那到底是高电平表明“开门”呢?仍是低电平?关于这一问题,咱们称假如一个电平关于一个片选信号表明“开门”那么它便是这一信号的有用电平。比方,关于一个片选信号,假如低电平表明“开门”,那么咱们说这个片选信号是低电平有用的。尽管,在这儿咱们用片选信号来解说电平的有用性,可是许多信号都存在有用性的问题,比方,后边咱们即将谈的读信号和写信号都存在有用性问题。
时序
在前面咱们提到当处理器要向外设芯片写数据时,需求先将所需拜访的外设的地址放在地址总线上,然后,由译码器将地址总线上的数据转化成片选信号,片选信号则使能方针外设芯片,接下来处理器写数据到数据总线上,然后完结一个写操作。明显,在处理器将数据写到数据总线之前地址线上的数据有必要一向保存一段时刻,不然的话译码器不能长期的使片选信号有用。
当完结了数据的写操作后,处理器就不需求确保地址总线上的地址有用了。咱们能够看出,这一系列的操作都有必定严厉的时刻次序的,这称之为时序。时序描绘了处理器与外部设备的交互信号 “规程”,咱们只要依照这一“规程”来操作,才干确保处理器与外部设备之间能正常的通讯。这比如,咱们的路途上的红绿灯,假如咱们行人和车辆不依照其指示来通行的话,就会呈现事端。一般,选用时序图来描绘芯片之间通讯的信号“规程”。
图2 读时序图
图3 读时序图
从图中咱们能够看出ADDRESS是表明地址总线的,DQ是表明数据总线的,CE是片选信号,且是低电平有用,其宽度要确保在进行读操作时总是有用的。学会看时序图关于做嵌入式体系开发十分有协助,由于咱们不可避免的要与芯片打交道。在时序图中,一般会标识许多的时刻需求信息。
在写发动代码时需求初始化各地址空间的片选地址寄存器和读写时序,时序的装备根据便是来自于外设芯片的时刻需求,这是芯片手册很重要的一部分内容。当一个地址空间中存在多个外设芯片时,咱们需求考虑到其间最慢的外设芯片的时刻需求,不然的话有的芯片就不能正常作业。