嵌入式

1、引言

目前,集成电路的嵌入式技术发展越来越快,各色嵌入式产品也越来越受欢迎,尤其是以大屏幕多功能的手机、平板电脑等为典型代表,做为其控制核心的高性能、低功耗的微控制器(MCU)起到了决定性作用。因此以CPU为核心MCU的设计也成为了诸多高等院校、各大公司进行市场竞争的一个主流发展方向。

2、MCU选型技术

微控制器(MCU)的应用领域非常广泛,如消费类电子市场中的手机、照相机、摄像机、MP3、MP4、平板电脑、笔记本电脑、PC机、各种遥控电动玩具等,还有汽车电子的电子钥匙、控制系统、导航、倒车影像、倒车雷达等,还有各种安全防卫系统、医疗器械、工业控制、武器装备、航空航天等各个领域。因此在设计MCU之前需要进行明确的市场定位,从而使目标产品有的放矢,并在高性能、低成本、多功能、轻体积、低功耗、高可靠、散热好、抗辐照、抗单粒子、适应超高温和超低温等方面具有很强的竞争力。MCU硬件设计主要包括两大部分:CPU选型和外围IP核的选取。

3、CPU选型

CPU作为MCU的大脑,起到控制核心的作用,基本上决定了MCU的目标应用领域,因此CPU的选型是设计MCU的关键。目前,可以用于集成电路嵌入式设计的CPU主要有CISC架构的80386EX,RISC架构的ARM7TDMI/EJ、ARM926EJS/946ES/968ES、ARM1136/56/76、ARMCortex-A5/7/8/9/15、ARMCortex-R4/5/7、ARMCortex-M0/0+/1/3/4/7、SecurCore000/100/300、MIPS32M4K/4K/14K/24K/34K/74K/1004K/1074K、microMIPS32、SmartMIPS、Nios/NiosII、PowerPC40x/60x/70x/90x、SPARCv7/8/9、LEON2/3/4、OR1000/1200等,其中以ARM系列嵌入式CPU发展的势头最为迅猛,占据了嵌入式处理器绝大部分的市场份额,而且还在继续增长。各家公司的每种处理器都有自己的特点,可以满足不同的应用需求。此外,开发环境的完备性、总线接口协议的高效性、技术支持的专业性、IP核种类的丰富性、设计资源的开放性以及设计者的使用习惯等,都会对CPU的选型产生决定性的影响。

4、外围IP选取

对于应用领域而言,外围IP核起到了很好的支撑作用,因为如果把MCU比作“人”,则外围IP核相当于MCU的“眼”“耳”“口”“鼻”等重要器官,所以外围IP核的选取也同样至关重要。IP核的选取包括通用IP核和特定用途IP核两种。

4.1通用IP选取

目前,通用IP核的种类比较繁多,按照总线接口协议可以分为IBM公司的Core Connect、ARM公司的AMBA(Advanced Microcontroller BusArchitecture)和Silicore Corp公司的Wishbone等;按功能分为接口类IP核如DMA、GPIO、UART、USART、Timer、WDT、I2C、I2S、SPI、CAN、存储器控制器,图像处理类IP核等;存储器类IP核如ROM、RAM、SRAM、FLASH等。根据功能不同可以进行不同的选择,还可以集成几个相同功能的IP核,如UARTx4有4个UART接口,I2Cx2则是有2个I2C接口等。

4.2特定用途IP选取

特定功能的IP核种类也很多,如时钟类的PLL、片上高精度振荡器,模数转换类的AD、DA,网络类的ETHERNETMAC/PHY、Modem,图像处理类的H.264、JPEG,接口类的USB2.0/3.0、IDE、SATA等,高速接口类的LVDS、RapidIO、SerDes等,还有各种传感器等,需要根据市场定位来确定。

5、MCU设计

5.1硬件设计

目前,MCU领域众多大公司早已大规模推出各类MCU,而且各具特色,因此设计具有自主知识产权的MCU应在系统架构等方面有别于这些大公司,一是避免侵权,二是更有利于市场竞争。同时应做好产品的规划:从简单到复杂,从单一产品到系列产品,设计平台不断维护与更新,设计软件不断维护与升级,设计人员的水平不断提高。主要包括以下几个方面:

(1)体系架构分析、设计和验证
依据设计规格书中的性能指标和功能指标,首先需要制定设计方案:选取几款CPU以及所有用到的IP核进行系统级设计,从整体上评估MCU的系统架构、CPU的性能指标、IP核的功能特性等方面。基于几种选定的目标工艺给出相应的数据分析,确认是否能够满足设计目标的要求,从而确定基本的设计方案,然后再根据具体的设计结果进行相应的优化。

(2)时钟和复位方案设计
时钟和复位对整个电路而言起到了至关重要的作用。如果这两路信号有问题,则电路不能正常工作。因此,需要作出详尽的时钟方案和复位方案,需要给不同的外设提供不同的时钟:USB单独时钟、CPU等高速外设一个时钟、UART等低速外设一个时钟,如图1示。

浅析嵌入式MCU硬件设计相关要素
图1时钟方案示意图

(3)总线方案设计
采用何种总线、何种组合方式、总线的数量等关系到MCU性能的发挥。以AMBA总线为例,通常的用法是AHB接高速外设,再通过AHB到APB总线桥来访问低速外设。有时为了提高外设的访问速度,一个MCU内部可能有两条APB总线;也可能有两条AHB总线。指令和数据分离,一条用来数据传输或图像处理,另一条用来通用控制。还可能有多层AHB的互连矩阵,便于多个Master可以同时访问多个不同的高速外设,从而大幅度提高MCU系统性能。因此,总线方案的制定须依据产品的具体应用来确定。

(4)功耗管理方案设计
低功耗是MCU的突出特点之一,因为MCU中集成了多种低功耗管理策略:不仅在逻辑上采用门控时钟、门级优化的方式,而且还在物理上采用多阈值电压、多电源域、门控电源等方式;同时更在功能模式上采用了多种模式:正常运行模式、睡眠模式、深度睡眠模式、掉电模式等,并严格规定各种模式下运行和关闭IP核的种类以及各种模式之间的进入和退出流程。这既保证了电路的功能,又保证了电路的性能。

(5)中断处理方案设计
中断是MCU一项很重要的功能。通过中断控制,CPU可以快速响应外设的请求。中断处理一般包括中断源的数量、优先级、是否可屏蔽、是一般中断还是快速中断等,通常需要设计一个专用模块来进行中断处理。有时为了提高设计效率,IP销售商也提供标准的基于AHB或APB等总线接口协议的IP核。如果此类IP核能够满足系统对于中断处理情况的要求,也可以选用。

(6)存储器管理方案设计
存储器是MCU中占面积较大的模块。一个MCU中可能同时含有ROM、SRAM和FLASH三种存储器:ROM用于放置BootLoader、IP Drivers等,SRAM用于提高软件运行速度、存放临时数据,FLASH用于存放应用程序和数据。由于FLASH的读写速度比较慢,为了提高FLASH的读写速度,可以采用预取缓冲器和写缓冲器来加速指令和数据的缓冲。由于各个存储器都有自己的地址空间,因此很方便用户访问。为了便于系统管理,通常设计一个存储器管理模块,并在系统控制模块中设计对应的控制寄存器。

(7)在线调试方案设计
目前,比较常用的在线调试方式为串行调试,如JTAG、EJTAG、UART等,使用PC机的并口、串口、网口或是USB接口,使得在线调试简单方便,成本低廉,如图2所示。由于被调试的程序要在目标板上运行,而且MCU必须正常工作,因此需要设计一个专用的调试模块以保证上位机软件可以调用CPU来进行软硬件的在线调试,并且符合IEEE1149.1的协议标准,此模块的基本结构如图3所示。

浅析嵌入式MCU硬件设计相关要素
图2典型在线调试系统示意图

浅析嵌入式MCU硬件设计相关要素
图3调试结构示意图

(8)测试方案设计

MCU的测试方案主要包括物理测试、功能测试和性能测试几部分内容。先要根据时钟方案和复位方案对MCU进行时钟测试,确保时钟电路工作正常;再对CPU进行功能测试,因为CPU是MCU的控制核心,只有CPU正确运行才能对其他IP核进行测试;然后再依据设计规格书对MCU外围的数字IP核和模拟IP核进行功能测试和性能测试。

5.2系统级验证

为了确保设计的正确性,流片之前必须对MCU进行全功能验证。因此需要使用多种IIP和VIP来搭建一个系统级验证平台,依据设计规格书制定详细的验证方案,通过仿真工具,采用定向和随机的方式或采用比较流行的OVM、VMM和UVM等验证方法学、逐个IP核来验证MCU的全部功能是正确的,重点是系统控制单元、总线仲裁器、功耗管理等为系统功能定制设计的非标准模块。

