MCU

MCU是Microcontroller Unit(微控制器单元)的缩写,它是一种集成了中央处理器(CPU)、存储器(ROM、RAM)、输入/输出端口(I/O)、定时器(Timer)、串行通信接口(UART、SPI、I2C等)和其他外围设备控制器的单个芯片。MCU通常用于嵌入式系统中,用于控制各种电子设备和系统。

由于其集成度高、体积小、功耗低以及成本相对较低等特点,MCU被广泛应用于各种嵌入式系统中,例如智能家居设备、医疗设备、汽车电子系统、工业自动化等。MCU的选择通常基于应用的需求,如处理性能、功耗、外设接口等因素。

导读:MCU目前出现两大阵营,一种是传统的通用型MCU,另一种是SoC型MCU,它们分别在新兴市场发挥各自优势。各大半导体巨头也迅速地进入MCU的异构集成领域,这会对嵌入式产业及产品以及技术发展带来哪些巨大影响?

业界声音

1、针对MCU新出现的趋势,工程师们这样选型
(嵌入式系统联谊会秘书长 何小庆)

现在的MCU主要分为两类:专用的SoC型MCU和通用型MCU。SoC型MCU在市场上的产品很多,这类芯片的出现,从厂家的研发到推广的力度,都比通用型MCU要大和强。像TI公司目前ARM类的MCU就是以SoC的MCU为主,并且针对IoT 领域。

MCU的异构集成会加速哪些技术领域的变革?

恩智浦与Freescale 合并后,在SoC 型MCU的研发力度比以前要大。恩智浦现在两条腿在走路,一方面拥有通用型的MCU(比如54xx系列),另一方面拥有SoC型的MCU。目前的市场现状是:坚持通用型线路的MCU生产厂商为数不多,ST公司的Cortex-M0/M3/M4/ M7系列还在此行列,目前拥有900多种产品;Silicon Labs的Gecko (小壁虎)系列也一直在走通用型路线,最近几年,Silicon Labs专注在无线领域SoC型MCU上,内核还是沿用小壁虎的内核,外围电路集成蓝牙和ZigBee功能,Silicon Labs比较擅长关于IoT的Thread网络协议栈。
MCU的异构集成会加速哪些技术领域的变革?

从开发者的角度来讲,该选择通用型MCU还是SoC型MCU呢?可以从以下4方面来考虑:

①从技术的角度选择MCU:审视所要做的产品所涉及的无线协议的标准是否成熟。如果技术很成熟,又有许多成熟的产品在应用,无论是RF的硬件技术还是IP软件技术,我们选SoC型MCU的风险比较小,因为其把所有功能集成在一起,一旦出现问题,依靠厂家才能帮助解决。反之,如果工程师在做一款新的通信标准的产品,那么还是选择通用型MCU+外围无线通信模块的组合方式为好,这样当通信的硬件或软件不成熟时,我们可以更改外围电路部分,主控模块的软件部分则不用做修改。

②根据产品来选择MCU:当工程师要设计尺寸特别小的可穿戴设备时,比如智能手环或手表,肯定会首选SoC型的MCU,比如选择集成了蓝牙芯片的里边携带一颗ARM Cortex M3或M4的MCU,这样的好处是不仅节省了很多元器件,减小了整个PCB尺寸,而且功耗更低,给产品带来更大的竞争性。如果是工业类产品,对尺寸无特殊要求,那么可以任意选择MCU的类型。

③考虑已有的产品平台:工程师要考虑到,企业是否已有通用的MCU平台,企业往往不止开发一款或一个系列的IoT产品,而是有多条产品线,数十人或几百人的团队在做项目。如果公司已有通用型平台,那么就要选择一款通用型的MCU,像恩智浦的LPC系列。在企业已有大量已经开发好的软件的状态下,就不会特别赞成工程师们选择SoC型MCU。

④根据价格和供货角度选择MCU:通用型的MCU市场竞争激烈,MCU本身的价格会更便宜;做整体方案时,要考虑供应链的问题,在选择某个公司的某一款SoC型 MCU时,替代性比选择通用型MCU加外围通信模块的方案余地要小,若厂家的依赖度更大,当厂家的价格或供货周期出现问题,那么对产品正常的发货和影响会很大。通用MCU可替代性要好些,供货问题也是工程师朋友选择MCU的时候要注意的地方。

2、支持多种无线协议的SoC正在开启全新物联网时代
(Silicon Labs微控制器产品高级营销经理 Øivind Loe)

将各种功能集成到MCU中有许多益处,包括更低的解决方案成本、更小的占板面积和更高的功能集成度,进而可产生更高的性能和更低的功耗。为了满足物联网(IoT)市场的需求,市场上已经出现了一类全新的、高度集成的、支持多协议连接的无线MCU。我们认为,这类多协议无线MCU(也称多协议SoC)正是异构MCU的一种形式。

MCU的异构集成会加速哪些技术领域的变革?

作为将硬件和软件工程工作结合在一起的结果,我们看到能够支持多种无线协议的无线MCU和SoC实现了快速增长。这些多协议器件开启了全新的物联网功能,例如在其他无线网络协议中实现简化的设备配对和蓝牙信标功能。多协议SoC也支持在所部署设备的生命周期中对它们进行无线更新,并且提供了一种简单的方法可以与传统的专有协议协同工作。开发人员力图在简化终端节点设计的同时添加无线连接功能,目前,来自多家供应商的、先进的多协议、多波段SoC正在为他们提供更大的灵活性和更多的开发选择。

Silicon Labs的多协议Wireless Gecko SoC可以为物联网设备提供灵活的无线连接和价格/性能选择。Wireless Gecko产品系列集成了强大的ARM Cortex-M4内核、节能的Gecko技术、高达19.5dBm输出功率的2.4GHz无线收发器,以及先进的硬件加密技术。Wireless Gecko SoC提供用于网状网络的最佳Thread和ZigBee®协议栈、用于专有协议的直观的无线软件接口、用于点对点连接的Bluetooth Smart,以及用于简化无线开发、配置、调试和低功耗设计的Simplicity Studio工具,从而加速无线产品的设计。

3、提供全套软硬件系统解决方案,助力工程师研发项目
(Microchip 8位单片机产品部产品营销经理 Wayne Freeman)

归根结底,客户要寻找的是一个能满足其所有需求的全套系统解决方案。我们并不必费尽心思地将各种各样的功能物理集成到单颗MCU中;我们要做的是构建满足客户需求并能简化和缩短开发过程的解决方案。这些系统解决方案并非专注于独立元件,而是专注于一个融合软硬件的完整解决方案,它能辅助嵌入式设计人员更快地从阶段A进行到阶段B。这是我们从客户那里了解到的他们的期望,以及我们所看到的市场风向。

MCU的异构集成会加速哪些技术领域的变革?

Microchip提供的解决方案有集成多种功能的单颗芯片或可加快应用原型开发的交钥匙方案,从而使设计周期更短,更具成本效益。这种解决方案的重点是,通过降低客户对特定设计领域的专业知识的要求,使不同行业的客户均能受益。客户现在可以将连接或安防等元素看作一个个功能模块,在设计的整个生命周期随意添加而无需重新设计,进而轻松扩展应用的功能。

全套系统解决方案通过利用集成硅晶片、开发硬件和软件工具的生态系统,使得某一应用能在多个不同项目中重用。此外,在基于MCU的解决方案中,更高级别的集成允许工程师通过减少BOM和设计的总尺寸来满足设计的成本目标。例如,可将一款单片机与一台射频收发器集成到一个片上系统中,减小电路板尺寸,降低总功耗及设计复杂度,从而加快智能家居应用的开发过程。

这些技术改变降低了设计风险,同时赋予设计人员更大的灵活性,不仅使设计更快投放市场,而且还降低了系统成本。几乎所有行业(如消费电子、医疗、工业自动化及汽车等)均能从集成中获益。

4、异构集成推动嵌入式与IoT行业的整体进步
(恩智浦微控制器业务线高级工程师 宋岩)

嵌入式应用的众口难调与IoT应用的高速发展,是推动异构集成的原动力。通用CPU的通用性决定了它不能面面俱到,因此,加入专用的协处理器或可编程硬件加速引擎,顺理成章就成为取长补短的首选。比如高端的音频DSP和专用的安全处理单元,对于需要安全连接的智能语音识别和音频设计非常有好处;而图形图像专用硬件的集成,则打开了MCU平台进入高级HMI和视觉应用的大门。

MCU的异构集成会加速哪些技术领域的变革?

近年来,随着IoT与万物互联的爆发,需要无线和高频相关的硬件设计,以及多种传感器的使用。在MCU中集成无线模块、传感器融合算法加速引擎等,满足了IoT节点和穿戴设备的需要。说起异构集成自然要提到异构多核,这类集成留给用户发挥的空间最大。比如M4与M0+的集成,M0+可以做任务分担、负载均衡、硬件加速、组件隔离等多种应用场景,提高了能效和性能。A7+M4的异构,则更多发挥M核在能效和实时性的优势。

