优化开机检测电压判断是否开机
authorpenglei <1624952103@qq.com>
Mon, 8 Dec 2025 09:24:09 +0000 (17:24 +0800)
committerpenglei <1624952103@qq.com>
Mon, 8 Dec 2025 09:24:09 +0000 (17:24 +0800)
code/sdk/application/brandy/brandy_standard/board_init.c
code/sdk/application/brandy/brandy_standard/chip_init.c

index bcc551c..cf46fe3 100644 (file)
 #include "button_porting.h"\r
 #include "non_os_reboot.h"\r
 #include "pm_control.h"\r
+\r
+#if defined(SUPPORT_BATTERY_SERVICE)\r
+#include "battery_service.h"\r
+#endif\r
+\r
+\r
 #define PM_SHIPMODE_DELAY_SLEEP_MS   100\r
 static const lcd_bus_api g_display_api_qspi = {\r
     .bus_init = lcd_qspi_init,\r
@@ -204,6 +210,69 @@ void check_pwrkey_3s(void)
         PRINT("bootup continue pressed %d pressed count %d"NEWLINE,g_pwrkey_press_state==PRESSED?1:0,pressed_count);\r
     }\r
 }\r
+\r
+static void check_power_on_voltage(void)\r
+{\r
+    #if defined(SUPPORT_BATTERY_SERVICE) && !defined(BOARD_FD272)\r
+\r
+    extern uint8_t get_charge_stat(void);\r
+    extern bool batteryservice_get_voltage_by_channel(float *voltage, uint8_t channel);\r
+    #define ADC_CHANNEL_BAT_VOLTAGE 2\r
+\r
+    // if(!get_charge_stat())\r
+    {\r
+        float batV = 0.0f;\r
+        disable_charge();\r
+        uapi_tcxo_delay_ms(1000);\r
+        batteryservice_get_voltage_by_channel(&batV,ADC_CHANNEL_BAT_VOLTAGE);\r
+        enable_charge();\r
+        PRINT("battery Voltage %.02f\n",batV);\r
+\r
+        if(batV <= 3.3f)\r
+        {\r
+            if(get_charge_stat())\r
+            {\r
+                for(int i = 0; i < 3;i++)\r
+                {\r
+\r
+                \r
+                // while(batV <= 3.3)\r
+                // {\r
+                    disable_charge();\r
+                    uapi_tcxo_delay_ms(1000);\r
+                    batteryservice_get_voltage_by_channel(&batV,ADC_CHANNEL_BAT_VOLTAGE);\r
+                    PRINT("battery Voltage %.02f\n",batV);\r
+                    enable_charge();\r
+                    if(batV > 3.3f)\r
+                    {\r
+                        break;\r
+                    }\r
+                    uapi_tcxo_delay_ms(5000);\r
+                // }\r
+                }\r
+                if(batV <= 3.3f)\r
+                {\r
+                    extern void mcu_reset(void);\r
+                    mcu_reset();\r
+                }\r
+\r
+            }\r
+            else\r
+            {\r
+                PRINT("Warning: Battery voltage is too low. Device will power off");\r
+                uapi_tcxo_delay_ms(10);\r
+                extern void mcu_poweroff(void);\r
+                mcu_poweroff();\r
+            }\r
+\r
+        }\r
+       \r
+    }\r
+    \r
+#endif\r
+\r
+}\r
+\r
 bool need_enter_safemode(void)\r
 {\r
     if (PRESSED ==  porting_button_get_state() && PRESSED ==  porting_function_button_get_state())\r
@@ -226,6 +295,9 @@ void board_init(uint32_t flash_id, uint32_t flash_unique_id)
     pio_func_init();\r
     gpio_func_init();\r
     check_pwrkey_3s();\r
+\r
+    check_power_on_voltage();\r
+    \r
     if (need_enter_safemode() == true)\r
     {\r
         PRINT("entering SafeMode\r\n");\r
index 01ecf4e..c266dd8 100644 (file)
@@ -141,38 +141,6 @@ void chip_init(void)
     uapi_timer_init();\r
     uapi_timer_adapter(0, TIMER_0_IRQN, irq_prio(TIMER_0_IRQN));\r
 \r
-#if defined(SUPPORT_BATTERY_SERVICE)\r
-\r
-    extern uint8_t get_charge_stat(void);\r
-    extern bool batteryservice_get_voltage_by_channel(float *voltage, uint8_t channel);\r
-    #define ADC_CHANNEL_BAT_VOLTAGE 2\r
-\r
-    if(!get_charge_stat())\r
-    {\r
-        float batV = 0.0f;\r
-        batteryservice_get_voltage_by_channel(&batV,ADC_CHANNEL_BAT_VOLTAGE);\r
-        PRINT("battery Voltage %.02f\n",batV);\r
-\r
-        if(batV <= 3.0f)\r
-        {\r
-            printf("Warning: Battery voltage is too low. Device will power off");\r
-            uapi_tcxo_delay_ms(10);\r
-            extern void mcu_poweroff(void);\r
-            mcu_poweroff();\r
-        }\r
-        // while( batV < MIN_BOOTUP_VOTAGE)\r
-        // {\r
-        //     batteryservice_get_voltage_by_channel(&batV,ADC_CHANNEL_BAT_VOLTAGE);\r
-        //     charge_stat = get_charge_stat();\r
-        //     PRINT("battery Voltage %.02f , charging %d\n",batV,charge_stat);\r
-        //     uapi_tcxo_delay_ms(1000);\r
-        //     enable_charge(); \r
-        //     // disable_02c();\r
-            \r
-        // }\r
-    }\r
-    \r
-#endif\r
 \r
     chip_xip_init();\r
 #if TCXO_CLK_DYN_ADJUST == YES\r