5.3 FPGA原型验证

由于系统级验证使用的是EDA工具进行软件仿真,仿真的速度比较慢,因此可以通过FPGA原型验证的方式来加速系统级验证的速度,尤其是需要将那些功能比较复杂、规模比较大的模块下载到FPGA中,而且应尽可能使用规模比较大的FPGA,如Virtex-7系列、ArriaV系列等。搭建FPGA验证平台时,不仅可以使用一块FPGA,也可以使用多块FPGA,最好能够将设计的所有模块全部下载到FPGA中。FPGA原型验证不仅要验证硬件的正确性,还要验证IP核驱动程序的正确性,同时也可以验证目标应用程序的正确性。

5.4物理设计

在对MCU系统级验证和FPGA原型验证后,需要进行物理设计:依据设计规格书制定合理设计约束,从逻辑综合到自动布局布线,再到物理验证、形式验证、静态时序分析和功能验证,完成从RTL到GDSII的转换过程,最后将数据发送至代工厂进行加工制造。

5.5文档设计

文档是MCU设计过程中很重要而且很必要的环节,且应该在设计的不同阶段,以模板的形式规定在此阶段所要完成的文档设计,并由项目负责人进行详细审查,从而确保一旦设计中出现了任何问题,都可以查找相关的设计文件以及对应的设计文档,尤其是设计的细节需要体现的很完整。

6、结束语

以上只是简要概述了MCU硬件设计的主要方面。若要设计一个性价比高、竞争力强的MCU,还需要进行大量的、详细的工作,尤其是电路的全功能验证和详尽测试,并搭建一个MCU平台来进行系列产品的开发,以保证产品可以源源不断地进入嵌入式市场。

来源: 灵动微电MMCU

围观 373

1.uC/OS-II文件结构

与处理器无关的代码:OS_CORE.C, OS_FLAG.C, OS_MBOX.C, OS_MEM.C, OS_MUTEX.C, OS_Q.C, OS_SEM.C, OS_TASK.C, OS_TIME.C, UCOS_II.C, UCOS_II.H。

配置文件(与应用程序有关):OS_CFG.H, INCLUDES.H

与处理器有关的代码(移植):OS_CPU.H, OS_CPU_A.ASM, OS_CPU_C.C

2.uC/OS-II组成部分

uC/OS-II大致可以分成系统核心(包含任务调度)、任务管理、时间管理、多任务同步与通信、内存管理、CPU移植等部分。

(1) 核心部分(OSCore.c) :uC/OS-II处理核心,包括初始化、启动、中断管理、时钟中断、任务调度及事件处理等用于系统基本维持的函数。

(2) 任务管理(OSTask.c) :包含与任务操作密切相关的函数,包括任务建立、删除、挂起及恢复等,uC/OS II以任务为基本单位进行调度。

(3) 时钟部分(OSTime.c) :uC/OS-II中最小时钟单位是timetick(时钟节拍),其中包含时间延迟、时钟设置及时钟恢复等与时钟相关的函数。

(4) 多任务同步与通信(OSMbox.c, OSQ.c, OSSem.c, OSMutex.c, OSFlag.c):包含事件管理函数,涉及Mbox、msgQ、Sem、Mutex、Flag等。

(5) 内存管理部分(OSMem.c):主要用于构建私有的内存分区管理机制,其中包含创建memPart、申请/释放memPart、获取分区信息等函数。

(6) CPU接口部分:uC/OS-II针对特定CPU的移植部分,由于牵涉到SP等系统指针,通常用汇编语言编写,包括任务切换、中断处理等内容。

3.uC/OS-II任务状态

在uC/OS-II中,一个任务就是一个线程,该任务可以认为CPU完全属于它自己。任务有自己的堆栈和CPU寄存器,并且被赋予一定的优先级。任务可能处于睡眠、就绪、运行、等待或中断服务状态之一。

(1) uC/OS-II调度算法
uC/OS-II采用基于优先级的调度算法,总是选择当前处于就绪状态的优先级最高的任务进行调度。uC/OS-II是可抢占性的强实时性OS,在完成中断后允许进行新的任务调度。

uC/OS-II有两种调度方式:任务级任务调度、中断级任务调度。

(2) 应用程序中函数的调用关系

#include “includes.h”
#define TASK_STK_SIZE 512 // 定义堆栈长度(1024字节)
OS_STK TaskStk[TASK_STK_SIZE]; // 定义一个数组来作为任务堆栈
void main()
{
……
OSInit(); // 初始化uC/OS-IIi
……
OSTaskCreate(MyTask1,……); // 创建用户任务1
OSTaskCreate(MyTask2,……); // 创建用户任务2
……
OSStart(); // 启动任务
……
}
void MyTask(void *pdata)
{
for (;;)
{
可以被中断的任务代码;
OS_ENTER_CRITICAL(); //进入临阶段(关中断)
不可以被中断的任务代码;
OS_EXIT_CRITICAL(); //退出临阶段 (开中断)
可以被中断的任务代码;
}
}

空任务块链表(所有任务控制块还没有分配给任务),是在应用程序调用函数OSInit()对系统进行初始化时建立的。

任务建立时,首先会调用OSTaskStkInit(),也会调用函数OS_TCBInit()初始化任务控制块OS_TCB,函数OSTaskCreate()或OSTaskCreateExt()调用任务控制块初始化函数OS_TCBInit()。

OS_TCBInit()然后调用OSTCBCreatHook()。

OSTCBCreatHook()是用户自定义的函数。

当用户程序调用函数OSTaskCreate()创建一个任务时,这个函数会调用系统函数OSTCBInit()来为任务控制块进行初始化。这个函数首先为被创建任务从空任务控制块链表获取一个任务控制块,然后利用任务的属性对任务控制块各个成员进行赋值,最后再把这个任务控制块链入到任务控制块链表的头部。

uC/OS-II有两种调度器:
任务级调度器(由OSSched()实现)、中断级调度器(由OSIntExt()实现)

(3) 任务级任务调度
指在非中断返回时进行任务调度,一般发生在当前任务因时间延迟或等待某事件而阻塞或被挂起,或有更高优先级的任务处于就绪状态。

任务的基本信息:

  -  CPU的PC寄存器:任务当前执行的位置;
  -  CPU的通用寄存器:任务当前执行涉及的临时数据;
  -  CPU的状态寄存器:存储当前CPU的状态。

任务级任务切换:从一个任务直接切换至另一个任务,不涉及CPU状态的切换,OS_TASK_SW()既保存当前任务上下文,又恢复新任务上下文。
过程:OS_Sched() -> OS_SchedNew() -> OS_TASK_SW()

来源: 嵌入式资讯精选

围观 453

作者:Øivind Loe,Silicon Labs微控制器产品高级营销经理

即使是在诸如物联网应用的无线连接这种主导功耗的事件中,让尽可能多的进程自主运行,也可大大提高电池寿命。降低功耗一直是微控器(MCU)市场的一个主要关注点。超低功耗MCU现在可以大大降低工作模式和深度睡眠模式下的功耗。这种变化的效果是显而易见的,它大大提高了我们日常嵌入式应用中的电池寿命,并且提供了在未来使用能量收集的可能性。

然而,要基于新型MCU降低功耗,开发人员必须考虑到许多因素,对此Silicon Labs特别撰写一篇技术文章:“以0 MIPS运行你的嵌入式系统”,帮助开发人员了解如何利用新型MCU中外设的自主运行,通过更接近以“0”MIPS运行,来实现数据手册中所承诺的低功耗。

低功耗为嵌入式系统研发关键

对于在功耗敏感型物联网(IoT)应用中所使用的新型MCU和无线MCU(WMCU)来说,执行代码时的功耗已经明显下降,甚至达到40μA/ MHz以下。使用这些低功耗规格,您可能会想知道为什么我们需要睡眠模式,为什么不以500 kHz运行您的代码来实现20μA的电流消耗,并且允许您的应用使用电池运行10年?其实事情并不是这么简单的。

睡眠模式下的功耗在过去几年中也有显著的改善。我们现在可以看到深度睡眠模式下的功耗低于2μA,而一些睡眠模式下的功耗甚至低于50 nA。您可能会觉得拥有这些模式设计出来的系统功耗自然很低,然而事实并非如此,应用能否利用睡眠模式才是关键。

为什么工作模式是好的...也是坏的

使用MCU或WMCU的最直接的方法是让CPU管理一切。例如,您可以启动模数转换(ADC),将一些数据放入通信接口(如USART传输)中,读取ADC数据,并对数据做出一些处理,所有一切都由CPU直接控制。直接的CPU控制简化了开发,但其成本是:每当外设或外部事件需要处理时,MCU都将处于工作模式,从而使功耗大增。

