ARM Cortex-M4 Kinetis微控制器实践资料

更新时间:2023-04-24 23:54:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ARM Cortex M4嵌入式系统开发实践-基于飞思卡尔K60系列微控制器

王宜怀王林编著

内容简介

本书以飞思卡尔半导体公司(原摩托罗拉半导体部)的32位K60系列微控制器中MK60N512VMD100为蓝本阐述嵌入式系统的软件与硬件设计。全书共17章,其中第1章为概述,阐述嵌入式系统的知识体系、学习误区、学习建议及基于硬件构件的嵌入式系统开发方法。第2章给出MK60N512VMD100硬件最小系统。第3章给出第一个样例程序及CodeWarrior、IAR工程组织,完成第一个MK60N512VMD100工程的入门。第4章阐述串行通信接口UART,并给出第一个带中断的实例。1-4章完成了学习一个新MCU完整要素(知识点)的入门。6-16章分别给出GPIO的应用(键盘、LED及LCD)、定时器、A/D转换、SPI、I2C、I2S、Flash、CAN、USB、SDHC、TSI、以太网及MK60N512VMD100其他模块等。第17章讲述了嵌入式操作系统有关的知识。

本书提供了所有实例源程序、辅助资料、相关芯片资料及常用软件工具。

本书可供大学有关专业的高年级学生和研究生用作教材或参考读物,也可供嵌入式系统开发与研究人员用作参考和进修资料。

I

前言

嵌入式计算机系统简称为嵌入式系统,其概念最初源于传统测控系统对计算机的需求。随着以微处理器(MPU)为内核的微控制器(MCU)制造技术的不断进步,计算机领域在通用计算机系统与嵌入式计算机系统这两大分支分别得以发展。通用计算机已经在科学计算、事物管理、通信、日常生活等各个领域产生重要的影响。在后PC时代,嵌入式系统的广阔应用将是计算机发展的重要特征。一般来说,嵌入式系统的应用范围可以粗略分为两大类:一类是电子系统的智能化(如工业控制、现代农业、家用电器、汽车电子、测控系统、数据采集、传感网应用等);另一类是计算机应用的延伸(如手机、电子图书、通信、网络、计算机外围设备等)。不论如何分类,嵌入式系统的技术基础是不变的,即要完成一个以MCU 为核心的嵌入式系统应用产品设计,需要有硬件、软件及行业领域相关知识。但是,随着嵌入式系统中软件规模日益增大,对嵌入式底层驱动软件的封装提出了更高的要求,可复用性与可移植性受到特别的关注,嵌入式软硬件构件化开发方法逐步被业界所重视。

本书基本思想

本书以嵌入式硬件构件与底层软件构件设计为主线,按照嵌入式软件工程的要求,以飞思卡尔半导体公司(原摩托罗拉半导体部)的32位K60系列中MK60N512VMD100微控制器为蓝本阐述嵌入式系统的软件与硬件设计。并阐述嵌入式操作系统相关知识。

我从事单片机与嵌入式系统科研与教学工作是从1991年开始的。1991-1999年间,使用MCS-51系列MCU。2000年至现在,一直使用飞思卡尔(2004年以前是摩托若拉半导体部)的MCU。十多年来,陆续以飞思卡尔的HC08/S08(8位)、S12/S12X(16位)、ColdFire (32位)、M*Core(32位,该内核转给中国后称为C*Core)进行科研开发与教学工作,并以这些MCU为蓝本先后写了一些嵌入式应用技术入门方面的书,得到了大多数读者的肯定,深受感动。2010-2011年,苏州大学嵌入式团队的工作重点是进行ARM Cortex-M4核Kinetis 系列MCU(K60)、新型Zigbee芯片MC1323x、DSC芯片MC56F825x等方面的工作,这些工作成果也将会逐步与读者分享。在写书方面,多年来一直在探索如何能够使读者不误入歧途,如何能够快速入门,如何能够规范编程,如何能够由浅入深、循序渐进,如何能够使读者打好嵌入式硬件与软件基础。为此从以下几点把握写作:(1)把与芯片无关的通用知识分离出来,从涉及底层编程角度对基本原理进行简明扼要的阐述,分别放入相应章节的前面或网上光盘中。这些知识主要包括通用I/O、串行通信、键盘编码原理、LED扫描原理、SPI、PWM、USB、I2C、CAN、A/D、D/A、嵌入式以太网等。并在各书中基本保持不变。这一点是接受了飞思卡尔全球大学计划负责人Andy Mastronardi先生的建议,经过几年不断修改完善,可把通用部分斟酌得更好一些。也使得8位、16位、32位的书风格保持一致。新的芯片出来后,书的修改只要更新与芯片的相关部分。(2)硬件相关的部分,采用了硬件构件思想,制定了一些基本规范,对底层驱动进行构件化封装,提高了可复用性与可移植性。使程序结构更加清晰,初学者可以“先使用、后理解”。(3)不论是8位、16位、32位,也不论是哪个芯片,从编程角度,把与硬件相关的共性和与硬件无关的共性分别抽象出来,力求做到,硬件相关部分风格一致,硬件无关部分程序一致。这样便于融会贯通,不再纠结芯片位数、操作系统等问题。

关于飞思卡尔微控制器

II

