【产品】8位、16位、32位MCU究竟该如何选择?
现在,当工程师们在选择微控制器(MCU)时,讨价还价正在变得越来越普遍。考虑到可以选择的各种MCU产品数以千计,分辨出哪种MCU对某种应用是否合适确实存在一定的困难。与以前针对专门应用决定采用最佳性价比MCU的方法相比,工程师不得不询问更为广泛的问题,而且这一趋势必将随着MCU新功能的增加而继续下去。那么,在众多各具特色的8位、16位、32位MCU中究竟该如何选择呢?
以领先的MCU供应商SILICON LABS为例,其拥有丰富的8位和32位MCU产品线。比如,其被称为8位MCU杀手锏的C8051F39x/7x系列 MCU,搭载的片上温度传感器可提供更大温度范围(高达105°C)和±2°C的精确度,比其他同类MCU产品的温度精度高出5倍,而且通过改进温度补偿处理例程,可获得更好的终端产品可靠性。此外,与其他MCU产品不同的是,该系列MCU产品中的温度传感器无需工厂校准,从而降低生产成本。通过在极小封装内集成高性能模拟外设和极速8051 CPU内核,C8051F39x/7xMCU系列产品为光传输模块、传感器接口以及电风扇、烘干机、吸尘器、遥控玩具车等无刷直流电机应用提供优化的解决方案。
SiliconLabs另一类备受瞩目的8位MCU系列产品是针对物联网领域推出的EFM8 MCU。该MCU系列产品包括三种高集成度、外设丰富的MCU,即EFM8 Busy Bee,EFM8 SleepyBee和EFM8Universal Bee,这些MCU特别针对高性价比、超低功耗电容式触摸控制和精简USB连接而进行了优化。EFM8 MCU为嵌入式开发人员所能想到的所有8位应用提供了业内领先的简便性、能效、性能和成本节省的综合优势,应用涵盖家居和楼宇自动化、可穿戴、消费类电子、玩具、电机控制和工业IoT等。
SiliconLabs不仅具有8位MCU系列产品,还拥有丰富的32位MCU产品。例如,EFM32Gecko系列MCU。该系列MCU产品采用创新低能耗技术,节能模式唤醒时间缩短,可搭配各种外围设备,是电池驱动应用及其他需要高性能和低功耗系统的理想选择。该系列MCU中有一款名为Happy Gecko的MCU产品带有USB功能,提供业界最低USB功耗,从而实现更长的电池使用寿命以及能源收集型应用。它基于ARM Cortex-M0+内核和低能耗外设,为各类IoT应用简化USB连接设计,这些应用包括智能仪表、智能家居和楼宇自动化、报警和安全系统、智能配件和可穿戴设备等。
通过上面的介绍可以看出,就Silicon Labs一家MCU供应商而言,就有如此众多的MCU产品,而且这些还只是其广泛MCU产品线中的一部分。所以,在数量如此众多的MCU中如何做出选择,真的是值得工程师深思熟虑。
近日,Silicon Labs发表了一篇技术文章,分析了如何在8位MCU和32位MCU之间进行选择,可为工程师提供借鉴。为了便于比较,这篇文章中32位MCU采用了ARM Cortex-M架构,8位MCU则采用嵌入式开发人员非常喜欢的,且易于理解的8051架构。主要从以下8个方面进行比较:
1)系统规模
第一个一般性原则是,ARM Cortex-M内核更适用于较大的系统规模(> 64KB代码),而8051器件适用于较小的系统规模(< 8KB代码)。中等规模的系统可以选择两种方式,这取决于系统要执行的任务。有必要注意一点,在大多数情况下,外设组合将会发挥重要作用。如果需要3个UART、1个LCD控制器、4个时钟和2个ADC,你可能并不会在8位MCU上找到所有这些外设。
2)易用性 VS 成本和尺寸
对于中等规模的系统来说,使用任何一种架构都可以完成工作。但主要的权衡是选择ARM内核带来的易用性,还是8051设备带来的成本和物理尺寸优势。
ARM Cortex-M架构具有统一的存储模式,并且在所有常见编译器中支持完整的C99,这使得这种架构非常易于写固件。此外,还可得到一系列库和第三方代码。当然,这种易用性的代价就是成本。对于高复杂性、上市时间较短的应用或缺乏经验的固件开发人员来说,易用性是个重要因素。
尽管8位与32位部件相比有些成本上的优势,但真正的区别就在于成本级别。大家经常会发现具有2KB/512B(Flash/RAM)的小容量8位器件,而却很少见低于8KB/2KB的32位器件。在不需要很多资源的系统中,该范围的存储容量能够让系统开发人员实现显著降低成本的解决方案。因此,对成本极为敏感或仅需较小存储容量的应用会更倾向于选择8051解决方案。
通常,8位器件也具有物理尺寸上的优势。例如:Silicon Labs提供的最小的32位QFN封装为4mm×4mm,而基于8051的8位器件的QFN封装可小至2mm×2mm。芯片级封装(CSP)的8位和32位架构之间的差异较小,但却使成本增加,且组装较难。对于空间严格受限的应用来说,通常需要选择8051设备来满足限制要求。
3)通用代码和RAM效率
8051 MCU成本较低的主要原因之一是它通常比ARM Cortex-M内核更高效的使用Flash和RAM,这允许系统采用更少资源实现。系统越大,这种影响就越小。
注意这种8位存储资源的优势并不总是如此,这一点很重要。在某些情况下,ARM内核会像8051内核一样高效或比其更高效。例如:32位运算仅需要一条ARM设备指令,而在8051 MCU上则需要多条8位指令。显然,这种代码在ARM架构上有更高的执行效率。
ARM架构在Flash/RAM尺寸较小时的两个主要缺点是:代码空间效率和RAM使用的可预测性。
首要也是最明显的问题是通用代码空间效率。8051内核使用1字节、2字节或3字节指令,而ARM内核使用2字节或4字节指令。通常情况下,8051指令更小,但这一优势因实际上花费许多时间而受到削弱,ARM内核比8051在一条指令下能做更多工作。32位运算就是这样一个示例。实践起来,指令宽度是能在8051上产生适度的更密集代码。
4)延迟时间
两种架构的中断和函数调用延时存在很大差异,8051比ARMCortex-M内核更快。此外,高级外设总线(APB)配备的外设也会影响延时,这是因为数据必须通过APB和AMBA高性能总线(AHB)传输。最后,当使用高频内核时钟时,许多基于Cortex-M的MCU需要分配APB时钟,这也增加了外设延时。
我做了个简单的实验,实验中的中断是通过I/O引脚触发的。该中断对引脚发出一些信号,并根据引发中断的引脚更新标志。然后我测量了一些参数,如下表所示。这里的列表显示了32位的实现。
8051内核在中断服务程序(ISR)进入和退出时显示出了优势。但是,随着中断服务程序越来越大和执行时间的增加,这些延迟将变得微不足道。和已有原则一致,系统越大,8051的优势越小。此外,如果中断服务程序涉及大量数据迁移或大于8位的整数数据运算,中断服务程序执行时间的优势将转向ARM内核。例如,一个采用新样本更新16位或32位移动平均的ADC ISR可能在ARM设备上执行得更快。
5)控制 VS 处理
8051内核的基本功能是控制代码,其中对于变量的访问是分散的,并且使用了许多控制逻辑(if、case等)。8051内核在处理8位数据时也是非常有效的,而ARM Cortex-M内核擅长数据处理和32位运算。此外,32位数据通道使得ARM MCU复制大包的数据更加有效,因为它每次可以移动4个字节,而8051每次仅能够移动1个字节。因此,那些主要把数据从一个地方移动到另一个地方(例如UART到CRC或者到USB)的流数据处理的应用更适合选择基于ARM处理器的系统。
来做个简单的实验。我们编译以下两种架构的函数,变量大小为uint8_t、uint16_t和uint32_t。
uint32_tfuncB(uint32_t testA, uint32_t testB){
return (testA * testB)/(testA—testB)
}
|data type | 32bit(-o3) | 8bit |
| uint8_t | 20 | 13 | bytes
| uint16_t | 20 | 20 | bytes
| uint32_t | 16 | 52 | bytes
随着数据量的增加,8051内核需要越来越多的代码来完成这项工作,最终超过了ARM函数的大小。16位的情况下在代码大小上几乎类似,在执行速度上稍好于32位内核,因为相同代码通常需要更少周期。还有一点很重要,那就是要注意到,只有采用优化的ARM编译代码时,这种比较才有效。未优化的代码需要花费几倍长的时间。
这并不意味着有大量数据移动或32位运算的应用就不应该选择8051内核完成。在许多情况下,其它方面的考虑将超过ARM内核的效率优势,或者说这种优势是不相关的。考虑使用UART到SPI桥接器。该应用花费大部分时间在外设之间复制数据,而ARM内核会更高效地完成该任务。然而,这也是一个非常小的应用,可能小到足以放入一个仅有2KB存储容量的器件就足够合适。
尽管8051内核效率较低,但它仍然有足够的处理能力去处理该应用中的高数据速率。对于ARM器件来说,可用的额外周期可能处于空闲循环或“WFI”(等待中断),等待下一个可用的数据片到来。在这种情况下,8051内核仍然最有意义,因为额外的CPU周期是微不足道的,而较小的Flash封装会节约成本。如果我们要利用额外的周期去做些有意义的工作,那么额外的效率将是至关重要的,且效率越高越可能越有利于ARM内核。这个例子说明,清楚被开发系统所关注的环境中的各种架构优势是何等重要。做出这个最佳的决定是简单但却重要的一步。
6)指针
8051器件没有像ARM设备那样的统一存储映射,而是对访问代码(Flash)、IDATA(内部RAM)和XDATA(外部RAM)有不同的指令。为了生成高效的代码,8051代码的指针会说明它指向什么空间。然而,在某些情况下,我们使用通用指针,可以指向任何空间,但是这种类型的指针是低效的访问。例如,将指针指向缓冲区并将该缓冲区数据输出到UART的函数。如果指针是XDATA指针,那么XDATA数组能被发送到UART,但在代码空间中的数组首先需要被复制到XDATA。通用指针能同时指向代码和XDATA空间,但速度较慢,并且需要更多的代码来访问。
专用区域指针在大多情况下能发挥作用,但是通用指针在编写使用情况未知的可重用代码时非常灵活。如果这种情况在应用中很常见,那么8051就失去了其效率优势。
7)内核优势
我已经注意到多次,运算倾向于选择ARM,而控制倾向于选择8051,但没有应用仅仅着眼于计算或控制。我们怎样才能表征广义上的应用,并计算出它的合适范围呢?
让我们考虑一个由10%的32位计算、25%的控制代码和65%的一般代码构成的假定应用时,它不能明确地归于8位或32位类别。这个应用也更注重代码空间而不是执行速度,因为它并不需要所有可用MIPS,并且必须为成本进行优化。成本比应用速度更为重要的事实在一般代码情形下将给8051内核带来微弱优势。此外,8051内核在控制代码中有中间等级的优势。ARM内核在32位计算上占上风,但是这并非是很多应用所考虑的。考虑到所有这些因素,这个特殊的应用选择8051内核更加合适。
如果我们做一细微的改变,假设该应用更关心执行速度而非成本,那么通用代码不会倾向于哪种架构,并且ARM内核在计算代码中全面占优。在这种情况下,虽然有比计算更多的控制代码,但是总的结果将相当均衡。
显然,在这个过程中有很多的评估,但是分解应用然后评估每一组件的技术将帮助确保我们了解在哪种情况下哪种架构有更显著的优势。
8)功耗
当查阅数据手册时,很容易根据功耗数据得出哪个MCU更优的结论。虽然睡眠模式和工作模式电流性能在某些类型MCU上确实更优,但是这一评估可能会非常具有误导性。
占空比(在每个电源模式上分别占用多少时间)将始终占据能耗的主导地位。除非两个器件的占空比相同,否则数据手册中的电流规格几乎是没有意义的。最适合应用需求的核心架构通常具有更低的能耗。
假设有一个系统,在器件被唤醒后添加一个16位ADC样本到移动平均,然后返回到休眠状态,直到获取下一个样本时才又被唤醒。该任务涉及大量16位和32位计算。ARM器件将能够进行计算,并比8051器件更快返回到休眠状态,这会让系统功耗更低,即使8051具有更好的睡眠和工作模式电流。当然,如果进行的任务更适合8051器件,那么MCU能耗由于相同的原因而对系统有利。
外设特性也能够以这样或那样的方式影响功耗。例如,大多数Silicon Labs的EFM32 32位MCU具有低功耗的UART(LEUART),能够在低功耗模式下接收数据,而却只有两个EFM8 MCU具有此功能。这一外设影响电源的占空比,且在任何需要等待UART通信的应用中都比缺乏LEUART的EFM8在很大程度上有利于EFM32MCU。遗憾的是,除了让MCU供应商的本地应用工程师利用EFM8来解决问题,没有简单的指南来评估这些外设因素。系统设计人员还应了解各种MCU能耗模式下可完成的处理任务。
看到这里您是否又有项目灵感需实现,点击下面开发软件帮你忙。
Silicon Labs Simplicity Studio平台开发工具 详情>>>
Silicon Labs 集成开发环境工具 详情>>>
Silicon Labs 配置向导2开发工具 详情>>>
Silicon Labs FLASH编程开发工具 详情>>>
Silicon Labs 8位MCU Keil PK51 开发工具 详情>>>
Silicon Labs ToolStick 开发工具 详情>>>
Silicon Labs μVision 调试驱动程序开发工具 详情>>>
Silicon Labs 生产编程器开发工具 详情>>>
Silicon Labs .HEX转化.SVF开发工具 详情>>>
Silicon Labs USB复位实用程序开发工具 详情>>>
- |
- +1 赞 0
- 收藏
- 评论 6
本网站所有内容禁止转载,否则追究法律责任!
相关研发服务和供应服务
评论
全部评论(6)
-
用户_4277 Lv3 2019-06-14学习了
-
闲云 Lv7. 资深专家 2019-03-27介绍的不错
-
新生物 Lv8. 研究员 2018-09-18学习了
-
Roonie Lv7. 资深专家 2018-03-15很不错
-
ZLongLee Lv5. 技术专家 2018-01-06初学者很适合看看
-
SunnyPlus Lv7. 资深专家 2017-11-19介绍很详细
相关推荐
【产品】小蜜蜂8位MCU助您轻松迎接物联网时代
Silicon labs推出了一款集小封装和高性价比于一身的多用途8位MCU EFM8BB1,可轻松替代普通8051家族的MCU产品。
新产品 发布时间 : 2019-07-05
【产品】3x3mm极小封装高性能8位MCU,关闭模式下耗电电流仅仅0.2μA
Silicon Labs的EFM8LB1系列激光小蜜蜂8-bit 微控制器系列集成丰富的外设模块,体积小,适合高性能模拟应用产品的设计。
新产品 发布时间 : 2017-09-19
【产品】集功耗与性能于一身的32位MCU将颠覆微控制器市场
EFM32LG是Silicon Labs推出的一款功耗可低至20nA 的32位MCU,系统性能出色,外设资源丰富。
新产品 发布时间 : 2017-02-03
【经验】如何正确使用8位MCU的PortMatch功能
Silicon Labs的8位MCU(C8051和EFM8)都具有PortMatch功能,此功能允许一个或多个端口IO引脚上的逻辑电平变化触发系统事件。
设计经验 发布时间 : 2018-02-08
【经验】32位MCU LEUART位周期抖动大,该如何解决?
Silicon Labs 32位MCU EFM32,当基于32.768kHz时钟使用LEUART(@9600bps)进行通讯的时候,发现存约1%误码,原因是什么?如何解决?
设计经验 发布时间 : 2019-09-06
【技术】预安装BOOT的新一代的8位MCU
Silicon labs的EFM8系列MCU是C8051F的升级换代产品。较C8051F不同的是,其在出厂时已经固化好BOOT程序。
技术探讨 发布时间 : 2019-07-11
EFM8LB低功耗8位MCU在使用BOOTLOADER时,如何让程序进入BOOTLOADER?
EFM8LB的芯片进入BOOTLOADER有三种方法。第一种:上电后如果0X0000地址的数据为0XFF,程序会直接进入BOOTLOADER. 第二种:在上电复 位时,如果C2D引脚保持低电平超过50uS,程序会进入BOOTLOADER.第三种: 应用程序将R0赋值为0XA5,然后执行软启动,启动后程序会自动进入 BOOTLOADER。
技术问答 发布时间 : 2017-10-10
【技术】 EFM8SB2系列8位MCU复位源详解
EFM8SB2系列是Silicon Labs最节能的8位MCU之一,其120uA/MHz 运行功耗,0.5uA 睡眠电流,可以极大延长电池的使用寿命。
技术探讨 发布时间 : 2019-07-19
推荐一款带ADC的小封装8位MCU,适用于对模拟性能、MCU性能以及电路板尺寸有比较高要求的场合。
推荐EFM8LB11系列8位MCU,该系列MCU内部集成了高精度ADC(14位)、4个12位DAC、内置温度传感器、模拟比较器以及丰富的数字外设和通信接口,FLASH大小为16/32KB,RAM为1.25/2.25KB,封装包括QFN24、QFN32、QFP32以及QSOP24,最小封装3x3mm,具有高性能、低功耗、小封装等特性,非常适用于高性能、低功耗、小封装,对模拟外设有更高要求的应用设计。
技术问答 发布时间 : 2017-05-05
【技术】小封装、多用途8位MCU EFM8BB3系列MCU工作模式详解
EFM8BB3系列MCU是Silicon Labs公司推出的一款小封装、多用途8位MCU,该MCU最高运行频率可达49MHz,其RAM容量最大为4352B,FLASH容量最大可达64KB。
技术探讨 发布时间 : 2017-12-04
Silicon Labs的EFM8 8位MCU应用在汽车电子哪部分?
Silicon Labs的EFM8 8位MCU 可以用在电机驱动部分,倒车雷达等;【应用】EFM8BB2 8位MCU在倒车雷达上的应用
技术问答 发布时间 : 2019-04-22
为什么在8位MCU C8051F392上运行正常的程序增加了一个全局变量后就无法执行到主程序中?
8位MCU C8051F392芯片内部集成有看门狗功能,这个功能默认是开启的,当全局变量过多时,在C语言的程序初始化没有结束时看门狗已经复位了,所以无法执行到主程序中,解决 办法是将STARTUP.A51添加到项目中,并在STARTUP.A51文件中将看门狗关闭。
技术问答 发布时间 : 2017-10-10
何立民教授:8位MCU可能是永续的不死鸟
在市场多样化的背景下MCU的机遇被无限放大,最终8位、32位和64位MCU将三分天下,呈技术互补的发展趋势。本文是业内知名专家何立民教授深入地分析了8位MCU的蜕变及发展。
新技术 发布时间 : 2016-07-04
Silicon Labs(芯科科技) EFM32HG系列应用于工业、汽车市场的MCU微控制器官方数据手册
描述- EFM32 Happy Gecko系列凭借无与伦比的性能和超低功耗变革了8至32位MCU市场,成为了对能源敏感的电池供电设备和物联网(IoT)应用的最佳解决方案。
型号- EFM32HG210F64-B-QFN32R,EFM32HG321,EFM32HG322,EFM32HG108F32-B-QFN24R,EFM32HG308F64-B-QFN24R,EFM32HG309F64-B-QFN24R,EFM32HG222F64-B-QFP48R,EFM32HG210F64-B-QFN32,EFM32HG350F32-B-CSP36R,EFM32HG210F32-B-QFN32,EFM32HG210,EFM32HG310F64-B-QFN32R,EFM32HG222F32-B-QFP48,EFM32HG309F32-B-QFN24,EFM32HG322F32-B-QFP48,EFM32HG110F32-B-QFN24R,EFM32HG108F32-B-QFN24,EFM32HG308F32-B-QFN24,EFM32HG322F32-B-QFP48R,EFM32HG,EFM32HG321F32-B-QFP48R,EFM32HG350F64-B-CSP36,EFM32HG210F32-B-QFN32R,EFM32,EFM32HG110F32-B-QFN24,EFM32HG108,EFM32HG222,EFM32HG110F64-B-QFN24,EFM32HG108F64-B-QFN24R,EFM32HG308F32-B-QFN24R,EFM32HG309F64-B-QFN24,EFM32HG309F32-B-QFN24R,EFM32HG310F64-B-QFN32,EFM32HG222F32-B-QFP48R,EFM32HG308,EFM32HG309,EFM32HG350F64-B-CSP36R,EFM32HG321F32-B-QFP48,EFM32HG310F32-B-QFN32,EFM32HG321F64-B-QFP48,EFM32HG350,EFM32HG110,EFM32HG308F64-B-QFN24,EFM32HG310F32-B-QFN32R,EFM32HG322F64-B-QFP48R,EFM32HG110F64-B-QFN24R,EFM32HG310,EFM32HG322F64-B-QFP48,EFM32HG108F64-B-QFN24,EFM32HG222F64-B-QFP48,EFM32HG350F32-B-CSP36,EFM32HG321F64-B-QFP48R
8位MCU EFM8BB21F16,是否可以在编译代码时指定MCU lock 字节的值 ?
在使用Keil C51工具链时,通过BL51或LX51来实现 首先,需要在代码中的某个位置初始化lock 字节的设定。如,创建”lockbyte.c”,然后加入: #include const uint8_t code lockbyte = 0x00; 这段代码将会在flash中占用一个byte,且其初始值为0。为了将这个字节放置在flash的lock字节位置,需要使用到链接器。 关于lock字节的地址,请查阅相应MCU的参考手册。例如EFM8BB1F8的lock 字节在flash的0x1FFF位置。 如果使用Simplicity Studio,链接器的指令在如下位置修改,Project -> Properties -> C/C++ Build -> Settings-> Keil 8051 Linker >Miscellaneous。然后在[Additional Flags]中添加链接器指令。 如果使用LX5(1)请在[Additional Flags]中添加如下命令: SEGMENTS(?CO?LOCKBYTE(C:0x1FFF))
技术问答 发布时间 : 2017-10-10
电子商城
现货市场
服务
可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。
最小起订量: 1000 提交需求>
可定制板装式压力传感器支持产品量程从5inch水柱到100 psi气压;数字输出压力传感器压力范围0.5~60inH2O,温度补偿范围-20~85ºС;模拟和数字低压传感器可以直接与微控制器通信,具备多种小型SIP和DIP封装可选择。
提交需求>
登录 | 立即注册
提交评论