近期,一些数据手册显示工作模式的电流是40μA/MHz甚至更低,它们通常是高时钟频率下的参数,低频下会变大,进而导致绝对功耗变大。这是因为工作模式下频率和功耗不是线性关系。功耗由如下两部分组成,其中第二部分和频率联系不紧密:
1. 处理器本身,它是和频率按比例变化的。
2. 有基础工作电流的模块,比如低压差线性稳压器(LDO),欠压检测器(BOD)等。

要想降低功耗,应尽可能地减少MCU在高功耗的工作模式下运行,尽可能地关闭外设,让CPU尽可能多地睡眠。

功耗预算

对于受限于能源的电池供电型应用来说,要知道能源消耗在哪里才能进行优化。表1显示了一个传感器检测无线应用的功耗预算,它的功耗优化不太好。

通过平均计算每个组件的功耗来测量或估计功耗。如果CPU占空比为两个百分点,并且在60μA/ MHz时工作在20 MHz,则CPU的消耗为24μA。

请注意,表1所示的功耗预算是根据功能划分的。例如,基础睡眠电流包括一个低频振荡器和一个实时时钟(RTC)来对系统事件进行定时从而允许深度睡眠。

传感器测量部分是由一个0.5kHz的中断触发,中断之间深度睡眠。低功耗蓝牙每秒钟都要把数据发出去,这是个很普遍的低功耗应用。最后,还有一些非MCU部分的功耗。MCU可能无法直接控制这些模块中的一部分,包括电源管理外设,在这个例子中,MCU是直接控制ADC对传感器进行采样,如果不是的话,传感器电流将完全是图片中的数据。

对于这个例子,传感器的持续电流大约是390μA,但是通过调整占空比,每个ADC采样仅仅使用了10 μs的时间,从而可以大大降低功耗。

【干货】以0 MIPS运行你的嵌入式系统

表1 目标应用的功耗预算

如果该无线应用由具有225 mAh容量的CR2032电池供电,则在61.6μA功耗下操作时其寿命约为0.4年。事实上,我们可以做得更好。

改善现状

我们来看看降低MCU传感器测量电流的方法。虽然此示例涉及ADC测量外部传感器,但相关示例可能集中在一系列不同类型的测量以及与外部环境的交互上。在这两种情况下,MCU和外部环境之间都会发生频繁的交互。

实现低功耗传感的最简单的方法是让CPU尽可能多地处于睡眠模式,只在采样时唤醒,并尽可能快地重回睡眠模式。对于非常低的采样率来说,这种方法很好,但是从图1可以看出,当每秒采样次数增加时,系统的功耗也会显著增加:

【干货】以0 MIPS运行你的嵌入式系统

图1 采用中断进行ADC采样,显示出随着每秒采样次数的增加,功耗也在增加

许多类型的应用必须具有频繁的活动,同时还需要保持电池寿命。超过1kHz的活动率并不是闻所未闻,这时候就需要采取措施来保持低功耗。

图2显示了传感器管理的两种附加方法。外设反射系统/直接存储器访问(PRS / DMA)方法使CPU在完全不参与的情况下在深度睡眠模式进行ADC采样。而不是RTC唤醒CPU,然后CPU启动ADC进行采样。RTC通过事件系统(如Silicon Labs的PRS)将事件直接发送到ADC。ADC在接收到此事件时自动启动ADC转换。转换完成后,DMA在这种情况下也能够从深度睡眠模式下运行,从ADC获取数据并将其存储在RAM中。 PRS / DMA方法的好处是显著降低了电流消耗。在1 kHz时,系统电流从58μA降低到25μA。

【干货】以0 MIPS运行你的嵌入式系统

图2 该ADC采样图显示了各种工作方式下的功耗

驱动ADC的更有效的方法是PRS /比较器(CMP)方法,其中RTC仍然通过PRS系统触发ADC,但在这种情况下,ADC立即使用比较功能对样本进行评估,除非发现有需要的数据,否则不使用DMA或CPU。这种方法能够实现1 kHz采样率时系统电流只有3.5μA。

动态ADC比较器

使用PRS/CMP方法,大部分采样数据都被丢弃,CPU只关注需要处理的数据。当信号变化缓慢时,或者需要特定的信号时,这种方法很有效。

当使用比较功能监视信号时,一种方法是测量信号,然后根据这个信号设置阈值,只要信号在阈值范围内,那么当ADC测量信号时,系统可以保持在深度睡眠模式,当然CPU也保持在睡眠模式。

然而,如果信号发生变化,并且超过阈值,系统将知道该信号,并采取适当的措施。在回到睡眠模式之前,ADC阈值将重新配置以适应新的信号值,因此系统可以再次进入睡眠模式,直到下一次信号发生变化。图3显示了这种技术的示例。圆点表示ADC样本,箭头表示每当CPU被唤醒时,它将记录本次变化并重新配置阈值。

【干货】以0 MIPS运行你的嵌入式系统

图3 当信号超过阈值时,CPU中断动态修改ADC的阈值

使用这种方法,系统实际上将丢失一些信号准确性,因为信号可以在触发器之间的阈值范围内任意移动。然而,益处是功耗显著降低。

如果系统的目标是测量信号的动态值,则PRS / DMA驱动方法是理想的,因为它使所有数据可用,同时仍然可以提供非常有益的节能特性。

自主工作子系统

ADC示例只是众多通过睡眠模式降低应用功耗的方法之一。专注于低功耗应用的新型MCU(如Silicon Labs的EFM32 Gecko MCU)拥有大量功能,可在深度睡眠模式下运行,从而实现高水平的自主行为。

例如,Gecko MCU的LESENSE(低功耗传感)模块可以自动地、周期性地采样多达16个通道,完全不需要CPU参与。它可以实现高频率检测且充电1次就能工作10年。

在许多情况下,单个外设可以自主地履行其职责,但也有许多需要交互的情况。在这种情况下,我们可以利用诸如在当前一些新型MCU中存在的PRS系统这样的外设互连。这些外设互连允许多个外设连接以自主执行更复杂的任务。

图4显示了这样的自主系统示例,其使用事件链来执行其功能:
1. RTC以给定的时间周期性地发送PRS信号至ADC以启动转换。
2. RTC同时启动外部传感器,这样在测量时信号就已经准备好了。
3. ADC完成采样并通知DMA,DMA把数据传送到RAM。
4. 来自ADC的完成PRS信号关闭外部传感器。
5. 当缓冲器满时中断唤醒CPU,或者超过ADC阈值时中断唤醒CPU。
6. 可选项:PRS看门狗监视事件循环,确保它保持运行。

DMA可以从图4所示系统中拿走,通过设置ADC的比较功能来做到更省电。

【干货】以0 MIPS运行你的嵌入式系统

图4 该自主ADC系统包含周期工作的传感器和看门狗

这些自主子系统具有以下几个主要优点:
1. 显著节能。
2. 即使CPU负载很重时传感器依旧可以稳定工作。

缺点是,并不是所有的MCU都支持这种类型的操作,并且在设置交互时,您会希望像硬件设计人员一样思考。总之,对于许多电池供电型应用来说,其优点明显多于缺点。

结论

通过利用各种节能技术,当传感器测量时,CPU几乎完全脱离工作。对于表1所示的无线应用,这将使总平均功耗从61.6μA降低到37.6μA,降低了39%,从而使电池寿命从大约5个月延长到8个月,增加了64%,或者可以允许电池尺寸减小以改善系统外形。

对于非无线应用,节能将更加显著。表1中的示例,能耗将从29.6μA降低到5.6μA,由CR2032电池供电,理论上寿命将从10个月延长到4.6年。

来源: Silicon Labs

围观 318

据Semi Engineering网站报导,GlobalFoundries、三星(Samsung)、台积电(TSMC)和联电(UMC)计划在2017年稍晚开始提供ST-MRAM或STT-MRAM,取代NOR Flash,此举代表市场的巨大转变,因为到目前为止,只有Everspin已经为各种应用提供MRAM,例如电池供电的SRAM替代品、读写缓存(Write Cache)等。

STT-MRAM的下一个大好机会就是嵌入式存储器IP市场,NOR Flash是传统嵌入式存储器,随着制程从40nm进展到28nm,NOR Flash已经出现各种各样的问题,因此,这些代工厂的支持可以将STT-MRAM转变为先进节点的替代技术。

GlobalFoundries嵌入式存储器副总裁Dave Eggleston表示,嵌入式快闪存储器将继续作为资料保存技术主流,特别是汽车和安全应用领域,嵌入式快闪存储器将会有很长的使用寿命,但没有扩展空间,当达到28nm制程以上时,嵌入式快闪存储器实际上会成为昂贵的选择。

