Пришлось разбираться с тем, почему после отключения BLE Central от периферийного устройства ток потребления у Central неожиданно возрастает до 5.6 мА.
Оказалось все довольно просто. В примерах SDK устройство Central ведет себя так, что после отключения оно автоматически переходит в режим сканирования путем вызова функции sd_ble_gap_scan_start. Если этот вызов исключить, то ток потребления уменьшается до приемлемых значений - порядка 50 мкА.
Функция sd_ble_gap_scan_start нужна только для обнаружения BLE-устройств в сети. Если заранее известен MAC-адрес целевого устройства BLE, то для установки связи функция sd_ble_gap_scan_start не нужна, и её вызов можно исключить. Это может быть важно для устройств, которым критично энергопотребление.
uint32_t sd_ble_gap_scan_start (ble_gap_scan_params_t const * p_scan_params);
Функция запускает сканирование сети BLE - поиск устройств в сети (GAP Discovery procedure, Observer Procedure).
Генерируемые события:
BLE_GAP_EVT_ADV_REPORT Получен пакет адвертайзинга (advertising packet) или пакет ответа на сканирование (scan response packet). BLE_GAP_EVT_TIMEOUT Произошел таймаут сканера.
Параметры функции:
[in] p_scan_params Указатель на структуру с параметрами сканирования.
Возвращаемые значения:
NRF_SUCCESS Процедура сканирования успешно инициирована. NRF_ERROR_INVALID_ADDR Предоставлен недопустимый указатель. NRF_ERROR_INVALID_STATE Недопустимое состояние для выполнения операции. NRF_ERROR_INVALID_PARAM Предоставлен недопустимый параметр (параметры). NRF_ERROR_BUSY Стек занят, обработайте ожидающие события и сделайте новую попытку запустить сканирование. NRF_ERROR_RESOURCES Недостаточно доступных слотов для ролей BLE. Остановите одну активную роль (или большее количество активных ролей) - Central, Peripheral или Broadcaster, и сделайте новую попытку запуска сканирования.
uint32_t sd_ble_gap_scan_stop (void);
Функция останавливает сканирование сети BLE.
Возвращаемые значения:
NRF_SUCCESS Процедура сканирования успешно остановлена. NRF_ERROR_INVALID_STATE Недопустимое состояние для выполнения операции (возможно Central не находится в состоянии сканирования).
|