32位48-96 Mhz微处理器的优势(例如Arduino Due)


10

看来Arduino Due(基于32位,84 Mhz,基于ARM-Cortex-M3的SAM3X8E)已经发布了。

此外,显然,这一类别中有无数的处理器(32位/ 48-96 Mhz / ARM)以及相应的原型开发板:

  • 恩智浦LPC1768 / mBed
  • STM32 /发现
  • PIC32 /芯片套件
  • PIC32 /视差螺旋桨
  • LM4F120 / TI启动板
  • 等等

我试图理解这些“中间”微处理器的吸引力,在我看来,它们似乎位于低端AVR / MSP430 / etc之间。(优点:价格便宜,低功耗,占用空间小)和高端ARM7 / etc(优点:每秒能够提供更多指令)。

在什么情况或方式下,基于32位/ 48-96 Mhz / ARM的微处理器是合适的选择?更具体地说,我想知道在低端8位微控制器或超高端ARM7处理器上,它们将在哪种应用程序或哪些参数中为设计提供最佳选择。


在我看来,您可以处理实时视频流-Arduino无法处理这一点。它还允许高级加密算法或哈希(比Arduino更快,更容易)我很惊讶Arduino推出了32位平台,但它只是向您展示-有些人只想做更多的事情而不是控制继电器。这对Arduino来说是美好的一天!
Piotr Kula 2012年

除非在附加的特殊功能内核中进行处理,否则在<100 MHz处理器上进行的实时视频处理将不多。特别是在这些设备上的有限内存中。更为现实的一点是,这些芯片的成本并不比8位器件的成本高得多。它实际上可能比具有可比闪光灯和内存的ATMEGA低。
克里斯·斯特拉顿

3
据我所知,Parallax Propeller是与PIC32无关的定制芯片。有连接资源吗?
AndrejaKo 2013年

Answers:


12

这是可能引起高度争议的主题之一。有很多不同的观点,不同的事情对不同的人很重要。我将尝试给出一个全面的答案,但要理解的是,总会有人不同意。只是明白那些不同意我的人是错的。(开玩笑。)

快速摘要:

这个答案将是一个漫长的答案,所以让我先总结一下。对于绝大多数人来说,最新的ARM Cortex-M0 / M3 / M4芯片为您提供了最佳的解决方案和最佳的功能。将这些32位MCU与8位和16位祖先(如PIC和MSP430)进行比较时,甚至是这样。M0的购买价格低于1美元/枚,M4的购买价格低于2美元/枚,因此,除了价格非常敏感的应用以外,ARM解决方案非常出色。M0的功率非常低,对大多数人来说应该足够好了。对于那些对功率非常敏感的人,MSP430可能仍然是一个更好的选择,但是即使对于这些应用,M0也是值得考虑的。

如果您对更深入的分析感兴趣,请继续阅读,否则可以立即停止阅读。

现在,我将研究每个区域并比较不同的MCU:

执行速度

当然,32位MCU将更快。它们往往具有更快的时钟速度,但是每个时钟都需要做更多的工作。像ARM Cortex-M4这样的MCU包含DSP处理指令,甚至可以在硬件中提供浮点支持。8位和16位CPU可以在32位数字上运行,但是这样做效率不高。这样做会迅速消耗CPU寄存器,CPU时钟周期和闪存来存储程序。

易于发展

在我看来,这是使用现代32位MCU的最有价值的原因-也是最未被重视的原因。首先让我将其与8位PIC进行比较。这是最坏的比较,但也最能说明我的观点。

较小的PIC基本上要求以汇编语言进行编程。没错,甚至8位PIC都有C编译器,但是这些编译器是免费的也可以是免费的。您无法获得既好又免费的编译器。编译器的免费版本的优缺点不如“ Pro”版本好。Pro版本约为1,000美元,仅支持一个系列的PIC芯片(8、16或32位芯片)。如果您想使用多个家庭,则必须另外花1,000美元购买另一本。编译器的“标准”版本进行了中等程度的优化,每个芯片系列的成本约为500美元。按照现代标准,8位PIC速度较慢,需要进行优化。

