最近有一个案子,硬件工程将电感过于靠近磁铁,磁铁对电感的干扰,导致手机搜不到蓝牙配对名,拆壳之后正常,软件解决的方法有两个:改LDO模式、改时钟模式。
改LDO模式:修改之后,电感就没有作用了,可以直接不贴,自然无视干扰,但是功耗会高很多。操作方法如下:
#define TCFG_LOWPOWER_POWER_SEL PWR_LDO15 //电源模式设置,默认为DCDC
改时钟模式:这个修改之后增加1mA的功耗,原理是增加内核的电压,来增强抗干扰,修改了之后,休眠的时候有概率会出现芯片直接跑死机的现象,解决方法如下:
首先修改时钟模式:
#define TCFG_CLOCK_MODE CLOCK_MODE_USR
然后增加一个处理:
const struct low_power_param power_param = {
......
.light_sleep_attribute = TCFG_LOWPOWER_LIGHT_SLEEP_ATTRIBUTE,
};
然后定义一下:
#define TCFG_LOWPOWER_LIGHT_SLEEP_ATTRIBUTE LOWPOWER_LIGHT_SLEEP_ATTRIBUTE_KEEP_CLOCK
最后修改休眠:
static u8 user_idle_query(void)
{
return 1;
}
static enum LOW_POWER_LEVEL user_level_query(void)
{
struct application *app;
app = get_current_app();
if (strcmp(app->name, APP_NAME_BT) == 0) {
return LOW_POWER_MODE_LIGHT_SLEEP;
}
return LOW_POWER_MODE_SLEEP;
}
REGISTER_LP_TARGET(user_lp_target) = {
.name = "user",
.level = user_level_query,
.is_idle = user_idle_query,
};