飞思卡尔半导体是全球最大半导体公司之一,在微控制器领域长期居全球市场领先地位,以高可靠性获得业界的一致赞誉。该公司的微控制器产品系列齐全,由不同位数(如8位、16位、32位等)、不同封装形式(如DIP、SOIC、QFP、LQFP、BGA等)、不同温度范围(0~70℃、-40~85℃、-40~105℃、-40~125℃等)、所含模块不同等构成了庞大的产品系列。飞思卡尔的S08(8位)、S12/S12X(16位)、ColdFire(32位)、ARM Cortex(32位)等系列MCU,广泛地应用于汽车电子、消费电子、工业控制、网络和无线市场等嵌入式系统各个领域。系列齐全的微控制器产品,为嵌入式系统各种应用提供了选择与解决方案,使得用户可以各取所需。不论是电子系统智能化还是计算机应用延伸的嵌入式应用设计,无论需要怎样的系统功能和集成度,总能从飞思卡尔庞大产品系列中选取一款合适的芯片进行应用开发。这正是嵌入式系统产品设计者所期望的,也节省了嵌入式学习者的时间,可以加快开发进度,提高开发质量。

本书特点

2009年,我撰写了《基于32位ColdFire构建嵌入式系统》一书,2010年又撰写了《嵌入式技术基础与实践(第2版)》。两书中系统阐述和应用了嵌入式构件开发思想,本书秉承这些工作,按照“通用知识—芯片编程结构概要—基本编程方法—底层驱动构件封装—应用方法与举例”的线条,逐步阐述电子系统智能化嵌入式应用的软件与硬件设计。

(1)把握通用知识与芯片相关知识之间的平衡。书中对于嵌入式“通用知识”的基本原理,以应用为立足点,进行语言简洁、逻辑清晰的阐述,同时注意与芯片相关知识之间的衔接,使读者在更好地理解基本原理的基础上,理解芯片应用的设计,同时反过来,加深对通用知识的理解。

(2)把握硬件与软件的关系。嵌入式系统是软件与硬件的综合体,嵌入式系统设计是一个软件、硬件协同设计的工程,不能像通用计算机那样,软件、硬件完全分开来看。特别是对电子系统智能化嵌入式应用来说,没有对硬件的理解就不可能写好嵌入式软件,同样没有对软件的理解也不可能设计好嵌入式硬件。因此,本书注重把握硬件知识与软件知识之间的关系。

(3)对底层驱动进行构件化封装。书中对每个模块均给出根据嵌入式软件工程基本原则并按照构件化封装要求编制底层驱动程序,同时给出详细、规范的注释及对外接口,为实际应用提供底层构件,方便移植与复用,可以为读者进行实际项目开发节省大量时间。

(4)设计合理的测试用例。书中所有源程序均经测试通过,并保留测试用例在本书的随书光盘中,避免了因例程的书写或固有错误给读者带来烦恼。这些测试用例,也为读者验证与理解带来方便。

(5)随书光盘提供了所有模块完整的底层驱动构件化封装程序、文档与测试用例,同时随书光盘中还包含芯片参考手册、写入器安装与使用方法、工具软件(如开发环境、程序写入与读出软件、串口调试工具等)、有关硬件原理图及其他技术资料。

(6)提供硬件评估版、写入调试器,并给出单独进行程序写入与读出的软件工具,方便读者进行实践与应用。

本书主要内容

本书以飞思卡尔半导体的32位K60系列微控制器中MK60N512VMD100为蓝本阐述嵌入式系统的软件与硬件设计。全书共17章,其中第1章为概述,阐述嵌入式系统的知识体系、学习误区、学习建议及基于硬件构件的嵌入式系统开发方法。第2章给出MK60N512VMD100硬件最小系统。第3章给出第一个样例程序及CodeWarrior、IAR工程

III

组织,完成第一个MK60N512VMD100工程的入门。第4章阐述串行通信接口UART,并给出第一个带中断的实例。1-4章完成了学习一个新MCU完整要素(知识点)的入门。6-16章分别给出GPIO的应用(键盘、LED及LCD)、定时器、A/D转换、SPI、I2C、I2S、Flash、CAN、USB、SDHC、TSI、以太网及MK60N512VMD100其他模块等。第17章讲述了嵌入式操作系统有关的知识。

致谢

本书除封面署名作者外,还有苏州大学计算机科学与技术学院嵌入式应用方向研究生姚丹丹、李翠霞、朱乐乐、冯上栋、石晶、苏勇等协助书稿整理及程序调试工作,他们卓有成效的工作,使本书更加实用。飞思卡尔半导体有限公司的Andy Mastronardi先生、马莉女士一直关心支持苏州大学飞思卡尔嵌入式系统研发中心的建设,为本书的撰写提供了硬件及软件资料,并提出了许多宝贵建议。飞思卡尔半导体有限公司的许多技术人员提供了技术支持。北京航空航天大学出版社的董立娟编辑为本书的出版付出了大量细致的工作。在此一并表示诚挚的谢意。

鉴于作者水平有限,书中难免存在不足和错误之处,恳望读者提出宝贵意见和建议,以便再版时改进。

王宜怀

2011年4月于苏州大学

IV

网上光盘资料目录结构

V

ARM CORTEX M4嵌入式系统开发实践............................................................................ I -基于飞思卡尔K60系列微控制器 ......................................................................................... I 第1章概述. (1)

1.1 嵌入式系统定义、由来及特点 (1)

1.1.1 嵌入式系统的定义 (1)

1.1.2 嵌入式系统的由来及其与微控制器的关系 (1)

1.1.3 嵌入式系统的特点 (3)

1.2 嵌入式系统开发所遇到的若干问题 (4)

1.3 嵌入式硬件构件的基本思想与应用方法 (4)

1.4 基于硬件构件的嵌入式系统硬件电路设计 (5)

1.4.1 设计时需要考虑的基本问题 (5)

1.4.2 硬件构件化电路原理图绘制的简明规则 (7)

1.4.3 实验PCB板设计的简明规则 (9)

