NXP MCU 技术论坛
直播中

张鑫

8年用户 930经验值
私信 关注
[问答]

通过ISP对KW45上的SB3KDK进行熔断编程时遇到的问题求解

当我们尝试使用 KW45 在我们自己的电路板中对 SB3KDK 保险丝进行编程时遇到问题。我们正在遵循AN13883并使用 Jupyter 实用程序。但我们也直接从 python venv 控制台尝试过。

问题是我们可以与我们的设备通信(通过 UART),并且我们可以使用 SPSDK 工具进行交互。但是当我们尝试对 0x20 进行 read-fuse 或 program-fuse 时,我们总是会得到一个超时错误:

• blhost -p com6 set-property 0x16 1
响应状态 = 0 (0x0)
成功。
blhost -p com6 熔断读取 0x0A 1
07
响应状态 = 0 (0x0)
成功。
响应词 1 = 1 (0x1)
读取 1 个字节中的 1 个字节。
blhost -p com6 熔断读取 0x22 16
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
响应状态 = 0 (0x0)
成功。
响应词 1 = 16 (0x10)
读取 16 个字节中的 16 个字节。
blhost -p com6 获取属性 20 1
响应状态 = 0 (0x0)
成功。
响应词 1 = 188281600 (0xb38f300)
Flash Access 分段大小 = 179.6 MiB
blhost -p com6 获取属性 21 1
响应状态 = 0 (0x0)
成功。
响应词 1 = 4294967295 (0xffffffff)
Flash Access 段数 = -1
blhost -p com6 获取属性 22 1
响应状态 = 0 (0x0)
成功。
响应词 1 = 1 (0x1)
Flash 读取边距 = USER
blhost -p com6 fuse-program 0x20 [[1234567891234567891234567891234567891234567891234567891234567891]]
错误:spsdk.mboot.mcuboot:RX:无响应,超时错误!(自开始以来为 6170 毫秒,mcuboot.py:242) McuBootConnectionError: MBoot: Connection issue -> No Response from Device
blhost -p com6 设置属性 0x16 0
响应状态 = 0 (0x0)
成功。"

为什么会这样?为什么我们可以熔断器读取其他熔断器,但不能读取 0x20?我们之前是否遗漏了任何步骤?我们无法看到指示的调试日志,因为该路由上没有任何内容。此外,我们还检查了生命周期是否处于OEM_OPEN
                                                                                                                                                                                                                                                                                                                                                                                                        

回帖(1)

龙献益

2025-3-2 13:17:05

针对在KW45上对SB3KDK进行熔断编程时遇到的超时问题,以下是逐步解决方案:


1. 确认熔丝地址正确性



  • 查阅文档:仔细核对AN13883和KW45参考手册,确认熔丝地址0x20对应的正确功能及位位置。某些芯片的熔丝地址可能以位(bit)而非字节(byte)为单位,需确认是否换算错误。

  • 示例验证:尝试读取已知未编程的熔丝(如0x00)验证流程是否正常,排除地址错误可能性。


2. 检查安全状态与权限



  • 解锁操作:确保设备处于允许熔丝编程的安全模式。某些熔丝需先通过身份验证(如提供密钥)或执行enable-fuse-programming命令解锁。

  • 属性配置:确认set-property 0x16 1是否正确设置内存接口参数。参考手册确认该属性是否关联熔丝访问权限。


3. 硬件稳定性检查



  • 电源质量:使用示波器监测供电电压,确保编程期间无跌落(如维持3.3V±5%)。

  • 信号完整性:检查UART线路(TX/RX)连接,避免干扰。必要时降低波特率(如从115200降至57600)测试稳定性。

  • 复位电路:确保NRST引脚在编程期间未被意外触发,导致设备复位。


4. 软件工具配置



  • 工具更新:升级SPSDK和blhost至最新版本,确保兼容KW45。使用命令:
    pip install --upgrade spsdk

  • 超时调整:在blhost命令中增加超时参数,例如:
    blhost -p com6 --timeout 5000 program-fuse 0x20 1

    将超时延长至5000毫秒以适应较慢的操作。



5. 编程流程验证



  • 命令顺序:严格遵循AN13883的流程,例如:

    1. 进入Bootloader模式。

    2. 执行必要的初始化命令(如设置时钟)。

    3. 解锁安全寄存器(如需)。

    4. 执行熔丝编程。


  • 日志分析:启用blhost的详细日志(-v--verbose)查看底层通信,定位超时发生的具体阶段。


6. 熔丝状态确认



  • 读取验证:编程前先读取目标熔丝值,确认是否为默认值(如0)。若已编程,尝试其他熔丝测试。

  • 写保护检查:确认相关熔丝未被OTP(一次性编程)保护,防止重复写入。


7. 参考手册核对



  • 熔丝特性:确认0x20熔丝是否需要特殊条件(如核心休眠、特定时钟源)。调整设备状态以满足要求。

  • 错误代码解析:超时错误(0x10000)可能对应手册中的超时定义,查阅错误码表获取具体原因。


8. 联系支持与社区



  • NXP官方支持:通过NXP社区提交案例,提供详细日志、硬件配置和复现步骤。

  • 开发者论坛:搜索类似问题,如GitHub的SPSDK Issues或相关论坛帖子,参考他人解决方案。


示例命令流程


# 进入Bootloader模式(具体命令依硬件设计)
blhost -p com6 reset

# 设置必要属性(根据手册调整)
blhost -p com6 set-property 0x16 1

# 延长超时并尝试编程
blhost -p com6 --timeout 5000 program-fuse 0x20 1

# 验证编程结果
blhost -p com6 read-fuse 0x20

通过以上步骤逐一排查,应能定位并解决熔断编程超时问题。若问题依旧,建议提供完整日志和硬件配置细节寻求进一步支持。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分