Power consumption of ncs1.9.0 SDK

I used 9160 to develop a product for the customer. Previously, I used ncs1.2.0 SDK, and the power consumption of the whole machine was about 200uA. Now I am going to use ncs1.9.0 SDK, but after migrating to the new platform, I found that the power consumption of the whole machine has increased significantly, reaching 1.85ma. Why?

Both firmware use the modem firmware of V1.3.1. The difference is that I sleep UART in ncs1.2.0, but I do not see such operation in ncs1.9.0.

Parents
  • Thank you. I used this function to wake up and Hibernate the UART according to your reminder. Now the power consumption of my device has been reduced. However, there seems to be a small problem, that is, it seems to take a long time to wake up the UART after hibernation, which may cause a part of the data transmitted through the UART to be lost.

    This is my code for uart control:

    void uart_sleep_out(void)
    {
    #ifdef CONFIG_PM_DEVICE
    	if(k_timer_remaining_get(&uart_sleep_in_timer) > 0)
    		k_timer_stop(&uart_sleep_in_timer);
    	k_timer_start(&uart_sleep_in_timer, K_SECONDS(UART_WAKE_HOLD_TIME_SEC), K_NO_WAIT);
    
    	if(uart_is_waked)
    		return;
    	
    	pm_device_action_run(uart_ble, PM_DEVICE_ACTION_RESUME);
    	k_sleep(K_MSEC(10));
    	
    	uart_is_waked = true;
    
    #ifdef UART_DEBUG
    	LOGD("uart set active success!");
    #endif
    #endif
    }
    
    void uart_sleep_in(void)
    {
    #ifdef CONFIG_PM_DEVICE
    	if(!uart_is_waked)
    		return;
    	
    	pm_device_action_run(uart_ble, PM_DEVICE_ACTION_SUSPEND);
    	k_sleep(K_MSEC(10));
    	
    	uart_is_waked = false;
    
    #ifdef UART_DEBUG
    	LOGD("uart set low power success!");
    #endif
    #endif
    }

Reply
  • Thank you. I used this function to wake up and Hibernate the UART according to your reminder. Now the power consumption of my device has been reduced. However, there seems to be a small problem, that is, it seems to take a long time to wake up the UART after hibernation, which may cause a part of the data transmitted through the UART to be lost.

    This is my code for uart control:

    void uart_sleep_out(void)
    {
    #ifdef CONFIG_PM_DEVICE
    	if(k_timer_remaining_get(&uart_sleep_in_timer) > 0)
    		k_timer_stop(&uart_sleep_in_timer);
    	k_timer_start(&uart_sleep_in_timer, K_SECONDS(UART_WAKE_HOLD_TIME_SEC), K_NO_WAIT);
    
    	if(uart_is_waked)
    		return;
    	
    	pm_device_action_run(uart_ble, PM_DEVICE_ACTION_RESUME);
    	k_sleep(K_MSEC(10));
    	
    	uart_is_waked = true;
    
    #ifdef UART_DEBUG
    	LOGD("uart set active success!");
    #endif
    #endif
    }
    
    void uart_sleep_in(void)
    {
    #ifdef CONFIG_PM_DEVICE
    	if(!uart_is_waked)
    		return;
    	
    	pm_device_action_run(uart_ble, PM_DEVICE_ACTION_SUSPEND);
    	k_sleep(K_MSEC(10));
    	
    	uart_is_waked = false;
    
    #ifdef UART_DEBUG
    	LOGD("uart set low power success!");
    #endif
    #endif
    }

Children
Related