首页 > 编程知识 正文

嵌入式要学哪些知识(嵌入式技术)

时间:2023-05-05 02:54:24 阅读:86648 作者:4741

做嵌入式系统的开发,必须经常接触硬件。 开发嵌入式设备时,需要事先了解数字电路和模拟电路。 只有这样才能深入研究下去。 本文简要介绍了嵌入式设备开发中的硬件相关概念。

公共汽车。

嵌入式系统中必定搭载一个处理器芯片,另外,其他芯片也作为外部设备(以下简称为外围设备),这些芯片与处理器协作实现产品的功能。 复杂的产品往往由大量的芯片组成。 所有外围设备都必须连接到处理器,这是不可避免的。 最简单的是,用独立的信号线将所有外围设备连接到处理器上。 这是一个简单易懂的好处,但问题是不可能的。

从芯片生产和产品生产的角度来看是不现实的,因为处理器芯片需要引出太多的线。 此外,如果处理器(这里假设处理器是单核而不是多核)处理事务从微观上是串行的,也就是说,在某个时刻对外围设备进行读写操作,则其对多个外围设备中的一个进行

必须注意的是,这里提出微观这个概念是为了与宏观加以区别。 从宏上来说,一个处理器可以同时执行多个任务,但这些任务从微观上一个一个地执行(用串行方式描述这里的“一个一个”),多任务的串行执行的操作系统很重要

让我们回到话题上来。 也就是说,每个外围设备不能通过单独的信号线连接到处理器,处理器一次只能访问一个外围设备。 那么,可以使用共享的信号线连接所有的芯片吗? 这就是公交车概念的由来。 简单来说,在我们周围有10个家庭的情况下,为了让这10个家庭能够各来往2个人,我们不需要每两个家庭走一条不同的(注意是单独的)路,需要走45条路。 而且,每个房子都和大街相连。

总线的话,总线是处理器的,其他外设经常挂在总线上。 那个有一个问题。 我们每小时只能访问悬挂在巴士上的一个外围设备。 那么,如何区分这些外围设备呢? 就像我们的路一样,我们需要用地址来区分所有的家庭。 即使是公共汽车,也用地址来区分。

这样,总线根据其功能分为两类。 一个是地址总线,这条总线上的数据只是从处理器“流向”外围设备,是单向的。 另一种是将数据从处理器传输到外围设备的数据总线,即从处理器传输数据到外围设备的数据总线,或者从处理器传输数据到处理器的数据总线,数据总线显然是双向的。 也就是说,我们的嵌入式系统中同时存在地址总线和数据总线,将需要与处理器进行通信的所有芯片连接在一起。

公共汽车有宽度。 正如我们的道路分为“3车道”或“4车道”一样,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解码器,从而使1比特宽为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赫兹。有人可能会问:为什么不用万用表来看呢?因为万用表的采集频率很底,无法采集到很快的信号变化。

逻辑分析仪

简单的说逻辑分析器就是具有很多信号通道的示波器。通过逻辑分析仪,我们可以看到地址总线和数据总线上的数据。逻辑分析仪都提供一定的编程能力,用于编程什么时候开始对总线上的数据进行采集。

﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

免责声明:内容整理自网络,版权归原作者所有,如涉及作品版权问题,请及时与我们联系,谢谢!

精彩推荐

烽火四起,酣战未尽!华强PCB自断后路,突然“人间蒸发”了?!

太牛了!电路图符号超强科普,不懂物理也能轻松看懂电路图!(推荐收藏)

114个实用电子小常识,一般人都不知道!

关于射频芯片,看这一篇就够了!(干货收藏)

从菜鸟到高手,学习arm32位单片机的必经之路,给大家分享个人经验!

更多精彩添加发烧友小助手

加入“发烧友微信群”交流,

THE END

1、加 Lwangzi312为好友,进入电子行业交流大群

嵌入式软件|可编程逻辑|C语言|linux|单片机|LabVIEW|微机原理|RF/无线|PCB设计|IC设计|电源设计|模拟技术|机器人|测试测量|Java|AR/VR|前端开发|大数据|python|LabVIEW|STM32|FPGA|四轴算法|BLDC|PCB设计

2、加 Lwangzi312为好友,进入电子行业城市交流群

深圳39591|北京26276|上海24794|广州15554|西安11854|成都10678|杭州10600|苏州10141|南京9735|武汉9204|东莞7960|天津6610|重庆6319|合肥5096|长沙4832|青岛4427|郑州4425|佛山4176|宁波3774|无锡3617|厦门3569|惠州2893

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。