嵌入式系统是计算设备硬件中嵌入软件作为其核心组件的应用。我们身边现在已经被嵌入式系统包围了,这些产品能为我们的生活带来各种方便乃至奢华的功能,包括移动手持设备、洗衣机、微波炉、ATM 机、空调等等。由于某些特定的应用要求,工程师必须以不同于其它设计类型的特定方法进行嵌入式设计。
以下简要介绍了进行嵌入式系统设计的几个步骤:
1. 建议:一个能够让生活变得更轻松和/或减少完成任务所需人力的创新性理念或系统。
2. 定义:接下来需要设计整个系统,包括在各种可能的输入条件下系统的表现情况。定义或许是最关键的部分,因为在定义阶段的任何错误均会影响整个系统的工作。
I. 输入/输出考虑因素:定义在一个特定输入下系统输出会是什么,要把系统作为一个黑盒子来考虑;
II. 数学建模:设计让系统按需工作的算法;
III. 功能建模:设计系统接受输入并生成所需输出的功能。
3. 技术选择:基于上述几点,设计人员可评估可用的技术,选择哪些器件能够满足所有要求,同时平衡效率、成本和产品上市进程。
4. 集成和 PCB 设计:列出实现您想要的功能所需的所有组件,并设计它们在PCB 上的布局。布线和所有其它路径都必须尽可能地降低电磁干扰 (EMI),而且应避免各种错误。设计 PCB 时,应特别注意铺地以及 PCB 上接地的所有组件。
5. 固件开发和调试:由于硬件需要指令来按我们想要的方式加以执行,我们需要为硬件使用的每个组件编写代码。这也正是固件(即应用代码)所做的工作。固件应当最大限度地降低复杂性。此外,我们在编写代码时,可能会遇到许多错误和故障,这些都需要适当的调试协议。
6. 测试:调试时需要测试代码部分,而在测试过程中,我们需要检测整个系统,也就是硬件以及驱动该硬件的软件。
7. 文档:任何浏览您完整应用设计的人都不应该问您“这是什么意思?”“这个东西怎么操作?”为了避免被这样的问题所困扰,我们应当准备好全面完整的文档。
当前设计流程中存在的问题:
在开发嵌入式应用时,我们应当充分了解不同的芯片及其功能和复杂的架构,然后再创建系统设计流程。接下来,我们需要一款应用来为我们的产品和组件提供功能,为此我们必须要编写代码。在编写代码时,系统要求会不断变化,设计人员需要相关工具,为不同的调试协议提供支持。我们或许无法重复使用代码,我们希望在单个系统中集成多种特性。鉴于上述问题,嵌入式系统设计需要考虑整个系统价格、性能、加速产品上市进程、尺寸、功耗、可维护性、安全性、存储器容量等各种问题。此外,嵌入式系统的开发人员还希望在单个芯片上实现可编程模拟和数字外设。因此,片上系统 (SOC) 的开发工作对于开发人员来说是相当繁琐的。
嵌入式系统日益复杂,几乎在任何情况下都需要可编程性。为此,设计人员需要工具来应对这种困难的局面,同时提供用户友好型环境来开发应用。虽然我们有一些SOC工具的市场,但我们并不完全了解这些工具的功能。此外,工具还必须能够最大限度地发挥产品的特性潜力。为了说明这一点,我们不妨举一个采用复杂架构芯片的例子,在单个芯片上集成了几乎所有的模拟和数字可编程外设。我们或许会发现,阅读和了解相关的配置寄存器以及使用器件相关的其它底层信息可能比较复杂,因此我们需要一款直观易用的系统设计工具把底层信息隐藏起来,让我们更方便地集中了解系统应用。
简而言之,我们需要这样一款工具,它不仅可加速产品的上市进程,直观高效地处理所有的开发考虑因素,而且成本不能太高,还能根据要求的变化支持项目在不同芯片之间的移植。
PSoC Creator:
可编程片上系统 (PSoC) 制造商已经充分认识到,开发人员需要在单个芯片上拥有完整的系统,而且要同时具备模拟和数字功能,同时该模拟和数字功能也应该完全具有可编程性。为了开发可在这些芯片上工作的嵌入式应用,以及为上述所有问题提供解决方案,赛普拉斯半导体公司推出了 PSoC Creator。PSoC Creator 通过其独特的基于原理图的格式能让设计人员无需手动管理架构或配置寄存器即可开发应用。现在,我们要做的就是思考出设计方案,然后通过把组件从赛普拉斯组件库或我们自己的组件库中拖放到设计原理图中即可绘制出设计。这就好像绘制系统方框图一样,不用考虑使用的是什么器件。正是由于革命性的图形设计编辑器支持独特而功能强大的软硬件协同设计环境,我们才能实现这一目标。请注意,该工具不仅是将软件开发环境和直观的图形设计编辑器完美地结合在一起,同时还支持全新理念的即时测试,能够快速响应于硬件变化,创建可共享的设计组件库,提供定制外设,支持片上外设的无差错互动,并能使用内置的调试器实现完整的设计。
简而言之,该工具的功能和使用可如下图所示分为 4 步:
步骤 1:设计与配置拖放组件 连接外设 I/O 到引脚 设置时钟频率
步骤 2:开发调用内置 API C/汇编语言编程无差错&更方便
步骤 3:调试内置调试器在运行时查看任何变量的类型、地址和值在运行时查看协议栈、存储器和寄存器
步骤 4:重复使用快速方便地创建未来设计将工作设计集成到可重复使用的组件中
<ignore_js_op>
图 1. 使用 PSoC Creator 创建项目的步骤
PSoC Creator 将基于 C 语言的开发流程与自动生成的组件 API 在您的设计中相结合。它能根据后续阶段要求的变化在器件之间(比如8位到32位)实现无缝移植。即便要在不同的器件系列之间进行移植,我们也无需考虑存储器映射、助记符等问题。这里的一个独特优势在于,设计过程中不必考虑目标芯片属于什么系列的问题,因为设计人员能在开发周期中的任何时间更改器件,而且无需修改项目中的任何东西。
现在让我们通过一个项目范例来更好地了解 PSoC Creator 在实际环境中开发嵌入式应用的功能和可用性。这个项目范例演示了如何通过使用脉冲宽度调制 (PWM) 来控制 LED 的亮度。
<ignore_js_op>
图2:PSoC Creator 的示意图
图 2 给出了从组件窗口拖放所需组件(即 PWM、输入引脚、输出引脚和时钟)后所形成的示意图。组件访问得以简化,此外,开发人员还能创建他们自己的组件。创建新组件就像绘制设计一样简单,而且能通过工具生成新组件的标志。将新组件放进库中,这个组件就能重复使用了。任何引用组件库的设计项目都将发现目录中的新组件,而且能像任何其它内置组件一样加以使用。通过充分发挥 PSoC Creator 中设计的重复使用优势,开发人员能够快速构建设计库,因此无论他们实施什么新项目,都能集中精力进行创新工作,而不用为传统功能而费心。
<ignore_js_op>
图3:组件配置向导
图 3 所示为组件配置向导。右键单击组件就能弹出配置向导。该向导可帮助我们设置组件的各个参数。举例来说,对于 PWM 而言,我们可设置位数、周期、比较值等参数。同样地,每个组件都有自己的参数,我们可根据应用需要加以设置。此外,每个组件都配套提供组件数据手册,介绍了组件的功能、参数、电气规范、API 等。同样,我们还为定制组件提供 API 和数据手册,这样我们就能像对内置组件一样对其进行配置了。
<ignore_js_op>
图 4:引脚图和配置
现在我们需要对应用中所用引脚的映射进行配置,引脚图(如图 4 所示)根据配置而相应变化。在图的底部,有时钟、DMA、中断、系统等不同配置选项卡。内置配置工具将设计映射到器件中,并自动计算出时钟设置和路由,这可让开发人员的工作变得非常简单。
<ignore_js_op>
图 5:应用代码
图 5 所示为我们编写应用代码、执行所需功能的截屏,同时也演示了有助于调试工作的断点分析,提供了运行时的参数值、寄存器和存储器等。在代码中,我们调用了内置 API,在运行时与组件进行通信。API 可减少编码错误,确保同外设的正确交互,从而提高整体软件开发的速度,简化开发工作,并减少错误。
调试是产品开发生命周期中最重要的阶段。对于应用调试而言,PSoC Creator 可提供交叉调试器所具备的全部现代特性,而且还能提供独特的外设调试窗口,用于显示片上组件的内部状态。此外,它还支持 JTAG 和 SWD 调试模式。其它有用的特性包括“悬停”功能,即在鼠标悬停情况下能够显示类型、地址和任何变量值等。此外,开发人员无需为寄存器、存储器、调试协议、功耗、芯片选择、函数调用等操心太多就能设计出一个完整的项目。
由于设计嵌入式系统本身是一项复杂的工作,在同一芯片上放置模拟和数字功能则将工作变得非常繁琐。此外,开发人员希望在设计的任何阶段都可实现芯片之间设计的轻松移植,确保可用资源能够直观地实现最大限度的利用。我们接着还分析了软件工具 PSoC Creator,这款工具以其独特的特性(如面向所有组件的 API 支持、灵活的调试支持、定制和可重复使用的组件创建以及根据应用要求修改现有的库组件等)能够完美解决上述问题。简而言之,如果我们希望让数字模块在运行时根据要求能够动态地当作定时器、计数器和 DAC 来工作,那么可提供通用数字模块 (UDB) 能让我们根据需要进行配置的 PSoC Creator 就是一款理想的工具。