После некоторого периода ожидания (приблизительно 3 минуты), в течение которого BLE-устройство ble_app_template выдает пакеты оповещения (advertising), возникает ошибка, при которой в RTT-лог выводится сообщение APP_ERROR:ERROR:Fatal.
Эта ошибка появляется только в случае, когда к устройству подключена консоль сообщений RTT [2] в момент, когда вызывается обработчик событий оповещения on_adv_evt с кодом события BLE_ADV_EVT_IDLE. Тогда вызывается функция sleep_mode_enter(), восстановление из которой возможно только путем полного сброса системы.
/**@brief Функция для обработки событий оповещения (advertising events).
*
* @details Эта функция будет вызвана, когда SoftDevice передает
* в приложение события оповещения.
*
* @param[in] ble_adv_evt Событие оповещения BLE.
*/
static void on_adv_evt(ble_adv_evt_t ble_adv_evt)
{
uint32_t err_code;
switch (ble_adv_evt)
{
case BLE_ADV_EVT_FAST:
NRF_LOG_INFO("Fast advertising\r\n");
err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING);
APP_ERROR_CHECK(err_code);
break;
case BLE_ADV_EVT_IDLE:
sleep_mode_enter();
break;
default:
break;
}
}
В этот момент устройство входит в режим сна, и при активной консоли RTT происходит ошибка APP_ERROR:ERROR:Fatal. Если в этот момент нажать на любую из 4 кнопок DK, то произойдет перезагрузка. При отключенном RTT устройство перезагрузится автоматически.
В принципе такое поведение с входом в режим сна вызовом функции sleep_mode_enter() было изначально предусмотрено как в примере приложения ble_app_template, так и во многих других примерах периферийных устройств BLE из SDK от Nordic Semiconductor. Это сделано специально, чтобы устройство уходило в режим сна для максимальной экономии энергии. Интервал, через которые происходит уход в sleep_mode_enter - APP_ADV_TIMEOUT_IN_SECONDS.
Отключить такое поведение просто, если закомментировать вызов функции sleep_mode_enter. Тогда устройство будет бесконечно находиться в режиме оповещения.
case BLE_ADV_EVT_IDLE:
// sleep_mode_enter();
break;
[Ссылки]
1. Fatal error on sleep 0x4001 site:devzone.nordicsemi.com. 2. nRF5x: отладка с помощью RTT. |