微控制器实时操作系统实践4选择正确的MCU

发布时间 2023-06-12 22:32:03作者: 磁石空杯

4选择正确的MCU

本章是关于微控制器单元(MCU)选择的速成课程,主要针对那些没有深厚硬件背景的工程师。它并不试图成为一份详尽的清单,列出你在为新项目选择硬件时需要知道和考虑的一切。它确实提供了关于区分和选择MCU设备的许多因素的介绍。最后,你将了解足够多的关键考虑因素,以便有效地研究MCU并与团队中的硬件工程师讨论潜在的候选人。通过加强硬件/固件合作,并在第一时间为项目选择合适的MCU,你将避免硬件重新设计和进度延误。

我们将首先介绍为你的项目选择一个合适的MCU所要考虑的广泛因素。之后,我们将讨论不同开发硬件之间的权衡。对STM32系列进行简短的介绍,以显示供应商如何倾向于对其产品系列进行分组。在本章的最后,我们将比较几个以STM32 MCU为核心的不同开发板(dev board),以说明为什么我们要使用这样的开发板。

参考资料

MCU 考虑因素

选择微控制器本身而不是开发板时需要考虑一些因素。 假设该项目包含完全定制的电子产品,则对选择的确切 MCU 没有限制,就像您仅在开发板之间进行选择时一样。 学生和爱好者有时会人为地进一步限制自己,有时会忠于某些生态系统并且只从这些生态系统内的开发板(例如 Arduino 或 mBed)中进行选择。 虽然任何生态系统在本质上都没有错,但如果您无法考虑其他解决方案或无法理解每个硬件为特定项目带来的独特优势,您将无法成长为专业工程师。

核心考虑

  • 是否适合?
  • 能运行我所有的代码吗?
  • 成本是多少?
  • 是否容易获得?
物理尺寸

根据设计的不同,MCU的尺寸可能是一个重要的因素。如果你正在开发一个可穿戴或便携式设备,尺寸很可能是你的首要考虑因素。有时,预包装的MCU太大,设计者需要采用板载芯片(MCU的硅芯片直接粘合在印刷电路板(PCB)上,而不是放在单独的塑料包装中)。另一方面,大型的机架式设备往往有足够的空间容纳任何尺寸的MCU,以完成工作。

给那些有兴趣设计自己硬件的提示--包装类型将在PCB的复杂性以及组装的难易程度上起作用(特别是在原型设计阶段)。如果你的原型将被手工组装,任何鸥翼式封装,如四平盒(QFP),都是最容易的。在QFP之后,四平包无引线(QFN)封装仍然容易手工焊接。除非你是个焊接高手,否则一般最好不要手工组装球栅阵列(BGA)!

ROM

只读存储器(ROM Read-only memory)是同一个系列的MCU的相当大的区别因素,ROM大小与价格密切相关。根据一个产品系列中不同型号的数量,可能有多个MCU具有非常相似的外围设备。这些MCU很可能具有相同的物理尺寸,但却有明显不同的内存数量。如果你的应用对成本很敏感,但所需的ROM是未知的,可以考虑以下方法:

  • 选择一个MCU系列,在兼容的空间里提供多种闪存尺寸。
  • 从该系列中拥有最多ROM的MCU开始开发。这为增加功能提供了最大的灵活性。
  • 在知道最终的image尺寸后,可以在开始大规模生产前选择精确的MCU(具有较小的闪存尺寸)。

当采取这种方法时,你需要确保为未来的功能留下足够的空间,假设你的产品能够接受现场更新的固件。另外,一定要仔细检查不同型号的外设分配情况--针脚兼容并不总是意味着固件兼容!
所需的ROM数量差别很大,取决于有多少代码需要加载到设备上。如果你一直在使用8位MCU,那么当你转到32位架构(如ARM)时,你可能会感到非常惊讶。与8位架构相比,在32位架构上实现类似的程序将需要更多的闪存空间。好消息是,闪存的尺寸已经跟上了,所以几乎总是可以找到一个具有足够板载闪存的MCU来满足你的应用。将第三方库拉到你的代码库中,通常在闪存方面是相当昂贵的,所以如果你选择走这条路,就要注意了。

RAM

片上随机存取存储器(RAM random access memory)的数量是另一个需要考虑的因素--它通常会跟随特定设备的闪存数量。具有较大ROM的部件通常会有更多的RAM。需要大量RAM的几个例子是:需要大型数据缓冲区的数据处理、复杂的网络堆栈、用于通信的深层缓冲区、GUI(尤其是那些需要帧缓冲区的GUI),以及任何运行虚拟机的解释语言(即MicroPython和Lua)。