恩智浦在异构集成领域拥有全方位的产品和解决方案。比如双核的LPC4300与LPC54100系列通用MCU,集成了ZigBee、BLE和传感器算法加速的多款无线MCU(如QN/JN/KW产品系列),在新发布的i.MX RT上集成了可用于显示和摄像的像素处理加速管道,以及i.MX 7系列的A7+M4等配置。在今后的产品路线图中,恩智浦会在多种异构集成上持续创新,助力行业的整体进步。

编辑视角

目前的市场现状是,通用型MCU和SoC型MCU共同存在。最近一段时间,SoC型MCU的种类会更多一些,厂家也更多一些,这是因为IoT在无线通信领域的发展会随着标准不断地快速更新,比如华为推出的NB-IoT芯片,市场竞争更为激烈,需要更多的专用型芯片。通用型MCU用途比较广泛,当然也会在市场中继续存在。

从嵌入式硬件从业者的角度来讲,MCU的SoC集成化会使硬件工程师的比例加速减少,这也是嵌入式行业发展的大趋势,不可逆转,底层软件的工程师也比5年前要减少。想在未来存活,硬件工程师就要做到更专业。不过也不用为此悲观,比如SoC型的MCU是针对专业产品设计的,它越简单、越好用,面对的市场也会越窄,这样就需要更多对射频器件与MCU的接口设计、天线调试、数据的采集、滤波处理等技术有特别好理解的专业工程师来调试、修改、投产,做好做精。厂家不可能让元件器自动具备这些功能,嵌入式硬件工程师们还会有更广阔的舞台。MCU的发展时时刻刻在变化,一切都以市场化为导向,相信万物互联的时代会带给MCU更多的可能性。

来源: 嵌入式资讯精选

围观 305

任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量、指令系统等。对于指令系统,虽然形式上看似千差万别,但实际上只是符号的不同,其所代表的含义、所要完成的功能和寻址方式基本上是类似的。

因此,对于任何一款MCU,主要应从如下的几个方面来理解和掌握:

MCU的特点:

要了解一款MCU,首先需要知道就是其ROM空间、RAM空间、IO口数量、定时器数量和定时方式、所提供的外围功能模块(Peripheral Circuit)、中断源、工作电压及功耗等等。

* 了解这些MCU Features后,接下来第一步就是将所选MCU的功能与实际项目开发的要求的功能进行对比,明确那些资源是目前所需要的,那些是本项目所用不到的。对于项目中需要用到的而所选MCU不提供的功能,则需要认真理解MCU的相关资料,以求用间接的方法来实现,例如,所开发的项目需要与PC机COM口进行通讯,而所选的MCU不提供UART口,则可以考虑用外部中断的方式来实现;

* 对于项目开发需要用到的资源,则需要对其Manua*进行认真的理解和阅读,而对于不需要的功能模块则可以忽略或浏览即可。对于MCU学习来讲,应用才是关键,也是最主要的目的。

* 明确了MCU的相关功能后,接下来就可以开始编程了。对于初学者或初次使用此款MCU的设计者来说,可能会遇到很多对MCU的功能描述不明确的地方,对于此类问题,可以通过两种方法来解决,一种是编写特别的验证程序来理解资料所述的功能;另一种则可以暂时忽略,程序设计中则按照自己目前的理解来编写,留到调试时去修改和完善。前一种方法适用于时间较宽松的项目和初学者,而后一种方法则适合于具有一定MCU开发经验的人或项目进度较紧迫的情况;

* 指令系统千万不要特别花时间去理解。指令系统只是一种逻辑描述的符号,只有在编程时根据自己的逻辑和程序的逻辑要求来查看相关的指令即可,而且随着编程的进行,对指令系统也会越来越熟练,甚至可以不自觉地记忆下来;

MCU的基本功能:

对于绝大多数MCU,下列功能是最普遍也是最基本的,针对不同的MCU,其描述的方式可能会有区别,但本质上是基本相同的:

* mer(定时器):mer的种类虽然比较多,但可归纳为两大类:一类是固定时间间隔的mer,即其定时的时间是由系统设定的,用户程序不可控制,系统只提供几种固定的时间间隔给用户程序进行选择,如32Hz,16Hz,8Hz等,此类mer在4位MCU中比较常见,因此可以用来实现时钟、计时等相关的功能;另一类则是Programmable Timer(可编程定时器),顾名思义,该类Timer的定时时间是可以由用户的程序来控制的,控制的方式包括:时钟源的选择、分频数(Prescale)选择及预制数的设定等,有的MCU三者都同时具备,而有的则可能是其中的一种或两种。此类Timer应用非常灵活,实际的使用也千变万化,其中最常见的一种应用就是用其实现PWM输出(具体的应用,后续会有特别的介绍)。由于时钟源可以自由选择,因此,此类Timer一般均与Event Counter(事件计数器)合在一起;

* IO口:任何MCU都具有一定数量的IO口,没有IO口,MCU就失去了与外部沟通的渠道。根据IO口的可配置情况,可以分为如下几种类型:

* 纯输入或纯输出口:此类IO口有MCU硬件设计决定,只能是输入或输出,不可用软件来进行实时的设定;

* 直接读写IO口:如MCS-51的IO口就属于此类IO口。当执行读IO口指令时,就是输入口;当执行写IO口指令则自动为输出口;

* 程序编程设定输入输出方向的:此类IO口的输入或输出由程序根据实际的需要来进行设定,应用比较灵活,可以实现一些总线级的应用,如I2C总线,各种LCD、LED Driver的控制总线等;

* 对于IO口的使用,重要的一点必须牢记的是:对于输入口,必须有明确的电平信号,确保不能浮空(可以通过增加上拉或下拉电阻来实现);而对于输出口,其输出的状态电平必须考虑其外部的连接情况,应保证在Standby或静态状态下不存在拉电流或灌电流。

* 外部中断:外部中断也是绝大多数MCU所具有的基本功能,一般用于信号的实时触发,数据采样和状态的检测,中断的方式由上升沿、下降沿触发和电平触发几种。外部中断一般通过输入口来实现,若为IO口,则只有设为输入时其中断功能才会开启;若为输出口,则外部中断功能将自动关闭(ATMEL的ATiny系列存在一些例外,输出口时也能触发中断功能)。外部中断的应用如下:

* 外部触发信号的检测:一种是基于实时性的要求,比如可控硅的控制,突发性信号的检测等;而另一种情况则是省电的需要;

* 信号频率的测量;为了保证信号不被遗漏,外部中断是最理想的选择;

* 数据的解码:在遥控应用领域,为了降低设计的成本,经常需要采用软件的方式来对各种编码数据进行解码,如Manchester和PWM编码的解码;

* 按键的检测和系统的唤醒:对于进入Sleep 状态的MCU,一般需要通过外部中断来进行唤醒,最基本的形式则是按键,通过按键的动作来产生电平的变化;

* 通讯接口:MCU所提供的通讯接口一般包括SPI接口,UART,I2C接口等,其分别描述如下:

* SPI接口:此类接口是绝大多数MCU都提供的一种最基本通讯方式,其数据传输采用同步时钟来控制,信号包括:SDI(串行数据输入)、SDO(串行数据输出)、SCLK(串行时钟)及Ready信号;有些情况下则可能没有Ready信号;此类接口可以工作在Master方式或Slave方式下,通俗说法就是看谁提供时钟信号,提供时钟的一方为Master,相反的一方则为Slaver;

* UART(Universal Asynchronous Receive Transmit):属于最基本的一种异步传输接口,其信号线只有Rx和Tx两条,基本的数据格式为:Start Bit + Data Bit(7-bits/8-bits) + Parity Bit(Even, Odd or None) + Stop Bit(1~2Bit)。一位数据所占的时间称为Baud Rate(波特率)。对于大多数的MCU来讲,数据为的长度、数据校

验方式(奇校验、偶校验或无校验)、停止位(Stop Bit)的长度及Baud Rate是可以通过程序编程进行灵活设定。此类接口最常用的方式就是与PC机的串口进行数据通讯。

* I2C接口:I2C是由Philips开发的一种数据传输协议,同样采用2根信号来实现:SDAT(串行数据输入输出)和SCLK(串行时钟)。其最大的好处是可以在此总线上挂接多个设备,通过地址来进行识别和访问;I2C总线的一个最大的好处就是非常方便

用软件通过IO口来实现,其传输的数据速率完全由SCLK来控制,可快可慢,不像UART接口,有严格的速率要求。

* Watchdog(看门狗定时器):Watchdog也是绝大多数MCU的一种基本配置(一些4位MCU可能没有此功能),大多数的MCU的Watchdog只能允许程序对其进行复位而不能对其关闭(有的是在程序烧入时来设定的,如Microchip PIC系列MCU),而有的MCU则是通过特定的方式来决定其是否打开,如Samsung的KS57系列,只要程序访问了Watchdog寄存器,就自动开启且不能再被关闭。一般而言watchdog的复位时间是可以程序来设定的。Watchdog的最基本的应用是为MCU因为意外的故障而导致死机提供了一种自我恢复的能力。