1.5 基于硬件构件的嵌入式底层软件构件的编程方法 (13)

1.5.1 嵌入式硬件构件和软件构件的层次模型 (13)

1.5.2 底层构件的实现方法与编程思想 (14)

1.5.3 硬件构件及底层软件构件的重用与移植方法 (14)

第2章KINETIS概述与MK60N512VMD100硬件最小系统 (17)

2.1 ARM公司的发展史及ARM架构的发展 (17)

2.2 Kinetis系列微处理器概述 (24)

2.3 Kinetis系列微控制器存储器映像与编程结构 (26)

2.3.1 K60系列MCU性能概述与内部结构简图 (27)

2.3.2 K60系列存储器映像 (29)

2.4 K60的引脚功能与硬件最小系统 (31)

2.4.1K60的引脚功能 (31)

2.4.2K60硬件最小系统 (39)

2.4.3 硬件最小系统测试方法 (42)

第3章第一个样例程序及工程组织 (43)

3.1 通用I/O接口基本概念及连接方法 (43)

3.2 MK60N512VMD100的GPIO (44)

3.3 开发环境与JTAG写入器 (45)

3.3.1 IAR开发环境简介与基本使用方法 (45)

3.3.2 CW开发环境简介与基本使用方法 (46)

3.3.3 JTAG写入器 (47)

3.3.4 MK60N512VMD100硬件核心板 (47)

3.4 IAR工程文件组织 (48)

3.4.1 工程文件的组织 (49)

3.4.2 初始化相关文件 (51)

3.5 CW工程文件组织 (55)

3.5.1 工程文件的组织 (55)

3.5.2 初始化相关文件 (55)

VI

3.6 第一个应用实例:控制小灯闪烁 (56)

3.6.1 GPIO构件 (57)

3.6.2 Light构件 (59)

3.6.3 Light 测试工程主程序 (61)

3.7 理解第一个C工程的执行过程 (62)

第4章异步串行通信 (63)

4.1 异步串行通信的基础知识 (63)

4.1.1 基本概念 (63)

4.1.2 RS-232C总线标准 (65)

4.1.3 电平转换电路原理 (66)

4.2 MK60N512VMD100的UART模块功能描述 (67)

4.3 MK60N512VMD100的UART模块的编程结构 (69)

4.4 基于构件方法的UART编程 (74)

4.4.1 UART构件的函数原型设计 (74)

4.4.2 UART构件的头文件 (75)

4.4.3 UART构件的源程序文件 (77)

4.4.4 UART构件的测试工程 (82)

4.5 K60第一个带有中断功能的实例 (84)

4.6 进一步讨论 (87)

4.6.1 流控制与Break信号 (87)

4.6.2 延长串口通信的距离 (87)

4.6.3 串口的扩展 (87)

第5章GPIO的应用实例——键盘、LED与LCD (88)

5.1键盘技术概述 (88)

5.1.1键盘模型及接口 (88)

5.1.2键盘编程的基本问题 (88)

5.1.3键盘构件设计与测试实例 (88)

5.2 LED技术概述 (88)

5.2.1 扫描法LED显示编程原理 (88)

5.2.2 LED构件设计与测试实例 (88)

5.3 LCD技术概述 (88)

5.3.1 LCD的特点和分类 (88)

5.3.2 点阵字符型液晶显示模块 (88)

5.3.3 HD44780 (88)

5.3.4 LCD构件设计与测试实例 (88)

第6章定时器相关模块 (89)

6.1计数器/定时器的基本工作原理 (89)

6.2 可编程延时模块PDB (89)

6.2.1 PDB工作原理 (89)

6.2.2 PDB相关寄存器 (89)

6.2.3 PDB构件设计及测试实例 (89)

6.3 Flex定时器FTM (89)

VII

6.3.1 FTM工作原理 (89)

6.3.2 FTM相关寄存器 (89)

6.3.3 FTM中断 (89)

6.3.4 FTM构件设计及测试实例 (89)

6.4 周期中断定时器PIT (89)

6.4.1 PIT工作原理 (89)

6.4.2 PIT相关寄存器 (89)

6.4.3 PIT构件设计及测试实例 (89)

6.5低功耗定时器LPTMR (90)

6.5.1 LPTMR工作原理 (90)

6.5.2 LPTMR相关寄存器 (90)

6.5.3 LPTMR构件设计及测试实例 (90)

6.6载波调制发射器CMT (90)

6.6.1 CMT工作原理 (90)

6.6.2 CMT相关寄存器 (90)

6.6.3 CMT中断 (90)

6.6.4 CMT构件设计及测试实例 (90)

6.7实时时钟RTC (90)

6.7.1 RTC工作原理 (90)

6.7.2 RTC相关寄存器 (90)

6.7.3 RTC构件设计及测试实例 (90)

第7章A/D与D/A (91)

7.1 A/D和D/A转换的基本问题 (91)

7.2 A/D转换模块 (91)

7.2.1 A/D转换模块寄存器 (91)

7.2.2 A/D转换构件设计及测试实例 (91)

7.3 D/A转换模块 (91)

7.3.1 D/A转换模块寄存器 (91)

7.3.2 D/A转换构件设计及测试实例 (91)

7.4 比较器CMP概述 (91)

第8章SPI (92)

8.1 SPI的基本工作原理 (92)

8.1.1 SPI概述 (92)

8.1.2 SPI的数据传输 (92)

8.1.3 SPI模块的时序 (92)

8.2 SPI模块的编程基础 (92)

8.2.1 SPI模块的引脚 (92)

8.2.2 SPI模块的寄存器 (92)

8.2.3 SPI编程基本方法 (92)

