现在在调试代码的过程中发现
1.我在da14580_config.h中配置了#define CFG_EXT_SLEEP 之后,发现去读写i2c接口的时候出现了蓝牙死机的现象
2.没有配置#define CFG_EXT_SLEEP ,i2c读写正常
3.在配置了#define CFG_EXT_SLEEP 之后,在读写i2c之前调用
app_disable_sleep();
if(GetBits16(SYS_STAT_REG, PER_IS_DOWN)){
periph_init();
}
之后,读写i2c正常。
请问是什么原因
Device:
因为进入extended sleep模式后,会关外设的电。在每次醒来的中断函数里面BLE_WAKEUP_LP_Handler会有相同的调用periph_init()。
不知道你的I2C读写函数是不是含在任务TASK里面来处理的?
怎么确定蓝牙是否进入到extended sleep模式
怎么确定I2C读写函数是不是含在任务TASK里面?
现在发现在i2c读写之前,重新初始化i2c,能够进行读写
1.一种方式就是看电流,extended sleep模式下底电流一般都在1mA以下。
2.这取决于你的设计。之前我只是问一下,如果你的I2C模块是独立于蓝牙的,那就必须在睡眠醒来重新初始化。但是比如suota的应用里面会用到flash存储,这就是和消息同步进行操作的。