MCU程序的编写:

MCU的程序的编写与PC下的程序的编写存在很大的区别,虽然现在基于C的MCU开发工具越来越流行,但对于一个高效的程序代码和喜欢使用汇编的设计者来讲,汇编语言仍然是最简洁、最有效的编程语言。对于MCU的程序编写,其基本的框架可以说是大体一致的,一般分为初始化部分(这是MCU程序设计与PC最大的不同),主程序循环体和中断处理程序三大部分(见图1 a 和b),其分别说明如下:

* 初始化:对于所有的MCU程序的设计来讲,出世化是最基本也是最重要的一步,一般包括如

* 屏蔽所有中断并初始化堆栈指针:初始化部分一般不希望有任何中断发生;

* 清除系统的RAM区域和显示Memory:虽然有时可能没有完全的必要,但从可靠性及一致性的角度出发,特别是对于防止意外的错误,还是建议养成良好的编程习惯;

* IO口的初始化:根据项目的应用的要求,设定相关IO口的输入输出方式,对与输入口,需要设定其上拉或下拉电阻;对于输出口,则必须设定其出世的电平输出,以防出现不必要的错误;

* 中断的设置:对于所有项目需要用到的中断源,应该给予开启并设定中断的触发条件,而对于不使用的多余的中断,则必须给予关闭;

* 其他功能模块的初始化:对于所有需要用到的MCU的外围功能模块,必须按项目的应用的要求进行相应的设置,如UART的通讯,需要设定Baud Rate,数据长度,校验方式和Stop Bit的长度等,而对于Programmer Timer,则必须设置其时钟源,分频数及Reload Data 等;

* 参数的出世化:完成了MCU的硬件和资源的出世化后,接下来就是对程序中使用到的一些变量和数据的初始化设置,这一部分的初始化需要根据具体的项目及程序的总体安排来设计。对于一些用EEPROM来保存项目预制数的应用来讲,建议在初始化时将相关的数据拷贝到MCU的RAM,以提高程序对数据的访问速度,同时降低系统的功耗(原则上,访问外部EEPROM都会增加电源的功耗)。

* 主程序循环体:大多数MCU是属于长时间不间断运行的,因此其主程序体基本上都是以循环的方式来设计,对于存在多种工作模式的应用来讲,则可能存在多个循环体,相互之间通过状态标志来进行转换。对于主程序体,一般情况下主要安排如下的模块:

* 计算程序:计算程序一般比较耗时,因此坚决反对放在任何中断中处理,特别是乘除法运算;

* 实时性要求不高或没有实时性要求的处理程序;

* 显示传输程序:主要针对存在外部LED、LCD Driver 的应用;

* 中断处理程序:中断程序主要用于处理实时性要求较高的任务和事件,如,外部突发性信号的检测,按键的检测和处理,定时计数,LED显示扫描等。一般情况下,中断程序应尽可能保证代码的简洁和短小,对于不需要实时去处理的功能,可以在中断中设置触发的标志,然后由主程序来执行具体的事务――这一点非常重要,特别是对于低功耗、低速的MCU来讲,必须保证所有中断的及时响应。

对于不同任务体的安排,不同的MCU其处理的方法也有所不同。例如,对于低速、低功耗的MCU(Fosc=32768Hz)应用,考虑到此类项目均为手持式设备和采用普通的LCD显示,对按键的反应和显示的反应要求实时性较高,应此一般采用定时中断的方式来处理按键的动作和数据的显示;而对于高速的MCU,如Fosc》1MHz的应用,由于此时MCU有足够的时间来执行主程序循环体,因此可以只在相应的中断中设置各种触发标志,并将所有的任务放在主程序体中来执行;

在MCU的程序设计中,还需要特别注意的一点就是:要防止在中断和主程序体中同时访问或设置同一个变量或数据的情况。有效的预防方法是,将此类数据的处理安排在一个模块中,通过判断触发标志来决定是否执行该数据的相关操作;而在其他的程序体中(主要是中断),对需要进行该数据的处理的地方只设置触发的标志。――这可以保证数据的执行是可预知和唯一的。

总之,对于MCU开发来讲,必须记住一点:“条条大路通罗马”,没有做不到的事,关键是看方法是否正确!再就是多做多动手和多想。

来源: 电子元件技术

围观 539

我们在从事MCU应用开发过程中,难免会碰到MCU芯片异常的问题。比如异常复位,表现为复位脚有电平跳变或者干脆处于复位电平;在做代码调试跟踪时,发现代码往往进不到用户main()程序;或者时不时感觉芯片死掉了,功能完全不可控等。

针对类似严重异常情况的原因我在这里大致总结下,与大家分享。

1、时钟问题。一般表现在时钟配置异常,比方配置超出芯片主频工作范围。【对于STM32系列MCU,如果使用STM32CUBEMX图形化工具做配置,基本可以回避这个问题】

2、电源问题。比方电源质量差,纹波过大,尤其开关电源供电时;或者供电芯片质量差,输出不稳定;或者系统供电能力不足而引起电源波动等。

3、BOOT脚配置问题。对于ARM芯片往往都有些BOOT配置脚。经常遇到有人因为BOOT脚的焊接或接触不良导致各类奇怪问题。这种情况多表现在芯片功能时好时坏,或者部分芯片正常,部分芯片异常。

4、启动文件问题。经常因为选错了启动文件,导致程序无法正常运行,或者说调试时好好的,脱机运行就出鬼。这点在做不同系列芯片间移植时最容易碰到。

5、中断请求位清除问题。由于中断请求位没有及时清除导致中断没完没了的重复进入,感觉系统死机一般。

6、堆或栈的越界溢出。这个也会导致芯片无法正常工作,调试时往往可能会有硬错提示。

7、VCAP脚问题。有些MCU芯片有VCAP脚,该类脚往往需要接上适当的电容,如果无视了它的话,也可能导致整个芯片的功能异常。

上面这几个原因比较容易导致MCU出现功能严重异常,也不太容易简单地通过查看MCU技术手册直接获得答案,分享出来算作一些提醒。

来源:网络

围观 407

文.凌立民

保护软体资产不被滥用

在过去的MCU应用产品开发过程中,最令独立软体开发商或系统整合商头痛的,就是如何确保MCU内部软体资产能受到严谨保护,同时兼顾合作厂商在软体开发上一定的弹性。正如图1中的例子,A​​RMv8-M架构可以把有价值的通讯协定放到TrustZone区域内,基于通讯协定的上层应用能够以不同记忆体位置来放置,方便不同的开发团队进行协同开发,依各自专长领域进行软体制作。此类应用包含短距离通讯协定、音讯编码器、生物辨识核心演算法⋯等。

图1 TrustZone for ARMv8-M可保护有价值的中介软体
图1 TrustZone for ARMv8-M可保护有价值的中介软体

确保每个MCU应用产品都受到信任与保护

在可预期的未来联网环境世界里,连上网路的装置只会愈来愈多,这些装置都会是一个个潜在的破坏入侵点,虽说联网装置不一定需要储存敏感资料而配备安全晶片等级的MCU ,但必须保证功能正常。

有了TrustZone区域,可以把单颗MCU的ID、加解密的Key、软体升级都保护在安全区内,而每一次开机时亦都可进行自我检查,确保装置本身内部运行软体没有遭到窜改,即从开机根源点就是一个可信任(Trusted)的进入点,如此才能称得上是功能正常保证。图2的说明给了示意范例,此类应用包含跟媒体版权有关,如DRM(Digital Right Management),支付及联网环境中的节点间之识别与通讯等应用。

图2 TrustZone for ARMv8-M提供Root of Trust
图2 TrustZone for ARMv8-M提供Root of Trust

安全地使用MCU控制周边装置

在未来的智慧生活环境里,可预见的是愈来愈多基于MCU开发的应用产品都有可能透过远端指令进行操作,而这些负责控制的MCU要担负的工作除了驱动真实环境中连接的硬体单元,更要确保指挥驱动的软体正确地运行,所以驱动程式跟周边单元互动必须有安全保证(如图3)。

图3 TrustZone for ARMv8-M确保安全的控制周边
图3 TrustZone for ARMv8-M确保安全的控制周边

发生在去年的第一银行ATM盗领案便是一例,由于大部分的银行ATM网路连线作业都被视为安全的内网环境,只要是内网环境的程式发出命令,机器就必须执行动作的机制已充分凸显安全不足,针对一银的例子,如能增加一道针对周边驱动执行前判别是否命令为恶意程式发出,则可阻止ATM机器远端受控吐钞,甚至可以主动发现问题而揪出遭骇客植入系统的恶意程式,除了能做到资讯安全(Security)更实现了功能安全(Safety)。

保障核心软体的完整性

