SYD8821是具有全球领先低功耗(RX 2.4mA @-94.5dBm灵敏度,TX 4.3mA @0dBm输出功率)的蓝牙低功耗SOC芯片,在极低电流下实现了优异的射频性能,搭配176kB SRAM,512kB flash,非常适合中高阶可穿戴、智能家居、物联网等低功耗应用。具体可咨询:http://www.sydtek.com/
发生这个错误的 原因有如下几个:
1.一般而言官方出厂的默认程序可能会带有低功耗的功能(注意:这里指的是官方出的开发板或者一些模块上的芯片,而成批出的量产的芯片(一般出售的芯片)是没有烧录带有低功耗的功能的),而进入低功耗的芯片是不能够直接被jlink等仿真器识别到的(因为低功耗模式下SWD的相关时钟受到影响),要进行特殊的流程,具体的请看:https://blog.csdn.net/chengdong1314/article/details/79707270中的《SYD8821 不能够挂接仿真器的恢复办法》相关内容
至于代码有没有进低功耗模式请看代码中的while(1)主循环中是否有如下语句:
SystemSleep(POWER_SAVING_RC_OFF, FLASH_LDO_MODULE, 11000 , (PMU_WAKEUP_CONFIG_TYPE)(FSM_SLEEP_EN|PIN_WAKE_EN|TIMER_WAKE_EN|RTC_WAKE_EN));
2.是否有调用“PMU_CTRL->UART_EN = 0;”语句,设置PMU_CTRL->UART_EN为1,因为该项设置也会影响到SWD的时钟
3.KEIL中的设置要按照如下设置:
4.JLINK等仿真器要正确连接,具体请看:https://blog.csdn.net/chengdong1314/article/details/79599299中的《开发板介绍》:
SYD8821 cache模式下仿真环境设置
SYD8821在不做任何处理的情况下,仿真的时候有概率出现“CPU could not be halted”的错误,错误提醒如下:
Load "F:\\Company data\\SYD8821\\SYD8821_SDK\\Source Code\\SYD8821_other\\cache_496KB\\Keil\\output\\Module_samples.axf"
BS \\Module_samples\../main.c\121, 1
____________________^
*** error 35: undefined line number
BS \\Module_samples\../main.c\74
***JLink Error: CPU is not halted
**JLink Warning: CPU could not be halted
***JLink Error: Can not read register 15 (R15) while CPU is running
***JLink Error: Can not read register 16 (XPSR) while CPU is running
***JLink Error: Can not read register 0 (R0) while CPU is running
***JLink Error: Can not read register 1 (R1) while CPU is running
***JLink Error: Can not read register 2 (R2) while CPU is running
***JLink Error: Can not read register 3 (R3) while CPU is running
***JLink Error: Can not read register 4 (R4) while CPU is running
***JLink Error: Can not read register 5 (R5) while CPU is running
***JLink Error: Can not read register 6 (R6) while CPU is running
***JLink Error: Can not read register 7 (R7) while CPU is running
***JLink Error: Can not read register 8 (R8) while CPU is running
***JLink Error: Can not read register 9 (R9) while CPU is running
***JLink Error: Can not read register 10 (R10) while CPU is running
***JLink Error: Can not read register 11 (R11) while CPU is running
***JLink Error: Can not read register 12 (R12) while CPU is running
***JLink Error: Can not read register 13 (R13) while CPU is running
***JLink Error: Can not read register 14 (R14) while CPU is running
***JLink Error: Can not read register 15 (R15) while CPU is running
***JLink Error: Can not read register 16 (XPSR) while CPU is running
***JLink Error: Can not read register 17 (MSP) while CPU is running
***JLink Error: Can not read register 18 (PSP) while CPU is running
***JLink Error: Can not read register 20 (CFBP) while CPU is running
发生这个错误的时候仿真不能够正常进行,仿真器停止不了MCU。
这里提供几个方法,可逐一尝试,注意:因为上面已经仿真失败,所以想再次进入仿真,必须要按下芯片的复位键。
方法一:在仿真界面里关闭汇编调试窗口:
使用这个方法基本不会出现问题了。
方法二:去掉仿真设置里的“load Application at Statup”选项,并增加一个initalization file,比如“debug.ini”,并且在initalization file指定中的文件中load本工程生成的axf文件,比如Module_samples.axf,这里提供一个示例命令:
LOAD ./output/Module_samples.axf INCREMENTAL
这时候不管打开汇编窗口与否都不会有问题:
关于本节博客的更加生层次的原理可看:https://blog.csdn.net/chengdong1314/article/details/78355913
如果第一种方法有效,建议使用第一种方法!
这里上传本博客源代码(工程在“\Source Code\SYD8821_other\cache_496KB\Keil”):https://download.csdn.net/download/chengdong1314/10373473