因此,业界需要一个新的解决方案,STT-MRAM恰好为2xnm及以上的嵌入式存储器应用做好准备。先作为补充技术,进一步替代嵌入式DRAM和SRAM,也是MRAM的巨大机会,将为处理器添加持久性功能。

无论如何,MRAM可能会因为几个因素,成为一个大市场或利基解决方案,包括多个供应商和一系列的应用推动STT-MRAM发展,此外,主要代工厂投入STT-MRAM也可能会推动规模经济化,降低技术成本。

但仍有一些挑战,不是所有晶圆代工客户都需要22nm以上的芯片,此外,STT-MRAM是一种相对较新的技术,客户可能需要花点时间整合,各种制造上的挑战也必须解决。不过,4大代工厂都决定为嵌入式客户投入开发作业,三星有自己的IP,其他代工厂正在与各种合作伙伴合作。

除了Everspin和代工厂之外,英特尔(Intel)、美光(Micron)和东芝与SK海力士都投入MRAM研发,同时,几家新创公司如Avalanche、Crocus、Spin Transfer Technologies都正在开发。对大多数企业而言,生产MRAM说起来比做容易,因为MRAM涉及开发新材料、集成方案和设备,与传统存储器相比,生产流程也不同。

在晶圆厂的进展中,STT-MRAM目前有2个用例,第一个是替换嵌入式快闪存储器,另一个是嵌入式SRAM,业界一致认为,STT-MRAM是一个很好的嵌入式解决方案。多年来,业界一直在探索STT-MRAM的发展,目标是取代DRAM,现在还在努力探索中。

而STT-MRAM仍然需要证明它可以在汽车的高温下满足可靠性和资料储存规格。在微控制器(MCU)市场的嵌入式存储器需求也在增温,如NOR Flash用于代码储存和其他功能。MCU制程从40nm进展到28nm,NOR Flash也是,然而,在2xnm节点,NOR Flash开始遭受写入速度慢和耐久性问题,且因为需要更多光罩步骤使成本更高。

超过28nm以后,NOR Flash就难以扩展,所以人们正在寻找替代品,但是用新的存储器类型替换NOR Flash不是一项简单的任务,新型存储器类型的成长关键要求是性能、可靠性、密度和成本。

现在,STT-MRAM似乎已经在2xnm节点的嵌入式市场准备就绪,其他存储器类型仍然停留在研发阶段。报导指出,随着产业正在开发STT-MRAM,同时也专注准备MRAM研发,包括SOT-MRAM磁存储器,将作为基于SRAM技术的缓存替代品。

来源: Digitimes

围观 375

嵌入式系统设备是应用最广泛的产品,小到玩具、穿戴产品大到复杂的工业、军工宇航设备,按照标准定义,嵌入式系统就是以应用为中心,以计算机技术为基础,将应用程序和操作系统与计算机硬件集成在一起,能够独立工作,而且软硬件均可裁减的专用计算机系统。简单地说,就是系统的应用软件与系统的硬件一体化的设备。广义上可以认为,凡是带有微处理器、微控制器的专用软硬件系统都可以称为嵌入式系统。从狭义上讲,更加强调那些使用嵌入式微处理器构成独立系统,具有自己的操作系统,并且具有某些特定功能的系统。随着智能化的深入,嵌入式系统发生了很多有趣的变化,我们以嵌入式系统的核心MCU来说说2017年嵌入式领域的MCU四个变化。

一、MCU主频、内核大突破还有多核化

在传统上,我们理解的的MCU都是基于Cortex-M0,M3,M4或者8051 内核的MCU,但是今年我们看到,一些MCU领军厂商如ST、NXP等都推出于基于Cortex-M7内核高主频MCU,把MCU应用继续拓展。

2017嵌入式领域MCU四大新变化

NXP在今年6月推出了i.MX RT系列跨界处理器,它结合了高性能和实时功能,支持下一代物联网应用,具有与MCU级可用性相平衡的高度集成和安全性,且价格实惠。i.MX RT处理器的优势很明显:第一高性能,采用ARM Cortex-M7,主频高达600MHz,配备高达512KB的紧耦合内存,中断延迟低至20nm,可以使满足目前用户点一下按键就要快速做出反应的需求;第二高集成度,集成了2D图形加速引擎、并行相机传感器接口、LCD显示控制器和3个I2S,适用于GUI和增强版HMI的高级多媒体;第三低功耗,集成直流-直流转换器,实现业内最低动态功耗;第四使用简便,采用了MCU的应用架构,MCU客户可以利用现有的工具链,如MXUXpresso、IAR、Keil,快速开发和制作原型,而不用再学习Linux、安卓,从而节省设计时间;第五低成本,10K的转售价格不到3美元。对于这样的新MCU,国内嵌入式系统技术著名专家周立功教授(广州周立功单片机发展有限公司创始人、广州致远电子股份有限公司董事长)指出:“NXP最新推出的LPC546xx、i.MX6和刚推出来的i.MX RT绝对的创新设计,性能超群价格便宜,我们看到A7、A8性能再好,但其资源都被Linux吃掉了!而i.MX RT只需要RTOS就可以实现更好的性能,且更便宜。另外,基于RTOS的功耗管理更简单,大部分菜鸟级开发人员,不用懂Linux就可以开发出高性能的产品,这是多大的市场机会,因此必将成为流行的趋势!”

“这是兼顾了高性能与低功耗的产品设计。”他强调。“未来,Cortex-M7的发展理念更高性能,向多核发展,比如M0+M7、M4+M7、DSP+M7...等等。”

二、32位MCU加速取代8位MCU应用

目前在MCU领域,8位MCU仍占据1/3以上份额,在工业控制、安防、物联网、消费类电子等诸多领域,8位MCU的身影依然处处可见,根据IHS的预测,2018年8位MCU的市场规模将增长到78亿美元,市场份额继续超过MCU市场营收的三分之一以上,因为很多人认为8位MCU未来将继续维持增长。

不过随着智能化时代的来临和安全意识的提升,8位MCU增长将逐渐进入强弩之末,以今年来看,32位MCU取代8位MCU就呈现加速势态,一个变化是32位MCU大量取代8位MCU在指纹识别领域的应用,主要原因是32位MCU利用其更高的处理能力可以缩短算法执行时间,最终体现为响应速度。同时,32的高处理能力可以整合更多的功能,例如加密认证,辅助传感器等。

一些基于ARM® Cortex®-M4内核的MCU提供了完整的DSP指令集和专用浮点运算单元(FPU),可直接支持三角函数、滤波和卷积等复杂运算以加快指纹算法执行速度。最高主频下的工作性能可超过200DMIPS,可以支持高级指纹识别运算的全过程,包括指纹图像预处理、分割拼接、数据特征提取、特征匹配、交叉比对、识别解锁等一系列指令,更可显著提高指纹注册和匹配效率。所以很多8位MCU指纹识别方案别抛弃换到32位方案。

另外一些基于8位MCU的遥控器方案也因为32位MCU成本下降到与其持平而遭到抛弃。所以32位MCU需求旺盛一些公司缺货将成为常态化。

三、高端家电、高端消费电子设备需要高性能MCU

随着人工智能技术逐渐普及和人们对优质生活的追求提升,高端家电、高端消费电子对高性能MCU需求大增,例如很多冰箱需要做智能化的分析和处理,需要对储藏的食品做分类和检测,同时需要联网完成智能购物等动作,因此需要跟高性能的MCU,这些MCU除了支持一定的智能运算外还要支持触摸屏显示,支持较高的分辨率显示。针对这样的需求,本土MCU厂商可以将产品向高端延伸,在兼顾低端市场的同时,向高端市场发起冲击!

四、显示控制及人机交互应用加速

“在过去六个月,32位MCU在手机及移动支付、智能家居/家电、显示控制及人机交互和汽车电子及电机应用方面呈现加速势态。”灵动微电子MCU事业部总经理娄方超表示,“其中显示控制及人机交互需求极其旺盛,应该是潜力很大的市场,在这个市场中,MCU在取代以往的应用处理器市场。”

此外 ,在MCU开发上,各个厂商也努力简化MCU开发,例如ST开发出了STM32CubeMx,不但可以用它搜索选择满足需求的芯片,用它配置芯片外设引脚和功能,配置使用如LWIP、FAT32、FreeRTOS等第三方软件系统,还可以用它做功耗评估。而娄方超也透露灵动微电子也会推出更好用的新开发平台。

来源:EEFOCUS

围观 341

作者:Pin Tsalin, Bridgetek