8.3 SPI构件设计及测试实例 (92)

第9章I2C与I2S (93)

9.1 I2C总线概述 (93)

VIII

9.1.1 I2C总线特点 (93)

9.1.2 I2C总线标准的发展历史 (93)

9.1.3 I2C总线的相关术语 (93)

9.2 I2C总线工作原理 (93)

9.2.1 总线上数据的有效性 (93)

9.2.2 总线上的信号 (93)

9.2.3 总线上数据的传输格式 (93)

9.2.4 总线寻址约定 (93)

9.3 I2C模块的编程基础 (93)

9.3.1 I2C模块寄存器 (93)

9.3.2 I2C模块编程基本方法 (93)

9.4 I2C构件设计及测试实例 (93)

9.5 I2S概述 (93)

9.5.1 I2S的特点 (93)

9.5.2 I2S操作模式 (93)

9.5.3 I2S的相关寄存器定义 (93)

9.6 I2S的构件化设计与测试实例 (94)

第10章FLASH (95)

10.1 Flash内存控制寄存器FMC (95)

10.1.1 FMC特点 (95)

10.1.2 FMC相关寄存器 (95)

10.1.3 FMC的功能 (95)

10.2 Flash存储器概述与编程模式 (95)

10.2.1 Flash存储器编程的基本概念 (95)

10.2.2 Flash存储器的编程寄存器 (95)

10.2.3 Flash存储器的编程过程 (95)

10.2.4 Flash存储器测试实例 (95)

10.3 FlexBUS概述 (95)

10.3.1 FlexBUS的特点 (95)

10.3.2 FlexBUS相关的寄存器 (95)

10.3.3 FlexBUS的功能 (95)

10.4 EzPort概述 (95)

10.4.1 EzPort的特点 (95)

10.4.2 EzPort信号描述 (95)

10.4.3 EzPort命令 (95)

10.5 Flash存储器的保护特性和安全性 (96)

10.5.1 周期性冗余检测CRC (96)

10.5.2 存储器映像密码加速单元MMCAU (96)

10.5.3 随机数操作RNGB (96)

第11章CAN模块FLEXCAN (97)

11.1 CAN总线通用知识 (97)

11.1.1 CAN总线协议的历史概况 (97)

11.1.2 CAN硬件系统的典型电路 (97)

IX

11.1.3 CAN总线的有关基本概念 (97)

11.1.4 帧结构 (97)

11.1.5 位时间 (97)

11.2 K60的CAN模块概述与编程结构 (97)

11.2.1 CAN特性 (97)

11.2.2 操作模式 (97)

11.2.3 CAN模块的内存映像及寄存器定义 (97)

11.2.4 CAN报文缓冲区 (97)

11.3 K60的CAN模块报文发送与接收函数设计 (97)

11.3.1 数据帧发送/接收 (97)

11.3.2 远程帧发送与接收 (97)

11.3.3 仲裁处理、匹配处理及报文缓冲区管理 (97)

11.4 K60的CAN模块编程实例 (97)

11.4.1初始化函数设计 (97)

11.4.2 K60的CAN模块构件化设计及测试实例 (98)

第12章USB 2.0 编程 (99)

12.1 USB基本概念及硬件特性 (99)

12.1.1 USB特性 (99)

12.1.2 USB相关基本概念 (99)

12.1.3 USB的物理特性 (99)

12.2 USB的通信协议 (99)

12.2.1 USB基本通信单元:包 (99)

12.2.2 USB通信中的事务处理 (99)

12.2.3 从设备的枚举看USB数据传输 (99)

12.3 K60 的USB模块功能简介 (99)

12.3.1 K60的USB模块功能简介 (99)

12.3.2 K60 的USB模块主要寄存器介绍 (99)

12.4 K60 作为USB从机的开发方法 (99)

12.4.1 PC端USB设备驱动程序的选择及基本原理 (99)

12.4.2 PC作为USB主机的程序设计 (99)

12.4.3 K60作为USB从机的程序设计 (99)

12.5 K60 作为USB主机的开发方法 (99)

12.5.1 K60作为USB主机的基本功能 (99)

12.5.2 USB主机与USB设备通信 (100)

12.6 K60的USB设备电量检测模块USBDCD (100)

12.6.1 USBDCD概述 (100)

12.6.2 USBDCD的内存映射与寄存器定义 (100)

12.6.3 USBDCD构件化设计与测试实例 (100)

12.7 K60的UAB电压调节器 (100)

12.7.1 电压调节器特征 (100)

12.7.2 电压调节器操作模式 (100)

第13章高容量SD存储卡SDHC (101)

13.1 SDHC基本概念及硬件特性 (101)

X

13.1.1 SD概述 (101)

13.1.2 SD相关基本概念 (101)

13.1.3 SD的物理特性 (101)

13.2 SD的通信协议 (101)

13.2.1 SD基本通信单元 (101)

13.2.2 SD通信中的事务处理 (101)

13.2.3 SD数据传输 (101)

13.3 K60的SD模块基本编程方法 (101)

13.3.1 K60的SD模块功能简介 (101)

13.3.2 K60的SD模块存储器映像与寄存器定义 (101)

13.3.3 K60的SD模块构件化设计与测试实例 (101)

第14章TSI (102)

14.1 TSI概述 (102)

14.1.1 TSI特点 (102)

14.1.2 TSI的操作模式 (102)

14.1.3 TSI信号描述 (102)

14.2 TSI编程 (102)

14.2.1 TSI的相关寄存器定义 (102)

14.2.2 TSI的功能描述 (102)

14.2.3 TSI的构件化设计与测试实例 (102)