近年来由于MCU的市场由传统的8、16往32位元移动,愈来愈强大的运算能力也配备了丰富的周边资源,如更高容量的Flash、RAM记忆体,使得小型MCU应用跑作业系统(Operating System, OS)的机会变多了,这些核心软体不管是OS或Firmware都可能有被恶意程式攻击的风险,再者由于在嵌入式系统中,对于软体本身并无统一的纯软体安全检验标准,大多为产业界标准,如车界的ISO 26262,工业界的IEC 61508,其余如医疗用品之FDA,未来可能会发展的智慧型电表⋯等,这些标准都使软体开发人员必须花费相当的心力。

有了TrustZone for ARMv8-M后,虽说无法马上依靠该功能做到符合所有业界规范标准,但其内建硬体TrustZone的做法可以相当程度地减轻软体开发人员的心力,让核心软体的建构与维护更加有效率,因为ARMv8-M的TrustZone架构可让通过认证的软体受到安全的保护,因其对不需要认证的部分或委外开发的部分提供了缓冲区(Sandboxing),这也方便软体人员针对不同应用的技术支持,例如:可授权予上层应用软体开发商对产品的技术服务,如图4。

图4 TrustZone for ARMv8-M具有Sandboxing Certified Software机制
图4 TrustZone for ARMv8-M具有Sandboxing Certified Software机制

适用并提升MCU多核心系统应用

在未来可见的联网世界里,将会有许多不同规格的晶片需求,对于可能会有的双核心或是多核心MCU架构,有了TrustZone的功能,则能轻易分隔在不同核心上运行的软体权限,轻松地让不同CPU做到负责不同的周边控制,如图5的示意说明,这样的应用譬如MCU搭配一些特殊的类比感测元件、短距离的无线通讯射频前端或触控感测元件等。

图5 TrustZone for ARMv8-M—Leveraging Helper Processor
图5 TrustZone for ARMv8-M—Leveraging Helper Processor

两颗MCU整合成一颗

承前段所述,既然有可能支援多核心,那是否有可能把两颗CPU才能做到的事合并成一颗呢?笔者认为可行性颇高,以未来跟3G/4G/5G有关的物联网通讯的识别与收费问题举例说明,我们知道传统的手机收费方式都是透过SIM卡(UICC Card)识别门号租用对象,人手一支的手机可由人更换SIM卡,但装置本身如果是配置在特定的区域,又或为数量众多或不允许打开机构之设计,那该如何处里更换网路服务商?

所以GSMA制定了embedded SIM或较为广义的eUICC(SIM或MIM: Machine Identification Module)规范,让远端更新eUICC的内容可实现,方便安全的空中管理(Over-the-air)所服务的手机或机器,且不需要人员亲自到门市或派人员到现场进行任何卡片更换,图6举一个租用电信网路服务的ePOS机器为例。不过这个模式的运用是否能达成更有成本优势(Cost Down)或方便产品设计则仍需视实际状况来决定。

图6 采用ARMv8-M架构,内建TrustZone安全技术–eUICC应用范例
图6 采用ARMv8-M架构,内建TrustZone安全技术–eUICC应用范例

以上述ePOS为例,若以TrustZone的Secure区域拿来当模拟eUICC卡用途,non-Secure区域作为产品本身周边控制的主控MCU,则仍需考量是否需要整合后的单颗晶片要过eUICC所需要的认证、成本上是否较现已非常成熟的SIM卡产品有优势则仍待观察,但如物联网是未来趋势,采用ARMv8-M架构,内建ARM的TrustZone安全技术将可提供一个这样的使用模式,毕竟ARM只是IP供应商,MCU供应商还是可以依市场需求发展出适用的产品。

内建安全性有利创新应用

综观前述的多项可能应用场景,可以看出采用ARMv8-M架构,内建ARM的TrustZone安全技术的通用型MCU(General Purpose MCU),可以从零组件的角色通过方便的多方合作开发转变成方案提供者角色(Solutions Provider);再者,其硬体切换Secure和non-Secure的做法,也能提供联网装置在软体开发上达成资料和软体资产安全性的防护,适合未来MCU各类应用的需求,相信此设计将带领MCU应用设计迈向一个便捷、创新、可实现系统安全的未来。

(作者为新唐科技微控制器应用事业群技术经理)

新通讯2017年7月号197期《技术前瞻》

围观 530

微控制单元(Microcontroller Unit;MCU) ,又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。诸如手机、PC外围、遥控器,至汽车电子、工业上的步进马达、机器手臂的控制等,都可见到MCU的身影。

技术原理

MCU同温度传感器之间通过I2C总线连接。I2C总线占用2条MCU输入输出口线,二者之间的通信完全依靠软件完成。温度传感器的地址可以通过2根地址引脚设定,这使得一根I2C总线上可以同时连接8个这样的传感器。本方案中,传感器的7位地址已经设定为1001000。MCU需要访问传感器时,先要发出一个8位的寄存器指针,然后再发出传感器的地址(7位地址,低位是WR信号)。传感器中有3个寄存器可供MCU使用,8位寄存器指针就是用来确定MCU究竟要使用哪个寄存器的。本方案中,主程序会不断更新传感器的配置寄存器,这会使传感器工作于单步模式,每更新一次就会测量一次温度。

要读取传感器测量值寄存器的内容,MCU必须首先发送传感器地址和寄存器指针。MCU发出一个启动信号,接着发出传感器地址,然后将RD/WR管脚设为高电平,就可以读取测量值寄存器。

为了读出传感器测量值寄存器中的16位数据,MCU必须与传感器进行两次8位数据通信。当传感器上电工作时,默认的测量精度为9位,分辨力为0.5 C/LSB(量程为-128.5 C至128.5 C)。本方案采用默认测量精度,根据需要,可以重新设置传感器,将测量精度提高到12位。如果只要求作一般的温度指示,比如自动调温器,那么分辨力达到1 C就可以满足要求了。这种情况下,传感器的低8位数据可以忽略,只用高8位数据就可以达到分辨力1 C的设计要求。由于读取寄存器时是按先高8位后低8位的顺序,所以低8位数据既可以读,也可以不读。只读取高8位数据的好处有二,第一是可以缩短MCU和传感器的工作时间,降低功耗;第二是不影响分辨力指标。

MCU读取传感器的测量值后,接下来就要进行换算并将结果显示在LCD上。整个处理过程包括:判断显示结果的正负号,进行二进制码到BCD码的转换,将数据传到LCD的相关寄存器中。

数据处理完毕并显示结果之后,MCU会向传感器发出一个单步指令。单步指令会让传感器启动一次温度测试,然后自动进入等待模式,直到模数转换完毕。MCU发出单步指令后,就进入LPM3模式,这时MCU系统时钟继续工作,产生定时中断唤醒CPU。定时的长短可以通过编程调整,以便适应具体应用的需要。

主要区别

在20世纪最值得人们称道的成就中,就有集成电路和电子计算机的发展。20世纪70年代出现的微型计算机,在科学技术界引起了影响深远的变革。在70年代中期,微型计算机家族中又分裂出一个小小的派系--单片机。随着4位单片机出现之后,又推出了8位的单片机。MCS48系列,特别是MCS51系列单片机的出现,确立了单片机作为微控制器(MCU)的地位,引起了微型计算机领域新的变革。在当今世界上,微处理器(MPU)和微控制器(MCU)形成了各具特色的两个分支。它们互相区别,但又互相融合、互相促进。与微处理器(MPU)以运算性能和速度为特征的飞速发展不同,微控制器(MCU)则是以其控制功能的不断完善为发展标志的。

CPU(Central Processing Unit,中央处理器)发展出来三个分枝,一个是DSP(Digital Signal Processing/Processor,数字信号处理),另外两个是MCU(Micro Control Unit,微控制器单元)和MPU(Micro Processor Unit,微处理器单元)。

MCU集成了片上外围器件;MPU不带外围器件(例如存储器阵列),是高度集成的通用结构的处理器,是去除了集成外设的MCU;DSP运算能力强,擅长很多的重复数据运算,而MCU则适合不同信息源的多种数据的处理诊断和运算,侧重于控制,速度并不如DSP。MCU区别于DSP的最大特点在于它的通用性,反应在指令集和寻址模式中。DSP与MCU的结合是DSC,它终将取代这两种芯片。

1.对密集的乘法运算的支持

GPP不是设计来做密集乘法任务的,即使是一些现代的GPP,也要求多个指令周期来做一次乘法。而DSP处理器使用专门的硬件来实现单周期乘 法。DSP处理器还增加了累加器寄存器来处理多个乘积的和。累加器寄存器通常比其他寄存器宽,增加称为结果bits的额外bits来避免溢出。同时,为了 充分体现专门的乘法-累加硬件的好处,几乎所有的DSP的指令集都包含有显式的MAC指令。

2. 存储器结构

传统上,GPP使用冯诺依曼存储器结构。这种结构中,只有一个存储器空间通过一组总线(一个地址总线和一个数据总线)连接到处理器核。通常,做一次乘法会发生4次存储器访问,用掉至少四个指令周期。

