什么是MCU确定它运行的硬件版本的好方法?

电器工程 固件 硬件
2022-01-29 21:26:45

我正在开发一种新的产品设计,并且在产品的整个生命周期中可能会有小的或大的硬件更改/修复。对于未来的现场固件更新,我需要一种方法来确定硬件版本。什么是好的策略?

我目前正在使用外部电阻向上/向下拉两个备用引脚并检查模式。这仅允许进行 4 次硬件修订,但这对于实际目的可能已经足够了。如果我在未来的硬件版本中需要其中一个或两个引脚,这可能会成为一个问题。

我想更经济的方法可能是将电阻分压器连接到 ADC 引脚。每个硬件版本可能有不同的电阻值。不幸的是,我目前的设计中没有任何备用 ADC。

我想另一种方法可能是在生产过程中将硬件版本号编码到 EEPROM 或 mcu 闪存中?(我们目前没有那个设施。)

我想我正在寻找一种灵活而强大的方法的建议。

[编辑]

回覆。@trav1s 的建议:我本身没有地址总线,但我在 I2C 总线上有一个 24LCxx EEPROM。从地址的低 3 位是硬连线的。我想我可以在启动期间更改地址位并搜索 EEPROM。

4个回答

这是我一直在处理的事情。我们拥有非常复杂的硬件,已经在该领域使用了近 10 年,具有不同版本的各种子系统。一些子系统有一个 2 位代码,但正如您所提到的,这并不总是足够的。

EEPROM 建议是一个很好的建议,但它需要对 EEPROM 进行编程并使用正确的版本填充电路板。

我建议的是一个 8 位并行串行输出移位寄存器,如 74HC166。版本号可以通过 PC 板本身在输入上设置输入高或低,然后您只需要 3 个引脚来加载和读取来自 MCU 的移位寄存器。

我不会使用编程到微控制器中的版本号。除非针对不同的板子版本软件不同,但是板子版本对我来说似乎是多余的。拥有尽可能少的微控制器软件版本,理想情况下只有一个。每个不同的版本都可能导致后勤问题。

EEPROM 代码是个好主意,因为它允许使用许多不同的板代码,但可以将其从微控制器中取出,放在单独的设备中。EEPROM 对于大容量来说很昂贵(每比特比闪存贵得多),但对于几个字节,你会发现它们很便宜。这个100s才16美分,只需要1条I/O线。

减少错误机会的一种方法是为每个板版本使用不同的包。因此,在 SOT-23 中使用版本号 1 对一批 EEPROM 进行编程,MSOP 中的下一个版本 2 等。然后您不能在版本 2 板上使用版本 1 EEPROM。

一个只使用两个数字引脚的选项是这样的:

电路原理图

通过更改 R1 和 C1 值,您可以对电容器进行不同的充电时间,您可以通过测量来确定硬件版本。

如果地址总线上有任何未使用的空间,您可以在总线上放置一个 ROM 寄存器,MCU 可以读取该寄存器。该寄存器将包含硬件的版本号。当 MCU 从该地址读取时,寄存器会将其值写入数据总线。寄存器可以硬连线在板上,或者如果您希望能够徒手更改版本号,您可以像现在一样制作可以系起来/系紧的引脚。