第15章基于K60的嵌入式以太网 (103)

15.1 嵌入式以太网相关基础知识 (103)

15.1.1 以太网的由来与协议模型 (103)

15.1.2 以太网中主要物理设备 (103)

15.1.3 IEEE 1588概述 (103)

15.1.4 相关名词解释 (103)

15.2 K60以太网概述 (103)

15.2.1 K60以太网特性 (103)

15.2.2 K60以太网外部引脚说明 (103)

15.2.3 K60以太网存储映像与寄存器带那个一 (103)

15.3 链路层编程 (103)

15.3.1 MAC帧格式 (103)

15.3.2 MAC帧的接收与发送 (103)

15.3.3 MAC帧收发测试实例 (103)

15.4 网络层及更高层编程 (103)

15.4.1 Ipv4与Ipv6简介 (103)

15.4.2 ICMP简介 (103)

15.4.3 UDP简介 (103)

15.4.4 TCP简介 (104)

15.4.5 测试实例 (104)

15.5 FIFO (104)

15.5.1 FIFO概述 (104)

15.5.2 FIFO的接收与发送 (104)

XI

15.5.3 FIFO的保护机制 (104)

15.5.4 FIFO测试实例 (104)

15.6 PHY管理接口与以太网接口 (104)

15.6.1 MDIO简介 (104)

15.6.2 以太网接口的发送与接收 (104)

15.7 K60以太网模块的其他功能 (104)

15.7.1 全双工流控制操作 (104)

15.7.2 魔术包检测 (104)

15.7.3 IP加速器控制 (104)

15.7.4 复位与停止控制 (104)

15.7.5 遗留缓冲区描述符 (104)

15.7.6 增强缓冲区描述符 (104)

第16章系统时钟与其他功能模块 (105)

16.1 时钟模块 (105)

16.2 芯片配置模块 (105)

16.2.1 芯片配置模块简介 (105)

16.2.2 芯片配置模块寄存器定义 (105)

16.3 电源管理模块 (105)

16.3.1 电源模式 (105)

16.3.2 低功耗模式 (105)

16.4 端口控制与中断模块 (105)

16.5 复位与启动模块 (105)

16.6 杂项控制模块 (105)

16.7 交叉开关模块 (105)

16.8 看门狗 (106)

第17章操作系统的移植 (106)

XII

第1章概述

作为全书导引,本章主要知识点有:①简要给出嵌入式系统定义、由来及特点;②讨论嵌入式开发中的硬件、软件的可复用与可移植性问题;③提出嵌入式硬件构件的基本思想,阐述基于硬件构件的嵌入式系统开发方法;④给出基于硬件构件的嵌入式系统硬件电路设计方法与嵌入式底层软件构件的编程方法。

1.1 嵌入式系统定义、由来及特点

1.1.1 嵌入式系统的定义

嵌入式系统(Embedded system)有多种多样的定义,但本质是相同的。本书关于嵌入式系统的定义取自美国CMP Books出版的Jack Ganssle和Michael Barr著作《Embedded System Dictionary》1。

嵌入式系统的定义:一种计算机硬件和软件的组合,也许还有机械装置,用于实现一个特定功能。在某些特定情况下,嵌入式系统是一个大系统或产品的一部分。世界上第一个嵌入式系统是1971年Busicom公司用Intel单芯片4004微处理器完成的商用计算器系列。该词典还给出了嵌入式系统的一些示例:微波炉、手持电话、计算器、数字手表、录像机、巡航导弹、GPS接收机、数码相机、传真机、跑步机、遥控器和谷物分析仪等,难以尽数。通过与通用计算机的对比可以更形象地理解嵌入式系统的定义。该词典给出的通用计算机定义是:计算机硬件和软件的组合,用作通用计算平台。PC、MAC和Unix工作站是最流行的现代计算机。

我国《国家标准GB/T 5271信息技术词汇-嵌入式系统与单片机》部分,给出的嵌入式系统定义是:置入应用对象内部起操作控制作用的专用计算机系统。

国内对嵌入式系统定义曾进行过广泛讨论,有许多不同说法。其中嵌入式系统定义的涵盖面问题是主要争论焦点之一。例如,有的学者认为不能把手持电话叫嵌入式系统,而只能把其中起控制作用的部分叫嵌入式系统,而手持电话可以称为嵌入式系统的应用产品。其实,这些并不妨碍人们对嵌入式系统的理解,所以不必对定义感到困惑。有些国内学者特别指出,在理解嵌入式系统定义时,不要把嵌入式系统与嵌入式系统产品相混淆。实际上,从口语或书面语言角度,不区分“嵌入式系统”与“嵌入式系统产品”,只要不妨碍对嵌入式系统的理解就没有关系。

为了更清楚阐述嵌入式系统特点,首先介绍大多数嵌入式系统的核心部件-MCU(微控制器)的基本概念。

1.1.2 嵌入式系统的由来及其与微控制器的关系

1.MCU(微控制器)的基本含义

MCU是单片微型计算机(单片机)的简称,早期的英文名是Single-chip Microcomputer,后来大多数称之为微控制器(Microcontroller)或嵌入式计算机(Embedded computer)。现

1中译本:Jack Ganssle等著,马广云等译,《英汉双解嵌入式系统词典》,北京航空航天大学出版社,2006年。

1

在Microcontroller已经是计算机中一个常用术语,但在1990年代之前,大部分英文词典并没有这个词。我国学者一般使用中文“单片机”一词,而缩写使用“MCU”2。所以本书后面的简写一律以MCU为准。MCU的基本含义是:在一块芯片上集成了中央处理单元(CPU)、存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。图1-1给出了典型的MCU组成框图。