大多数DSP采用了哈佛结构,将存储器空间划分成两个,分别存储程序和数据。它们有两组总线连接到处理器核,允许同时对它们进行访问。这种安排将处理器存储器的带宽加倍,更重要的是同时为处理器核提供数据与指令。在这种布局下,DSP得以实现单周期的MAC指令。

典型的高性能GPP实际上已包含两个片内高速缓存,一个是数据,一个是指令,它们直接连接到处理器核,以加快运行时的访问速度。从物理上说,这种片内的双存储器和总线的结构几乎与哈佛结构的一样了。然而从逻辑上说,两者还是有重要的区别。

GPP使用控制逻辑来决定哪些数据和指令字存储在片内的高速缓存里,其程序员并不加以指定(也可能根本不知道)。与此相反,DSP使用多个片内存储器和多组总线来保证每个指令周期内存储器的多次访问。在使用DSP时,程序员要明确地控制哪些数据和指令要存储在片内存储器中。程序员在写程序时,必须保证处理器能够有效地使用其双总线。

此外,DSP处理器几乎都不具备数据高速缓存。这是因为DSP的典型数据是数据流。也就是说,DSP处理器对每个数据样本做计算后,就丢弃了,几乎不再重复使用。

3.零开销循环

如果了解到DSP算法的一个共同的特点,即大多数的处理时间是花在执行较小的循环上,也就容易理解,为什么大多数的DSP都有专门的硬件,用于 零开销循环。所谓零开销循环是指处理器在执行循环时,不用花时间去检查循环计数器的值、条件转移到循环的顶部、将循环计数器减1。

与此相反,GPP的循环使用软件来实现。某些高性能的GPP使用转移预报硬件,几乎达到与硬件支持的零开销循环同样的效果。

4.定点计算

大多数DSP使用定点计算,而不是使用浮点。虽然DSP的应用必须十分注意数字的精确,用浮点来做应该容易的多,但是对DSP来说,廉价也是非常重要的。定点机器比起相应的浮点机器来要便宜(而且更快)。为了不使用浮点机器而又保证数字的准确,DSP处理器在指令集和硬件方面都支持饱和计算、舍入和移位。

5.专门的寻址方式

DSP处理器往往都支持专门的寻址模式,它们对通常的信号处理操作和算法是很有用的。例如,模块(循环)寻址(对实现数字滤波器延时线很有用)、位倒序寻址(对FFT很有用)。这些非常专门的寻址模式在GPP中是不常使用的,只有用软件来实现。

6.执行时间的预测

大多数的DSP应用(如蜂窝电话和调制解调器)都是严格的实时应用,所有的处理必须在指定的时间内完成。这就要求程序员准确地确定每个样本需要多少处理时间,或者,至少要知道,在最坏的情况下,需要多少时间。如果打算用低成本的GPP去完成实时信号处理的任务,执行时间的预测大概不会成为什么问题,应为低成本GPP具有相对直接的结构,比较容易预测执行时间。然而,大多数实时DSP应用所要求的处理能力是低成本GPP所不能提供的。 这时候,DSP对高性能GPP的优势在于,即便是使用了高速缓存的DSP,哪些指令会放进去也是由程序员(而不是处理器)来决定的,因此很容易判断指令是从高速缓存还是从存储器中读取。DSP一般不使用动态特性,如转移预测和推理执行等。因此,由一段给定的代码来预测所要求的执行时间是完全直截了当的。从而使程序员得以确定芯片的性能限制。

7.定点DSP指令集

定点DSP指令集是按两个目标来设计的:使处理器能够在每个指令周期内完成多个操作,从而提高每个指令周期的计算效率。将存贮DSP程序的存储器空间减到最小(由于存储器对整个系统的成本影响甚大,该问题在对成本敏感的DSP应用中尤为重要)。为了实现这些目标,DSP处理器的指令集通常都允许程序员在一个指令内说明若干个并行的操作。例如,在一条指令包含了MAC操作,即同时的一个或两个数据移动。在典型的例子里,一条指令就包含了计算FIR滤波器的一节所需要的所有操作。这种高效率付出的代价是,其指令集既不直观,也不容易使用(与GPP的指令集相比)。 GPP的程序通常并不在意处理器的指令集是否容易使用,因为他们一般使用象C或C++等高级语言。而对于DSP的程序员来说,不幸的是主要的DSP应用程序都是用汇编语言写的(至少部分是汇编语言优化的)。这里有两个理由:首先,大多数广泛使用的高级语言,例如C,并不适合于描述典型的DSP算法。其次, DSP结构的复杂性,如多存储器空间、多总线、不规则的指令集、高度专门化的硬件等,使得难于为其编写高效率的编译器。 即便用编译器将C源代码编译成为DSP的汇编代码,优化的任务仍然很重。典型的DSP应用都具有大量计算的要求,并有严格的开销限制,使得程序的优化必不可少(至少是对程序的最关键部分)。因此,考虑选用DSP的一个关键因素是,是否存在足够的能够较好地适应DSP处理器指令集的程序员。

8.开发工具的要求

因为DSP应用要求高度优化的代码,大多数DSP厂商都提供一些开发工具,以帮助程序员完成其优化工作。例如,大多数厂商都提供处理器的仿真工具,以准确地仿真每个指令周期内处理器的活动。无论对于确保实时操作还是代码的优化,这些都是很有用的工具。 GPP厂商通常并不提供这样的工具,主要是因为GPP程序员通常并不需要详细到这一层的信息。GPP缺乏精确到指令周期的仿真工具,是DSP应用开发者所面临的的大问题:由于几乎不可能预测高性能GPP对于给定任务所需要的周期数,从而无法说明如何去改善代码的性能。

发展历史

单片机出现的历史并不长,但发展十分迅猛。 它的产生与发展和微处理器的产生与发展大体同步,自1971年美国Intel公司首先推出4位微处理器以来,它的发展到目前为止大致可分为5个阶段。下面以Intel公司的单片机发展为代表加以介绍。

1971-1976

单片机发展的初级阶段。 1971年11月Intel公司首先设计出集成度为2000只晶体管/片的4位微处理器Intel 4004,并配有RAM、 ROM和移位寄存器, 构成了第一台MCS—4微处理器, 而后又推出了8位微处理器Intel 8008, 以及其它各公司相继推出的8位微处理器。

1976-1980

低性能单片机阶段。 以1976年Intel公司推出的MCS—48系列为代表, 采用将8位CPU、 8位并行I/O接口、8位定时/计数器、RAM和ROM等集成于一块半导体芯片上的单片结构, 虽然其寻址范围有限(不大于4 KB), 也没有串行I/O, RAM、 ROM容量小, 中断系统也较简单, 但功能可满足一般工业控制和智能化仪器、仪表等的需要。

1980-1983

高性能单片机阶段。 这一阶段推出的高性能8位单片机普遍带有串行口,有多级中断处理系统, 多个16位定时器/计数器。片内RAM、 ROM的容量加大,且寻址范围可达64 KB,个别片内还带有A/D转换接口。

1983-80年代末

16位单片机阶段。 1983年Intel公司又推出了高性能的16位单片机MCS-96系列,由于其采用了最新的制造工艺, 使芯片集成度高达12万只晶体管/片。

1990年代

单片机在集成度、功能、速度、可靠性、应用领域等全方位向更高水平发展。

按照单片机的特点,单片机的应用分为单机应用与多机应用。在一个应用系统中,只使用一片单片机称为单机应用。单片机的单机应用的范围包括:

(1) 测控系统。 用单片机可以构成各种不太复杂的工业控制系统、自适应控制系统、数据采集系统等,达到测量与控制的目的。
(2) 智能仪表。 用单片机改造原有的测量、控制仪表,促进仪表向数字化、智能化、多功能化、综合化、柔性化方向发展。
(3) 机电一体化产品。单片机与传统的机械产品相结合,使传统机械产品结构简化, 控制智能化。
(4) 智能接口。 在计算机控制系统, 特别是在较大型的工业测、控系统中,用单片机进行接口的控制与管理, 加之单片机与主机的并行工作, 大大提高了系统的运行速度。
(5) 智能民用产品。 如在家用电器、玩具、游戏机、声像设备、电子秤、收银机、办公设备、厨房设备等许多产品中,单片机控制器的引入, 不仅使产品的功能大大增强, 性能得到提高, 而且获得了良好的使用效果。

单片机的多机应用系统可分为功能集散系统、并行多机处理及局部网络系统。

(1) 功能集散系统。 多功能集散系统是为了满足工程系统多种外围功能的要求而设置的多机系统。
(2) 并行多机控制系统。 并行多机控制系统主要解决工程应用系统的快速性问题,以便构成大型实时工程应用系统。
(3) 局部网络系统。