例如,假设你的应用程序需要一个高分辨率的显示器。如果显示器没有自己的帧缓冲器的板载控制器,你可能已经在外部RAM领域了。驱动这种类型的显示器所需的缓冲区大小可能会超过MCU上的可用RAM。另一方面,如果你正在建立简单的控制系统,只有有限的连接和用户界面能力,那么少量的RAM可能就是所需的全部。

另外,请注意FreeRTOS中的每个任务都需要它自己的堆栈(一般在Cortex-M端口上至少有512字节),所以如果需要大量的任务,将很容易快速利用几KB的RAM。

从固件工程师的角度来看,外部RAM似乎是免死金牌(谁不想把可用的RAM增加近一个数量级)--但所有这些功能都是有代价的。除非你的系统绝对需要它,否则最好避免在MCU的地址/数据总线上使用外部RAM。它需要额外的PCB空间,消耗更多的电力,并最终推高PCB和材料清单(BOM)的成本。由于长度调整的要求和所涉及的信号数量,在增加用于访问外部RAM的外部高速并行总线时,PCB布局会相当复杂。由于所有的高速信号,该设计也将更有可能发出EMI。尽管它提供了大量的空间,但外部RAM通常比板载RAM稍慢,这可能导致更复杂的链接器文件(如果某些功能有非常严格的时间限制)。其他值得考虑的因素包括正确设置RAM的时序参数和缓存一致性问题,如果你试图通过使用数据缓存来加速对外部RAM的访问(详情请参考进一步阅读部分)。

尽管有这么多的缺点,拥有外部RAM可以实现很多功能,比如在RAM中缓存整个固件镜像以便升级的能力,功能丰富的GUI框架,复杂的网络堆栈,以及复杂的信号处理技术。与其他任何要求一样,需要做出权衡。

CPU时钟

由于我们将讨论限制在具有相同底层架构的MCU上,因此具有更快的核心时钟速率的MCU将比具有较慢时钟速率的MCU更快地执行同一组纯软件功能。请注意前面声明中的关键词 "纯"--有时,有一些板载硬件外设可以对执行速度产生巨大的影响,而这与CPU时钟速率无关(例如Cortex-M4内核上的硬件浮点和DSP功能)。

另一件需要注意的事情是设备的绝对最大时钟速率与应用的实际时钟速率。例如,一些MCU的最大时钟频率与生成USB外设所需的内部48MHz时钟不兼容,因此,如果同时使用USB外设,它就不能以最大速度使用。

中断处理

在ARM Cortex-M系列中,中断处理都非常相似。所有器件都包括一个带有可重定位向量表的嵌套向量中断控制器(NVIC)和一个外部中断控制器(EXTI)。器件的具体考虑包括可用的外设中断和如何将其映射到NVIC,以及如何将外部中断复用到EXTI。

价格

根据不同的应用,BOM的成本可能是一个重要的驱动因素,也可能几乎不是考虑因素。一般来说,在大批量的应用中,BOM成本会受到越来越多的关注。然而,对于小批量产品,通常明智的做法是更多地关注最大限度地减少产品的开发时间和努力,而不是尽可能地实现最低的BOM成本。通过专注于最小化小批量产品的工程努力和开发时间,该产品将更快地进入市场。产品不仅能更快地开始产生收入,而且还能减少非经常性工程(NRE)成本。更少的NRE导致正在开发的产品的投资回报率(ROI)更快。更快的投资回报率最终使经理和首席执行官们非常高兴 在这种情况下,为每年销售几十种产品的BOM花费几美元而担心--牺牲几周或几个月的开发努力--很少是一个明智的权衡。

可用性

初级工程师经常忽略的一个方面是MCU的预期和保证可用性。一个零件在项目开始时可以购买并不意味着它在最终产品销售的整个过程中都可以使用。在消费类设备的情况下,这可能不是一个大问题。这是因为这些设备可能有极高的产量,但任何单一的修订版只在有限的时间内(从几个月到一两年)进行生产。

将消费电子的计划淘汰思维与工业、电信或航空航天方面的东西进行对比。在这些行业中,开发时间表可以用年来衡量,所需的支持期往往是十年或更长。这就是为什么零件的可用性是一个非常现实的考虑。一定要调查制造商对可用性的保证,并根据他们的历史、声誉和对项目的风险进行权衡--在完成了80%的设计后,却发现在预生产期间无法找到MCU,这不是一个令人愉快的经历!

外围设备

与CPU的桌面世界相比,处理器本身通常是关注的中心,由于范围的增加,选择合适的MCU更为复杂。许多不同的硬件都包含在同一个芯片上,这使我们能够针对速度、功率、CPU利用率或BOM成本优化解决方案。在一个高度受限的设计中,所有这些因素都可能起作用,需要做出权衡。

