我为什么要学习微控制器架构?

电器工程 微控制器 计算机架构
2022-01-20 17:19:57

我最近开始在一家生产汽车诊断相关电子产品的小公司工作。我的老板 50 多岁,他说他正在使用 8051 衍生产品,他们正在做这项工作。我继续搜索谷歌以了解 8051 今天是否仍然流行。在 Quora,我看到了这些:

...它可能是最简单的 MCU 架构。每个外围设备似乎都是准系统版本。我对定时器、时钟、UART 等的概念清楚了很多!然后,我开始欣赏其他架构——因为我真正理解了差异。

...显然,由于其简单性,任何行业都不会使用它来开发产品...

但为什么?到目前为止,至少作为一名学生,我曾经做过很多事情而不会弄乱建筑。我很高兴用 C 编码,我使用 LCD 外围设备,连接到具有不同协议(SPI、I2C 等)的其他 IC

除了有限的实时和时间关键型应用领域之外,我为什么还要为我的微控制器架构而烦恼?

4个回答

8051 和其他低位微控制器今天仍在使用吗?

是的,几乎无处不在。它们小而容易,有很多内核浮动,您可以以低成本或免费将它们放入您的定制芯片中,还有成熟的编译器。这一切都使得 8051 仍然是硅制造商中最受欢迎的核心架构之一。ARM 内核可能在更多不同的产品中可用,但话又说回来,当您与以非常严格的价格限制构建大量设备的人交谈时,如果能完成工作,他很可能会更喜欢更便宜/免费的 8051 内核. 只是为了反对@Nitro2k01声称仅用于利基市场:Mouser 有近 800 种型号的 8051微控制器库存¹。事实上,即使在 Mouser,这些产品的起始价格也低于 40 克拉,这可能表明它们的用途:

主流、低性能、大容量 MCU

因此:

...显然,由于其简单性,任何行业都不会使用它来开发产品...

完全是高质量的废话。特别是因为你自己提供了一个反例

我的老板 50 多岁,他说他正在使用 8051 衍生产品,他们正在做这项工作。

确切地!它们到处都在使用,它们经过充分验证且价格便宜,而且足够了;永远不要低估在某个地方的抽屉里解决常见问题的好处!

当然,通常情况下,您可能需要一个解决方案,比如说两条典型的汽车总线、一个到 ADC 的高速接口、一些可靠的看门狗定时器、三个 PWM 单元……然后你开始拼凑一些东西,包括四个 8051 和 8080 衍生物.. 呃。这是一个糟糕的情况,很可能使用单个、更通用、更强大的 MCU(例如 ARM)更快、更可靠地解决。但是,“我们拥有关于旧技术如何工作的公司知识”与“我们有能力在现代硬件上运行而面向未来”是一种经典的投资安全权衡。如果你遇到这样的项目之一,我会尝试在这种情况下与老板交谈。对于简单的小工作,是的,8051。

我应该费心去了解一般的 MCU 架构吗?

是的!我认为@jfkowes 很好地解释了这一点。但老实说:这有点像问“如果我想成为一名汽车修理工,我是否应该学习内燃机的工作原理”;答案是“如果你能很好地执行维修手册,你可能会活得很好,但如果你了解你的硬件做什么,你可能会成为一个更好的技术人员(别管工程师)。

一旦您遇到无法通过 google 搜索的问题,如果您不大致了解处理器的工作原理,那么您几乎就是一只乌龟。

我应该费心学习 8051 架构吗?

可能不是。从某种意义上说,是的,只要成本不是您的主要关注点,您很可能只使用基于 ARM 内核或其他更现代架构的更强大、更通用的 MCU。

再说一次,8051 内核非常简单,我实际上建议在尝试处理更现代、更复杂的 MCU 内核之前了解它的单元是什么。这是一个很好的例子。

因此,如果 8051 不是我在小批量应用中寻找的核心,我在寻找什么

所以,就个人而言:选择 ARM Cortex-M0、-M3、-M4F;这些在各种价格实惠的微控制器中都很丰富,易于编程(是的,成熟的 GCC 支持,CMSIS 标准库,在这些微控制器上运行的许多嵌入式操作系统),并且通常带有标准调试接口(这一个很好的优势)。

从外部看,ARM 通常相对容易理解,因为您通常会将每个外围设备映射到内存空间,仅此而已。在内部,它们具有不同程度的复杂性和速度/鲁棒性/尺寸优化,使得它们不太容易详细理解,但我想这可能有点要求,除非你从事 CPU 设计。

如果你对 CPU 设计感兴趣,我认为(这真的是基于我对研究活动和“承诺”行业投资的观察的个人信念)我们目前正在观察一个新的重要 ISA——RISC-V 的兴起。对于 FPGA 或硅,这种架构有多种实现方式,像 Nvidia 这样的人似乎也在尝试用这类内核替换他们的流式多处理器。