嵌入

稳定可靠等优点,它的出现和迅猛发展,是控制系统领域的一场技术革命。MCU以其较高的性能价格比、灵活性等特点,在现代控制系统中具有十分重要的地位。大部分嵌入式系统以MCU为核心进行设计。MCU从体系结构到指令系统都是按照嵌入式系统的应用特点专门设计的,它能很好地满足应用系统的嵌入、面向测控对象、现场可靠运行等方面的要求。因此以MCU为核心的系统是应用最广的嵌入式系统。在实际应用时,开发者可以根据具体要求与应用场合,选用最佳型号的MCU嵌入到实际应用系统中。

在MCU出现之前,人们必须用模拟电路、数字电路实现大部分计算与控制功能,这样2MCU的英文全称是Microcontroller Unit。

3详见《单片机与嵌入式系统应用》,2004年第1期。

2

使得控制系统体积庞大,易出故障。MCU出现以后,情况发生了变化,系统中的大部分计算与控制功能由MCU的软件实现。其它电子线路成为MCU的外围接口电路,承担着输入、输出与执行动作等功能,而计算、比较与判断等原来必须用电路实现的功能,可以用软件取代,大大地提高了系统的性能与稳定性,这种控制技术称之为嵌入式控制技术。在嵌入式控制技术中,核心是MCU,其它部分依此而展开。

1.1.3 嵌入式系统的特点

要谈嵌入式系统特点,不同学者也许有不同说法。这里从与通用计算机对比的角度谈嵌入式系统的特点。

1.嵌入式系统属于计算机系统,但不单独以通用计算机的面目出现

嵌入式系统的本名叫嵌入式计算机系统(Embedded computer system),它不仅具有通用计算机的主要特点,又具有自身特点。嵌入式系统也必须要有软件才能运行,但其隐含在种类众多的具体产品中。同时,通用计算机种类屈指可数,而嵌入式系统不仅芯片种类繁多,而且由于应用对象大小各异,嵌入式系统作为控制核心,已经融入到各个行业的产品之中。

2.嵌入式系统开发需要专用工具和特殊方法

嵌入式系统不像通用计算机那样有了计算机系统就可以进行应用开发。一般情况下,MCU芯片本身不具备开发功能,必须要有一套与相应芯片配套的开发工具和开发环境。这些工具和环境一般基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为程序的执行机,开发时需要交替结合进行。

3.使用MCU设计嵌入式系统,数据与程序空间采用不同存储介质

在通用计算机系统中,程序存储在硬盘上。实际运行时,通过操作系统将要运行的程序从硬盘调入内存(RAM),运行中的程序、常数、变量均在RAM中。而以MCU为核心的嵌入式系统,其程序被固化到非易失性存储器中4。变量及堆栈使用RAM存储器。

4.开发嵌入式系统涉及软件、硬件及应用领域的知识

嵌入式系统与硬件紧密相关,嵌入式系统的开发需要硬件、软件协同设计、协同测试。同时,由于嵌入式系统专用性很强,通常是用在特定应用领域,如嵌入在手机、冰箱、空调、各种机械设备、智能仪器仪表中起核心控制作用,功能专用。因此,进行嵌入式系统的开发,还需要对领域知识有一定的理解。当然,一个团队协作开发一个嵌入式产品,其中各个成员可以扮演不同角色,但对系统的整体理解与把握并相互协作,有助于一个稳定可靠嵌入式产品的诞生。

4目前,非易失性存储器通常为Flash存储器,特点见有关“Flash存储器在线编程”章节。

3

5.嵌入式系统的其他特点

除了以上特点之外,嵌入式系统还具有其他方面的特点。

在资源方面:嵌入式系统通常专用于某一特定应用领域,其硬件资源不会像通用计算机那样丰富;在可靠性方面:嵌入式系统一般要求更高可靠性和稳定性;在实时性方面:相当多嵌入式系统有实时性要求;在成本方面:嵌入式系统通常极其关注成本;在功耗要求方面:一些嵌入式系统要求低功耗;在生命周期方面:嵌入式系统通常比通用计算机系统生命周期长,升级换代比通用计算机慢。在知识综合方面:嵌入式系统是将先进的计算机技术、半导体技术及电子技术与各个行业的具体应用相结合的产物,是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。它的构成既有硬件又有软件,不仅包括应用软件,也可能包括系统软件。它既有数字电路又有模拟电路。其产品技术含量高,涉及多种学科,不容易开发,因此也不容易形成技术垄断。

这些特点决定了嵌入式系统的开发方法、开发难度、开发手段等,均不同于通用计算机,也不同于常规的电子产品。

1.2 嵌入式系统开发所遇到的若干问题

自从1974年第一款微处理器芯片问世以来,嵌入式系统应用已深入到军事、航空航天、通信、家电等各个领域。近年来,随着微控制器(MCU)内部Flash存储器可靠性提高及擦写方式的变化,内部RAM及Flash存储器容量的增大,以及外部模块内置化程度的提高,设计复杂性、设计规模及开发手段已经发生了根本变化。

在嵌入式系统发展的最初阶段,嵌入式系统开发(包括硬件和软件设计)通常是由一个工程师来承担,软件在整个工作中的比例很小。随着时间的推移,硬件设计变得越来越复杂,软件的份量也急剧增长,嵌入式开发人员也由一人发展为由若干人组成的开发团队。

目前,嵌入式系统开发主要存在以下两大问题:

问题1:硬件设计缺乏重用支持

