在生产中唯一标识固件是否可行


12

大规模生产中是否有可用的系统允许将唯一的序列号编程到固件中,或为通过的每个PCB提供一些可用的存储空间?

我发现FDA已决定开始对医疗级设备进行强制执行,但这是否容易实现,还是需要开发自己的制造工艺?


7
您拥有哪种系统?许多CPU(和高端MCU)已经预先设置了具有唯一值的某种ID寄存器。
德米特里·格里戈里耶夫

4
首先检查您的MCU尚无唯一标识符
Jeroen3'7

Answers:


14

大多数生产程序员都能够将唯一的序列号插入已编程的存储器,此过程通常称为序列化。这是旧Dataman程序员对“序列化”屏幕的了解。

Dataman程序员的序列化显示


serialization这是可能的,但需要格外小心,特别是如果值的范围跨越单词边界时。如果您将编程外包,这将变得更加棘手-一家知名的供应商在一次承认错误而不是一次却连续两次的错误之后,才最终承认他们所涉及零件的程序员无法序列化多个字节。最终,他们为每个较高有效字节的值发送了一个唯一的文件,为此,他们针对每个低字节进行了一个独特的256件编程工作。对于下一个设计,我们构建了一个自定义程序员。
克里斯·斯特拉顿

14

您可能会询问仅软件解决方案,但是如果您能够在板上添加便宜的IC,则可以使用“硅序列号”芯片。

这些是微小的ROM芯片,每个设备都包含一个唯一的二进制数。Maxim的DS2401(1线总线)和DS28CM00(I2C)均具有48位唯一编号。

该编号在该制造商制造的该零件编号的所有IC中都是唯一的。显然,这在世界上每个人制造的所有SSN芯片中都不是唯一的。但是它们使为您的电路板选择设备非常容易,并且知道每块电路板都会从中读取一个不同且唯一的编号。


1
这很可能是我见过的最好的供应商锁定方法。
基本

“显然,在世界上每个人制造的所有SSN芯片中都不是唯一的”为什么这应该“显而易见”?其他打算在全球范围内唯一的标识符,例如以太网MAC地址,则使用前缀分配来完成它-供应商使用其前缀,然后选择剩余的位/数字。
Ben Voigt

1
@BenVoigt MAC地址不是全局唯一的。只是区域性的。可以来亚洲购买具有MAC地址的设备,该设备将与欧洲的设备发生冲突。哎呀,在许多设备上,您甚至可以更改您的MAC地址,以故意与您拥有的设备发生冲突。
slebetman

@BenVoigt,您好,存在许多SSN IC系列,许多处理器/ MCU具有唯一的ID,它们仅是IC系列唯一的。您可以列出多少种全球唯一的IC编号方案?(不像IMEI这样的产品编号)
TonyM '17

5

是的,当然,如前所述,mac地址是显而易见的地址,通常是在mac旁边的flash / eeprom(如果是单独的一部分)中,或者在其他位置的flash / eeprom中。重要的产品数据(板序列号等)可以放在单独的eeprom或闪存中,也可以放在用于存储其他固件的同一设备中。

例如,在可能进行固件现场升级的情况下(这是系统设计的一部分),您不希望在擦除和重新编程固件闪存时擦除VPD数据,因此您需要使用写保护功能来解决此问题。闪存设备(将VPD放在其银行/区域上并锁定该区域),而不必公开发布/记录如何释放写保护引脚和/或其他解决方案,以便您可以在Mfg和然后以其他方式将其保持锁定状态(根据需要将其下拉/向上,然后在ICT期间/周围进行编程时,该固定装置可以用其他方式拉动它)。

可能比您想像的要普遍得多,医学只是这样做的一小部分人。也许不是电视遥控器,但可能是鼠标或键盘,当然还有手机等。

如果/在板上还使用了贴纸,您可能会发现它带有条形码,因此在制造过程中,固定装置或操作员可以扫描条形码,组件转速等并将其添加到该板的VPD中。


如果您是为现场升级而设计的,那么您至少想知道您所拥有的固件版本,可以将其简单地编译到固件中,但是在进行现场升级之前,您可能需要知道这是什么特定平台/板(以检查//使用正确的固件和/或现场编程的细微差别等),因此不仅要保护VPD,还可能需要VPD信息作为设计的一部分,以进行固件升级。
old_timer

3

每个产品都有唯一的代码是完全可行的。一种实现方法是拥有一个软件编程系统,该系统为每个已编程的设备顺序更改固件标识号。对于某些系统,这很容易做到;例如,某些微控制器具有专门用于存储ID的保留eeprom位置。

另一种选择是添加唯一的硬件ID。这样的一个例子是达拉斯半导体(Dallas Semi)(现为Maxim Integrated)硅序列号集成电路(DS2401)。该设备为您提供一个序列号,并且可以保证它是唯一的。该序列号可用于推断特定产品的唯一地址。


2

批量生产的网卡在制造过程中将其硬件(MAC)地址形式的序列号编程到其闪存/ EEPROM中。

虽然可以去除或重新粘贴粘贴在产品外壳上的序列号,但将序列号烧入特定的电路板中却提供了另一种跟踪电路板使用情况的方法。该序列号很可能还会打印在医疗文档上,以跟踪用于医疗诊断或操作的确切设备。


2

...这是容易完成的事情,还是需要开发自己的制造工艺?

大约10年前,我遇到的情况与我为一位客户开发的医疗设备固件类似。这是2类设备,提高了标准。生产数量达数百个。

我们找不到可以自动或半自动写入序列号的现成编程器。我们做了一个解决方法。我们有一个用于校准和测试的工厂固件。该工厂固件通过串行端口与其余测试设备通信。作为测试的一部分,我们将下载序列号,该序列号存储在微控制器的EEPROM中。(工厂固件被现场固件覆盖。)


0

SEGGER生产编程人员支持将唯一的序列号闪存到MCU中。


0

如果您有很多选择(此答案中有一些选择):

  1. 如果可用,请使用微控制器的唯一ID。
  2. 通过在专用I / O上设置一些外部跳线来选择唯一的地址。
  3. 在生产过程中将UID编程为闪存或EEPROM。固件文件本身可以通过序列化进行更改。如果您的装配线不具有此功能,但您可以对其进行自定义,则可以通过使用十六进制编辑器定位固件文件的偏移量,并使用您喜欢的脚本/语言来修改文件来轻松实现此功能。有时,您可以使用链接程序脚本“修复”此地址。
  4. 接口提供UID的外部芯片。
  5. 使用服务接口或引导程序配置内部闪存/ eeprom(如果有)。这甚至可以在测试过程中完成(在某些情况下不完全在“生产线”中)。某些设备具有此服务接口,只有授权技术人员的制造商​​才能更改某些值。由于该值不可修改,因此请确保代码标记已修改的值并禁止进一步的修改。如果您有引导加载程序,请确保在现场升级中不会覆盖此部分。

0

如果您可以使用良好的硬件RNG和16字节的额外持久性存储,则无需过多更改生产过程的一种方法就是在首次启动时生成v4 GUID并将其存储。您可以在运行的任何编程后测试期间都将固件转储为串行固件。它不是顺序的,但是对于大多数应用程序来说并不重要。


0

如果在每个PCB上使用RFID或智能标签均满足要求,这将是最简单的实施方法-在您的控制之下。

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.