单片机按应用范围又可分成通用型和专用型。专用型是针对某种特定产品而设计的,例如用于体温计的单片机、用于洗衣机的单片机等等。在通用型的单片机中,又可按字长分为4位、8位、16/32位,虽然计算机的微处理器现在几乎是32/64位的天下,8位、16位的微处理器已趋于萎缩,但单片机情况却不同,8位单片机成本低,价格廉,便于开发,其性能能满足大部分的需要,只有在航天、汽车、机器人等高技术领域,需要高速处理大量数据时,才需要选用16/32位,而在一般工业领域,8位通用型单片机,仍然是目前应用最广的单片机。

到目前为止,中国的单片机应用和嵌入式系统开发走过了二十余年的历程,随着嵌入式系统逐渐深入社会生活各个方面,单片机课程的教学也有从传统的8位处理器平台向32位高级RISC处理器平台转变的趋势,但8位机依然难以被取代。国民经济建设、军事及家用电器等各个领域,尤其是手机、汽车自动导航设备、PDA、智能玩具、智能家电、医疗设备等行业都是国内急需单片机人才的行业。行业高端目前有超过10余万名从事单片机开发应用的工程师,但面对嵌入式系统工业化的潮流和我国大力推动建设“嵌入式软件工厂”的机遇,我国的嵌入式产品要溶入国际市场,形成产业,则必将急需大批单片机应用型人才,这为高职类学生从事这类高技术行业提供了巨大机会。

来源:嵌入式资讯精选

围观 360

单片机执行指令过程详解

单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。

取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。

分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。

计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。

一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。

下面我们将举个实例来说明指令的执行过程:

单片机如何执行代码命令,单片MCU内存如何分配?

开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。

例如执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器,0000H单元中已存放74H,0001H单元中已存放E0H。当单片机开始运行时,首先是进入取指阶段,其次序是:

 1 程序计数器的内容(这时是0000H)送到地址寄存器;

 2 程序计数器的内容自动加1(变为0001H);

 3 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000H的单元被选中;

 4 CPU使读控制线有效;

 5 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。

至此,取指阶段完成,进入译码分析和执行指令阶段。

由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H单元取出。

单片机执行指令过程详解

因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。单片机中PC=0002H,PC在CPU每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一条地执行指令,完成所有规定的功能。

对于一款mcu来说,在性能描述的时候都会告诉sram,flash的容量大小,对于初学者来说,也不会去考虑和理会这些东西,拿到东西就只用。其实不然,这些量都是十分重要的,仔细想想,代码为什么可以运行,代码量是多少,定义的int、short等等类型的变量究竟是怎么分配和存储的,这些问题都和内寸有关系。

首先单片机的内存可以大小分为ram和rom,这里就不再解释ram和rom的区别了,我们可以将其等效为flash和sram,其中根据flash和sram的定义可得,flash里面的数据掉电可保存,sram中的并不可以,但是sram的执行速度要快于flash,可以将单片机的程序分为code(代码存储区)、RO-data(只读数据存储区)、RW-data(读写数据存储区)和ZI-data(零初始化数据区)。在MDK编译器下可以观察到在代码中这4个量的值,如下图1所示:

图1:

单片机执行指令过程详解

其中code和RO-data存储在flash中,所以两者之和为单片机中flash需要分配给它们的空间大小(并且等于代码所生成的.bin文件大小),另外RW-data和ZI-data存储在sram中,同样两者之和为单片机中sram需要分配给它们的空间大小。

另外,我们必然会想到栈区(stack)、堆区(heap)、全局区(静态区)(staTIc)、文字常量区和程序代码区和上面所介绍的code、RO-data等的关系。

单片机执行指令过程详解

1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 这些值是可读写的,那么stack应该被包含在RW-data(读写数据存储区),也就是单片机的sram中。

2、堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。可以理解,这些也是被包含在单片机的sram中的。

3、全局区(静态区)(staTIc):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。这些数据也是可读可写的,和stack、heap一样,被包含在sram中。

4、文字常量区:常量字符串就是放在这里的。这些数据是只读的,分配在RO-data(只读数据存储区),则被包含在flash中。

5、程序代码区:存放函数体的二进制代码,可以想象也是被包含在flash,因为对于MCU来说,当其重新上电,代码还会继续运行,并不会消失,所以存储在flash中。

综上所述,MCU的内存分配基本如此,其中并没有提到存储空间所对应的flash和sram地址,这些后面还会讲到!如有错误,请指正。

来源:电子发烧友

围观 354

任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量、指令系统等。对于指令系统,虽然形式上看似千差万别,但实际上只是符号的不同,其所代表的含义、所要完成的功能和寻址方式基本上是类似的。
因此,对于任何一款MCU,主要应从如下的几个方面来理解和掌握:

MCU的特点

要了解一款MCU,首先需要知道就是其ROM空间、RAM空间、IO口数量、定时器数量和定时方式、所提供的外围功能模块、中断源、工作电压及功耗等等。

了解这些MCU Features后,接下来第一步就是将所选MCU的功能与实际项目开发的要求的功能进行对比,明确哪些资源是目前所需要的,哪些是本项目所用不到的。

对于项目中需要用到的而所选MCU不能提供的功能,则需要认真理解MCU的相关资料,以求用间接的方法来实现。例如,所开发的项目需要五六个COM口进行通讯,而所选的MCU只提供4个UART口,则可以考虑用外部扩展的方式来实现。

对于项目开发需要用到的资源,则需要对其进行认真的理解和阅读,而对于不需要的功能模块则可以忽略或浏览即可。

对于MCU学习来讲,应用才是关键,也是最主要的目的。

MCU的功能

对于绝大多数MCU,下列功能是最普遍也是最基本的,针对不同的MCU,其描述的方式可能会有区别,但本质上是基本相同的:

● Timer(定时器):Timer的种类虽然比较多,但可归纳为两大类:

一类是固定时间间隔的Timer,即其定时的时间是由系统设定的,用户程序不可控制,系统只提供几种固定的时间间隔给用户程序进行选择,如32Hz,16Hz等,此类可以用来实现时钟、计时等相关的功能;

另一类则是可编程定时器,顾名思义,该类Timer的定时时间是可以由用户的程序来控制的,控制的方式包括:时钟源的选择、分频数(Prescale)选择及预制数的设定等,有的MCU三者都同时具备,而有的则可能是其中的一种或两种。
此类Timer应用非常灵活,实际的使用也千变万化,其中最常见的一种应用就是用其实现PWM输出。由于时钟源可以自由选择,因此,此类Timer一般均与Event Counter(事件计数器)合在一起。

● IO口:任何MCU都具有一定数量的IO口,没有IO口,MCU就失去了与外部沟通的渠道。

根据IO口的可配置情况,可以分为如下几种类型:

纯输入或纯输出口:此类IO口有MCU硬件设计决定,只能是输入或输出,不可用软件来进行实时的设定。

直接读写IO口:如MCS-51的IO口就属于此类IO口。当执行读IO口指令时,就是输入口;当执行写IO口指令则自动为输出口。

程序编程设定输入输出方向的:此类IO口的输入或输出由程序根据实际的需要来进行设定,应用比较灵活,可以实现一些总线级的应用,如I2C总线,各种LED的控制总线等。

● 外部中断:

外部中断也是绝大多数MCU所具有的基本功能,一般用于信号的实时触发,数据采样和状态的检测,中断的方式由上升沿、下降沿触发和电平触发几种。

外部中断一般通过输入口来实现,若为IO口,则只有设为输入时其中断功能才会开启;若为输出口,则外部中断功能将自动关闭。

● SPI接口:

此类接口是绝大多数MCU都提供的一种最基本通讯方式,其数据传输采用同步时钟来控制,信号包括:SDI(串行数据输入)、SDO(串行数据输出)、SCLK(串行时钟)及片选信号;

此类接口可以工作在Master方式或Slave方式下,通俗说法就是看谁提供时钟信号,提供时钟的一方为Master,相反的一方则为Slaver。

● I2C接口:

I2C是由Philips开发的一种数据传输协议,采用2根信号来实现:SDA(串行数据输入输出)和SCLK(串行时钟)。其最大的好处是可以在此总线上挂接多个设备,通过地址来进行识别和访问;

I2C总线的一个最大的好处就是非常方便用软件通过IO口来实现,其传输的数据速率完全由SCLK来控制,可快可慢。

● UART:

属于最基本的一种异步传输接口,其信号线只有Rx和Tx两条,基本的数据格式为:Start Bit + Data Bit + Parity Bit+ Stop Bit。一位数据所占的时间称为Baud Rate(波特率)。

对于大多数的MCU来讲,数据为的长度、数据校验方式(奇校验、偶校验或无校验)、停止位的长度及波特率是可以通过程序编程进行灵活设定。
此类接口最常用的方式就是与PC机的串口进行数据通讯。

● Watchdog(看门狗定时器):

Watchdog也是绝大多数MCU的一种基本配置,大多数的MCU的Watchdog只能允许程序对其进行复位而不能对其关闭,而有的MCU则是通过特定的方式来决定其是否打开。