相比之下,有许多不错的免费的ARM MCU C编译器。存在限制时,这些限制通常是所支持的闪存的最大大小。在飞思卡尔Codewarrior工具上,此限制为128 KB。对于这个论坛上的大多数人来说,这已经足够了。

使用C编译器的优点是您不必费心(尽可能多)CPU内存映射的底层细节。在PIC上分页特别痛苦,如果可能的话,最好避免分页。另一个优点是,您不必担心在8位MCU上处理16位和32位数字(或在16位MCU上处理32位数字)的麻烦。尽管用汇编语言执行此操作并不困难,但是这在后面很痛苦并且容易出错。

还有其他运行良好的非ARM C编译器。MSP430编译器似乎做得不错。赛普拉斯的PSoC工具(尤其是PSoC1)存在故障。

平面记忆模型

分页RAM /寄存器/闪存的MCU只是愚蠢的。是的,我说的是8位PIC。哑巴,哑巴,哑巴。这让我非常不喜欢PIC,以至于我什至都没有去研究他们的新产品。(免责声明:这意味着可能会改进新的PIC,而我只是不知道。)

使用8位MCU,很难(但不是不可能)访问大于256字节的数据结构。使用16位MCU可以增加到64 KB或kword。使用高达4 GB的32位MCU。

一个好的C编译器可以对程序员(又名You)隐藏很多这种东西,但是即使那样,它仍然会影响程序的大小和执行速度。

有很多MCU应用程序都不会出现问题,但是当然还有很多其他应用程序会遇到问题。这主要是在RAM或闪存中需要多少数据(数组和结构)的问题。当然,随着CPU速度的提高,使用更大的数据结构的几率也会增加!

包装尺寸

一些小型PIC和其他8位MCU的封装非常小。6和8针!目前我所知道的最小的ARM Cortex-M0在QFN-28中。虽然QFN-28对于大多数人来说足够小,但对于所有人来说还不够小。

成本

最便宜的PIC大约是最便宜的ARM Cortex-M0的价格的三分之一。但这实际上是0.32美元对0.85美元。是的,价格差异对某些人很重要。但我认为,该网站上的大多数人都不关心这么小的成本差异。

同样,当将功能更强大的MCU与ARM Cortex-M0 / M3 / M4进行比较时,ARM Cortex通常“大致均匀”或排名靠前。考虑其他因素(易于开发,编译器成本等)时,ARM非常有吸引力。

第二摘要

我想真正的问题是:为什么使用ARM Cortex-M0 / M3 / M4?当绝对成本至关重要时。当超低功耗至关重要时。需要最小包装尺寸时。当速度不重要时。但是对于绝大多数应用程序,这些都不适用,ARM是目前最好的解决方案。

鉴于成本低,除非有充分的理由不使用ARM Cortex,否则使用它是有意义的。与大多数其他MCU相比,它将允许更快,更轻松的开发时间,更少的麻烦和更大的设计余量。

还有其他一些非ARM Cortex 32位MCU,但是我也看不到它们有任何优势。使用标准CPU架构有很多优点,包括更好的开发工具和更快的技术创新。

当然,事情可以而且确实会改变。我说的是今天有效,但可能从现在起一年甚至一个月后都无效。自己做功课。


1
要使用ARM访问任何内存位置,必须首先加载一个寄存器,其地址在4K之内。尽管许多I / O设备仅使用几个离散地址,但分配给它们的地址空间超过4K。相比之下,18Fxx PIC可以通过一条指令直接在大多数I / O位置上运行,而与存储状态无关。存储大多数RAM的方法相当烦人,但是对于某些类型的位撞(PIC架构在1970年代设计的目的),PIC架构工作得很好。
2012年