¹:很可能我错过了mouser拥有的实际8051的一半以上(因为,嘿,我刚刚选择了所有核心名称为* 80 * 5 *的MCU)。很有可能,如果您选择一个随机的 8 位微控制器,它的内核可能至少部分源自 8051。我的意思是,只需查看维基百科的“[8051] 衍生供应商列表”

一般来说,这里有一些很好的理由来学习(或至少了解)您正在使用的微控制器的架构。

警告:在您的工作、公司、应用程序、相关硬件等方面,您可能有理由不学习您现在使用的特定架构。

调试

当高级库工作时,您可能不需要了解架构。当您开始遇到问题时,了解微控制器的内部结构有助于快速隔离和解决这些问题。

代码效率和简单性

如果您了解架构,您可能能够将功能从软件转移到硬件。这有可能减少软件负载并消除错误来源。

降低成本

架构知识可以减少程序和数据存储器的使用以及处理器负载。这可能意味着您可以选择资源较少的微控制器,从而可能降低成本。

增加你的实用性

即使您现在不使用这些知识,与同事/供应商/支持工程师等的讨论也可能需要它。例如,您知道的事情可能会帮助其他人解决他们遇到的问题。拯救这一天是人们记住的事情。

知识就是力量

即使您不需要当前工作中的知识,当您看到一个看起来很棒的工作广告,上面写着“需要/首选<微控制器系列>架构知识”时,您将处于更好的位置去争取。

8051 和其他低位微控制器今天仍在使用吗?

是的,尽管主要用于利基用例。它们主要用于简单的任务、批量生产、成本驱动的产品,或者需要经过验证的跟踪记录。它们通常获得许可并集成到单芯片解决方案中。由于它们的架构简单,很容易将它们与同一芯片上的定制外设集成。另一个优点是它们可以使用较旧(且更便宜)的半导体制造技术在小面积上生产。

一个这样的例子是智能卡中的控制芯片,它通常使用带有加密硬件扩展的 8051 或类似内核。您可能会在诸如智能电动牙刷监视器的控制器之类的东西中找到 8 位微控制器内核。车辆 ECU 通常使用 8 位微控制器和 32 位微控制器作为看门狗,因为它们具有更高的可靠性和更低的复杂性。

你应该学习它吗?

除了您可能最终陷入需要了解该特定架构的情况之外,我认为这通常是一项有用的技能。即使您在日常工作中编写 C 语言,对“下一级”的内容有一个大致的了解也是有用的。在对奇怪的错误或性能问题进行故障排除时,如果您对底层硬件有一个大致的了解,那么查明问题可能会容易得多。您还可以更轻松地分析 C 编译器的汇编语言输出。学习一种架构也将使将来更容易学习不同的架构。即使对于更现代的 CPU 内核,这些技能也可以帮助您编写更好的代码。

通过学习它们,您可以学到很多关于数字设计的知识。数字电子产品是使用两件事构建的。首先是逻辑,实现逻辑表达式的 AND、OR、NOT 元素的互连。(在实践中,实际使用了其他逻辑元素,例如 NAND,但 AND、OR 和 NOT 更容易理解。)其次是可以保存一个或多个位的存储元素。当引入存储元件时,设备可以具有所谓的状态它的存储元件中不同的位组合对应于不同的状态。

考虑一个从状态 0 开始并在每次插入硬币时移动到另一个状态的自动售货机状态机。这样做,机器可以跟踪总金额,知道何时投入了足够的钱,并知道要退回多少零钱。

要设计机器的电路,从带有箭头的状态图开始,箭头显示到其他状态的转换以及触发它们的条件。对于每个箭头,一个逻辑表达式标识一个条件。然后可以计算出所有这些表达式是什么,并用逻辑元素来实现它们。

对于自动售货机来说,这不是很困难。对于复杂的控制器,它变得更加困难。微控制器是一种快速简便的方法来做同样的事情。考虑一个“内存”,它(在字节或字的意义上)是 k 位宽并且有 n 个地址线,导致内存中有 2^n 个位置。该存储器是用设计编程的,在实践中是只读的。请注意,使用存储器的地址位作为“输入”,数据位作为输出,存储器可以被编程以实现任何逻辑功能。

添加一个同样为 k 位宽的寄存器来保存内存位置的内容会产生一个状态机。

如果将k位划分为例如操作码和地址。操作码位组控制电路的其他部分(例如分发自动售货机产品),其他位是 n 位宽的内存地址,每组 k 位成为具有分支能力的微指令。

再加上一些算术逻辑,一些更多的寄存器(其中一个或多个接受控制输入来左右移动),您可以构建一个 CPU,其机器指令由一系列微指令实现。

在 1970 年代和 1980 年代,许多成功的计算机都是使用这种设计制造的。其中一个(Digital Equipment 的 VAX 11)有一个机器指令来计算一个整数多项式,用于地址计算(想想数组)。事实证明,使用更简单的指令可以更快地实现该指令。

微控制器可以并且通常是比传统状态机效率低的实现方式。但它们可以轻松更改,设计速度更快,并且是出色的控制器解决方案。