导致硬件设计缺乏重用支持的主要原因是:目前缺少可供硬件设计工程师们共同遵守的设计规范。设计人员往往是凭借个人工作经验和习惯的积累进行系统硬件电路的设计。在开发完一个嵌入式应用系统再进行下一个应用开发时,硬件电路原理图往往需要从零开始,重新绘制;或者在一个类似的原理图上修改,但往往又很麻烦,容易出错。

问题2:驱动程序可移植性差

驱动程序的开发在嵌入式系统的开发中具有举足轻重的地位。驱动程序的好坏直接关系着整个嵌入式系统的稳定性和可靠性。然而,开发出完备、稳定的驱动程序并非易事。长期以来,开发人员在编写驱动程序时缺少软件工程思想的支撑,软、硬件设计过程孤立,造成与硬件密切相关的底层软件缺乏通用性,可移植性和可复用性较差,开发过程中缺少标准化、文档化的管理,给开发人员之间的交流以及日后系统的维护带来很大的困难。

上述两个问题导致的结果是系统开发周期长,效率低。下面提出的基于硬件构件的软硬件设计思想可在一定程度上解决这些问题。

1.3 嵌入式硬件构件的基本思想与应用方法

什么是嵌入式硬件构件?它与我们常说的硬件模块有什么不同?

众所周知,嵌入式硬件是任何嵌入式产品不可分割的重要组成部分,是整个嵌入式系统

4

的构建基础,嵌入式应用程序和操作系统都运行在特定的硬件体系上。一个以MCU为核心的嵌入式系统通常包括以下硬件模块:电源、写入器接口电路、硬件支撑电路、UART、USB、Flash、A/D、D/A、LCD、键盘、传感器输入电路、通信电路、信号放大电路、驱动电路等模块。其中有些模块集成在MCU内部,有的位于MCU之外。

与硬件模块的概念不同,嵌入式硬件构件是指将一个或多个硬件功能模块、支撑电路及其功能描述封装成一个可重用的硬件实体,并提供一系列规范的输入/输出接口。由定义可知,传统概念中的硬件模块是硬件构件的组成部分,一个硬件构件可能包含一个硬件功能模块,也有可能包含多个。

根据接口之间的生产消费关系,接口可分为提供接口和需求接口两类。根据所拥有接口类型的不同,硬件构件分为核心构件、中间构件和终端构件三种类型。核心构件只有提供接

电电压有5V、3.3V以及1.8V超低电压供电模式。为了能合理分配MCU的I/O资源,在MCU选型时可绘制一张引脚分配表,供以后的设计使用。

2.电源

(1)考虑系统对电源的需求,例如系统需要几种电源,如24V、12V、5V或者3.3V 等,估计各需要多少功率或最大电流(mA)。在计算电源总功率时要考虑一定的余量,可按公式“电源总功率=2×器件总功率”来计算。

(2)考虑芯片与器件对电源波动性的需求。一般允许电源波动幅度在±5%以内。对于A/D转换芯片的参考电压一般要求±1%以内。

5

(3)考虑工作电源是使用电源模块还是使用外接电源。

3.普通I/O口

(1)上拉、下拉电阻:考虑用内部或者外部上/下拉电阻,内部上/下拉阻值一般在700Ω左右,低功耗模式不宜使用。外部上/下拉电阻根据需要可选10KΩ~1MΩ之间。

(2)开关量输入:一定要保证高低电压分明。理想情况下高电平就是电源电压,低电平就是地的电平。如果外部电路无法正确区分高低电平,但高低仍有较大压差,可考虑用A/D采集的方式设计处理。对分压方式中的采样点,要考虑分压电阻的选择,使该点通过采样端口的电流不小于采样最小输入电流,否则无法进行采样。

(3)开关量输出:基本原则是保证输出高电平接近电源电压,低电平接近地电平。I/O 口的吸纳电流一般大于放出电流。对小功率元器件控制最好是采用低电平控制的方式。一般情况下,若负载要求小于10mA,则可用芯片引脚直接控制;电流在10~100mA时可用三极管控制,在100mA~1A时用IC控制;更大的电流则适合用继电器控制,同时建议使用光电隔离芯片。

4.A/D电路与D/A电路

(1)A/D电路:要清楚前端采样基本原理,对电阻型、电流型和电压型传感器采用不同的采集电路。如果采集的信号微弱,还要考虑如何进行信号放大。

(2)D/A电路:考虑MCU的引脚通过何种输出电路控制实际对象。

5.控制电路

对外控制电路要注意设计的冗余与反测,要有合适的信号隔离措施等。在评估设计的布板时,一定要在构件的输入输出端引出检测孔,以方便排查错误时测量。

6. 考虑低功耗

低功耗设计并不仅仅是为了省电,更多的好处在于降低了电源模块及散热系统的成本。由于电流的减小也减少了电磁辐射和热噪声的干扰。随着设备温度的降低,器件寿命则相应延长,要做到低功耗一般需要注意以下几点:

(1)并不是所有的总线信号都要上拉。上下拉电阻也有功耗问题需要考虑。上下拉电阻拉一个单纯的输入信号,电流也就几十微安以下。但拉一个被驱动了的信号,其电流将达毫安级。所以需要考虑上下拉电阻对系统总功耗的影响。

(2)不用的I/O口不要悬空,如果悬空的话,受外界的一点点干扰就可能成为反复振荡的输入信号,而MOS器件的功耗基本取决于门电路的翻转次数。

(3)对一些外围小芯片的功耗也需要考虑。对于内部不太复杂的芯片功耗是很难确定的,它主要由引脚上的电流确定。例如有的芯片引脚在没有负载时,耗电大概不到1毫安,但负载增大以后,可能功耗很大。

7.考虑低成本