本节将介绍一些基于Cortex-M的MCU上常见的硬件外设,旨在对它们进行极为简要的介绍,目的是告诉你为什么每种类型的外设在设计中都会有帮助。

连接性

在当今物联网(IoT Internet of Things)不断增长的连接生态系统中,MCU上的板载网络功能对项目来说是一个福音。...只要有合适的固件来驱动它。重要的是要认识到,拥有一个外设并不等同于拥有全部功能。例如,仅仅因为MCU支持缩小的媒体独立接口(RMII reduced media independent interface)和网络中的物理层(PHY)并不意味着你可以立即获得完整的TCP/IP协议栈--所有的固件功能都需要从某个地方来。植入设备的潜在连接性可以包括以太网、RMII、802.11(WiFi)、802.15.1(蓝牙)和802.15.4(Zigbee、HART等等)。

当涉及到无线通信时,事情就变得有点复杂了,因为产品将需要通过适当机构的批准程序,这取决于地理位置的不同。预先认证的射频(RF)模块可用于最大限度地减少开发适当认证的终端产品所需的努力和成本。

由于专门的PCB布局、监管要求和复杂的网络堆栈,促进无线通信的板载MCU外设并不像它们对小批量产品首次出现时那样有用。同样,不要因为简单地指定一个有硬件的部件而陷入虚假的成就感,因为无线通信堆栈可能非常复杂,无线认证测试也很昂贵。

内存保护单元

内存保护单元(MPU Memory protection units )是用来确保代码只访问它被允许的RAM范围。如果使用得当,MPU可以确保更高的系统稳定性和更高的安全性,因为应用程序不太可能通过访问它不应该访问的内存而造成意外的后果。

硬件浮点单元

如果你的应用要计算大量的浮点数字,那么硬件浮点单元(FPU hardware floating-point unit )会非常有用。直到过去十年左右,在大多数基于MCU的嵌入式系统中,浮点数字通常是最好避免的。更快的处理器的出现开始改变了这一点。现在,FPU通常在硬件中实现。由于有了FPU,许多不同的应用可以从使用浮点数学中受益,而不会产生通常与基于软件的库实现有关的CPU性能缺陷。

单精度(32位)FPU在Cortex-M4处理器上是可选的,而基于Cortex-M7的处理器增加了对双精度(64位)浮点运算的可选硬件支持。

数字信号处理功能

除了基于硬件的浮点支持所带来的性能提高外,基于Cortex-M4和Cortex-M7的MCU还在硬件中嵌入了可选的数字信号处理(DSP digital signal processing)功能,这可以大大加快一些复杂的算法,并可能有助于减少固件工程师的编码负担。

直接内存访问通道

直接内存访问(DMA Direct memory access)在需要高带宽或高度事件驱动代码的各种情况下都非常有用。DMA控制器通常能够与MCU外设以及RAM的不同部分互动。它们负责填充外设寄存器和RAM,完全不涉及CPU。这些自主传输可以通过大大减少中断负荷和上下文切换来释放大量的CPU时间。

关于DMA外设需要记住的一点是,所有通道并不总是映射到所有外设。某些通道的带宽可能比其他通道高。这在需要多个高带宽设备的系统中最为显著。对于像这样具有挑战性的系统,固件和硬件工程师必须一起工作,以确保硬件设计不会给固件带来障碍。

通信接口

我们已经介绍过相对于以太网和无线技术的外部网络连接。有许多不同的通信接口,这些接口在传统上与嵌入式设备有关,通常作为MCU上的硬件外设提供。用于与板上和板下的传感器和执行器进行通信的接口如下:

  • IC间通信(I2C Inter-IC Communication)
  • 串行外设接口(SPI Serial peripheral interface)
  • 通用同步/异步接收发射器(USART Serial peripheral interface)

以下外设经常被用于汽车和工业环境中的模块间通信:

  • USARTs
  • 控制器区域网络(CAN Controller area network )
  • 本地互连网络(LIN Local interconnect network)
硬件加密引擎

如果你的应用需要外部连接,那么你的心思也应该集中在安全方面。就像FPU使浮点运算的CPU效率更高一样,一些MCU上也有基于硬件的加密引擎,这将大大减少在公共网络上安全传输数据所需的CPU负担。

计时硬件

一个MCU上通常包括几个不同的定时外设。这些外设本身通常至少包括输入捕捉、输出比较和脉冲宽度调制(PWM pulse width modulation)功能。一些器件还包括与正交编码器接口的定时硬件。

集成模拟

