当谈到嵌入式系统版本控制时,我们经常会立即跳到软件上。嵌入式开发人员经常更改软件并仔细管理这些更改至关重要,但对硬件进行版本控制也是如此。一个小的硬件更改可能会使每个版本的软件都过时,直到该硬件更改为止。在今天的文章中,我们将研究两种技术来对软件可读的硬件进行版本化,以便软件可以确保它与兼容的硬件版本配对。
技巧 #1 – 使用 GPIO 对 PCB 版本进行硬编码
第一个技术是如何使用微控制器上的 GPIO 线来提供可读的 PCB 版本号。几乎每一个 PCB 都会在 PCB 丝印上标注硬件版本号,但系统软件无法像人类那样读取丝印。硬件在版本之间可能会有很大变化,确保某个软件版本在特定硬件上运行至关重要。为此,软件需要能够直接从 PCB 读取硬件版本号,以确保它在兼容的硬件上运行。
对硬件进行版本控制的常用方法是使用一些备用 GPIO 线作为专用硬件版本号。每条 GPIO 线可以拉到 VCC(代表 1)或接地(代表 0)。如果使用二进制表示,两个 GPIO 将提供最多四个版本,而三个 GPIO 将提供八个版本,如下所示:
软件启动时,可以初始化GPIO线,然后读取PCB版本号,判断软件是否支持硬件。如果一切正常,则该软件将运行该应用程序。
不过,使用 GPIO 线有一些问题。首先,微控制器上必须有空闲的 GPIO 线。如果设计密集或使用低引脚数微控制器,则可能没有两个或三个 GPIO 线可用于版本控制。其次,我们需要确保用于将 GPIO 线拉高或拉低的电阻器的尺寸大致相同,这样我们最终不会产生大的泄漏电流。第三,在制造板子时,嵌入式开发人员需要验证版本号是否已正确更新,以免由于制造错误而导致板子版本号错误。
技巧#2——使用模数转换器到硬代码版本
并非所有系统都有两个或三个可用的空闲 GPIO 线。对 PCB 进行版本控制的另一种解决方案是利用免费的模数 (ADC) 通道。ADC 通道的电压范围通常为 0 至 3.3 伏(尽管有些可能为 0 – 1.7 或 0 – 5.0),我们可以将其分解为不同的电压范围以表示不同的电路板版本。例如,一个标准的 12 位 ADC 通道的范围为 0 – 4095,我们可以将其分成八个不同的版本,如下所示:
目标是创建一个电阻梯形电路,其中梯形的中点连接到 ADC 引脚。应选择电阻器的值,使其落在我们范围的中点范围内。例如,版本一应选择产生约 0.206 电压的电阻器,对应于约 256 个计数。当电路板的第 2 版准备就绪时,梯形电阻器会更新以产生约 0.618 的电压,对应于约 768 个计数。当系统启动时,软件会读取模拟电压,然后确定 PCB 的版本以及软件是否与该硬件版本兼容。
现在在使用 ADC 版本控制方案时有几点需要考虑。首先,你可以通过简单地调整范围轻松地将这个系统扩展到八个以上的版本。这比必须添加额外的 GPIO 引脚才能达到更高的版本号要好。第二,就像GPIO技术一样,需要适当选择电阻值,以最大限度地降低漏电流。最小化此电流的一种方法是让 GPIO 线为 VCC 供电,以便在不需要时可以关闭版本电路。虽然这确实需要使用一个额外的引脚,但对于低功耗系统可以节省宝贵的泄漏电流。第三,你需要选择精度高的元件,1%或更好,并且在产品的生命周期内不会出现太大的降额。这将防止第 1 版硬件在 5 年或 10 年内突然变成第 2 版或第 3 版。
结论
正如我们在文章中看到的那样,嵌入式开发人员可以通过几种不同的方式对硬件进行版本控制,以便软件可以验证它们是否在已知的硬件版本上运行,这可以防止硬件/软件不匹配,并确保系统本身可以验证其配置是否正确。