Перейти к содержанию
    

nRF51822 вопросы по работе с ним

Стал разбираться с данным МК, вроде понятно, но не до конца все. Не ясно, как осуществляется привязка МК, если он в режиме перифериал, например. Вообще, bonding и pairing- это одно и тоже? Или каков вообще принцип? Там что-то в device manager записывается.

Может кто-то прояснить доступным языком? Разумеется, читал документ на сайте нордика, но ясности он не внес ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стал разбираться с данным МК, вроде понятно, но не до конца все. Не ясно, как осуществляется привязка МК, если он в режиме перифериал, например. Вообще, bonding и pairing- это одно и тоже? Или каков вообще принцип? Там что-то в device manager записывается.

Может кто-то прояснить доступным языком? Разумеется, читал документ на сайте нордика, но ясности он не внес ))

 

Может поможет глоссарий в моей статье - https://geektimes.ru/post/276558/

Бондинг и пайринг, как следует из него совершенно разные вещи.

Но прежде чем сделать бондинг надо сделать пайринг.

За оба процесса отвечает слой GAP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может поможет глоссарий в моей статье - https://geektimes.ru/post/276558/

Бондинг и пайринг, как следует из него совершенно разные вещи.

Но прежде чем сделать бондинг надо сделать пайринг.

За оба процесса отвечает слой GAP

Спасибо. Почитаю статью Вашу. Сейчас уезжаю, вечером еще поразбираюсь, отпишусь с вопросами. Если не сложно будет, помогите проникнуться)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прочитал глоссарий. Я раньше видел эту статью.

Вопрос- как в примерах от Нордика это реализовано. Где и как происходит пайринг и потом уже идет бондинг и передача данных в зашифрованном виде?

Пока копаю исходники.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в ф-ии

static void on_ble_evt(ble_evt_t * p_ble_evt)

 

выполняется код

case BLE_GAP_EVT_CONNECTED:
            m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle;
            break;

 

Это, похоже, и есть что мне надо.

Получается, в переменную m_conn_handle я передаю то, к чему я подконнекчен и с кем пошел обмен данных.

Не понятно, как я подключаюсь? Т.е. не с любого же устройства подцепился, и уже в системе. Потом, надо как-то запомнить мое устройство, тлф, например, что как только в зоне видимости, его ID он уже знает, он уже в памяти и сразу коннект идет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Pairing — связывание (пайринг). Процесс создания парами BLE устройств одного или более совместных секретных ключей для последующего шифрования трафика. Пользователь оказывается вовлечён в этот процесс, когда система просит ввести PIN код.
Никогда не встречал запрос пин кода в BLE. Только в пользовательских протоколах более высокого уровня, путем записи в характеристику.

Это, похоже, и есть что мне надо.
Сперва расскажите что вам надо, мы же не знаем.

Не понятно, как я подключаюсь? Т.е. не с любого же устройства подцепился, и уже в системе.
В примерах от нордик по-умолчанию с любого. В BLE можно передавать данные в одну сторону без установки соединения. Может вам это надо?

Потом, надо как-то запомнить мое устройство, тлф, например, что как только в зоне видимости, его ID он уже знает, он уже в памяти и сразу коннект идет.
Вероятно ваше приложение в телефоне, которое работает с BLE должно проводить сканирование и устанавливать соединение когда нужное устройство найдено. Иначе зачем просто так устанавливать соединение самому телефону когда никакому приложению это не нужно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно передавать данные с одного девайса - перифериал на централ. Но нужно именно, чтобы устройства были привязаны друг к другу. Забондены или запэйрины. Т.е. абы кто чтобы не мог подцепиться. Вот и пытаюсь понять как это делается. Как привязать устройства одно к другому. А не привязанные чтобы не могли данными обмениваться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно передавать данные с одного девайса - перифериал на централ.
Для этого не нужно устанавливать соединение. Данные можно передавать в адвертайз пакетах.

Но нужно именно, чтобы устройства были привязаны друг к другу. Забондены или запэйрины.
Зачем?

Т.е. абы кто чтобы не мог подцепиться.
Если направление передачи в одну сторону зачем вообще кому-либо соединятся. Запретите соединение для всех.
adv_params.type        = BLE_GAP_ADV_TYPE_ADV_NONCONN_IND;

Как привязать устройства одно к другому. А не привязанные чтобы не могли данными обмениваться.
Кажется для этого применяется whitelist. никогда не использовал. Не знаю как добавлять в этот список устройства.

 

Может быть ваша реальная цель скрывать данные для посторонних устройств? Тогда наложите шифрование на данные в адвертайз пакете. Но насколько я понимаю получится только сделать AES в режиме ECB. Для разряжения статистики можно подсовывать рандомные данные на вход.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Допустим, мне надо сделать следующее:

Устройство на nRF в режиме перифириал. Я хочу им управлять со смартфона, кот. централ.

Но управлять не любым смартфоном, а только тем, который привязал заранее.

Т.е. где- то в недрах nRF должен быть прописан ID смартфона.

Вот этот алгоритм и как это делается меня интересует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Раньше вы писали что у вас одностороняя передача данных.

Нужно передавать данные с одного девайса - перифериал на централ.

А гуглить не пробовали? https://devzone.nordicsemi.com/question/162...pecific-master/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

гуглил, разумеется.

Писал, что не до конца доезжаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для этого не нужно устанавливать соединение. Данные можно передавать в адвертайз пакетах.

Если я правильно понимаю, в этом случае есть один минус - на обоих устройствах одноврменно не достичь минимального энергопотребления. Либо приемник постоянно слушает, либо передатчик часто передает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуй да. Но ведь приемник это как правило будет телефон. Там энергии куда больше. У меня девайс на NRF51822 уже полгода проработал на батарейке CR2032.

При этом он каждые 10 сек кидает адвертайз с температурой чипа (точность никакая), остаточным напряжением батарейки и еще своих 4 байта. Показывает что осталось 92%. За 100% было принято 3,3В

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А сколько было принято за 0% :)

Судя по описанию АйМаяка (уж не помню где я видел) при 900 мс интервале и питании от CR24** (~600 мА*ч) будет жить примерно год.

 

Телефон в режиме постоянного включенного приемника? Это ж как минимум 10мА потребления только BT частью! А сколько будет кушать еще софт в фоне?

ИМХО, это приемлимо только для приемника с внешним питанием.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...