数模转换器(DAC Digital to Analog Converters )和模数转换器(ADC Analog to Digital Converters)在连续变化的模拟值和该值的相关数字表示之间进行转换时使用。大多数情况下,这些类型的板载外设将比你发现的外部芯片的分辨率和频率更低。然而,根据你的系统的要求,它们可能是非常有用的。另一个有用的外设是板载比较器,当一个模拟值高于或低于一个给定的阈值时,它将向处理器发出信号。

一些更专业的器件(例如赛普拉斯PSoC)包括完全可重新配置的模拟外设(包括运算放大器、DAC和ADC)以及灵活的数字外设,灵活地将非常大的功能集集成到一个信号芯片中。Analog Devices和Maxim提供一些更奇特的混合信号MCU,这些MCU倾向于将特定应用的元件与MCU集成在同一芯片上,使特定终端产品的开发更加容易。你可以找到非常广泛的特定应用MCU,其目标是工业过程控制、汽车距离传感、物联网传感器到电视遥控应用。

如果有一个流行的混合信号问题的用例,很可能也有一个完全集成的硅片,将MCU与大部分所需的模拟前端集成在一起,以解决大部分的问题。那么问题就变成了平衡BOM成本、详细规格、尺寸、开发时间和长期采购风险的问题。

专用的触摸接口

由于触摸接口的日益普及,现在一些MCU上已经包含了触摸控制器的完整实现。这可以大大减少拥有完整功能和强大的触摸接口实现所需的专业知识和努力。

显示界面

复杂的显示接口,甚至是图形加速,通常出现在引脚数更多的高性能器件中,变得相当普遍。期待在大量的部件上发现并行的LCD/TFT接口(例如6800和8080),MIPI DSI等接口能够驱动廉价、高分辨率的显示器到只有几行的显示器。硬件协议转换IC可以用来适应一些不同的显示标准,如LVDS和HDMI。现在的MCU能够提供丰富的用户体验,增加了硬件加速和高效编写的中间件和驱动程序。CPU负载也是完全可以承受的。

外部存储器支持

在较高引脚数的封装中,预计会发现对静态随机存取存储器(SRAM static random access memory)的支持。同步动态随机存取存储器(SDRAM Synchronous dynamic random access memory )支持,板载控制器负责处理严格的时间要求和刷新周期,可以在更高性能的设备中找到。以性能为目标的设备一般会支持四路SPI。通常情况下,外部RAM,甚至是四SPI设备,可以被内存映射,使用起来与内部存储类似,尽管会有性能上的影响。许多设备也有多媒MultiMediaCard )和安全数字卡(SD卡 MultiMediaCard)控制器,因此,商品消费级可移动存储很容易被添加。

实时时钟

一些设备上也有硬件日历;所需的只是一个32kHz的晶体和一个备用电源,如CR2032原生锂电池。一般还提供这种能力的东西是有限的电池备份的RAM。

音频支持

通过Inter-IC Sound (I2S)的高保真音频支持通常是可用的。期待发现连接到I2S外设的DMA通道,以最大限度地减少在这些总线上为数据饥渴的DAC供货和从ADC收集数据所需的CPU干预量。

功率消耗

十多年来,低功耗MCU一直是一种趋势。然而,由于市场上出现了大量基于电池供电的物联网设备,历史上专门的使用案例和有限的选择(如16位MSP430)现在已经成为主流。现在,有了完整的32位MCU,它们可以在低速深度睡眠和高时钟速率、数据紧缩的运行模式之间快速循环。

电源效率

这听起来很简单,但确保某样东西少耗电的一个相当好的方法是将其关闭(不要笑--由于各种漏电流的存在,这可能出乎意料地复杂,取决于所涉及的部件!)。如果有几十个外设的复杂的MCU有希望实现节能,就需要有一种方法来关闭任何不需要的功能,以尽量减少浪费的电力。这通常是通过关闭不使用的外设的时钟和确保基于CMOS的I/O引脚不浮动来实现的(记住,CMOS设备中的转换是最耗电的)。

数据表中常见的另一个规格是每MHz的CPU时钟消耗多少功率--通常以μA/MHz为单位。如果每个唤醒期的处理量是相当恒定的,这就提供了另一个衡量标准来比较不同的MCU型号。

低功耗模式

针对低功率应用的设备通常会有一些不同级别的关机状态可供选择。这些状态将允许程序员在电流消耗、可用功能(如保持RAM内容完整和一些外设开启)、可用于触发唤醒事件的中断数量和唤醒时间之间进行权衡。值得庆幸的是,许多低功耗的物联网应用的操作范围相当有限,所以有时某个MCU的新功能的组合将被证明是非常适合特定的应用。

