nRF52 и BLE: где утекали микроамперы
Датчик на nRF52832 должен был жить от CR2032 два года. По первым замерам выходило четыре месяца. Где утекали микроамперы — по порядку, от очевидного к обидному.
Как я мерил
Power Profiler Kit II в режиме источника, 3.0 В, запись по часу. Мультиметром такое не поймать: средний ток складывается из коротких пиков радио по 6–8 мА и длинного сна на единицах микроампер, а мультиметр показывает что-то среднее и врёт в обе стороны.
Первое: интервал рекламы
В примере из SDK advertising interval стоит 100 мс. Для датчика, который раз в минуту отдаёт температуру, это безумие. Поставил 1 с — средний ток упал с 41 до 9 мкА. Телефон всё равно находит устройство за пару секунд.
Второе: логирование
RTT-логи в отладочной сборке держали включённым HFCLK. В релизной сборке логирование было «выключено» через NRF_LOG_ENABLED 0, но остался вызов NRF_LOG_PROCESS() в главном цикле, который будил ядро на каждом проходе. Убрал — ещё минус 2 мкА.
Третье, обидное: подтяжка на кнопке
Кнопка сброса настроек висела на GPIO с внутренней подтяжкой к питанию и замыкала на землю. Сама по себе это ноль тока, пока кнопку не трогают. Но на плате стоял ESD-диод с утечкой, которая на нашей партии оказалась около 1.5 мкА вместо обещанных в datasheet 50 нА. Перевёл кнопку на чтение только при старте и отключал подтяжку в рабочем режиме.
Итог
Было 41 мкА в среднем, стало 4.8 мкА. По расчёту на ёмкость CR2032 с поправкой на холод — больше двух лет. Мораль, которую я уже трижды выучил и снова забыл: сначала профайлер, потом гипотезы.