Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: nRF51822 вопросы по работе с ним
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Метценгерштейн
Стал разбираться с данным МК, вроде понятно, но не до конца все. Не ясно, как осуществляется привязка МК, если он в режиме перифериал, например. Вообще, bonding и pairing- это одно и тоже? Или каков вообще принцип? Там что-то в device manager записывается.
Может кто-то прояснить доступным языком? Разумеется, читал документ на сайте нордика, но ясности он не внес ))
AlexandrY
Цитата(Метценгерштейн @ Mar 18 2017, 09:11) *
Стал разбираться с данным МК, вроде понятно, но не до конца все. Не ясно, как осуществляется привязка МК, если он в режиме перифериал, например. Вообще, bonding и pairing- это одно и тоже? Или каков вообще принцип? Там что-то в device manager записывается.
Может кто-то прояснить доступным языком? Разумеется, читал документ на сайте нордика, но ясности он не внес ))


Может поможет глоссарий в моей статье - https://geektimes.ru/post/276558/
Бондинг и пайринг, как следует из него совершенно разные вещи.
Но прежде чем сделать бондинг надо сделать пайринг.
За оба процесса отвечает слой GAP
Метценгерштейн
Цитата(AlexandrY @ Mar 18 2017, 11:09) *
Может поможет глоссарий в моей статье - 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 он уже знает, он уже в памяти и сразу коннект идет.
uriy
Цитата
Pairing — связывание (пайринг). Процесс создания парами BLE устройств одного или более совместных секретных ключей для последующего шифрования трафика. Пользователь оказывается вовлечён в этот процесс, когда система просит ввести PIN код.
Никогда не встречал запрос пин кода в BLE. Только в пользовательских протоколах более высокого уровня, путем записи в характеристику.
Цитата
Это, похоже, и есть что мне надо.
Сперва расскажите что вам надо, мы же не знаем.
Цитата
Не понятно, как я подключаюсь? Т.е. не с любого же устройства подцепился, и уже в системе.
В примерах от нордик по-умолчанию с любого. В BLE можно передавать данные в одну сторону без установки соединения. Может вам это надо?
Цитата
Потом, надо как-то запомнить мое устройство, тлф, например, что как только в зоне видимости, его ID он уже знает, он уже в памяти и сразу коннект идет.
Вероятно ваше приложение в телефоне, которое работает с BLE должно проводить сканирование и устанавливать соединение когда нужное устройство найдено. Иначе зачем просто так устанавливать соединение самому телефону когда никакому приложению это не нужно?
Метценгерштейн
Нужно передавать данные с одного девайса - перифериал на централ. Но нужно именно, чтобы устройства были привязаны друг к другу. Забондены или запэйрины. Т.е. абы кто чтобы не мог подцепиться. Вот и пытаюсь понять как это делается. Как привязать устройства одно к другому. А не привязанные чтобы не могли данными обмениваться.
uriy
Цитата
Нужно передавать данные с одного девайса - перифериал на централ.
Для этого не нужно устанавливать соединение. Данные можно передавать в адвертайз пакетах.
Цитата
Но нужно именно, чтобы устройства были привязаны друг к другу. Забондены или запэйрины.
Зачем?
Цитата
Т.е. абы кто чтобы не мог подцепиться.
Если направление передачи в одну сторону зачем вообще кому-либо соединятся. Запретите соединение для всех.
Код
adv_params.type        = BLE_GAP_ADV_TYPE_ADV_NONCONN_IND;

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

Может быть ваша реальная цель скрывать данные для посторонних устройств? Тогда наложите шифрование на данные в адвертайз пакете. Но насколько я понимаю получится только сделать AES в режиме ECB. Для разряжения статистики можно подсовывать рандомные данные на вход.
Метценгерштейн
Допустим, мне надо сделать следующее:
Устройство на nRF в режиме перифириал. Я хочу им управлять со смартфона, кот. централ.
Но управлять не любым смартфоном, а только тем, который привязал заранее.
Т.е. где- то в недрах nRF должен быть прописан ID смартфона.
Вот этот алгоритм и как это делается меня интересует.
uriy
Раньше вы писали что у вас одностороняя передача данных.
Цитата
Нужно передавать данные с одного девайса - перифериал на централ.

А гуглить не пробовали? https://devzone.nordicsemi.com/question/162...pecific-master/
Метценгерштейн
гуглил, разумеется.
Писал, что не до конца доезжаю.
Alechek
Цитата(uriy @ Mar 20 2017, 09:57) *
Для этого не нужно устанавливать соединение. Данные можно передавать в адвертайз пакетах.

