This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2634:每个芯片唯一的非易失性 ID

Guru**** 2557640 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1569132/am2634-non-volatile-id-unique-to-each-chip

器件型号:AM2634


工具/软件:

您好、

我正在寻找一种方法来获取唯一的 TI 编号、无论是序列号还是其他任何产品、这在处理器之间还是在下电上电之间都是唯一的。
但是、当我读出两个不同开发套件之间的数字时、两个开发套件报告的数字都相同。
我尝试了以下“表 2-929. TOP_CTRL 寄存器、基址=50D8 0000h、Length=4096“ of https://www.ti.com/lit/ug/spruj42e/spruj42e.pdf?ts =1756786931208 
10h 32 TOP_CTRL_EFUSE_DIEID0 50D8 0010h
14h 32 TOP_CTRL_EFUSE_DIEID1 50D8 0014h
18h 32 TOP_CTRL_EFUSE_DIEID2 50D8 0018h
1CH 32 TOP_CTRL_EFUSE_DIEID3 50D8 001Ch
20h 32 TOP_CTRL_EFUSE_UID0 50D8 0020h
24h 32 TOP_CTRL_EFUSE_UID1 50D8 0024h
28h 32 TOP_CTRL_EFUSE_UID2 50D8 0028h
2 通道 32 TOP_CTRL_EFUSE_UID3 50D8 002Ch
30h 32 TOP_CTRL_EFUSE_DEVICE_TYPE 50D8 0030h
34h 32 TOP_CTRL_EFUSE_FROM0_CHECKSUM 50D8 0034h
38h 32 TOP_CTRL_EFUSE_JTAG_USERCODE_ID 50D8 0038h
我也尝试 用下面读出 MAC ID,但它读回我使用的两个控制卡的所有 0。
std::array get_hardware_id(){
  uint32_t mac_ID0 = HW_RD_REG32_RAW (CSL_TOP_CTRL_MAC_ID0);
  uint32_t mac_ID1 = HW_RD_REG32_RAW (CSL_TOP_CTRL_MAC_ID1);
  return{(uint8_t)(mac_id0 >> 0)、(uint8_t)(mac_id0 >> 8)、(uint8_t)(mac_id0 >> 16)、(uint8_t)(mac_id0 >> 24)、
       (uint8_t)(mac_id1 >> 0)、(uint8_t)(mac_id1 >> 8)、(uint8_t)(mac_id1 >> 16)、(uint8_t)(mac_id1 >> 24)、
       };
}
它返回两个被测控制卡上的所有 0: 000000000000
在  EFUSE_UID 上执行相同的操作
std::array get_hardware_id(){
  uint32_t uid0 = HW_RD_REG32_RAW (CSL_TOP_CTRL_EFUSE_UID0);
  uint32_t uid1 = HW_RD_REG32_RAW (CSL_TOP_CTRL_EFUSE_UID1);
  uint32_t uid2 = HW_RD_REG32_RAW (CSL_TOP_CTRL_EFUSE_UID2);
  uint32_t uid3 = HW_RD_REG32_RAW (CSL_TOP_CTRL_EFUSE_UID3);
  return{(uint8_t)(uid0 >> 0)、(uint8_t)(uid0 >> 8)、(uint8_t)(uid0 >> 16)、(uint8_t)(uid0 >> 24)、
       (uint8_t)(uid1 >> 0)、(uint8_t)(uid1 >> 8)、(uint8_t)(uid1 >> 16)、(uint8_t)(uid1 >> 24)、
       (uint8_t)(uid2 >> 0)、(uint8_t)(uid2 >> 8)、(uint8_t)(uid2 >> 16)、(uint8_t)(uid2 >> 24)、
       (uint8_t)(uid3 >> 0)、(uint8_t)(uid3 >> 8)、(uint8_t)(uid3 >> 16)、(uint8_t)(uid3 >> 24)};
}
两个控制卡都返回非零值、但两个控制卡之间的数字相同。
与  EFUSE_DIEID 相同
std::array get_hardware_id(){
  uint32_t uid0 = HW_RD_REG32_RAW (CSL_TOP_CTRL_EFUSE_DIEID0);
  uint32_t uid1 = HW_RD_REG32_RAW (CSL_TOP_CTRL_EFUSE_DIEID1);
  uint32_t uid2 = HW_RD_REG32_RAW (CSL_TOP_CTRL_EFUSE_DIEID2);
  uint32_t uid3 = HW_RD_REG32_RAW (CSL_TOP_CTRL_EFUSE_DIEID3);
  return{(uint8_t)(uid0 >> 0)、(uint8_t)(uid0 >> 8)、(uint8_t)(uid0 >> 16)、(uint8_t)(uid0 >> 24)、
       (uint8_t)(uid1 >> 0)、(uint8_t)(uid1 >> 8)、(uint8_t)(uid1 >> 16)、(uint8_t)(uid1 >> 24)、
       (uint8_t)(uid2 >> 0)、(uint8_t)(uid2 >> 8)、(uint8_t)(uid2 >> 16)、(uint8_t)(uid2 >> 24)、
       (uint8_t)(uid3 >> 0)、(uint8_t)(uid3 >> 8)、(uint8_t)(uid3 >> 16)、(uint8_t)(uid3 >> 24)};
}
两个控制卡都返回非零值、但两个控制卡之间的数字相同。
您是否知道我可以拉取什么寄存器、或者更好地说、我可以使用什么 API 函数、以便在芯片之间获得通过下电上电保持一致的唯一 ID?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    您能否确保 TOP_Ctrl 已解锁并尝试再次读取 MAC_ID 寄存器? 很遗憾、我认为我们目前没有可读取 MAC_ID 的 API。
    此致、

    Susan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Susan、

    您如何建议我们解锁 TOP_CTRL? 我尝试在未成功读取 MAC ID 之前运行`SOC_controlModuleUnlockMMR (SOC_DOMAIN_ID_MAIN、TOP_CTRL_PARTITIION0);`μ s — 仍然读取全 0。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Justin:

    您可以按照以下代码片段中的说明读取 SOC MacID: