我有几十个 PIC16 芯片。我想从芯片中检索某种唯一的序列号以进行识别。我知道它可以手动完成。但这很乏味。
问题:
- PIC 有内置序列号吗?
- 如果答案是否定的,当我从 Microchip 订购芯片时,是否有一种简单的方法可以将具有唯一序列号的代码上传到每个芯片?
我有几十个 PIC16 芯片。我想从芯片中检索某种唯一的序列号以进行识别。我知道它可以手动完成。但这很乏味。
问题:
不
是可能的,但我不知道需要多少数量,即他们是否会为数十个设备执行此操作。我们总是有至少 1000 个零件的批次。这就像使用您的软件进行预编程一样,但您需要指明应该在哪个位置对唯一 ID 进行编程。您需要提供起始 ID 和格式(BCD、二进制、LSD/MSD 优先,...)。
请注意,此编号位于正常程序存储器中,如果您擦除该部分以进行重新编程,它将被擦除。
编辑
控制器通常在芯片级没有这个的原因是它很昂贵:编程是通过激光完成的,这是一个额外的生产步骤。大规模编程的微控制器可以通过软件轻松地对唯一 ID 进行编程,这不需要额外的步骤。
另一种选择是像 Maxim DS2411这样的 SSN(硅序列号) 。这些也是激光编程的,所以也不便宜,但你避免了额外的后勤步骤,那里总是会出错。我知道它会发生。
(另一个编辑)迈克建议使用MAC 地址芯片作为替代方案。这些是具有唯一 ID(MAC 地址是全球唯一)的 EEPROM,该 ID 被编程在受写保护的器件的一部分中。其余部分可用作普通 EEPROM,例如用于存储设备参数。EEPROM 似乎比 SSN 便宜很多,但功能相同。
另请参见
分配唯一的每板地址的方法
正如史蒂文所说,PIC 在制造时没有内置的唯一序列号。让我们明确一点,我们谈论的数字在相同型号的两个芯片之间会有所不同。
大多数 PIC 确实有一个芯片 ID 编码在其中。这可以由 PIC 程序员读取以确定它所连接的 PIC 的类型。据我所知,只有 12 位核心 PIC 没有这样的芯片 ID。所有其他 PIC 都可以通过电子方式识别,尽管有很多不同的方式必须将它们置于编程模式,然后读取芯片 ID。能够识别任意 PIC 的 PIC 编程器软件并非易事。
如果您真的是指序列号,那么必须在生产后将其编程到零件中。我们已经多次这样做了。在将固件编程到 PIC 的生产测试过程中,您将其设置为还获得一个唯一的序列号并将其编程。一种简单的方法是从固件工具生成的主 HEX 文件开始。这包含一个空白序列号。你编写一个小程序,根据你的策略获取一个新的序列号,读取主 HEX 文件,用新序列号替换空白序列号,然后写出一个临时 HEX 文件。临时 HEX 文件用于对零件进行编程,然后将其删除。
为了获得更好的稳健性,您将序列号状态存储在生产夹具的 EEPROM 中,而不是存储在磁盘文件中。系统要求夹具提供一个新号码,而这个夹具的设计目的是永远不会两次给出相同的号码。当它分配的序列号范围用完时,它拒绝工作。如果您有远程制造商为您构建单元,这将特别有用。这样,如果他们弄乱了计算机上的某些内容并从备份中恢复,它也不会重置序列号范围。是的,这确实发生了。
如果要从外部读取序列号,则大多数 PIC 拥有的用户 ID 位置可能是存储它的合适位置。它们与一般程序存储器或 EEPROM 的不同之处在于,即使芯片受到代码保护,它们也可以被读取。
如果您的 PIC 由 Microchip 或分销商编程,您通常可以通过某种方式对它们进行序列化。但是,工厂编程仅适用于成熟的大批量产品。如果您认为您会定期升级固件,请不要使用工厂编程。交货时间很长,您将在管道中使用旧版本。无论如何,您的设备都必须在构建后进行测试,因此添加一个对 PIC 进行编程的步骤通常不会带来额外的负担。
PIC16(L)F15324/44 器件在最终制造期间使用 Microchip 唯一标识符 (MUI) 单独进行 7 编码。MUI 不能通过批量擦除命令或任何其他用户可访问的方式擦除。此功能允许在需要的应用中对 Microchip Technology 器件的制造进行追溯。应用程序制造商也可以将它用于许多需要未经验证的唯一标识的功能,例如:
- 跟踪设备
- 唯一的序列号。MUI 由九个程序字组成。
编辑