Dear CYibin
我在调试中遇到一个很诡异的问题,向您请教。
硬件上使用DA14531+SPI Flash(普通SPI接口,非QSPI)。
我在成功写入一次Bin并运行成功后,擦除了Flash并重复了多次重新写Bin文件的操作。
之后我发现,JTAG无法连接DA14531了。
我们尝试从主板上摘除Flash,JTAG连接又恢复了。
此后我们怀疑Flash中的数据写乱了,导致14531无法启动,于是用FlashProgramer编程器擦除了Flash中的Bin文件,讲Flash恢复为全F的初始状态。
将Flash重新焊回主板,JTAG依然无法连接14531.
以上是我们遇到的问题,期待您的解答。
Device:
你好,
当 FLASH 中有固件,并且固件中将 JTAG 接口禁用掉,就会发生 JTAG 因为 FLASH 而连接不上的现象。
这种情况常发生在客户复用了 JTAG 接口的 Pin 脚的情形中。
当问题发生后,解决办法之一:可通过 UART 接口将 FLASH 中的固件擦除。
回到你的问题,请问你的硬件环境是什么?该问题是否能稳定复现、详细复现步骤是什么?
您说的关掉JTag的方案,在新的SDK中是通过CFG_DEVELOPMENT_DEBUG这个宏来实现的吗?
目前我们的硬件中并没涉及SWCLK和SWDIO管脚的复用,也并没有在App中将这两个pin设置做它用。
我们的硬件复现环境不太稳定,都通过飞线连接,所以实验结果还有冲突的地方,我们还在累计实验。
我想先跟您确认一个问题。
如果SWCLK和SWDIO管脚没有复用,且供电/地都正常的情况下,
即使APP代码异常造成重启,JTAG应该也可以连接到14531,读到芯片的IDCODE。 这样的理解对不对?
可以调用 SetBits16(SYS_CTRL_REG, DEBUGGER_ENABLE, 0) 关掉 JTAG
从你的描述中,该问题是一个概率性问题,表现为 JTAG 接口连接不稳定?
可尝试将 SWD 速率调整到 2M 以下。
除了SetBits16(SYS_CTRL_REG, DEBUGGER_ENABLE, 0) 还有其他方式关闭JTAG吗?
另一个问题是,我发现使用SSToolbox CLI的JTAG下载SPI Flash时会概率的出现写入错误的问题。(但这个时候,CLI 的返回值是正确的。)
例如:
echo y | SmartSnippetsToolbox.exe -type spi -chip DA14531 -jtag xxxxxx -cmd write -file "%~dp0simple_beacon_531.bin" -offset 0 -nomessages 00100
SUCCESS
这个情况您遇到过吗?
你好,
你所指的写入错误是具体是指什么?
谢谢您,我找到问题了。
能分享一下什么原因吗
用cli擦除,给的参数不对,造成擦除不完全。反复写入导致flash内的数据错误。