А теперь надо глянуть - соблюдаются хоть какие-то стандарты с тестированной заготовке по данной куцей диаграмме в "супер пупер ПО" PowerProfiler от Nordic.
Самый короткий передаваемый пакет может иметь длину 80 бит при времени передачи 80 мкс. Самый длинный пакет может быть 376 бит со временем передачи около 0,3 мс.
И далее очень сложные для усвоения
nikolz выписки из стандартов, по которым он всё равно не сможет понять, что замер на диаграмме от безответного маяка и урезанный по самое... :
2. ПРОТОКОЛ ВОЗДУШНОГО ИНТЕРФЕЙСА
Core_V4.0: Том 6 Часть B.
4 ПРОТОКОЛ ВОЗДУШНОГО ИНТЕРФЕЙСА
2.1 4.1 Межкадровое пространство
IFS: интервал времени между двумя последовательными пакетами на одном канале. Время от последнего бита в предыдущем пакете до первого бита в следующем.
T_IFS = 150 мкс
2.2 4.2 Требования к времени
LL работает в 2 режимах точности:
активный и
спящий.
- Активно : состояние подключения или рекламы.
- Сон : другие состояния.
2.2.1 Активная точность часов
Начало пакета должно быть передано через 150 ± 2 мкс после окончания предыдущего пакета.
2.2.2 Точность часов сна
Интервал подключения в 1 секунду с общей точностью часов ожидания ± 1000 ppm даст окно, расширяющее каждую сторону от точки привязки на 1 мс плюс 16 мксек, при условии, что подчиненный контроллер использовал свои часы ожидания в течение почти полного интервала подключения.
2.3 4.3 Фильтрация устройств канального уровня
Фильтр хоста для устройства на основе текущего состояния (реклама, запуск и сканирование).
В основном это касается того, как каждое состояние может обрабатывать запросы от других устройств, кроме того, которое в настоящее время рассматривается для подключения.
Чтобы представить себе, как справиться на этом этапе
2.4 Состояния отсутствия подключения
2.4.1 Ожидание
состояние по умолчанию, нет активности ни Tx, ни Rx
2.4.2 Реклама
2.4.2.1 Выбор канала
Хост делает выбор на основе используемых / неиспользуемых каналов.
2.4.2.2 Интервал рекламы
T_advEvent = advInterval + advDelay
- advInterval= x * 0,625 мс = от 20 до 10240 мс
- диапазон x -> от 32 до 16384
- неориентированное событие (сканируемое или неподключаемое), затем advInterval <100 мс
- подключаемый даже неориентированный, тогда advInterval > = 20 мс
- advDelay = случайное число, генерируемое LL между 0-10 мс
2.4.2.3 Подключаемое незавершенное событие (ADV_IND)
- ОТПРАВИТЬ
- ADV_IND от рекламодателя .
- Время между двумя ADV_IND <= 10 мс.
- Состояние рекламы закрыто в пределах интервала, как показано на рисунке ниже.
- Ответ
- сканер ИЛИ инициатор
- Сканер : SCAN_REQ, чтобы запросить дополнительную информацию о рекламодателе.
- Инициатор : CONNECT_REQ для запроса ввода состояния подключения.
- LL слушает на тех же каналах.
- Если SCAN_REQ содержит адрес устройства, ответьте SCAN_RSP на том же канале, если только не заблокирован фильтром.
- Если CONNECT_REQ содержит адрес устройства, перейдите к состоянию подключения в роли ведомого.
Состояние подключаемой рекламы, которое не получает ответа
Подключаемое состояние рекламы с помощью SCAN_REQ и SCAN_RSP от сканера
Подключаемое состояние рекламы с CONNECT_REQ из инициализатора
2.4.3 Сканирование
- Два типа сканирования:
- Пассивный: только пакеты Rx и без TX. Это то, что предлагает Ubertooth .
- Активно: может запрашивать у Рекламодателя дополнительную информацию.
- Нет требований к срокам.
- Нет правил выбора канала.
- Действия:
- Слушайте рекламные каналы на время scanWindow .
- Каждый 'scanInterval' прослушивает полный период scanWindow , где scanInterval - это время между концом одного окна и началом другого.
v * Фильтры применяются при получении рекламных PDU.
Активное сканирование
- Обменяйтесь SCAN_REQ и SCAN_RSP с рекламодателем.
- Запустите backOff, чтобы минимизировать конфликты с параметрами: backOffCount ' и upperLimit . Оба устанавливаются в ОДИН при входе в режим сканирования.
- Установка backOffCount ' и upperLimit:
- LL слушает SCAN_RSP.
- Каждые два последовательных сбоя верхний предел удваивается.
- Каждые два последовательных успеха верхний предел уменьшается вдвое.
- Максимальное значение upperLimit = 256.
- При получении ADV_IND и ADV_SCAN_IND, если требуется SCAN_REQ:
- если backOffCount == ZERO отправить SCAN_REQ.
- иначе уменьшить backOffCount на единицу.
2.4.4 Запуск
- Нет требований к срокам.
- Нет правил выбора канала.
- LL прослушивает scanWindow каждый scanInterval .
- scanWindow и scanInterval должны быть меньше или равны 10,24 с.
- Отвечает рекламодателям PDU CONNECT_REQ, если это разрешено.
2.5 Состояние подключения
- LL переходит в состояние подключения, когда:
- Инициатор отправляет CONNECT_REQ.
- Рекламодатель получает CONNECT_REQ.
- Связь:
- Создано : ввод состояния подключения рекламодателем или инициатором.
- Установлено : после успешного получения пакета данных.
- Роли:
- master: управляет синхронизацией события подключения.
- раб
2.5.1 Событие подключения
- Соединение - это точка синхронизации между ведущим и ведомым.
- Соединение считается открытым, если и ведущий, и ведомый участвуют в обмене Tx / Rx.
- Мастер закрывает соединение, если от подчиненного ничего не получено.
- Подключение может быть прервано любым устройством.
- Начало соединения называется точкой привязки, с которой мастер начинает передачу данных.
- Мастер обеспечивает закрытие соединения за T_IFS перед точкой привязки.
- Если после задержки ведомого устройства ничего не получено, ведомое устройство прослушивает каждую привязку.
- connEventCounter ', 16-битный счетчик событий, поддерживаемый как ведущим, так и ведомым устройством.
- увеличивается мастером при каждом событии соединения.
- значения от 0xFFFF до 0x0000
- процедура управления синхронизацией LL.
2.5.2 Тайм-аут наблюдения
- connSupervisionTimeout макс. время между двумя полученными PDU пакетов данных до того, как соединение считается потерянным.
connSupervisionTimeout > (1 + connSlaveLatency) * connInterval
Кратно 10 мс
Диапазон от 100 мс до 32 с
- Если connSupervisionTimeout == 6 * connInterval ТО соединение теряется.
- Если соединение потеряно -> перейти из состояния подключения в режим ожидания.
2.5.3 Окно передачи событий соединения
- CONNECT_REQ определяет, когда мастер отправляет первый пакет о состоянии соединения, чтобы установить точку привязки.
- Три параметра для определения окна передачи: tranmistWindowOffset, TransmitWindowSize и connInterval.
- transmitWindow начинается (transmitWindowOffset + 1,25 мс) после того, как CONNECT_REQ концов.
- TransmitWindowSize == размер окна.
- connInterval используется для расчета смещения и размера окна.
transmitWindowOffset : у * 1,25 мс, диапазон [0ms -
connInterval ]
y -> [0 - connInterval / 1,25 мс]
y - смещение окна в пакете CONNECT_REQ
transmitWindowSize : 1,25 х *, диапазон [1,25 мс - мин (10ms, (
connInterval -1.25ms))]
x -> [1 - мин. (10 мс, (
connInterval -1,25 мс)) / 1,25]
x - размер WinSize в пакете CONNECT_REQ
Начало первого пакета после CONNECT_REQ:
(1,25 мс + смещение окна передачи) <= первый пакет <= (1,25 мс + смещение окна передачи + размер окна передачи)