一般而言watchdog的复位时间是可以程序来设定的。
Watchdog的最基本的应用是为MCU因为意外的故障而导致死机提供了一种自我恢复的能力。

转自: 周立功单片机

围观 306

很多MCU开发者对MCU晶体两边要各接一个对地电容的做法表示不理解,因为这个电容有时可以去掉。笔者参考了很多书籍,却发现书中讲解的很少,提到最多的往往是:对地电容具稳定作用或相当于负载电容等,都没有很深入地去进行理论分析。

而另外一方面,很多爱好者都直接忽略了晶体旁边的这两个电容,他们认为按参考设计做就行了。

但事实上,这是MCU的振荡电路,又称“三点式电容振荡电路”,如图1所示。

你必须知道的MCU外接晶体及振荡电路
图1:MCU的三点式电容振荡电路

其中,Y1是晶体,相当于三点式里面的电感;C1和C2是电容,而5404和R1则实现了一个NPN型三极管(大家可以对照高频书里的三点式电容振荡电路)。

接下来将为大家分析一下这个电路:首先,5404必需搭一个电阻,不然它将处于饱和截止区,而不是放大区,因为R1相当于三极管的偏置作用,能让5404处于放大区域并充当一个反相器,从而实现NPN三极管的作用,且NPN三极管在共发射极接法时也是一个反相器。

其次将用通俗的方法为大家讲解一下这个三点式振荡电路的工作原理。众所周知,一个正弦振荡电路的振荡条件为:系统放大倍数大于1,这个条件较容易实现;但另一方面,还需使相位满足360°。而问题就在于这个相位:由于5404是一个反相器,因此已实现了180°移相,那么就只需C1、C2和Y1再次实现180°移相就可以了。恰好,当C1、C2和Y1形成谐振时,就能实现180移相;最简单的实现方式就是以地作为参考,谐振的时候,由于C1、C2中通过 的电流相同,而地则在C1、C2之间,所以恰好电压相反,从而实现180移相。

再则,当C1增大时,C2端的振幅增强;当C2降低时,振幅也增强。有时即使不焊接C1、C2也能起振,但这种现象不是由不焊接C1、C2的做法造成的,而是由芯片引脚的分布电容引起,因为C1、C2的电容值本来就不需要很大,这一点很重要。

那么,这两个电容对振荡稳定性到底有什么影响呢?由于5404的电压反馈依靠C2,假设C2过大,反馈电压过低,这时振荡并不稳定;假设C2过小,反馈电压过高,储存能量过少,则容易受外界干扰,还会辐射影响外界。而C1的作用与C2的则恰好相反。在布板的时候,假设为双面板且比较厚,那么分布电容的影响则不是很大;但假设为高密度多层板时,就需要考虑分布电容,尤其是VCO之类的振荡电路,更应该考虑分布电容。

因此,那些用于工控的项目,笔者建议最好不要使用晶体振荡,而是直接接一个有源的晶振。很多时候大家会采用32.768K的时钟晶体来做时钟,而不是通过单片机 的晶体分频来做时钟,其中原因想必很多人也不明白,其实上这是和晶体的稳定度有关:频率越高的晶体,Q值一般难以做高,频率稳定度也比较差;而32.768K晶体在稳定度等各方面的性能表现都不错,还形成了一个工业标准,比较容易做高。另外值得一提的是,32.768K是16 bit数据的一半,预留最高1 bit进位标志,用作定时计数器内部数字计算处理也非常方便。

来源: 电子产品世界

围观 341

Microcontroller(微控制器)又可简称MCU或μC,也有人称为单芯片微控制器(Single Chip Microcontroller),将ROM、RAM、CPU、I/O集合在同一个芯片中,为不同的应用场合做不同组合控制。微控制器在经过这几年不断地研究,发展,历经4位,8位,到现在的16位及32位,甚至64位。产品的成熟度,以及投入厂商之多,应用范围之广,真可谓之空前。

目前在国外大厂因开发较早,产品线广,所以技术领先,而本土厂商则以多功能为产品导向取胜。但不可讳言的,本土厂商的价格战是对外商造成威胁的关键因素。 由于制程的改进,8位MCU与4位MCU价差相去无几,8位已渐成为市场主流;针对4位MCU,大部份供货商采接单生产,目前4位MCU大部份应用在计算器、车表、车用防盗装置、呼叫器、无线电话、CD Player、LCD驱动控制器、LCD Game、儿童玩具、磅秤、充电器、胎压计、温湿度计、遥控器及傻瓜相机等;8位MCU大部份应用在电表、马达控制器、电动玩具机、变频式冷气机、呼叫器、传真机、来电辨识器(Caller ID)、电话录音机、CRT Display、键盘及USB等;16位MCU大部份应用在行动电话、数字相机及摄录放影机等;32位MCU大部份应用在Modem、GPS、PDA、HPC、STB、Hub、Bridge、 Router、工作站、ISDN电话、激光打印机与彩色传真机;64位MCU大部份应用在高阶工作站、多媒体互动系统、高级电视游乐器(如SEGA的Dreamcast及Nintendo的GameBoy)及高级终端机等。

MCU的架构详解

而在MCU开发方面,以架构而言,可分为两大主流;RISC(如HOLTEK HT48XXX系列)与CISC(如华邦W78系列)。 RISC (Reduced InstrucTIon Set Computer) 代表MCU的所有指令都是利用一些简单的指令组成的,简单的指令代表 MCU 的线路可以尽量做到最佳化,而提高执行速率,相对的使得一个指令所需的时间减到最短。HOLTEK的HT46XX(A/D MCU系列) HT47XX(R to F MCU系列) HT48XX(一般I/O MCU系列) HT49XX(LCD MCU系列) 便是采用 RISC 结构来设计。不管是 RISC 或是 CISC(Complex InstrucTIon Set Computer),设计MCU的目的便是为人类服务的,对于 RISC 来说,因为指令集的精简,所以许多工作都必须组合简单的指令,而针对较复杂组合的工作便需要由『编译程序』(compiler) 来执行,而 CISC MCU因为硬件所提供的指令集较多,所以许多工作都能够以一个或是数个指令来代替,compiler 的工作因而减少许多。

MCU的架构详解

以一个数值运算程序来说,使用 CISC 指令集的MCU运算对于一个积分表达式可能只需要十个机器指令,而 RISC MCU在执行相同的程序时,却因为CPU 本身不提供浮点数乘法的指令,所以可能需要执行上百个机器指令 (但每一个指令可能只需要 CISC 指令十分之一的时间),而由程序语言转换成机器指令的动作是由程序语言的 Compiler 来执行,所以在 RISC MCU的Compiler 便会较复杂 。因为同样一个高级语言 A=B*C 的运算,在 RISC MCU转换为机器指令可能有许多种组合,而每一种组合的『时间/空间』组合都不尽相同。 所以 RISC 与 CISC 的取舍之间,似乎也是MCU硬件架构与软件(Compiler) 的平衡之争,应该没有绝对优势的一方,只能说因应不同的需求而有不同的产品,例如工作单纯的打印机核心 MCU,便适合使用效能稳定,但单位指令效率较佳的 RISC MCU。

MCU的基本构架:

以架构而言,MCU可分为两大主流∶RISC与CISC。RISC (Reduced InstrucTIon Set Computer)代表MCU的所有指令都是利用一些简单的指令组成的,简单指令代表MCU的线路可以尽量做到最佳化,提高执行速率可使指令所需的时间减到最短。HOLTEK公司的HT46XX、HT47XX、HT48XX、HT49XX便是采用 RISC结构来设计。

不管是RISC或是CISC(Complex InstrucTIon Set Computer),设计MCU的目的都是为人类服务的,对於RISC来说,因为指令集的精简,所以许多工作都必须组合简单的指令,而针对较复杂组合的工作便需要由“编译程序 (compiler)”来执行,而CISC MCU因为硬体所提供的指令集较多,所以许多工作都能够以一个或是数个指令来代替,编译程序的工作因而减少许多。

一般来说,MCU基本架构包括有程式记忆体(Program ROM)、累积器(Accumulator)、寄存器(Register)、堆叠(Stack)及堆叠指标(Stack Pointer)、I/O口、定时/定时/计数器、中断(Interrupt)。MCU还可以加挂一些周边资源,以扩充和延伸MCU的功能,这也正是系统设计工程师实现“产品差异化”的关键。这些周边资源包括:

MCU的架构详解

1、串行输出(Serial I/O)

MCU内含Serial I/O是为了提供对外部周边设备的通讯管道,各家种类不同,常见的有以下几种∶

(1) UART(Universal Asynchronous Receiver Transmitter)∶英代尔(Intel)、爱特梅尔(Atmel)。

(2) USART(Universal Synchronous/Asynchronous Receiver Transmitter )∶英飞 科技股份公司(Infineon)。

(3) 串列外设介面(SPI)∶飞思卡尔半导体公司(Freescale Semiconductor)。