(1)正确选择电阻值与电容值。比如一个上拉电阻,可以使用4.5K-5.3K的电阻,你觉得就选个整数5K,事实上市场上不存在5K的阻值,最接近的是4.99K(精度1%),其次是5.1K(精度5%),其成本分别比精度为20%的4.7K高4倍和2倍。20%精度的电阻阻值

6

只有1、1.5、2.2、3.3、4.7、6.8几个类别(含10的整数倍);类似地,20%精度的电容也只有以上几种值,如果选了其它的值就必须使用更高的精度,成本就翻了几倍,却不能带来任何好处。

(2)指示灯的选择。面板上的指示灯选什么颜色呢?有些人按颜色选,比如自己喜欢蓝色就选蓝色。但是其它红绿黄橙等颜色的不管大小(5mm以下)封装如何,都已成熟了几十年,价格一般都在5毛钱以下,而蓝色却是近三四年才发明的,技术成熟度和供货稳定度都较差,价格却要贵四五倍。

(3)不要什么都选最好的。在一个高速系统中并不是每一部分都工作在高速状态,而器件速度每提高一个等级,价格差不多要翻倍,另外还给信号完整性问题带来极大的负面影响。

1.4.2 硬件构件化电路原理图绘制的简明规则

1.硬件构件设计的通用规则

在设计硬件构件的电路原理图时,需遵循以下基本原则:

(1)元器件命名格式:对于核心构件,其元器件直接编号命名,同种类型的元件命名时冠以相同的字母前缀。如电阻名称为R1、R2等,电容名称为C1、C2等,电感名称为L1、L2等,指示灯名称为E1、E2等,二极管名称为D1、D2等,三极管名称为Q1、Q2等,开关名称为K1、K2等。对于中间构件和终端构件,其元器件命名格式采用“构件名-标志字符?”。例如,LCD构件中所有的电阻名称统一为“LCD-R?”,电容名称统一为“LCD-C?”。当构件原理图应用到具体系统中时,可借助原理图编辑软件为其自动编号。

(2)为硬件构件添加详细的文字描述,包括中文名称、英文名称、功能描述、接口描述、注意事项等,以增强原理图的可读性。中英文名称应简洁明了。

(3)将前两步产生的内容封装在一个虚线框内,组成硬件构件的内部实体。

(4)为该硬件构件添加与其它构件交互的输入/输出接口标识。接口标识有两种:接口注释和接口网标。它们的区别是:接口注释标于虚线框以内,是为构件接口所作的解释性文字,目的是帮助设计人员在使用该构件时理解该接口的含义和功能;而接口网标位于虚线框之外,且具有电气特性。为使原理图阅读者便于区分,接口注释采用斜体字。

在进行核心构件、中间构件和终端构件的设计时,除了要遵循上述的通用规则外,还要兼顾各自的接口特性、地位和作用。

2.核心构件设计规则

设计核心构件时,需考虑的问题是:“核心构件能为其他构件提供哪些信号?”。核心构件其实就是某型号MCU的最小系统。核心构件设计的目标是:凡是使用该MCU进行硬件系统设计时,核心构件可以直接“组装”到系统中,无须任何改动。为了实现这一目标,在设计核心构件的实体时必须考虑细致、周全,包括稳定性、扩展性等,封装要完整。核心构件的接口都是为其它构件提供服务的,因此接口标识均为接口网标。在进行接口设计时,需将所有可能使用到的引脚都标注上接口网标(不要考虑:核心构件将会用到怎样的系统中去)。若同一引脚具有不同功能,则接口网标依据第一功能选项命名。遵循上述规则设计核心构件的好处是:当使用核心构件和其它构件一起组装系统时,只要考虑其它构件将要连接到核心构件的哪个接口(不是考虑:核心构件将要连接到其它构件的哪个接口),这也符合设计人员的思维习惯。

7

3.中间构件设计规则

设计中间构件时,需考虑的问题是:“中间构件需要接受哪些信号,以及提供哪些信号?”。中间构件是核心构件与终端构件之间通信的桥梁。在进行中间构件的实体封装时,实体的涉及范围应从构件功能和编程接口两方面考虑。一个中间构件应具有明确的且相对独立的功能,它既要有接受其它构件提供的服务的接口,即需求接口,又要有为其他构件提供服务的接口,即提供接口。描述需求接口采用接口注释,描述提供接口采用接口网标。当中间构件被作为一个“零件”组装到具体系统中时,设计人员只要考虑为构件提供服务的来源,为接口注释添加对应的应用网标即可,其它内容无须关心或改动。

中间构件的接口数目没有核心构件那样丰富。为直观起见,设计中间构件时,将构件的需求接口放置在构件实体的左侧,提供接口放置在右侧。接口网标的命名规则是:构件名称-引脚信号/功能名称。而接口注释名称前的构件名称可有可无,它的命名隐含了相应的引脚功能。

电源控制构件(如图1-2所示)、可变频率产生构件(如图1-3所示)是常用的中间构件。图1-2中的Power-IN和图1-3中的SDI、SCK和SEN均为接口注释,Power-OUT和LTC6903-OUT为接口网标。

4.终端构件设计规则

设计终端构件时,需考虑的问题是:“终端构件需要什么信号才能工作?”。终端构件是嵌入式系统中最常见的构件。终端构件没有提供接口,它仅有与上一级构件交互的需求接口,因而接口标识均为斜体标注的接口注释。LCD(YM1602C)构件(如图1-4所示)、LED构件、指示灯构件以及键盘构件(如图1-5)等都是典型的终端构件。

图1-2 电源控制构件图1-3 可变频率产生构件

8

本文来源:https://www.bwwdw.com/article/fboq.html

Top