BLE устройство на nRF24L01

Поддельное Bluetooth Low Energy устройство на радиомодуле nRF24l01

Введение

Данная статья на 90% основывается на заметке "Bit-Banging" Bluetooth Low Energy. Все началось с того, что были заказаны распространенные сейчас трансиверы на чипе Nordic nRF24l01. В процессе поиска примеров работы с данным модулем я и наткнулся на вышеупомянутую статью. Являясь обладателем телефона с данной технологией, подумал: а почему бы не попытаться повторить эксперимент?

Да, чудес не бывает: пример не захотел работать в виде "как есть". Во-первых на странице присутствует явное повреждение форматирования, во-вторых сразу видно что есть проблема с байтом длины. Какие еще опечатки и неточности в описании, мне оставалось только гадать.

Тестовый стенд был собран достаточно быстро. За основу была взята миниатюрная плата на LPC134x.

Отладку проводил в излюбленной мной манере: "USB-мост", т.е. вся логика программы функционирует на компьютере, а через USB в устройство посылаются команды вида: установить сигнал CS, передать байт по SPI. Это позволяет обходиться без специализированных отладочных средств, пользуясь только Win-отладчиком непосредственно на компьютере.

После непродолжительных правок все заработало:

Процесс работы на PC:

Как использовать

После того, как мой телефон увидел приложение, сразу встал вопрос: а можно ли каким-то образом использовать эту "подделку"?

Ограничения в чипе nRF24l01 не дают возможности поднять полноценный BLE-протокол и заканчиваются на том, что телефон "видит" нечто, но никаким образом с ним работать не может. Соответственно, передача данных в устройство отметается сразу, а вот что с передачей данных в телефон? Имя и мак-адрес телефон определяет, а это уже какая-никакая информация, а что еще?

А еще можно передавать и наши данные. Для этого необходимо в буфер добавить дополнительные поля. Лучше всего для этого подходит тег MANUFACTURER_DATA=0xFF. Данных за раз можно передавать не более 32 байт (ограничение модуля nRF24l01), при этом часть их тратится на передачу служебных структур BLE. В чистом остатке остается около 32-6-3-3 = 20 байт. Из них 2 байта уйдут на заголовок, таким образом "наших" данных может быть 18 байт. Но стоит учесть, что данный расчет я привел для безымянного устройства.

Приложение на Android

Модифицированная версия утилиты BluetoothLeGatt. Добавлен вывод тела пакета при поиске. В данном теле видны передаваемые приложением данные. Экран работы утилиты представлен выше.

К сожалению, для меня открыт вопрос: каким будет потребление самого смартфона. Все-таки связь с устройством не устанавливается, приходится постоянно проводить сканирование. Может кто знаком с темой и сможет прокомментировать.

ANT+

В довесок, исследовал возможность реализации взаимодействия nRF24l01 с ANT+ устройствами. Здесь, к сожалению, все потеряно. Если байт синхронизации в BLE и nRF24l01 совпадает, то в случае с ANT-протоколом работать ничего не будет: последний имеет отличный от них вектор.

Ссылки

Original: http://igorkov.org/blehack,
Author: igorkov