微控制器单元(MCUs)有效地构成绝大多数现代嵌入式系统设计基础,为工程师提供灵活性与符合成本效益的适当强大性能。由于这些特性,它们已经达成惊人的销售数量(根据IC Insights的数据,去年有近230亿件装置出货)。随着MCU市场成熟,已经越来越集中于少数且广泛使用通用架构。 然而,这几乎完全与某些嵌入式市场的需求背道而驰。 以下的文章,我们将探讨在某些工程师想要的内容与他们实际期望的差距。

虽然MCU系列与其核心平台的通用性明显是这些装置取得非凡的成功主要因素,但也限制其使用范围。这可能会在将来留下越来越少的差异化空间。业界关注的应用焦点,例如物联网等让大量的MCU被引入市场,其中首要的目标是保持功率消耗尽可能小,并保持高水平的安全性,只支持连接选项为无线传输。尽管这样做可以确保在此领域的机会,同时其他必要的完全不同功能应用程序,处于被忽视的风险。

一个恰当的例子在系统设计中,有大量的多媒体数据需要处理。现代通用MCU对于这样的工作因装备不足,往往难以应付。 他们的处理资源一度处于不同的方向,试图处理进来的数据,在同一时间还必须参加其他标准的操作功能。 因此,可能会出现延迟问题。 这直接与其强制执行确定性操作的应用场景冲突。例如,复杂的机器视觉系统检查PCB上的焊料,不能被缓冲所中断。

在MCU提供足够的I/O通常是无法充分考虑的另一个领域,尽管现在存在于嵌入式设计中,有各种不同的接口技术。 例如,在MCU实现USB通常不容易做到,因为软件开发方面往往没有充分地被覆盖。 因此,嵌入式工程师通常没有拥有所需要的软件支持。 此外,MCU通常只具有USB从端(不是USB主端)功能。

应当体会到,一般来说,目前市场上大多数MCU的I/O支持远远不够。 提供广泛的连接功能,将在未来变得越来越重要。特别是可能需要对I/O进行分组,这将使得MCU更适合处理具体的应用程序类型。

MCU往往是工程师常采用的途径 - 当然系统单芯片(SoC)选项也可供考虑。 与MCU相比,提供更优化的解决方案、具更高的性能参数、与更小的占用面积和长期的成本优势。 然而,还有许多问题对他们的吸引力产生重大影响。 前期的财务投资,工程成本和SoC开发所涉及的时间都需要考虑。为了判断采取行动的理由,前提是未来对高单位需求的绝对信心,或者长时间不需要改变设计。 即使这样,也有相关的风险。 如果发现一个错误,那么可能需要时间来纠正这个问题,导致最终产品的发布延迟。 由于这样的原因,去购买现成的装备仍然可能是有利的。

然而绝大多数MCU供应商都集中在软件实现的特性和功能,Bridgetek的策略是更多功能通过硬件执行。 因此,本公司的FT900和FT930系列可以提供通用MCU缺乏的性能优化操作。 先进的桥接技术是关键。 通过使用它,这些MCU可以在快速 I/O 之间提供专用桥接,允许分立设计元件访问最适合的可用硬件。 这意味着MCU上不同程序处理和 I/O 元件的接口可以被完全确定性方式完成(毫无延迟发生的威胁)。

图1描述一个相关的应用实例。 这里存在触摸控制的多显示系统,其适合于部署在销售点(PoS)或数字广告系统环境。图像内容可以运用系统,呈现在4个显示屏幕上滚动。 触摸操纵可以被单独地于每个显示器运作或者同时于所有显示器中运作-从而提供更引人注目的用户体验,吸引人们的注意(零售店购物者,火车站乘客等)。 本示例强调Bridgetek FT930 MCU创建USB桥接的能力,然后通过专有的 D2xx USB 引擎控制4个独立的SPI外设。 在这种特殊情况下,外设是图形控制器芯片内置触摸功能。

通过在USB 2.0 D2XX通道的通信,MCU接收由主机PC提供的内容数据,并将其应用于不同的显示器。大型全景图像被分割成图像片断,并作为JPEG图像存储在主机PC上。 MCU向PC发送命令以获取所需的图像片断,并将其传送到相应的图形控制器,使得它们可以被解码和显示。它能够通过集成的四线式SPI(QSPI)接口资源控制4个连接的FT813 EVE图形控制器。这意味着能有效地作为控制中心 - 将数据分送到多个显示器(而不仅局限于单个点对点布局)。同时,MCU扫描4个触摸启用面板以进行任何用户输入,並记录加速,减慢或冻结图像内容的触摸和滑动。根据应用程序的性质,可以水平或垂直滚动图像。在任何给定时刻,获取、下载、解码和显示4个图像片段,以便实现平滑的滚动外观。如果尝试使用通用MCU来进行这种复杂的设置,则需要克服许多挑战。这些将首先涉及USB从端的开发代码(将会花费相当多的时间和精力)。此外,可能还需要菊花链连接几个MCU(提高材料清单成本,占用更多的PCB空间,增加系统功耗预算,增加总体复杂性)。此外,由于缺少QSPI功能,该菊花链可能对系统的速度造成严重的限制。

图2显示另一个应用程序实例 - 此实例与数据流相关。例如,这种设置可能有利于家庭的安全目的。“智能门铃”此类产品已经拥有越来越吸引众多广大民众关注。由远程相机捕获的视觉通过CAN总线(或者可能在一些情况下经由以太网)桥接到支持触控功能的显示器,使得设备可以被控制。在其他情况下,例如监视或工厂视察,用户将需要确保实时观看内容,而不会发生缓冲的威胁。通过触摸控制,他们可以冻结显示(如果他们看到潜在的问题),然后放大感兴趣的特定区域进行仔细检查。 MCU能够利用附随的EVE图形控制器的触控和音频特征来呈现来自摄影机的视频数据(加上屏幕显示的用户手册),同时还捕捉触控屏输入和播放合成的声音。数据流的速率适用于特定摄像机的分辨率和帧速率。 Bridgetek 的MCU具有CAN,摄像机连接和以太网端口功能有助于实现这类设置,而大多数通用MCU不具有所需的广泛接口,因此(再次)使得系统更难以实现。

最后一个实例是音频分配。 会议厅可以具有多个麦克风网络连接到不同扬声器的复杂布置。 这很可能要求以太网基础设施安装。 数据吞吐量和避免延迟问题的需要,此意味着MCU桥接将再次成为最好的方法。

简而言之,性能增强的MCU采用快速桥接显示其有效性在嵌入式系统的实现,如刚才所述。 他们能够提供一种更有效的方式来满足现代多媒体 /人机界面 /音频 / 数据通信系统设计所设定的要求,而不是当前过多功能的“一体适用”解决方案。 这将意味着工程师将不需被迫做出不必要的取舍。

来源: EEWorld

围观 359

1 嵌入式系统的知识体系

嵌入式系统的应用范围可以粗略分为两大类:电子系统的智能化(工业
控制、现代农业、家用电器、汽车电子、测控系统、数据采集等),计算机应用的延伸(MP3、手机、通信、网络、计算机外围设备等)。从这些应用可以看出, 要完成一个以MCU为核心的嵌入式系统应用产品设计,需要硬件、软件及行业领域相关知识。硬件主要有MCU的硬件最小系统、输入/输出外围电路、人机接口设计。软件设计有固化软件的设计,也可能含PC机软件的设计。行业知识需要通过协作、交流与总结获得。

概括地说,学习以MCU为核心的嵌入式系统,需要以下软硬件基础知识与实践训练:
①硬件最小系统(电源、晶振、复位、写入调试接口);
②通用I/O(开关量输入/输出,涉及各种二值量检测与控制);
③模/数转换(各种传感器信号的采集与处理,如红外、温度、光敏、超声波、方向等);
④数/模转换(对模拟量设备利用数字进行控制);
⑤通信(串行通信接口SCI、串行外设接口SPI、集成电路互联总线I2C、CAN、USB、嵌入式以太网、ZigBee技术等);
⑥显示(LED、LCD等);
⑦控制(控制各种设备,包括PWM等控制技术);
⑧数据处理(图形、图像、语音、视频等的处理或识别);
⑨各种具体应用。

万变不离其宗,任何应用都可以归入这几类。而应用中的硬件设计、软件设计、测试等都必须遵循嵌入式软件工程的方法、原理与基本原则。所以,嵌入式软件工程也是嵌入式系统知识体系的有机组成部分,只不过它融于具体项目的开发过程之中。

