联想小新,媚公卿,520-耳洞经济,经济拐角,全面分析

admin 2019-05-16 阅读:151

做嵌入式体系开发,常常要触摸硬件。做嵌入式开发对数字电路和模仿电路要有必定的了解。这样才干深化的研讨下去。下面咱们简略的介绍嵌入式开发中的一些硬件相关的概念。

总线(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位的地址总线转化成芯片的一根片选信号呢?这需求引进译码(器)的概念。

译码(器)

译码器将一个数据转化成一根信号线上的信号,比方3/8译码器,能够将一个位宽是3位的数据转化成8根(2的3次方)彻底独立的信号线,当向数据侧写入二进制的011时,对应的是8根线的第3根,当输入二进制的111时,对应的是8根线中的最终一根。有了译码器,处理器的地址线就简化了,只需32根地址线加上外面的译码器,就能够拜访许多的外设芯片了。外部设备的挑选问题,咱们现已处理了,现在还得回头看一看数据总线。

在嵌入式体系中,一切芯片的数据总线能够了解成是直接相连的。之所以用了“能够了解”一词,是由于为了进步总线的负载才干,其间会参加总线驱动器。为了了解,咱们看一看咱们日子中的自来水,比方,在北京理论上或许一切的水管是连在一起的,但中心或许为了进步水压,存在许多小的水站用来添加供水压力,而不或许全北京一切的自来水自接来自一个水厂。

即然一切的数据总线是连在一起的,那就或许会有问题。当向外部设备写数据时,处理器先向地址总线运送方针外设的地址,地址译码器将其转化成一根信号的片选信号送到了方针外设,方针外设收到这一信号后,将“门”翻开。接下来处理器即将传送到外设的数据往数据总线上一放,由于只要方针外设芯片翻开了“门”,所以数据只会进入到方针外设,而其它的外设什么也不会收到。很好!处理器向外写数据应当没有问题,咱们接下来看一看读。读的话,由于数据是从外设运送到处理器的,尽管咱们选用和写相同的办法翻开方针外设的“门”,但此刻,其它的外设也在数据总线上,它们有或许处于1也或许处于0,是不是会影响处理器读取方针外设的数据呢?成果当然不会,但咱们得引进另一个概念:高阻态。

高阻态

很明显,当处理器从方针外设读数据时,咱们希望其它没有被选上的芯片的数据总线不会对方针外设所要传送的数据有影响,那怎么办呢?实践上,当芯片没有被选中时,其数据总线都处于高阻态。所谓的高阻态,咱们能够了解成这一管脚在外设芯片内部是断开的,如此一来,明显不会对处理器从方针外设读取数据形成任何的影响了。咱们说当一个芯片没有被选中或是没有被使能时,其数据总线必定是处于高阻态的。前面用了“门”的开和关来打比方,那“门”是指什么呢?是指外设的数据总线,片选信号的效果便是操控将外设的数据总线与处理器的数据总线相连或是断开。

驱动

总线上的数据是谁放上去的咱们就说谁是那一时刻的驱动者。也便是说,当处理器向外设写数据时,它是在驱动数据总线的,而当处理器从方针外设读取数据时,方针外设是在驱动数据总线的。关于地址总线,由于只或许从处理器向方针外设写,所以地址总线永远是由处理器驱动的。当一个芯片没有被选中时,咱们说它并不驱动数据总线。

三态门

前面咱们提到外设芯片的数据总线在没有被选中时其处于高阻态,当被选中时,其电平或许是高(1)或是低(0)。如此一来,咱们说外设的数据总线其芯片管脚是归于三态门的,即存在高电平、低电平和高阻态,三个状况。

电平的有用性

前面咱们了解了什么是片选信号,也讲到了三态门,需求指出的是片选信号一般不是三态门,其只存在两个状况,即高电平或是低电平。前面咱们也说了,片选信号是用来“开门”的,而片选信号又有高和低电平,那到底是高电平表明“开门”呢?仍是低电平?关于这一问题,咱们称假如一个电平关于一个片选信号表明“开门”那么它便是这一信号的有用电平。比方,关于一个片选信号,假如低电平表明“开门”,那么咱们说这个片选信号是低电平有用的。尽管,在这儿咱们用片选信号来解说电平的有用性,可是许多信号都存在有用性的问题,比方,后边咱们即将谈的读信号和写信号都存在有用性问题。

时序

在前面咱们提到当处理器要向外设芯片写数据时,需求先将所需拜访的外设的地址放在地址总线上,然后,由译码器将地址总线上的数据转化成片选信号,片选信号则使能方针外设芯片,接下来处理器写数据到数据总线上,然后完结一个写操作。明显,在处理器将数据写到数据总线之前地址线上的数据有必要一向保存一段时刻,不然的话译码器不能长期的使片选信号有用。当完结了数据的写操作后,处理器就不需求确保地址总线上的地址有用了。

咱们能够看出,这一系列的操作都有必定严厉的时刻次序的,这称之为时序。时序描绘了处理器与外部设备的交互信号 “规程”,咱们只要依照这一“规程”来操作,才干确保处理器与外部设备之间能正常的通讯。这比方,咱们的道路上的红绿灯,假如咱们行人和车辆不依照其指示来通行的话,就会呈现事端。一般,选用时序图来描绘芯片之间通讯的信号“规程”。

从图中咱们能够看出ADDRESS是表明地址总线的,DQ是表明数据总线的,CE是片选信号,且是低电平有用,其宽度要确保在进行读操作时总是有用的。学会看时序图关于做嵌入式体系开发十分有协助,由于咱们不可避免的要与芯片打交道。在时序图中,一般会标识许多的时刻需求信息。在写发动代码时需求初始化各地址空间的片选地址寄存器和读写时序,时序的装备依据便是来自于外设芯片的时刻需求,这是芯片手册很重要的一部分内容。当一个地址空间中存在多个外设芯片时,咱们需求考虑到其间最慢的外设芯片的时刻需求,不然的话有的芯片就不能正常作业。

读信号

当处理器需求从外设芯片读取信号时,除了需求发作片选信号外,还需求告诉外设芯片这是一个读操作,而不是一个写操作,这是经过读信号来完结的。

写信号

前面讲了读信号,我想关于写信号也就不难了解了,这个信号用于告诉外设芯片,这是一个向外设芯片写数据的操作。

I/O端口

前面提到了外设(芯片)),现在是对外设进行分类的时分了。大体上外设分为两类,一类是存储器外设,而另一类对错存储器外设,后者常被称之为I/O设备,这儿的I/O是Input/Output的简写,即输入、输出。可见,I/O外设是一个十分广泛的概念。关于存储器外设,其特点是,它所占用的空间是接连的一片。比方,SDRAM内存便是归于存储器外设,假如其容量是8M字节,那么其占用的地址空间也会是8M的。