唤醒时间

如果一个设备具有惊人的低关机电流,但需要异常长的时间来唤醒并使自己进入可用的运行状态,那么它可能不是需要相当频繁唤醒的应用的最佳选择,因为大量的时间将被用于使系统启动和运行,而不是让它执行必要的处理,然后再回到睡眠。

电源电压

较低的电源电压通常会导致较低的电流消耗。根据设计,可以在消除电源调节电路(由于效率低于100%而消耗电流)和扩大特定电池单元的可用工作电压范围之间进行权衡。MCU的电压要求(以及任何辅助电路)将是调节方面有多少灵活性的驱动因素。另外,要注意最大的时钟通常也会随着电源电压的变化而变化,所以不要期望能够以最大的指定频率和尽可能低的电源电压来驱动CPU。

项目中期迁移MCU

偶尔,100%的项目需求不会在前期就被知晓,或者每个人都可能没有100%的信心在第一天就确切地解决每个细节问题。如果你碰巧幸运地知道有高度的不确定性,那么最好的办法是为它做计划,而不是被吓一跳。这里有几个领域,选择一个属于更大的家族或生态系统的MCU可以帮助减轻与项目不确定性相关的一些风险。

引脚兼容性的重要性

在计划潜在的MCU转变时,如果可能的话,提前确定引脚兼容的替代MCU。例如,恩智浦LPC1850的部件与LPC 4350 MCU引脚兼容。STM32器件在一个系列(和封装)中都是引脚兼容的,但偶尔也会与其他系列(例如STM32M4和STM32M7)几乎引脚兼容。意法半导体定期发布迁移指南,供那些已经超越了一个MCU系列并需要更多能力的工程师使用。如果事先选择了一些可能的候选产品和替代产品,那么PCB上一些简单的跳线可能会促进具有明显不同性能(和成本)的不同MCU之间的迁移,有助于消除项目中期所需的PCB返工时间。

周边相似性

在一个特定的系列中,大多数MCU将继承相同的外围IP。芯片供应商不一定在每次创建新的MCU系列时都会从头开始重新设计外设,因此,属于某个供应商的外设的寄存器映射和行为通常会有大量的重叠现象。通常情况下,如果你的应用程序只使用最基本的外设功能的子集,那么你可能会幸运地使用基本相同的驱动程序,即使供应商决定在MCU系列之间大幅改变其API。具有讽刺意味的是,有时原始硬件被证明比它上面的抽象层更具有一致性。

MCU系列的概念

许多芯片供应商都有器件家族的概念,意法半导体(STM)也不例外--数据手册通常是为整个器件家族编写的。STM系列器件之间最明显的差别通常是RAM/ROM和封装尺寸。然而,更多的外设也被添加到更有能力的器件中--例如,更大的封装将开始包括并行RAM控制器。具有更多RAM/ROM的器件将包括能力更强的定时器外设、更多的通信外设或特定领域的外设,如加密模块。

在一个给定的设备系列中的设备之间移动应该是很容易做到的,所以建议从该系列的一端开始(通常建议从高处开始),看看项目的发展。如果范围内的蠕变保持在最低限度,那么在所有的主要功能开发完成后,就有可能无痛地降低MCU的等级,从而节省一些BOM成本。

开发板的考虑

开发板是工程师在项目的早期开发阶段使用的任何硬件。开发板不仅仅适用于MCU;它们对许多不同类型的硬件都很有用--从运算放大器到现场可编程门阵列(FPGA field-programmable gat arrays)的任何东西。

单片机开发板应提供几个关键功能:

  • 辅助电路,为MCU供电和运行所需。
  • MCU编程并通信
  • 方便与外部电路连接的连接器
  • 连接外设。

开发平台及其重要性

开发平台是一个产品的生态系统,允许跨多个供应商的高度抽象。平台的主要重点是以最小的努力提供大量的功能,当主要目的是尽快创建原型时,这是很好的。

为了在多个供应商之间提供大量的功能,标准化的接口、易用性和灵活性往往会被强调。有了这些价值,平台本身就是焦点(因为它应该是),而特定设备的个别差异化特征往往在很大程度上没有被注意到,也就是说,除非你对专门的编码感兴趣,这需要额外的时间,最终要求你把更多的注意力放在为平台开发上,而不是与平台一起。

生态系统围绕着平台发展,温和地引导平台用户使用工具、工作流程、最小公分母功能集和可用硬件。如果目标是在尽可能短的时间内产生概念验证,这一切都很好。然而,如果要使用平台方法找到一个长期的开发和值得生产的解决方案,该平台可能需要高质量、极其完善和稳定。这通常意味着使用基于多个供应商提供的工业标准的平台(如SMARC、QSeven和COM Express)。