以上实践训练涉及硬件基础、软件基础及相关领域知识。计算机语言、操作系统、开发环境等均是达到这些目的的工具。有些初学者,容易把工具的使用与所要达到的真正目的相混淆。例如,有的学习者学了很长时间的嵌入式操作系统移植,而不进行实际嵌入式系统产品的开发,到最后也做不好一个嵌入式系统小产品,偏离了学习目标,甚至放弃嵌入式系统领域。这就是进入了嵌入式系统学习误区,下面对此作一些分析。

2 嵌入式系统的学习误区

关于嵌入式系统的学习方法,因学习经历、学习环境、学习目的、已有的知识基础等不同,可能在学习顺序、内容选择、实践方式等方面有所不同。但是,应该明确哪些是必备的基础知识,哪些应该先学,哪些应该后学;哪些必须通过实践才能获得;哪些是与具体芯片无关的通用知识,哪些是与具体芯片或开发环境相关的知识。

由于微处理器与微控制器种类繁多,也可能由于不同公司、机构出于自身的利益,给出一些误导性宣传,特别是我国嵌入式微控制器制造技术落后,使得人们对微控制器的发展,在认识与理解上存在差异,导致一些初学者进入嵌入式系统的学习误区,浪费了宝贵的学习时间。下面分析可能存在的几个误 区。

2.1 操作系统的困惑

如果说,学习嵌入式系统不是为了开发其应用产品,那就没有具体目标,诸如学习方法这样的问题也就不必谈了。实际上,这正是许多人想学,又不知从何开始学习的关键问题所在,不知道自己学习的具体目标。于是,看了一些培训广告,看了书店中种类繁多的嵌入式系统书籍,或上网以“嵌入式系统”为关键词进行查询,就参加培训或看书,开始“学习起来”。对于有计算机阅历的人,往往选择一个嵌入式操作系统就开始学习了。这有点像“瞎子摸大象”,只了解其一个侧面。这样如何能对嵌入式产品的开发过程有全面了解呢?针对许多初学者选择“XXX嵌入式操作系统+XXX处理器”的嵌入式系统入门学习模式,笔者认为是不合适的。建议是:首先把嵌入式系统软件与硬件基础打好了,再根据实际需要,选择一种实时操作系统(RTOS)进行学习实践。要记住:RTOS是开发某些类嵌入式产品的辅助工具,是手段,不是目的;许多类嵌入式产品,并不需要RTOS。所以,一开始就学习RTOS,并不符合“由浅入深、循序渐进”的学习规律。

RTOS本身由于种类繁多,实际使用何种RTOS,一般需要由工作单位确定。基础阶段主要学习RTOS的基本原理与RTOS上的软件开发方法,而不是学习如何设计RTOS。以开发实际嵌入式产品为目标的学习者,不要把过多的精力花在设计或移植RTOS上面。正如很多人使用Windows操作系统,而设计Windows操作系统的只有Microsoft。许多人“研究”Linux,但不使用它,浪费了时间。人的精力是有限的,学习必须有所选择。

2.2 硬件与软件的困惑

以MCU为核心的嵌入式技术的知识体系必须通过具体的MCU来体现、实践。但是,选择任何型号的MCU,其芯片相关的知识只占知识体系的20%左右,80%左右是通用的软件硬件及相关知识。80%的通用知识,必须通过具体实践才能获得,所以学习嵌入式技术一般要选择一个系列的MCU。

系统含有硬件与软件两大部分,它们之间的关系如何?有些学者,仅从电子的角度认识嵌入式系统。认为“嵌入式系统=MCU硬件系统+小程序”。这些学者大多具有良好的电子技术基础知识。实际情况是,早期MCU内部RAM小,程序存储器外接,需要外扩各种I/O,没有像USB、嵌入式以太网等这样较复杂的接
口。因此,程序占总设计量比例小于50%,使人们认为嵌入式系统(单片机)是“电子系统”,以硬件为主,程序为辅。但是,随着MCU制造技术的发展,不仅MCU内部RAM越来越大,Flash进入MCU内部改变了传统的嵌入式系统开发与调试方式,固件程序可以更方便地调试与在线升级,许多情况下与开发PC机程序的方便程度相差无几,只不过开发环境与运行环境不是同一载体而已。这使得嵌入式系统的软件硬件设计方法发生了根本变化。

有些学者,仅从软件开发角度认识嵌入式系统,甚至仅从嵌入式操作系统认识嵌入式系统。这些学者大多具有良好的计算机软件开发基础知识,认为硬件是生产厂商的事。他们没有认识到,嵌入式系统产品的软件与硬件均是需要开发者设计的。笔者常常接到一些关于嵌入式产品稳定性的咨询,发现大多数是由于软件开发者对底层硬件的基本原理不理解。特别是有些功能软件开发者,过分依赖于底层硬件的驱动软件,自己对底层驱动原理知之甚少。实际上,一些功能软件开发者,名义上在做嵌入式软件,其实仅仅是使用嵌入式编辑、编译环境而已,本质与开发通用PC机软件没有两样。而底层硬件驱动软件的开发,若不全面考虑高层功能软件对底层硬件的可能调用,也会使封装或参数设计得不合理或不完备,导致高层功能软件调用困难。可以看出,若把嵌入式系统的开发孤立地分为硬件设计、底层硬件驱动软件设计、高层功能软件设计,那么一旦出现问题,就可能难以定位。实际上,嵌入式系统设计是一个软件、硬件协同设计工程,不能像通用计算机那样,软件、硬件完全分开来看,而要在一个大的框架内协调工作。

学习嵌入式系统是以软件为主还是以硬件为主,或者如何选择切入点,如何在软件与硬件之间取得平衡?对于这个困惑的建议是:要想成为一名真正的嵌入式系统设计师,在初学阶段,必须打好嵌入式系统的硬件与软件基础。以下是从事嵌入式系统设计二十多年的美国学者JohnCatsoulis在《Designing Embedded Hardware》一书中关于这个问题的总结:嵌入式系统与硬件紧密相关,是软件与硬件的综合体,没有对硬件的理解就不可能写好嵌入式软件;同样,没有对软件的理解也不可能设计好嵌入式硬件。

2.3 片面认识嵌入式系统

嵌入式系统产品种类繁多,应用领域各异。在第1部分中,把嵌入式系统的应用范围粗略分为电子系统的智能化与计算机应用的延伸两大类。从初学者角度,可能存在分别从这两个角度片面认识嵌入式系统的问题。因此,一些从电子系统智能化角度认识嵌入式系统的学习者,可能会忽视编程结构、编程规范、软件工程的要求、操作系统等知识的积累。另一些从计算机应用的延伸角度认识嵌入式系统的学习者,可能会把通用计算机学习过程中的概念与方法生搬硬套到嵌入式系统的实践中,忽视嵌入式系统与通用计算机的差异。

实际上,在嵌入式系统学习与实践的初始阶段,应该充分了解嵌入式系统的特点,根据自身的已有知识结构,制定适合自身情况的学习计划。目标应该是打好嵌入式系统的硬件与软件基础,通过实践,为成为良好的嵌入式系统设计师建立起基本知识结构。学习过程中,具体应用系统可为实践载体,但不能拘泥于具体系统,应该有一定的抽象与归纳。例如,初学者开发实际控制系统时没有使用实时操作系统,但不要认为实时操作系统不需要学习。又例如,初学者可以一个带有实时操作系统的样例为蓝本进行学习,但不要认为任何嵌入式系统都需要实时操作系统,甚至为一个十分简明的实际系统加上不必要的实时操作系统。因此,片面认识嵌入式系统,可能导致学习困惑。应该根据实际项目需要,锻炼自己分析实际问题、解决问题的能力。这是一个长期的学习与实践过程,不能期望通过短期培训完成整体知识体系的建立,应该重视自身实践,全面地理解嵌入式系统的知识体系。

2.4 入门芯片选择的困惑

嵌入式系统的大部分初学者需要选择一个微控制器(MCU)进行入门级学习,面对众多厂家生产的微控制器系列,往往不知如何是好。

首先是关于位数问题,目前主要有8位、16位和32位MCU。不同位数的MCU各有应用领域,这一点与通用微机有很大不同。例如做一个遥控器,不需要使 用32位MCU,否则MCU芯片价格就已经超过遥控器价格需求。对于首次接触嵌入式系统的学习者,可以根据自己的知识基础选择入门芯片的位数。建议大多数初学者选择8位MCU作为快速入门芯片,了解一些汇编与底层硬件知识,之后再选16位或32位芯片进行学习实践。

关于芯片选择的另一个误区是认为有“主流芯片”存在,嵌入式系统也可以形成芯片垄断。这完全是一种误解,是套用通用计算机系统的思维模式,而忽视了嵌入式系统应用的多样性。关于学习芯片选择还有一个误区,即误认为选择工作频率高的芯片进行入门学习,更先进。实际上,工作频率高可能给初学者带来不少困难。

