本来XDS200也是一样的情况,烧录程序后调用HAL_SYSTEM_RESET()重启失败,手动复位后恢复正常。
按照 http://processors.wiki.ti.com/index.php/CC2640_OAD_User%27s_Guide 上的修复措施操作后:
Fix:
Start by downloading the latest emupack from here: http://processors.wiki.ti.com/index.php/XDS_Emulation_Software_Package
Flash Programmer 2:
- Run the above installer
- Copy the contents of the emupack installer to <fp2_install_dir>/config/xds/*
XDS200烧写器恢复正常,烧录程序后无需手动复位,即可通过HAL_SYSTEM_RESET()进行设备重启。
但是用仿真器 XDS100V3 烧录程序还是有问题,必须手动复位一次,否则调用HAL_SYSTEM_RESET()会让设备卡住。
BLE 2.1 和 BLE 2.2都试了,结果一样,所以应该不是协议栈版本的问题。
请问各位同行有没有碰到这样的情况呢?是如何解决的呢?
也麻烦TI的同事帮忙分析一下可能的原因,感谢!
Susan Yang:
建议您参考 http://www.ti.com/lit/ug/swcu117h/swcu117h.pdf 的第5.6 Halt In Boot (HIB)
如果在CC26xx上连接了调试器,一旦复位,设备将在调试器连接时进入引导模式。
另外您也可以参考E2E上的类似问题
https://e2e.ti.com/support/wireless_connectivity/bluetooth_low_energy/f/538/p/486098/1919163#pi239031350=1
希望对您有所帮助,谢谢!
Qingsong Du:
回复 Susan Yang:
谢谢Susan!
用XDS100v3烧写完程序后拔掉调试器,再调用HAL_SYSTEM_RESET()进行复位,也是一样的不能正常重启设备。
而用XDS200进行烧写,拔掉或者不拔调试器,都可以用HAL_SYSTEM_RESET()进行复位。
烧写程序用的是 Flash Programmer 2。
您提供的资料我再好好分析一下,非常感谢!
Qingsong Du:
回复 Susan Yang:
应该是进入了HIB状态了。
看了TRM中JTAG相关的内容 。
5.4 ICEMelter,这一节讲得很清楚:
TCK引脚电平变化容易让设备进入调试模式,会打开JTAG的电源,这样会增加400uA的电流消耗。
同时会设置HIB标志,导致下一次设备重启时卡在引导阶段。
最后还给出了解决办法:
1,将TCK拉高。
2,短接TCK到供电,但是用这个办法之后就不能用JTAG烧程序了。
我也在板子上测了下,将TCK和GND短接下,确实会让设备软复位失败,和我问题中提到的现象完全一样。
Qingsong Du:
回复 Qingsong Du:
用逻辑分析仪测了下烧写程序时,TMS、TCK、nRESET三个引脚的电平变化情况。
在烧写完成并复位后,如果TCK引脚还有电平变化,就可能会导致HIB,如果没有变化或变化很少则不会。
da qin zheng sheng:
cjtag时序非常复杂的!建议使用jtag模式。
Qingsong Du:
回复 da qin zheng sheng:
谢谢回复,我已经跟硬件组同事说了。
但是这个问题是TCK信号引起的,用JTAG应该还是会存在吧。
如果有用JTAG接口烧写调试的,可以试试短接一下TCK和GND,然后断开,看看是不是也会增加电流消耗,调用HAL_SYSTEM_RESET()能不能成功重启。