CC2650调试问题
一、问题
1、死机问题
环境:使用CC2650EVM
频繁数据收发出现死机
1)通过JTAG定位发现如下位置
PC为 0x10003594 — 该地址的范围位于ROM的驱动中,因为没有源代码无法看到具体位置。 --- 经常出现
2)死循环等待,cc26xxware 驱动AuxAdiDdiSafeRead 函数中while (!HWREG(AUX_SMPH_BASE + AUX_SMPH_O_SMPH0));
3)oscillators_switch_to_hf_xosc 接口中 —> DDI16BitfieldRead 调用后 出现死循环, 初步分析是M3的RF驱动切换频率到HF,一直在死等ROM驱动的返回结果 -- 必现
2、JTAG连接不上CC2650
环境:如问题1的1)中出现死机后,无法连接JTAG,必须机器断电重启才能恢复过来。
3、JTAG下载代码到Flash中,偶尔出现芯片坏的问题
环境:我们公司自己的电路板
问题:多次烧程序后,发现无法启动,必须更换芯片。
三、低功耗方案求助
期望能给于低功耗的应用方案指导。
用的什么仿真器,连线怎么连的?
连到SmartRF Flash Programmer2能识别芯片吗?
连接FLASH PROGRAMMER2可以识别芯片,仿真器用的XDS100V2和CC2650EVM上的XDS100V3都是这种情况。主要是程序死机问题已经困扰了很长一段时间。每次执行到那里都会死机,地址上看好像是在ROM里面,我们也看不到任何里面的信息。
你可以从FLASH里Load RTOS,方法参考SWRU393C 9.7.4章节
在appBLE.cfg 下面把ROM的两行代码注释掉,JTAG接IAR在线调试,IAR下Attach to running target看运行的指令和寄存器
我使用的是contiki3.0, 文件为 contiki/examples/ipv6/simple-udp-rpl/broadcast-example.c,硬件环境为CC2650。一共有4个板子参与测试,正常UDP收发测试运行约1天左右的时间,发现2个板子不再收发,通过JTAG 对该板子抓取的数据如下。
板子1:
PC = 10003982, CycleCnt = 1ADB48B4
R0 = 00000006, R1 = 00FFFFFF, R2 = 000000FF, R3 = 00000000
R4 = E000ED08, R5 = 50001000, R6 = 00000009, R7 = 50001000
R8 = 40091000, R9 = 40090000, R10= 00000005, R11= 40031000
R12= FFFFFFFF
SP(R13)= 11002000, MSP= 11002000, PSP= 00000000, R14(LR) = 10003BCD
XPSR = 01000000: APSR = nzcvq, EPSR = 01000000, IPSR = 000 (NoException)
CFBP = 00000000, CONTROL = 00, FAULTMASK = 00, BASEPRI = 00, PRIMASK = 00
板子2:
PC = 10003982, CycleCnt = 18C95A11
R0 = 00000006, R1 = C5FFFFFF, R2 = 000000FF, R3 = 00000000
R4 = E000ED08, R5 = 50001000, R6 = 00000009, R7 = 50001000
R8 = 40091000, R9 = 40090000, R10= 00000005, R11= 40031000
R12= FFFFFFFF
SP(R13)= 11002000, MSP= 11002000, PSP= 00000000, R14(LR) = 10003BCD
XPSR = 01000000: APSR = nzcvq, EPSR = 01000000, IPSR = 000 (NoException)
CFBP = 00000000, CONTROL = 00, FAULTMASK = 00, BASEPRI = 00, PRIMASK = 00
以上若干次试验后均发现 PC = 10003982,MCU(M3)死循环,该位置正好应该处于M3的ROM的API中。
此时watchdog 也不起作用,以上2个板子并不会重启。