通常情况下,平台特定的功能是如此重要,以至于平台代码将简单地虚拟化接口以使它们更容易被访问,通常要付出非常大的代价(也就是说,对PWM或SPI进行比特化处理,以便将它们分配给特定的预定引脚)。因此,如果你选择使用一个平台来评估硬件(或具体地说,一个MCU),你应该意识到你可能是在评估平台和它在特定硬件上的实现,而不是硬件本身。

评估套件(eval kit)

评估套件(eval kit)在涉及到标准化脚印与关注硬件本身时处于另一个极端。评估套件通常配备了最大的、功能最丰富的MCU模型,其唯一目的是为了展示该硬件。这意味着它们通常不会在不同的目标MCU之间共享脚印或连接器(参考下图),因为每个MCU都有不同的主要功能,并且针对不同的市场。评估板将有尽可能多的外设被分解成实际的连接器(如串行、以太网、SD卡、CAN总线和多个USB)。它们通常还包括一系列的外围硬件,如RAM、eMMC、按钮、滑块、电位器、显示器和驱动扬声器的音频编解码器。他们几乎总是将所有有趣的MCU引脚分解到容易访问的头端,因此开发人员能够快速尝试他们能够梦想的任何特定硬件配置。制造商通常也会在评估套件板上展示他们的其他非MCU硅产品,以努力推动与他们自己的产品有关的更多销售:

为了最好地展示设备的能力,评估套件还将提供大量的工作示例代码,使工程师能够与所有的外设进行互动。与一般基于平台的实现方式不同,这些例子是为展示待评估的目标设备的独特差异化功能而定制的。在本章的第一部分,我们讨论了根据具体的使用情况来选择硬件。如果你正在为设计中具有挑战性的方面寻求具体的解决方案,那么与必须自己从头开始实现所有这些功能相比,有指导性的例子来演示MCU的关键差异化方面的工作代码的重要性可以大大节省时间(和开眼界)。

所有这些功能都是有代价的--完整的评估套件通常需要几百美元。然而,如果你的目标是快速评估有特定目的的潜在MCU,它们可以通过节省工程时间和减少风险来快速地支付自己的费用。

低成本示范板

近年来,低成本的示范板已经真正进入了他们的视野。价格已经大幅下降;制造商有时会以与放置在上面的裸体IC相同的价格出售示范板(有时,它们实际上比购买单个IC的价格更低!)。与硬件平台不同,这些板子往往会有类似的脚印,但不一定有相同的连接器或引脚。

最近,更多模糊了平台和示范板之间界限的低成本示范板(也叫演示板)已经出现在市场上。由于Arduino®无处不在,大多数低成本的板子至少会有一组Arduino引脚兼容的接头。然而,是否有兼容的针座和拥有完全拥抱生态系统的开发板是非常不同的事情。演示板可能没有任何软件来配合这些针座;仅仅因为硬件存在并且可以插入板子,并不自动意味着你会得到目标MCU的兼容库来驱动硬件。这并不意味着它们是不兼容的,但要让一些东西启动和运行所需的努力要比简单地插入板子和跟着 "hello world "演示走要大得多。

一些制造商也在创建他们自己的标准化头,这些头在演示板之间是通用的,这在不同产品系列之间迁移时至少是有帮助的(但显然只限于该制造商)。ST Nucleo和NXP Freedom的标准化头文件就是一些例子。为了使用户更加方便,这些板子通常也会具有mBed兼容性。

STM32产品系列

在过去的几年里,STM已经开发了相当广泛的MCU。在这里,我们将讨论该产品组合中的几个主要部分是如何相对于本章MCU考虑因素部分所讨论的。大多数其他供应商也将他们的产品分为主要部分,这往往会使选择过程更容易一些。

主流产品

STM32产品线从2007年的STM32F1开始,这是一款基于Cortex-M3的MCU。该产品线的这一部分旨在为大多数大批量应用提供服务,在这些应用中,成本和性能必须得到平衡,而复杂的应用却很少。该产品线的STM32F0和STM32G0部分是基于Cortex-M0和Cortex-M0+的器件,主要面向低成本应用。最初的STM32F1基于Cortex-M3,具有非常广泛的功能集,但与其他器件相比,其性能已经开始显老。

