Index: yc_ipc.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_ipc.c	(revision 573)
+++ /YC3121_SDK/fw/sdk/yc_ipc.c	(working copy)
@@ -136,16 +136,21 @@
 	}
 }
 
+Boolean ipc_inited = FALSE;
 void IpcInit(void)
 {
-	SYSCTRL_ROM_SWITCH = 0x94;
-	BT_RESET = 1;
-	delay(10000);   //wait for reset ok
-	while(!(BT_CONFIG & (1 << BT_INIT_FLAG)));
-	BT_CONFIG &= (~(1<<BT_INIT_FLAG));
-	erase_memory();
-	_download_btcode(bt_code);
-	WAKEUP_BT = 0x9c;
+	if(ipc_inited==FALSE)
+	{
+		ipc_inited = TRUE;
+		SYSCTRL_ROM_SWITCH = 0x94;
+		BT_RESET = 1;
+		delay(10000);   //wait for reset ok
+		while(!(BT_CONFIG & (1 << BT_INIT_FLAG)));
+		BT_CONFIG &= (~(1<<BT_INIT_FLAG));
+		erase_memory();
+		_download_btcode(bt_code);
+		WAKEUP_BT = 0x9c;
+	}	
 }
 
 //打印HCI数据包
Index: yc_lpm.h
===================================================================
--- /YC3121_SDK/fw/sdk/yc_lpm.h	(revision 573)
+++ /YC3121_SDK/fw/sdk/yc_lpm.h	(working copy)
@@ -15,6 +15,8 @@
 #define LPMBT_CONTROL2      5         //BUCKControl
 #define LPMBT_CONTROL3      6         //CHARGER
 
+extern Boolean ipc_inited;
+
 uint32_t lpm_read(volatile int *addr);
 
 void lpm_write(volatile int *addr,uint32_t value);

Index: yc_lpm.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_lpm.c	(revision 573)
+++ /YC3121_SDK/fw/sdk/yc_lpm.c	(working copy)
@@ -45,9 +45,10 @@
 
 uint32_t readlpmval(volatile int * addr,uint8_t startbit,uint8_t bitwidth)
 {
+	uint32_t tmp = 0;
 	if(32 == bitwidth)
 	{
-		uint32_t tmp = lpm_read(addr);
+		tmp = lpm_read(addr)
 		return ((tmp>>startbit) & ((1<<bitwidth) - 1));
 	}
 	else
@@ -67,13 +68,13 @@
 	}
 }
 
-static uint32_t tmp = 0;
+static uint32_t value_rtc_1s = 0;
 
 static uint32_t get_otp(void)
 {
 	uint32_t time;
 	
-	if (tmp == 0)
+	if (value_rtc_1s == 0)
 	{
 		read_otp(0x13e,(uint8_t *)&time,2);
 		time = (time == 0) ? 0x8000:time;
@@ -81,7 +82,7 @@
 	}
 	else
 	{
-		time = tmp;
+		time = value_rtc_1s;
 		time |= ((uint32_t)0x1<<31);
 	}
 	
@@ -90,8 +91,10 @@
 
 void BT_Hibernate(void)
 {
-	read_otp(0x13e,(uint8_t *)&tmp,2);
-	tmp = (tmp == 0) ? 0x8000:tmp;
+	ipc_inited = FALSE;
+	
+	read_otp(0x13e,(uint8_t *)&value_rtc_1s,2);
+	value_rtc_1s = (value_rtc_1s == 0) ? 0x8000:value_rtc_1s;
 	
 	BT_CONFIG &= ~(1 << BT_INIT_FLAG);
 	
