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.

[参考译文] CC2340R5:使用 SWD 连接读取 MAC 地址

Guru**** 2587745 points
Other Parts Discussed in Thread: CC2340R5, UNIFLASH, LP-EM-CC2340R5

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1399363/cc2340r5-reading-the-mac-address-using-an-swd-connection

器件型号:CC2340R5
主题中讨论的其他器件: UNIFLASH

工具与软件:

您好!

我尝试使用 SWD 连接来读取 CC2340R5芯片的 MAC 地址。

我可以使用 Uniflash 通过读取地址范围0x4E000058-0x4E00005C、并使用 TI 开发板 LP-XDC110ET 和 LP-EM-CC2340R5成功检索 MAC 地址。

我知道 MAC 地址存储在 FCFG (尤其是在.deviceInfo.macaddr 中)中。

我有几个问题:

  1. SACI_CMD_MISC_GET_DIE_ID 命令返回芯片 ID (也存储在 FCFG 中)、SACI_CMD_MISC_GET_CCFG_USER_REC 命令返回用户记录。 是否可以直接访问 MAC 地址、或者或许可以仅使用 SACI 命令或调试子系统邮箱来访问整个 FCFG?
  2. 我在 SWD 线路上添加了跟踪功能、以监控 Uniflash 使用调试访问端口命令序列来读取 MAC 地址。 但是、当我尝试复制此命令序列时、我不会从地址接收到任何返回值。 我在下图中添加了命令列表。 为了访问地址0x4E000058中的内容、我还需要事先做什么吗?

我期待收到您的回复、随时向我提出任何问题。

此致、

Eduardo

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

    Eduardo、您好!

    感谢您联系我们。 退一步、您能说明目标是什么吗? 您是在生产线上还是在某些自动化测试中尝试读取地址? 了解该设置以及获取地址的原因可以帮助我们找到获取地址的更优方法。

    此致、

    1月

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

    您好 Jan:

    感谢您的快速响应! :)

    我们打算在芯片位于生产线上时读取 MAC 地址。 之后、我们计划使用 SWDIO、SWDCK 和 nReset 引脚通过 SWD 连接将固件刷写到芯片中。

    根据技术参考手册中描述的闪存编程流程、固件刷写实现已完成。

    目前、我们正在执行以下步骤:

    1)将传感器从休眠模式转换到 SWD 模式。
    2)建立 SWD 连接并读取调试端口寄存器 IDCODE。
    3) 3)使用 SACI 闪存编程命令对固件进行编程。

    据我所理解、使用 Uniflash 功能似乎是一个好主意、在建立 SWD 连接后立即访问 MEM-AP 并读取为 MAC 地址保留的存储器。 此后、继续固件编程。

    您是否有其他建议或步骤可以帮助我们实现这一点?

    感谢您的帮助!

    此致、
    Eduardo

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

    Eduardo、您好!

    我想您已经阅读了用户指南中的" 通过 UniFlash 读取 CC2340R5 MAC 地址"一节。 我还建议阅读以下部分: 在 BLE5-Stack 应用中使用器件地址 ( 在 BLE5-Stack 中配置本地器件地址 )以查看这是否也有用。

    BR、

    David。

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

    David、您好!

    感谢您的答复。

    我已经复查了有关通过 Uniflash 读取 MAC 地址的指南。

    我们现在已使用标准 ARM DAP 访问部分实施此过程、但目前该过程非常慢。 我的当前方法涉及对器件进行编程和重置后的以下步骤:

    1. SWD -使用标准 Re 连接序列建立 SWD 连接。
    2. 选择 APSEL = 0x0以访问 AHB-AP。
    3. 读取地址0x40000034 (返回预期值0xC2)处的 TAR 寄存器–不过、不确定这为什么有必要。
    4. 读取地址0x4E000058和0x4E00005C 处的 TAR 寄存器以检索 MAC 地址。

    请注意、这些步骤与我在初始帖子中附加的图像非常接近、主要区别在于直接访问 MAC 地址寄存器、而不是从0x4E000000开始读取整个存储器块。

    但是、我遇到了一个问题、即来自寄存器访问的有效响应需要实施重试例程、且重新发送读取请求的次数最多可达80次。 这显著减慢了这一进程。

    您能否建议是否可向芯片发出特定命令或序列以实现对 AHB-AP 的更高效和直接访问、从而减少对大量重试的需求?

    此致、

    Eduardo

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

    我忘记提的事情。

    我注意到、MAC 地址(或任何 AHB 寄存器)仅在主扇区和 CCFG 扇区都完成编程后返回有效值。 如果未对这些扇区进行编程、则任何访问 MEM-AP 的操作均不返回任何结果。

    这可以防止我在建立 SWD 连接后立即读取 MAC 地址、正如我最初打算的那样。 相反、我只能在完整编程过程后执行此步骤。 我们计划在整个过程中使用 MAC 地址实现可追溯性、因此在连接后立即访问 ID 是我们的理想方案。

    能否 就空白或未编程的器件为何无法访问 AHB-AP 寄存器提供任何见解或建议?  

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

    欢迎您、Eduardo、

    我现在已经能够做一些我自己的测试这个主题,我有一个解释为什么发生这种情况。 器件的读/写权限是通过 CCFG (客户配置)进行配置的设置。 如果您有空白器件、CCFG 也为空白、这意味着不允许读取存储器。 这反过来会导致您看到无法读取包含 MAC 地址的 FCFG (出厂配置)的行为。 读取 FCFG 的正确程序是首先使用有效的 CCFG 对空白器件进行编程、并允许对存储器进行所有读/写权限。 这可以通过对器件进行一次编程来实现、然后您可以读回 FCFG。

    此致!
    Achyut Ray