1
顺便说一句,我感到奇怪的是,虽然从1970年代开始流行的8位微处理器可以有效地处理任意对齐的256字节数据结构,而流行的16位处理器却可以很好地处理在16处对齐的65,536字节数据结构字节边界或任意对齐的数据结构,几乎是大型的,较新的8位和16位处理器,因此很难编写跨越页/库边界的有效代码。
2012年

@supercat“ LDR / SRT立即偏移”指令的4K地址范围是正确的,但通常不是问题。我不同意您的其余评论。查看飞思卡尔M4文档,每个外设占用的地址范围不超过4K,因此,单个“基地址指针”足以访问该外设中的所有寄存器。还有32个通用寄存器,其中任何一个都可用作基址指针-因此,在同一代码段中快速访问多个外设相对比较容易。

1
@supercat您的第二点涉及整个RISC与CISC的辩论。ARM是RISC CPU,这意味着它已经过优化,可以执行最常见的任务。不频繁的任务(例如未对齐的访问)需要更多的工作或花费更多的时间(取决于CPU架构)。我认为这是积极的,而不是消极的。这就是为什么我们以较早的8位价格获得快速的32位MCU的原因。即使有这些怪癖,我还是会每天在PIC上使用其中一个CPU。

我误会了;我并不是要暗示一个基址寄存器不能处理整个外设,而是常常必须为每个外设加载一个寄存器(因此,一个人不能简单地将某个寄存器一直与IO_BASE_ADDR一起放置)。对于某些类型的代码,使用“ bsf LATA,4”之类的指令可以在单个周期内设置I / O位,而不必先预加载任何寄存器,这非常方便。我喜欢ARM,但是PIC上的直接I / O映射可能非常好(其他内存访问不太好)。
2012年

3

大卫·凯斯纳(David Kessner)是正确的。我想补充以下内容。

  1. 8位MCU是唯一易于使用且易于粘贴在原型面包板上的PDIP封装中的MCU。
  2. 实际上,与8位MCU相比,32位MCU的功耗更低。小于20 MHZ的8位MCU的功耗不一定比Cortex M4少。
  3. 业余爱好者经常使用8位MCU,这些爱好者通常不需要太多的MCU。也许几百行简单的C代码。

我同意这些天没有理由不使用32位MCU。我只将它们用于[8位MCU]有两个原因:我喜欢PDIP封装的简易性(无需焊接);我通常不需要比8位MCU所能提供的更多的功率/复杂性。

破坏交易者确实是可用的工具。


对于原型,有用于LQFP的插槽,可以很好地工作。当然,您可以手工焊接LQFP,只需做一些练习即可。QFN,DFN和BGA我不会手工焊接,但是市场上的每个低端32位MCU都附带LQFP。
隆丁

1

我们使用一种相对不流行的飞思卡尔MCF52259,一种32位〜80Mhz的MCU。

选择的原因/思考过程是:

  • 它取代了32位M.Core设备,因此移植相对简单
  • 这也意味着我们可以坚持使用现有的IDE(CodeWarrior)
  • 我们需要大量的IO:控制3个步进电机,4个PWM通道,3个UART,I2C和SPI的步进/方向。
  • 发生了很多事情(请参阅最后一点),其中一些需要及时进行,因此我们需要确保有足够的CPU周期来完成所有工作。
  • 遗留代码与M.Core的256k闪存大小和32k RAM发生冲突,因此使闪存和RAM加倍使生活变得容易起来,可以快速启动和运行。

如今,过分规范/扩展硬件功能(存储,速度,IO等)比花费宝贵的开发时间优化代码以挤入稍便宜/更小的MCU更为经济高效(且方便),除非占用空间或权力是大问题。

在我们的案例中,该器件的价格是M.Core规格的两倍,而价格仅为后者的一半,而采用更便宜的MCU则只能节省每板的便士,但会花费大量的开发时间,并且限制了未来开发的潜力,而无需再次更改MCU。

如果我们要建造一百万个电路板,则值得进行成本工程设计工作以缩减成本,但就目前而言,这是不值得的开发时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.