STM32F3是STM在提供集成的、更高精度的模拟外设方面的首次尝试(其他供应商提供比STM更高精度的模拟元件);然而,该系列没有提供真正的高性能模拟。它包括一个16位sigma delta ADC,但有效位数(ENOB)据说只有14位,比STM的12位逐次逼近(SAR)ADC外设稍好,而这是最常包括的。较新的基于Cortex-M4+的STM32G4系列拥有最多的模拟外设,包括许多实例的可编程增益运算放大器(PGA)、DAC、ADC和几个比较器,但在撰写本文时,还没有集成的高精度ADC。

到2020年,STM32G0和STM32G4系列将增加其产品的广度--它们都是较新的产品线,STM可能会开始用更多的器件来填补这些产品线。

高性能

STM的高性能MCU始于基于Cortex-M4的STM32F4。Cortex-M4与Cortex-M3非常相似,但它包括(可选)硬件32位FPU和DSP指令,这在所有STM3F4器件上都有。只要有所需的RAM(通常是MCU的外部),高性能系列中的所有器件都能够舒适地驱动无控制器显示器上非常有吸引力的GUI。各种硬件外设提供的加速(如MIPI显示串行接口(DSI),通过FMC和DMA的内存传输,以及使用Chrom-Adaptive Real-Time(Chrom-ART)加速器的一些基本图形加速),使得与显示器通信所涉及的相当多的工作可以卸载到各种外设上,以便CPU可以花时间执行其他任务。

下面是对该家族两个主要成员和一些显著特征的快速分解:

这类MCU可以被认为是交叉型MCU。它们的功能足够强大,可以用于一些传统上保留给完整的CPU的应用任务,但它们仍然具有MCU的易用性。

异构多核

2019年,意法半导体推出了STM32MP系列,这是该公司首次进入应用处理器领域。这个系列提供650MHz的单核或双核Cortex-A7,以及运行在209MHz的单核Cortex-M4。意法半导体公司的这些解决方案似乎是针对大批量、低成本的市场,专注于较少的内核数和需要较少PCB层的封装,使用较少的制造技术。

从软件角度看,意法半导体的MCU产品与新的微处理器单元(MPU)之间的主要区别是,由于MPU有内存管理单元(MMU),它们能够通过主线Linux内核运行完整的操作系统,这就开启了完全不同的开源软件生态系统(你不需要亲自编写)。

异构多核方法允许设计者将设计的一部分分割开来,在它们最适合的领域中解决。例如,一个具有GUI和网络功能的专用过程控制器可以使用Cortex-A7来利用Linux并获得Qt框架和复杂的网络堆栈,同时使用Cortex-M4来处理所有的实时控制方面的问题。

μClinux的实现已经在STM32F4和STM32F7 MCU上使用多年,但由于这些器件上缺乏MMU,通常会有相当大的性能损失。

当然,随着功能的增加,复杂性也随之增加。与MCU不同,STM32MP系列没有办法集成外部RAM,所以要准备好一些相当复杂的PCB布局(与独立的MCU解决方案相比)。

低功率

意法半导体的低功率产品线主要针对电池供电的设备。下面是所有不同家族成员之间的快速比较:

根据特定物联网应用的具体工作负荷,使用低功耗的32位MCU可能是有意义的,比如前述表格中的那些。然而,对于非常简单的应用,也应考虑使用低功耗的8位和16位MCU。

无线

STM32WB实现了一个带有专用Cortex-M0+的Cortex-M4,以运行蓝牙BLE协议栈。该系列提供了大量的集成,从大型闪存和RAM到混合信号模拟外设,包括触摸传感器和小段LCD。各种安全功能,如加密算法和随机数字发生器,也都存在。由于使用该系列器件的产品需要FCC认证,因此它们对大批量应用最有意义。

如何选择开发板

STM是我们评估的唯一制造商,以便将例子限制在容易消化的范围内。在实际的产品工程工作中,设计者有必要对所有可能的供应商进行重新审视。虽然每个人都有自己喜欢的方法来完成跨供应商的搜索,但一个简单的方法是使用分销商的网站。

由于有精心策划的面向原型设计的分销商网站(如Digikey和Mouser),工程师能够在许多不同的供应商之间进行参数搜索和比较。这种方法的一个缺点是,搜索仅限于特定的分销商所经营的任何产品系列。另一个潜在的缺点是,参数化搜索结果受制于分销商的数据输入准确性和分类。直接使用分销商网站的好处是,许多不同的供应商都在一个地方,可以立即检查产品的可用性,而且半真实世界的价格很容易看到和过滤。

以原型为导向的分销商的定价被认为是半真实的,因为通常情况下,在产品进入全面生产后,使用以数量为导向的分销商或直接向供应商购买大批量的产品会更经济。

要求