Если я правильно понимаю, в этом случае есть один минус - на обоих устройствах одноврменно не достичь минимального энергопотребления. Либо приемник постоянно слушает, либо передатчик часто передает.
uriy
Пожалуй да. Но ведь приемник это как правило будет телефон. Там энергии куда больше. У меня девайс на NRF51822 уже полгода проработал на батарейке CR2032.
При этом он каждые 10 сек кидает адвертайз с температурой чипа (точность никакая), остаточным напряжением батарейки и еще своих 4 байта. Показывает что осталось 92%. За 100% было принято 3,3В
Alechek
А сколько было принято за 0% sm.gif
Судя по описанию АйМаяка (уж не помню где я видел) при 900 мс интервале и питании от CR24** (~600 мА*ч) будет жить примерно год.

Телефон в режиме постоянного включенного приемника? Это ж как минимум 10мА потребления только BT частью! А сколько будет кушать еще софт в фоне?
ИМХО, это приемлимо только для приемника с внешним питанием.
uriy
За 0% было принято 0В. На батарейке сейчас 3.06В
Метценгерштейн
а примеры есть, чтобы был изначально вбит passkey у перифериала и централа? Т.о. когда они в зоне видимости находятся, сразу связь устанавливается.
Я пока варианты перебираю, т.к. еще не определился с нужным типом бондинга.
alx125
Цитата(AlexandrY @ Mar 18 2017, 11:09) *
Может поможет глоссарий в моей статье - https://geektimes.ru/post/276558/
Бондинг и пайринг, как следует из него совершенно разные вещи.
Но прежде чем сделать бондинг надо сделать пайринг.
За оба процесса отвечает слой GAP


Уточняю :-)

"Pairing
The procedure by which a temporary common security encryption key is generated
to be able to switch to a secure, encrypted link. This temporary key is not stored
and is therefore not reusable in subsequent connections.

Bonding
A sequence of pairing followed by the generation and exchange of permanent se‐
curity keys, destined to be stored in nonvolatile memory and therefore creating a
permanent bond between two devices, which will allow them to quickly set up a
secure link in subsequent connections without having to perform a bonding pro‐
cedure again."
Метценгерштейн
я про то, как в примерах и в каких это реализовано. На сайте нордика ответили мне, что надо смотреть пример ble_app_hrs
Завтра буду разбираться с этим примером. Там еще далеко не все примеры поддерживают бондинг. Например, UART без бондинга идет там.
Метценгерштейн
Все равно из примера ble_app_hrs не понятно как я подцепляюсь к устройству. Можете объяснить этот момент? В каком месте кода происходит проверка на пайринг или код статический или что там происходит?
Не любым же я устройством цепляюсь к ble_app_hrs? Где- то в этом примере надо код установить для связки?
uriy
Делал устройства на NRF51822 для трех разных заказчиков. Ни у кого не стояло задачи ограничить доступ к устройству. У всех разрешено соединение для всех.
Хотя когда я начинал разбираться с BLE для меня казалось очень странным после BT2.0 что тут нет необходимости переходить в режим спаривания и вводить пин код.
У других компаний встречал следующий режим спаривания для BLE:
В кастомном приложении на телефоне нажимаем кнопку добавить устройство. После этого оно просит положить девайс на дисплей телефона и двигать синхронно с движением картинки на телефоне. На самом деле приложение в телефоне всего лишь отслеживает уровень RSSI, возможно тоже самое делает и BLE. И класть на дисплей конечно не обязательно. Так сделано у них https://play.google.com/store/apps/details?...ream.humiditrak и у них https://play.google.com/store/apps/details?...aconthermometer
Вы с whitelist разобрались? Это не то что вам надо?
Метценгерштейн
Т.е. для того же примера ble_app_hrs так и есть- он будет работать с любым телефоном?

Нашел вроде вот что:
вставить в
gap_params_init():

static_pin_option.gap_opt.passkey.p_passkey = passkey;
err_code = sd_ble_opt_set(BLE_GAP_OPT_PASSKEY, &static_pin_option);
APP_ERROR_CHECK(err_code);

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

С witelist так и не понял до конца. По идее, туда и добавляются устройства.

А где в коде можно, в том же ble_app_hrs прописать переменную, или что- нибудь, что при нажатии на кнопку на девайсе, я буду эту переменную выставлять, и только тогда мой девайс будет подключаться к телефону.
Сумбурно немного объяснил.

Но задача- обмен данными только с тем устройством, которое заранее было определено.
Вот как это в примере ble_app_hrs сделать?

Конечно, думаю, и мой код сработает- про passkey. А без него как-то еще можно?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.