(4) SCI(Sertal Communications Interface)∶这是UART的加强版。

(5) I2C汇流排∶恩智浦半导体(NXP Semiconductor)。

(6) Microwire/Plus∶美国国家半导体公司(National Semiconductor)。

2、液晶驱动装置(LCD Driver)

在显示介面上,LCD是常用的显示装置,例如在一些多功能电话、数位温度计、掌上游戏机上皆可以发现它的踪迹。因此内含LCD驱动线路的MCU运用相当广泛,有两种驱动方式可供选用∶Segment和Dot Matrix,例如之前流行的宠物蛋是使用Dot Matrix的LCD显示器;日系MCU厂商提供多样内含LCD驱动装置的MCU可供选用,另外HOLTEK HT49XX系列也提供LCD驱动装置的MCU。

3、萤光管驱动装置(VFT Driver)

LCD显示器在无光源或无背光的环境下,我们即无法读取显示器之内容,而VFT显示器可提供高亮度、且色彩多变化的视觉效果,常应用於高级的家电产品上,如碟影机、DSP量化器。要求炫丽输出效果的产品,在MCU的选择上VFT Driver是重要的资源之一。

OSD对於电视及监视器人性化介面是不可缺少的功能之一, OSD(On Screen Display)部分显示回路为接收水平同步信号(H-Sync)及垂直同步信号 (V-Sync),再将信号透过RGB及Blanking将萤幕资讯送出,其显示颜色至多可达8种。各MCU指令执行速率会造成OSD的显示行数及栏位的不同,显示行数由二行至数十行,栏位则由15~26个字元或更多,通常执行速率较快者可显示较多的行数、栏位,速率较慢者在显示上会有直接的受限。

4、模数介面(ADC)

由於MCU诸多应用上,需要侦测外部环境状况,作为处理资料上的参考,如在TV应用方面其调谐器(Tuner)之自动频率控制(AFC)讯号,即为电压讯号,其他如温度之侦测也多是转换为电压讯号,所以ADC的应用在工业及消费电子上都很广泛。

模拟之场合是如此频繁,所以各厂家提供AD之转换便成为一般之标准规格(如HOLTEK HT46XX系列),虽然如此,对於类比/数位之解析度各家差异很大,由3~10位皆有,视各不同需求而异。虽然提供的转换通道有很多,通常内部仅有一个电路处理,靠选择器切换,对於时间考虑不是特别强调之应用上,不致有太大之影响。

另外还有一种AD转换方式,就是R-F(Resistance to Freguency),一般运用在温度/湿度之侦测,利用电阻/电容式感测器的变化特性,转换成频率值,以此频率值来计算温度/湿度的相对性,此类的IC如HOLTEK HT47XX系列。

MCU的架构详解

5、数模转换介面(DAC)

在控制类比元件,必须内建DAC来应对。MCU内部由DA转换暂存器及一阶电阻构成,D/A的解析度各为8位元。在一个8位元/参考电压为5V的MCU,假设一个数位值60转换成类比值的计算方式是(60/256x5V)=1.171875V,例如应用在锁相回路上,VCO(电压控制振荡器)即可用DAC进行控制。

另外,Voice IC也是利用原先将语音录制成数位资料,然後用DAC方式将数位资料音频转换还原类比语音讯号。脉宽调变(PWM)其目的也是以数位输出搭配周边回路,达到类比的效果,其组成有前置配器(Pre-divider)、计数器(Counter)、资料闩锁(Data Latches)、及比较电路(Compare Circuits)等。

6、DTMF产生器、接收器

电话由原来的Pulse演进为现在的Tone解码方式,不但提高了解码的速度,也增加了可靠性与抗杂讯能力,DTMF(Dual Tone Multiple Frequency)顾名思义就是混合两种频率的音频讯号,所以解码不易出差错。应用在电话产品的MCU时,DTMF这个资源常是选择的重要规格。

7、看门狗(Watchdog Timer)

MCU在产品中是不允许停机的,但受到杂讯干扰或操作不当时,需有防范措施确保MCU在停机的情况下能够自动重置,让 MCU能够继续运作。可以说看门狗是用来监看MCU是否为不正常停机,许多MCU都已把它列为标准配备。

看门狗计时器实际上就像一个自跑式的RC振荡器,它完全不必外加零件,意即不管是晶片 的频率振荡接脚的频率振荡有没有停止,它还是继续计数而不随之中断而停止,即便是晶片 进入省电的Halt状态(在Halt状态下,晶片之频率停止振荡也一定不曾停止Watchdog timer之计时,当计时逾时後将使本晶片自动重置,I/O脚输出保持不变,耗电相当的省),Watchdog timer要不要使能,在OTP版本必须在程式烧录时决定,以便决定要不要烧断其保险丝,在Mask版本由使用者选择是否使用这个功能。

8、双频率(Dual Clock)

MCU的供应频率愈高时,相对地耗电量也愈大。因此在一些使用电池供应的产品选用时,双频率常是必须考虑的功能,一般副频率是以32.768kHz运作,主要作为计时(RealTime Clock)之用。

MCU的架构详解

转自: 电子发烧友网

围观 341

PIC32MZ DA MCU借助MPLAB® Harmony工具和支持,简化了24位彩色大屏幕的图形设计

Microchip日前宣布推出32位PIC32MZ DA单片机(MCU)系列,这是业界首款具有集成2D图形处理单元(GPU)和高达32 MB集成DDR2存储器的MCU。

微芯科技公司是单片机、混合信号、模拟和闪存专利解决方案的领先提供商,提供的该系列产品使客户能够借助使用方便的单片机(MCU)资源和工具(包括MPLAB®集成开发环境(IDE)和MPLAB Harmony集成软件框架),提高其应用的颜色分辨率和显示尺寸(最大12英寸)。

对于希望继续使用熟悉的MCU设计环境的客户而言,PIC32MZ DA系列填补了MCU和微处理器单元(MPU)之间的图形性能差距。Microchip的PIC32与MPLAB IDE及Harmony软件框架实现了无缝集成,通过其编程模型,这些器件提供了类似MPU的图形功能。这些工具具有可视化图形设计环境、定制显示屏驱动程序创建、图形库和资产转换器等特性,可以针对所选择的显示尺寸对图形进行定制并优化。

这些新器件的特性包括:
• 能够驱动24位彩色超宽屏图形阵列(SXGA)显示的三层图形控制器
• 高性能2D图形处理单元(GPU)
• 32 MB集成SDRAM或者128 MB外部可寻址SDRAM,支持存储扩展
• 丰富的片上闪存、SRAM和连接选项

Microchip的MCU32业务部副总裁Rod Drake评论说:“这一新系列器件突破了MCU在图形方面众所周知的局限性。客户在其设计中对HMI功能的要求越来越高。现在,他们可以借助使用方便的MCU升级其应用,而不会增加电路板的复杂度,也不需要增加新的编程资源。”

在MCU中集成DDR2存储器,在业内属于首创。这不但将日益复杂的通信协议栈和算法的吞吐率提高了2倍,而且还增大了图形缓冲和/或存储空间。其结果是,帮助客户在竞争激励的通信控制市场中推出引人注目、易于使用的解决方案,而无需增加产品型号。

Drake说:“采用业界容量最大的集成存储器,这些MCU满足了设计人员对应用存储空间的需求,其存储速度是市场上其他任何存储器的两倍。PIC32MZ DA MCU和MPLAB Harmony相结合后,业界的图形设计比以前简单多了。”

如需了解PIC32MZ DA系列的详细信息,请访问: www.microchip.com/PIC32MZDA_Main681

Microchip推出业界首款具有集成2D GPU和集成DDR2存储器的MCU,实现了图形功能的突破

开发支持

Microchip的MPLAB Harmony集成软件框架、MPLAB X集成开发环境(IDE)、用于PIC32的MPLAB XC32编译器、MPLAB ICD 3在线调试器和MPLAB REAL ICE™在线仿真系统为PIC32MZ DA系列提供支持。 其他一些工具包括:

• 具有堆叠DRAM(DA)入门工具包的PIC32MZ嵌入式图形工具(DM320010)
• 具有堆叠DRAM(DA)入门工具包(Crypto)的PIC32MZ嵌入式图形工具(DM320010-C)
• 具有外部DRAM(DA)入门工具包的PIC32MZ嵌入式图形工具(DM320008)
• 具有外部DRAM(DA)入门工具包(Crypto)的PIC32MZ嵌入式图形工具(DM320008-C)

供货

PIC32MZ DA系列器件提供各种封装选择,包括169球脚BGA、176引脚LQFP,以及用于外部DDR2应用的288球脚BGA。该系列中的器件现在已经投入量产。如需了解详细信息,请联系Microchip销售代表或者全球授权分销商。欲购买文中提及产品,可访问易于使用的microchipDIRECT在线商店或联系Microchip授权分销伙伴

围观 225

页面

订阅 RSS - MCU