Hi,
I have the following minimal example:
main.c
#include ...
#define LOG_MODULE_NAME hci_uart
LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#if defined(CONFIG_SERIAL)
static const struct device *hci_uart_dev =
DEVICE_DT_GET(DT_CHOSEN(zephyr_bt_c2h_uart));
#endif
static const struct device *led;
#define LED_NODE_ID DT_INST(0, gpio_leds)
#define LED_DEV_NAME DEVICE_DT_NAME(LED_NODE_ID)
void main(void) {
led = device_get_binding(LED_DEV_NAME);
#if defined(CONFIG_SERIAL)
int err=0;
//err = pm_device_action_run(hci_uart_dev, PM_DEVICE_ACTION_SUSPEND);
if (err) {
led_on(led, 1);
}
#endif
int blink_status = 0;
while (1) {
if ((++blink_status) % 2) {
led_on(led, 0);
} else {
led_off(led, 0);
}
k_sleep(K_SECONDS(1));
}
}proj.conf:
CONFIG_CONSOLE=n CONFIG_GPIO=y CONFIG_SERIAL=y CONFIG_UART_INTERRUPT_DRIVEN=y CONFIG_UART_LINE_CTRL=y CONFIG_LED=y CONFIG_LED_GPIO=y CONFIG_PM=y CONFIG_PM_DEVICE=y CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512
Now, when setting CONFIG_SERIAL=n my nRF52840DK drains about 3-4 µA, when setting CONFIG_SERIAL=y it drains about 520 µA. That seems reasonable. Now I want to disable the UART at runtime, therefore I remove the comments in line 21. But this has no effect regarding the current. The return value is 0, so no error is reported. I read almost every thread regarding "disable UART" here in devzone, but no solution solved my problem. Any hints or ideas what I am missing?
What is confusing me is that the same appears to happen in the system_off sample. Maybe just my assumption is wrong that disabling the UART at runtime should lead to the same current consumption as CONFIG_SERIAL=n?
Regards,
Oliver