与存储器外设所不同的是,I/O外设所点用的地址一般都很少。比方一个I/O外设或许存在多个操控寄存器,这些操控寄存器从处理器来看便是多个I/O端口(地址),向这个地址写数据便是向外设所对应的寄存器写数据,反之,也能够是读。比方,一个串口芯片或许存在多个寄存器,一个用来查询芯片的状况,一个用来设置芯片的功用,另一个用来读取芯片从串口线所收到的数据,最终,还有一个用来向芯片写数据以向串口线上发送数据。关于这一串口芯片的寄存器,从处理器的视点来看,都是独立的I/O端口。

I/O端口存在读、写性问题,有的端口是只读的,有的端口是只写的,还有的端口是即可读也可写,其读写性是由外设芯片的寄存器所决议的,在芯片的数据手册中能找到。需求指出的是,有些存储器外设也存在I/O端口,以对其进行必定的操控。从I/O端口这一姓名来看,关于处理器来说,便是对从外面读入数据或是向外面输出数据的一个接口总称。

中止

中止从硬件的视点来看便是一个能发作高、低电平的一根信号线,但了解它需求从处理器的视点动身。咱们说过了,处理器从微观上看,所做的作业是按次序进行的,其对程序的处理只能是一条指令一条指令的履行。假如存在需求对外设芯片进行拜访,而有或许从处理器宣布读、写指令后,由于外设一般比处理器慢许多,所以外设芯片需求一些时刻来预备好所需的数据。在这种情况下,假如处理器一向等外设芯片的回来数据再履行后续的指令的话,将消耗名贵的时刻,这些时刻彻底能够用来做其它的作业。

