单片机确定正在运行哪个硬件版本的好方法是什么?


13

我正在研究一种新产品,在产品的整个生命周期中,可能会有大小不同的硬件更改/修复。为了将来在现场进行固件更新,我需要一种确定硬件版本的方法。什么是好的策略?

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

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

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

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

[编辑]

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

Answers:


7

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

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

我建议使用的是一个8位并行输入/输出移位寄存器,如74HC166。可以通过PC板本身将输入捆绑为HIGH或LOW来在版本上设置版本号,然后只需3个引脚即可加载并从MCU读取移位寄存器。


我喜欢将硬件版本硬连线到板上,这样,我只需要一个固件版本,而无需处理预编程的EEPROM。看起来移位寄存器的价格约为0.1美元,这是可以的。
morten 2012年

2
同样,您也可以使用悬挂在I2C总线上的I2C端口扩展器。不过,它可能会贵一些。
alex.forencich 2013年

8

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

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

减少错误机会的一种方法是,每个板版本使用不同的封装。因此,请在SOT-23中使用一批编号为1的EEPROM编程,在MSOP中使用下一个版本2的EEPROM编程,这样在版本2板上就不能使用版本1 EEPROM。


谢谢。这可能是一个愚蠢的问题,但是在将它们放置在板上之前,如何获得一批EEPROM进行编程?我没有从磁带上取下EEPROMS,对其进行编程,将它们放回磁带上并将磁带发送给PCB组装商的设施。
morten 2012年

@morten-您的供应商可以为您做到这一点。您将文件发送给他们(一个字节:-)),然后将零件编程回去,并标上您选择的标记。成本将取决于批量大小;您将获得固定成本+每部分成本。我们曾经计算过自己编写程序是否会更便宜,但无论如何成千上万的程序都不值得。
stevenvh 2012年

4

仅使用两个数字引脚的一种选择是这样的:

电路图

通过更改R1和C1值,可以为电容器提供不同的充电时间,可以通过测量这些时间来确定硬件版本。


啊哈,非常聪明的解决方案:-)
莫伦(Moren)2012年

2

如果地址总线上有未使用的空间,则可以在该总线上放置一个ROM寄存器,MCU可以读取该寄存器。该寄存器将包含硬件的版本号。当MCU从该地址读取时,寄存器会将其值写入数据总线。寄存器可以硬接线在板上,或者如果您想用裸手更改版本号,则可以像现在所做的那样将引脚固定为向上/向下。


也许我可以使用EEPROM本身的地址。
morten 2012年

好。不知道有I2C总线。也许您可以做一个微型的I2C从设备,当MCU从中读取版本号时,它会回读版本号。
travisbartley 2012年
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.