实际嵌入式系统设计不是追求芯片位数、工作频率、操作系统等因素,而是追求稳定可靠、维护、升级、功耗、价格等指标。初学者选择入门芯片,是通过某 一:MCU作为蓝本,获得嵌入式系统知识体系的通用基础。其基本原则是:入门时间较短、硬件成本较低,知识要素较多,学习难度较低。

3 基础阶段的学习建议

基于以上讨论,下面对广大渴望学习嵌入式系统的学子提出几点基础阶段的学习建议:

①嵌入式系统软件硬件密切相关,一定要打好软硬件基础。其实,只要找到正确的方法,加上努力,任何理工科学生,甚至非理工科学生,都能学好嵌入式系统。

②选择一个芯片及硬件评估板(入门芯片最好简单一点,例如8位MCU)、选择一本好书(最好有规范的例子)、找一位好老师(最好是有经验且热心的)。硬
件评估板的价格一定要在1000元以下,不要太贵,最好能有自己动手的空间。不花一分硬件钱想要学好嵌入式系统不实际,因为这是实践性很强的学科。好书,可以让人少走弯路,不被误导。好老师也可以是做过一些实际项目的学长(一定要找做过几个成功项目的学长或老师做指导,否则经验不足也可能误导),有教师指导,学习进程会加快(人工智能学科里有个术语叫无教师指导学习模式与有教师指导学习模式,无教师指导学习模式比有教师指导学习模式复杂许多。

③许多人怕硬件,其实嵌入式系统硬件比电子线路好学多了。只要深入理解:MCU的硬件最小系统,对I/O口、串行通信、键盘、LED、LCD、 SPI、
I2C、PWM、A/D(包括一些传感器)、D/A等逐个实验理解,逐步实践,再通过动手做一个实际的小系统,底层硬件基础就有了。各个硬件模块驱动程序的编写是嵌入式系统的必备基础。学习嵌入式系统的初期,这个过程是必须的。

④至于嵌入式实时操作系统RTOS,一定不要一开始就学,这样会走很多弯路,也会使你对嵌入式系统感到畏惧。等你软件硬件基础打好了,再学习就感到容易理解。实际上,许多嵌入式应用并不需要操作系统。也可以根据实际项目需要,再学习特定的RTOS。不要被一些嵌入式实时操作系统培训班的宣传所误导,而忽视实际嵌入式系统软硬件基础知识的学习。

⑤要避免片面地单纯从“电子”或“计算机软件”角度认识嵌入式系统。前面说过,嵌入式系统是软件与硬件的综合体。因此,要逐步从MCU的最小系统开始, 一点一点理解硬件原理及底层硬件驱动编程方法。要通过规范的例子,理解软件工程封装、可复用等思想。通过规范编程,积累底层构件(component),也就是一个一个模块;但是要封装得比较好,可复用。

⑥注重实验与实践。这里说的实验主要指通过重复来验证他人的工作,目的是学习基础知识,这个过程一定要经历。实践是自己设计,有具体的“产品”目标。如果花500元左右,自己做一个具有一定功能的小产品,且能稳定运行1年以上,就可以说接近入门了。

⑦关于入门芯片的选择。不要选太复杂的微控制器作为入门芯片,不能超越学习过程。不要一下子学习几种芯片。可以通过一个芯片入门,并具有一个实践经验后,根据实际需要选择芯片开发实际产品。注意,不要把微处理器(MPU与微控制器(MCU)概念相混淆,微处理器只是微控制器的内核。

⑧关于嵌入式操作系统的选择。可以等到具有一定实践基础后,选择一个简单、容易理解原理的嵌入式操作系统进行学习。不要一开始就学习几种操作系统,理解了基本原理,实践中确有实际需要再学习也不迟。人总是要不断学习的。

⑨关于汇编语言与C语言的取舍。随着:MCU对C编译的优化支持,对于汇编语言可以只了解几个必要的语句,而直接使用C语言编程。但必须通过第一个程序理解芯片初始化过程、中断机制、程序存储情况等,区别于PC机程序的内容。另外,为了测试的需要,最好掌握一门PC机编程语言。

⑩要明确自己的学习目的,并注意学习方法。要明确学习目的是打基础,还是为了适应工作需要而进行的短训。学习方法方面,要根据学习目的选择合适的学习途径,注意理论学习与实践、通用知识与芯片相关知识、硬件知识与软件知识的平衡,要在理解软件工程基本原理基础上理解硬件构件与软件构件等基本概念。

当然,以上只是基础阶段的学习建议。要成为良好的嵌入式系统设计师,还需要在实际项目中锻炼,并不断学习与积累经验。

来源:凌阳教育

围观 237

引言

当下,物联网、移动互联技术大刀阔斧地改变着整个世界。随着嵌入式技术的不断革新,32位MCU成为主流,64位MCU的应用范围也越来越广。与此同时,唱衰8位MCU即将消亡的言论从未停息……

事实上,在工业控制、安防、物联网、消费类电子等诸多领域,8位MCU的身影依然处处可见,而且不断推陈出新。从市场的占有率和销售额来看,8位MCU的市场份额甚至还在不断攀升。根据IHS的预测,2018年8位MCU的市场规模将增长到78亿美元,继续超过每年MCU市场营收的三分之一以上。

究竟是什么原因令8位MCU的生命力如此旺盛,市场潜力依然巨大呢?未来,8位MCU又有哪些新的发展趋势和应用领域呢?且听这些行业巨头们一叙。

业界声音

纵横市场数十年的8位MCU,至今仍是开发各种嵌入式系统的关键器件,甚至在未来的物联网(IoT)时代中也将占有一席之地。尽管近年来半导体厂商纷纷转换至32位ARM CortexM内核架构,进而招来许多有关8位MCU将走出历史舞台的宿论,但事实是,它仍然在市场上屹立不倒,而且在新型消费电子、物联网、工业控制、智能传感器和电信及数据通信设备中都可见其踪迹。

Microchip:8位MCU创新空间巨大

8位MCU的创新空间是十分巨大的,Microchip一直致力于该领域的创新和研发。Microchip的研发部门有很多创新的想法,并且不断地推出一些创新性的解决方案来保持8位单片机的生命力,因此8位单片机是不会消亡的。目前,市场上并没有其他厂商在8位单片机方面继续大量地投入,然而Microchip一直以来都非常注重8位单片机市场的创新与投入,而且,未来会进一步地扩大Microchip的市场份额。在短期内,就整个8位单片机的市场而言,并不会出现特别大的突发性的增长。

新一代的8位MCU更多的是朝智能模拟、创新性的外设这样的方向发展,Microchip会仔细地倾听市场的需求,通过创新性的产品(比如创新性的外设、独立于内核的外设),来更好地满足市场需求。今年Microchip会推陈出新,新的技术至少能够让Microchip在5~7年内保持技术的领先优势。因此,对于8位单片机市场,Microchip非常有信心。特别需要强调的一点是,新技术中会有越来越多集成化的智能模拟模块集成在一起。

可以看到,8位单片机在照明领域的应用非常广泛,包括消费类的照明、工业照明,以及汽车车灯的照明等等。当然,这只是应用的其中一个方面。而上述这些概念和互联网的概念都是相关的,比如说智能照明、智能车灯等等。除此之外,8位单片机在汽车领域应用得也非常多,比如智能汽车方面。

随着用户对于产品“与众不同”和“个性化”需求的加大,Microchip也推出了不同种类、不同版本的产品,能够让客户实现他的个性化,体现他的与众不同。Microchip集成了很多的外设,目的是帮助客户在成本和价值方面取得平衡。

Silicon Labs:8位MCU应用无处不在

相较于32位设计,基于传统8051内核的8位架构常被一些工程师认为太过老旧。事实上,8051内核一直在与时俱进,不断得到显著的升级,加上其长久以来在大量开发商和工程师的支持下,所积累的设备安装量和为之编写的数以百万计的代码,使嵌入式开发人员能够继续利用这些丰富的知识宝库,来缩减产品上市时间和测试成本。

经过Silicon Labs持续优化的8051架构正是具备更高性能的典型8位MCU之一。Silicon Labs以3级流水线冯·诺依曼(VonNeuman)架构对8051内核进行了现代化和“类RISC”化,并保持与原始内核代码兼容,从而获得了巨大的性能提升。

俗话说的好,万变不离其宗!广泛部署并经过长时间考验的8051指令集仍然是许多既需要功效、又需要高性价比应用的最佳选择。对于新兴的物联网(IoT)应用而言,可连接设备和传感器网络通常有严格的功耗、占用空间和预算限制,开发商会选择在终端节点中广泛使用小尺寸、低功耗且低成本的8051 MCU,并达到加速系统设计的目的。

8位MCU市场需求依然强劲,例如在近来特别红火的无人机中,内部的电机控制电路板上便搭载了8位MCU;而许多空间受限、性能密集型应用,例如光模块、测试和测量仪器、工业控制设备和智能传感器等,也都需要高模拟性能和外设集成度的8位MCU。以Silicon Labs新款Laser Bee MCU为例,其集成了高分辨率模/数转换器和数/模转换器、高精度温度传感器等多个元器件,将能提供更快的时钟及PWM性能。

新唐看好具有强大竞争优势的8位MCU

MCU市场仍处于成长阶段,各级别的MCU的需求量持续攀升,应用范围持续扩大。一般而言,在大量数据运算与图像影音处理等方面,以32位MCU为主;在控制类应用方面,进入市场较早的8位MCU产品则具备诸多竞争优势,例如 8位MCU产品很早进入消费类、医疗用品、工业控制、汽车电子等市场应用,产品稳定,性价比满足需求,至今仍占主导地位。这些已稳定量产的产品,由于安全可靠与成本优势,也成为8位 MCU市场的发展基石。

在对价格特别敏感的市场,更能凸显8位产品价格上的优势。伴随着丰富外设的加持,小家电市场随处可见8位MCU的踪迹,IC制程也由 0.35 μm、 0.25 μm 进入到0.18 μm及0.13 μm, 性能更强、功耗更低。由此可见,8位MCU需求量仍不断增加,市场份额仍具有上升的空间。以新唐今年的销售成绩而言,8051单片机的出货量大幅超出了预期。

新唐经营8位 MCU已超过20年,为客户累积了完整的链接库与应用经验,使研发周期大幅缩短。新唐MCU包含8位的12T、 4T、 1T 8051与32位 CortexM0/M4、ARM7、ARM9 CPU 内核, 产品线完整。根据新唐长久经营MCU市场的经验来看,对客户而言,MCU位数并非选型的关键因素,平台完整度、代码复用性与可移植性、产品质量稳定可靠,以及良好的客户服务, 才是决胜的重要因素。例如,新唐以8位 MCU为核心所开发的触摸按键系列,PCB板设计简单,具备高集成度、高抗干扰性能,加上工程师可在新唐开发平台简易且快速地完成产品设计、具有良好的开发体验,这些因素使新唐触摸系列深受客户欢迎。新唐认为,触控产品需求将会是推动新唐8位 MCU成长的重要驱动力,加上积累20年的深厚客户关系,8位 MCU市场潜力依然巨大。新唐将会持续提供高性价比的MCU、体贴的开发环境与技术支持,满足市场与客户需求。

何立民教授:8位MCU的生命力长盛不衰

当ARM系列不断吞噬8位MCU的市场份额时,有人认为32位MCU将取代8位MCU,8位MCU将会退出历史舞台。殊不知,ARM系列在传统嵌入式领域大肆扩张的同时,80C51成功地实现了华丽的转身,在嵌入式系统无限大的市场领域(如物联网、可穿戴设备)中获得新生,成为MCU中的不死鸟。

从MCU无限大的市场角度看,随着智能化工具的发展,MCU产品的市场需求日益扩大,从传统电子的智能化改造、新兴的智能化设备、智能化设备的分布、智能化设备总线、智能化设备局域网,直到物联网时代,无处不在的人工智能的感知与控制终端领域,都表明了MCU有一个无限大的市场。这个无限大市场的多样性决定了对MCU的多样需求,8位、32位、64位MCU没有好坏之分,主要体现在不同的应用领域,其技术各有所长,最重要的是取其所长,把它们应用在能充分发挥其长处的地方。

编辑视角

从嵌入式系统教育角度看,由于8位MCU具有稳定、便宜、易用的特点,以51系列单片机(8位MCU)的应用作为嵌入式系统教学是十分理想的,而且嵌入式系统的初学者以51系列单片机作为入门单片机的学习是较好的。学好了51单片机,今后再学习更为复杂的单片机就容易上手了。

从系统稳定性的角度看,在控制领域、安防领域、消费类电子等领域仍会大量地使用8位MCU,大量工业现场的恶劣环境注定了系统中的核心控制器件必须稳定、可靠、易维护。同时,工控设备器件选型有一个重要原则:芯片必须稳定可靠、应用成熟,器件所含有的功能和数量应略大于设计需求。就分配给它的任务而言, 51系列的8位单片机性能足矣,在满足需求的情况下,处理器越简单,稳定性就越强,越有利于产品的安全维护。

从市场产品需求看,在大部分嵌入式产品中,8位MCU就能满足嵌入式系统中80%~90%的基本需求,嵌入式产品最低的要求也是能处理8位二进制数据或代码,众多的嵌入式产品从内核到开发工具都是以8位内核为基础的,市场的需求及其自身性价比决定了它依然能活跃在这个舞台上。

文章来源:单机片与嵌入式系统应用

围观 483

好多人说编译器只是工具,重要的在于算法和思想。

这话说的本来没错,但要有一个条件在先:那就是你真正掌握了你所用的编译器。但,真正熟悉编译器的却并不多见。当你深入了解一个编译器后,你能像用汇编一样用C,可以像汇编那样随心所欲的操作MCU!

了解一个编译器,首先应该有汇编的基础,不要求能用汇编编写程序或做过项目,但至少看的懂!不熟悉汇编的嵌入式程序员是不合格的程序员!

了解一个编译器,最好的方法是看它自带的帮助文件,至少要看过Compiler User's Guide ,至少遇到问题会想到到帮助中查找方法,虽然帮助大多是E文。

工作以来一直使用keil MDK编译器,对于这个编译器的界面以及设置大家可以在网上搜一下就找到了,今天我们主要来看一看keil MDK编译器的一些细节,看看这些细节,你知道多少。

1. 在所有的内部和外部标识符中,大写和小写字符不同。

2. 默认情况下,char 类型的数据项是无符号的。它们可以显式地声明为signed char 或 unsigned char。

3.基本数据类型的大小和对齐:

注:

a. 通常局部变量保留在寄存器中,但当局部变量太多放到栈里的时候,它们总是字对齐的。例如局部char变量在栈里以4为边界对齐;

b. 压缩类型的自然对齐方式为1。使用关键字__packed来压缩特定结构,将所有有效类型的对齐边界设置为1.

4. 整数以二进制补码形式表示;浮点量按IEEE格式存储。

5. 有符号量的右移是算术移位,即移位时要保证符号位不改变。

6. 对于int类的值:超过31位的左移结果为零;无符号值或正的有符号值超过31位的右移结果为零。负的有符号值移位结果为-1。

7. 整数除法的余数的符号于被除数相同,由ISO C90标准得出;

8. 如果整型值被截断为短的有符号整型,则通过放弃适当数目的最高有效位来得到结果。如果原始数是太大的正或负数,对于新的类型 ,无法保证结果的符号将于原始数相同。所以强制类型转化的时候,对转换的结果一定要清晰。

9. 整型数超界不引发异常;像unsigned char test; test=1000;这类是不会报错的,赋值或计算时务必小心。

10. 默认情况下,整型数除以零返回零。

11. 对于两个指向相同类型和对齐属性的指针相减,计算结果如下表达式所示:
((int)a (int)b) / (int)sizeof(指向数据的类型)

12. 在严格C中,枚举值必须被表示为整型,例如,必须在2147483648 到+2147483647的范围内。但keil MDK自动使用对象包含enum范围的最小整型来实现(比如char类型),除非使用编译器命令enum_is_int 来强制将enum的基础类型设为至少和整型一样宽。超出范围的枚举值默认仅产生警告:#66: enumeration value is out of "int" range

13. 结构体:
struct {
char c;
short s;
int x;
} //这个结构体占8个字节

但是,结构体:
struct {
char c;
int x;
short s;
} //这个结构体占12个字节

这是为什么?

对于结构体填充,据定义结构的方式,keil MDK编译器用以下方式的一种来填充结构:
定义为static或者extern的结构用零填充;

栈或堆上的结构,例如,用 malloc() 或者 auto定义的结构,使用先前存储在那些存储器位置的任何内容进行填充。不能使用memcmp()来比较以这种方式定义的填充结构!

14. 编译器不对声明为volatile 类型的数据进行优化。 我发现还有不少刚入门的嵌入式程序员从没见过这个关键字.

15. __nop():延时一个指令周期,编译器绝不会优化它。如果硬件支持NOP指令,则该句被替换为NOP指令,如果硬件不支持NOP指令,编译器将它替换为一个等效于NOP的指令,具体指令由编译器自己决定。

围观 575

页面

订阅 RSS - 嵌入式