- 嵌入式系统原理与接口技术
- 张学武 江冰 张卓编著
- 14字
- 2020-08-28 03:42:33
第2章 嵌入式系统工程设计概述
2.1 嵌入式系统设计的基本流程
不知各位读者是否记得在小学学过的一篇课文,说的是统筹方法,课文中举了泡茶喝这个例子。比方,想泡壶茶喝,当时的情况是,开水没有;水壶要洗,茶壶茶杯要洗,火生了,茶叶也有了。怎样办?
方法甲:洗好水壶,灌上凉水,放在火上;在等候水开的时间里,洗茶壶、洗茶杯、拿茶叶;等水开了,泡茶喝。
方法乙:先做好一些准备工作,洗水壶,洗茶壶茶杯,拿茶叶;一切就绪,灌水烧水;坐待水开了泡茶喝。
方法丙:洗净水壶,灌上凉水,放在火上,坐待水开;水开了之后,急赶忙忙找茶叶,洗茶壶茶杯,泡茶喝。
哪一种方法省时间?我们能一眼看出第一种方法好,后两种方法都窝了工。
例子虽然比较简单,但是却对统筹方法进行了一个直观的诠释。同样在嵌入式系统的设计过程中,只有遵循一定的设计流程,才能保证最终产品的顺利实现。采用设计流程的设计方法有以下四个优点。
(1)在设计之初就可以明确设计目标,找出面临的主要问题并进行评估。
(2)通过设计流程的细化,可以方便地评估系统的工作量,易于任务划分。
(3)易于多部门协同工作,提高工作效率。
(4)有利于控制项目的进度。
本节就重点叙述在嵌入式系统的设计过程中的各个基本过程,并对每个过程所需要注意的内容进行分析。
2.1.1 需求分析
需求分析是嵌入式系统设计的根本,即:我要做什么?需要完成哪些功能?达到什么样的要求?该阶段的任务就是确定用户对应用系统的设计要求和设计指标。其考虑问题主要是整个系统需要“做什么,不做什么”,不考虑具体“怎样做”。
需求一般由用户提出,很多情况下,用户并不是专业的开发人员,因此设计者必须在需求分析阶段与用户反复讨论、协商,充分交流信息。为的是开发人员与用户对将要开发的系统达成一致的理解,必须要建立相应的需求文档。确定需求的过程有时需要反复多次,并最终得到用户和开发者的共同确认。
确定需求对于嵌入式系统设计至关重要,否则后面的工作就南辕北辙,没有任何意义了。因此需求分析阶段最主要的任务就是根据用户需求,对用户提出的要求进行识别以产生以下的需求:功能需求、性能需求、环境需求、可靠性需求、安全性需求、用户界面需求、资源使用需求、开发成本需求、人机交互需求、开发进度需求等。通过对用户的需求进行具体的识别和分类,编写制定格式规范、描述准确的说明的文档,可以极大地方便项目的开发和管理。需求分析的最后阶段就是对各项需求进行综合评估和整理,确保开发者对需求的理解与客户需求一致,有问题的地方要及时提出以进行下一步探讨。
需要说明的是,在嵌入式系统的开发过程中,开发者可以根据系统的设计情况在得到用户确认的前提下对需求进行局部调整,因为很多时候需求的实现方式并不是唯一的,开发者可以在与用户进行沟通确认的前提下对需求进行调整,从而方便项目的进行。
2.1.2 详细说明
详细说明是对需求分析的进一步细化,如果说需求分析主要是面向用户,那么详细说明就是给开发人员看的,就是根据用户需求对系统的一些设计要求的具体化,由于功能需求往往只是功能上的一个概括,因此需要通过详细说明将系统设计需求进行进一步的说明和细化,一方面在系统的设计过程中有一个统一的方向,另一方面详细说明也便于团队合作开发。
详细说明应当尽可能罗列可能的参数需求,例如针对模拟量A/D采样这一功能需求,在详细说明中可以包括。
(1)模拟量类型,电压量还是电流量?电流量可以转换成电压量采集?
(2)采样的精度与速度要求。
(3)采样数据是否需要滤波、存储。
(4)模拟量输入是否需要和CPU隔离?
嵌入式系统的工程设计可能是很长的一段时间,期间可能需要团队协作,根据需求分析所做的详细说明可以在整个设计过程中作为设计的一个参考,防止在设计过程中出现顾此失彼的现象。
2.1.3 结构设计
1.硬件结构设计
结构设计时在需求分析和详细说明之后对整个系统进行整体架构上的设计,在结构设计阶段硬件需要确定整体的结构和电路中主要的芯片选型,软件方面可以确定所要使用的软件开发平台、涉及的相关驱动、协议等。
在多数的嵌入式系统设计中,硬件方面需要考虑的问题主要有以下五方面。
(1)选择什么样的CPU?
(2)选择哪些相应的外围芯片?
(3)系统的主要I/O分配。
(4)系统的电源要求。
(5)硬件的尺寸要求、外壳设计。
在结构设计阶段,根据详细说明,要能够确定硬件部分的主要组成结构并选定主要元器件如:CPU、A/D、运放、电源芯片等都可以在结构设计阶段进行确定,相应的设计电路也应该有一个设计雏形。
芯片的选择与初步电路设计是结构设计的主要内容之一,然而从成千上万种芯片中选择出自己合适的芯片并不是一件容易的事情,对于芯片的选择与主要电路设计可以遵循以下四个原则。
(1)在实现功能的基础上可以尽量选择比较常用的芯片与方案,可以参考类似的设计,找出对本项目有效的设计方案。
(2)选用较为常用的芯片与设计方案,一方面这些方案经过多人的验证不会有太大的漏洞,同时也可以减轻设计的工作量。另一方面常用的设计方案在元器件采购等方面会容易得多,性价比也比较高。
(3)对于侧重于成本的嵌入式系统设计可以将部分功能进行分解,使用分立元件完成,或者对主要电路进行重新评估,在保证参数达到的前提下使用更为廉价的方案。
(4)对于侧重于性能和稳定性的设计可以较多的使用集成电路芯片,一方面可以提高系统的稳定性,另一方面可以降低后期调试等方面的难度。
在选择元器件时可以充分参考主要半导体厂家提供选择工具,例如,需要选择一款A/D芯片时,可以考虑美国著名的模拟半导体公司ADI公司的产品,通过搜索引擎可以很方便地找到亚德诺半导体(Analog Devices)公司的官方网站http://www.analog.com,如图2-1所示。
图2-1 亚德诺半导体(Analog Devices)公司的官方网站主页
由于需要查找的是A/D,属于数据转换器系列,因此选择数据转换器,进入之后选择ADC产品列表,这时网站会列出所有ADC芯片的信息如图2-2所示。然而这里列出的信息量很大,如果直接查找仍然需要很大的工作量,因此可以进一步使用网站提供的工具,单击图中的可以进行进一步的限定条件,如图2-3所示。单击添加/移除参数即可选择自己需要关心的参数,在下方的参数选择框中即可以选择需要筛选的条件,如精度、速度、接口、价格等。
图2-2 ADC清单
图2-3 筛选条件设置
由于各公司的网站不尽相同,网站也可能不断改版,但是类似的工具在主要的几家半导体公司网站上却是普遍存在的,可以通过这种方法进行元件的选择。元件选定后需要下载芯片的应用手册,详细了解芯片内容,看看是否符合项目需求,芯片手册中一般都会给出典型应用电路,有的芯片甚至会单独给出实验电路板的应用电路,可以作为系统电路设计的主要参考。需要说明的是并不一定找到符合要求芯片之后就是可以使用的,一方面,需要考虑在国内市场元件有无供货,方不方便购买;另一方面,如果是大批量的产品还需要考虑元件的供货能否满足需求。
2.软件结构设计
在软件方面,需要考虑的问题有以下三方面。
(1)是否需要嵌入式系统,选择什么样的嵌入式系统,硬件资源能够满足嵌入式系统的需求。
(2)软件主要包括哪些功能模块,对CPU有什么要求。
(3)使用什么软件开发平台?
在软件设计方面,软件开发应当与硬件开发同步进行,在结构设计阶段可以对系统的软件部分进行分解,确定软件部分需要开发的子功能。与硬件关联不大的软件可以先行开发验证,与硬件关系密切如底层驱动函数等,可以利用实验板等现有硬件器材进行先期开发,等到硬件设计完成后进行修改调整。
2.1.4 组件设计
1.功能模块与原理图设计
在结构设计完成之后,系统的主要框架就已经建立,接下来就需要集中精力在系统的硬件模块和软件模块的设计上。根据系统的主要结构,将系统划分成若干组件,分别进行调试。一般的设计原则是先设计硬件,后设计软件。由于有的系统功能模块较多,相对比较复杂,开发人员在初期可能并不清楚,因此在组件设计阶段可以单独设计一些验证性的功能板,对主要的电路进行验证和测试,以确保电路正确并符合要求。在设计过程中也可以使用相应的最小系统板或者开发板进行功能验证和前期的软件编写,以加快开发进度。
在结构设计一节中已经有所提及,相应元件的Datasheet是设计的重要参考,绝大多数的Datasheet中都给出了元件的典型应用电路和相关参数,因此无论是硬件设计还是软件设计,Datasheet始终是重要参考。然而很多Datasheet中的典型应用电路只是一个基本的功能演示,并无法满足实际应用需求,因此应在充分理解Datasheet的基础之上,广泛参考其他类似的电路设计,结合项目的实际需求从而得到最优的电路设计。
虽然在设计过程中一个系统按照功能被划分为若干功能模块分别进行设计,然而在设计过程中应时刻注意各功能模块之间的协调,如电平匹配、信号方向、端口占用等情况。否则,很容易出现独立模块功能可以实现而系统却无法协同工作的情况。
2.PCB设计
PCB是硬件设计中必不可少的一部分,常用的设计软件有Altium Designer(Protel)、Cadence(包括Allegro、OrCAD Capture)、Mentor PADS(Power PCB)等,其中Protel在国内的普及率较高,使用也比较方便,这里不做过多介绍,然而Protel在设计多层电路板的时候有点力不从心,因此多用于单层板及两层板的设计,对于四层及以上电路板目前国内使用OrCAD Capture和PADS组合的较多。
OrCAD Capture被称为全球最多人使用的线路图绘图程序+画原理图最厉害的软件,之所以被推荐是因为它的库比较多,元件不需要你建,而且易与其他软件(如Ansoft、Mentor的软件)集成,各种工具交互比较容易。在设计中,OrCAD Capture可以连接Cadence OrCAD PCB Editor、Allegro或其他Layout软件,来完成PCB设计。
PowerLogic和PowerPCB产品被Mentor Graphics公司收购后,更名为PADS系列,版本升级非常快,先前有PADS2005、PADS2007,目前最新的版本为PADS9.4,不过也有工程师反映运行最稳定还是PADS2005。PADS系列软件包括:原理图工具PADS Logic、PCB工具PADS Layout和自动布线工具PADS Router。PADS系列是低端的PCB软件中最优秀的一款,其界面友好、容易上手、功能强大而深受中小企业的青睐,在中小企业用户中占有很大的市场份额。PADS最大的优势就是手机产品设计,虽然它功能简单,但是山寨机基本上都是用它搞定的,国内的设计公司有80%都是用它。不足是其本身没有仿真,做高速板时,要结合其他专用仿真工具,如hyperlynx,另外原理图绘制元件库很少。总之这些只是设计工具,工具的优劣并不能决定最终的设计水平,更重要的还是在于设计者的水平,以上对主要的设计软件进行了简单的介绍,感兴趣的读者可以有选择地学习。
3.软件和硬件调试
PCB设计完成之后由PCB生产厂家制作样板,得到样板之后就要进行调试电路板的焊接与调试。电路板的焊接这里不做过多叙述,普通的DIP、SOP、TQFP等封装均可以方便地手工焊接,BGA等封装则需要专业的设备。在手工焊接的时候可以分块进行,即焊接一部分,测试一部分,测试正常后再进行下一步。例如:可以按照电源—CPU相关—外设的顺序来进行焊接。因为电源是整个系统运行的基础,先进行电源模块的焊接与测试,确保系统各部分的供电满足要求。如果电源部分没有测试稳定贸然焊接其他部分,极有可能会因为电源原因导致系统无法运行甚至损坏相关芯片。电源测试完成后可以继续焊接与CPU相关的部分电路,如CPU、时钟电路、复位电路、下载线接口等,先测试开发系统能否下载程序并正确运行,测试通过后即可继续焊接其他相关电路。硬件设计及焊接是嵌入式系统设计中极易出错的一个环节,如果不掌握合理的方法有可能会在这一环节耗费大量时间,这种分模块逐步焊接调试方法最大的好处就是能够方便地发现问题所在,如果一次性焊接完毕出现问题则很难排查。
软件设计也是一样,无论多么复杂的程序或者软件都是从最基础的功能逐步完善起来的。在软件功能的设计上同样需要遵循循序渐进的设计方法,可以有效地节省时间。
2.1.5 系统集成
系统集成的主要目的是在系统的各个组件设计完成之后,得到一个可以运转的原始系统,并利用这个原始系统,进行集成测试。
系统集成的主要任务是:测试系统各模块建立的连接是否正确,系统或子系统的正确处理能力、容错能力、输入/输出处理能否达到需求分析的设计需求。虽然经过组件的设计,可能已经实现了系统需求的各个子功能,然而在组件设计阶段,无论是软件还是硬件,各模块之间仍然是独立的,并不能保证各模块在软件和硬件集成上没有冲突,同时有些功能需要各模块之间的配合才能够实现,因此在系统集成阶段的第一步就是将各功能模块进行集成和测试。