到此为止,我们已经涵盖了在理论层面上为项目选择MCU的所有考虑。现在,是时候将所有这些付诸行动并选择将用于所有实际操作练习的MCU了。需要记住的几件事如下:

  • 我们将选择一个开发板和MCU--因此,一些要求将针对开发板,如果你正在制作一个需要长期生产的产品,这通常不是一个好主意。
  • 要求将是针对这本书的--使某些东西成为一本书的好选择的要求可能不会转化为你正在进行的项目。很明显,你的选择标准将为你的项目量身定做。

必须具备的条件,也就是要求,如下所示:

  • 基于STM32 Cortex-M的CPU。
  • 内存保护单元(MPU)。
  • 显示状态的可见手段。
  • 相对较低的成本(如<50美元)。

好的方面,也就是需要的条件,如下:

  • 多功能性: 如果开发板能与其他硬件一起使用就更好了。
  • 通过USB的虚拟通信可作为调试端口。
  • 多核心。

要求的理由

我们将把搜索范围限制在STM32部件上,因为这就是我们在本书中使用的例子系列。在第15章,FreeRTOS内存管理中,我们将介绍如何防止任务访问他们不应该访问的内存,这将要求我们利用具有内存保护单元的部件。本书的目标之一是尽可能保持硬件交互的可访问性,这导致了下两个要求:状态显示和成本。

一些显示状态的手段可能会转化为简单的LED(最好是多个)。应该有某种形式的反馈,使程序员能够一目了然地看到正在发生的事情,以确保代码确实在做什么。在真正的嵌入式环境中,这可能会采取额外仪器的形式,如示波器、逻辑分析仪和DMMs。为了使尽可能多的人能够使用这些工具,我们将明确地避免使用这些工具。因此,我们不是仅仅依靠外部工具和调试器,而是要寻找板载指标。

这些好的东西并不是硬性要求,但它们是系统在完美世界中所拥有的理想品质。理想情况下,目标开发板也将是更大的硬件生态系统的一部分,这将使人们能够使用他们可能已经拥有的现有硬件来进一步探索本书的概念。连接到目标MCU上的USB端口也是很好的选择--这样的话,我们就可以使用一个虚拟的通讯端口来输出调试,而不是只使用调试器。最后,在第16章 "多处理器和多核系统 "中,我们将看一下关于用多CPU开发板的简要介绍和一些提示。尽管这个主题值得自己写一本书(已经有很多人从架构的角度写了),但如果有一些我们可以在实际硬件上付诸行动的代码就更好了。

选择开发板

下面是一个例子,说明我们使用美国一个受欢迎的分销商DigiKey来缩小搜索范围的步骤:

根据我们对STM32产品系列的了解,我们选择了带有内存保护单元的MCU。目前,这个标准提供了73个可用的开发平台,范围从9-550美元不等,范围相当大。我们已经满足了大部分的硬性要求--除了板载指示器,它不可能出现在搜索中。让我们看看我们是否可以通过包括一些愿望来缩小这个领域。

意法半导体将他们的微处理器称为微处理器单元(MPU),这就造成了一个过载的术语,而且在谈论内存保护单元(MPU)时也有一些歧义。在浏览网站和文档时,你可能会碰到这个缩写的两种用法。
如果我们正在寻找多核,那么STM32H7和STM32MP1系列是有效的选择。事实证明,有一些带有这些部件的发现板,其成本相对合理(就其包含的内容而言)为80美元,但我们最好是寻找接近20美元范围的硬件--让我们不要让欲望干扰硬性要求!"!

把重点缩小到不违反<50美元定价要求的处理器,我们就可以看到STM Nucleo系列的开发板。所有的Nucleo系列都是与mBed兼容的,如果我们选择使用它,就可以使用整个生态系统。STM对Nucleo的另一个认识是,支持现有的流行平台是一个好主意--因此,除了将几乎所有更相关的MCU引脚放在一个专有的接头上之外,Nucleo板还提供各种Arduino风格的接头。所有的Nucleo板还包括一个ST-Link板载编程器,其中一些可以重新刷新,看起来与SEGGER J-Link相同,这是一个巨大的优势,将消除购买一个额外硬件的需要:

我们的目标平台将是Nucleo-F767ZI,它集成了最广泛的连接,包括最灵活的调试。我们将在第6章 "实时系统的调试工具 "中介绍重新刷新板载ST-Link以使用SEGGER J-Link固件。由于不需要配置额外的接口,三个用户LED灯将使交流固件状态反馈变得非常简单。内置的以太网允许开发网络化的应用。对于我们的目标平台来说,如果有多核MCU是很方便的,但没有一个符合我们成本要求的MCU:

尽管在选择MCU或开发板时有很多选择,但这不需要是令人生畏的过程,特别是当你知道你的要求和要做的权衡时。