别忘了,从微观上看来处理器常常是多使命的,使命是指操作体系所供给的调度单位。当一个使命由于等候外设芯片的数据而堵塞时,咱们能够切换到别的的使命,然后进步处理功率。这就有一个问题,当处理器去处理另一个使命时,假如外设芯片的数据好了的话,假如告诉处理器呢?对了!便是经过中止信号。中止信号的高、低电平能够用来表明是否有中止需求处理器留意以处理特定的事情(比方,外设数据预备好了的事情)。

由此看来,中止的引进能大大的进步处理器的运用功率。为了运用处理器上的中止,一开端咱们需求初始化优点理器的中止操控器,比方安装好所需的中止服务程序或称之为ISR(Interrupt Service Routine),然后,翻开中止屏蔽位。中止服务程序中需求做如下的操作:

1.从外设读入或向外设写数据。读仍是写一般需求读取外设的中止状况寄存器来决议。

2. 铲除外设的中止信号。咱们知道,中止信号是由外设芯片驱动的,为了告诉外设芯片,处理器现已处理完了所需做的作业,那么处理器需求经过必定的方法告诉外设芯片。这种方法便是向外设芯片的寄存器中的某一位写入一个数据,比方,或许是写入1表明清中止,也或许是写入0表明清中止,这一般在外设的数据手册中能查到。当外设收到了处理器的清中止请求后,其就会驱动中止线使其无效。比方,一个外设的中止线是当其为低电平表明有中止,将其从低电平变为高电平便是驱动为无效。

3. 铲除处理器的中止信号标识。处理器中往往也会保存外部中止信号是否发作过,当咱们处理完了外设芯片的中止时,咱们也需求铲除处理器上的标识,然后为下一次中止做预备。需求留意的是,清外设的中止有必要发作在请处理器中止标识之前!

中止还存在一个触发方法问题。有两种触发方法 ,一种是电平触发,另一种是沿触发。电平触发是指电平的凹凸表明外设是否有中止,而沿触发则是能过中止线上的电平的升或降来表明的,明显,存在两种沿触发方法。一种是中止线从低电平变为高电平,咱们称之为上升沿触发,另一处是中止线从高电平转化为低电平,咱们称之为下降沿触发。总的来说中止的触发方法有电平触发、上升沿触发和下降沿触发。电平触发方法中处理中中止设置很重要的一个过程。

万用表

万用表一般是用来检查电平的凹凸、电阻的巨细等的,是常用且必不可少的东西之一。在嵌入式体系开发中,咱们常用的是数字万用表。

电平(Level)

在数字电路中,分为高电平和低电平,分别用1和0表明。一个数字电路的管脚,总是存在一个电平的,要么高要么低,或许说要么1要到0(其实,还有另一种状况)。

示波器

在嵌入式体系开发中,咱们不可避免的要与外设芯片打交道。调试驱动程序时,除了需求彻底看理解芯片的数据手册,且在软件高度的过程中,还需求看咱们所希望的信号电平是否发作在芯片上。比方,咱们在写驱动程序时,需求经过写I/O端口来对外设芯片进行操作,当写相应的I/O端口时,咱们知道所对应芯片的片选信号应当有用,有时,咱们需求验证是否按预期发作了,这就需求用到示波器。

一般的示波器是能一起观测两个信号线的信号状况的。示波器都供给必定的功用,比方设置信号扑捉的方法等等。示波器很重要的一个参数据是其收集频率,依据Nyquist收集定理,假如咱们想用示波器检查频率是100M赫兹的信号,那么其采样频率有必要至少是其两倍,即200M赫兹。有人或许会问:为什么不必万用表来看呢?由于万用表的收集频率很底,无法收集到很快的信号改变。

逻辑分析仪

简略的说逻辑分析器便是具有许多信号通道的示波器。经过逻辑分析仪,咱们能够看到地址总线和数据总线上的数据。逻辑分析仪都供给必定的编程才干,用于编程什么时分开端对总线上的数据进行收集。