Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bluetooth: передача данных через SCO
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Wireless/Optic
gerber
Как известно, существуют 2 основных способа передачи данных через Bluetooth-соединение - ACL и SCO.
ACL всем хорош, но данные добираются до другого "берега" беспроводного линка с приличной задержкой, от 3 до 30 мс, что губительно для моей задачи. Настройка QoS (Quality of Service) существенно улучшает ситуацию до 5-7 мс, но периодически, очень редко задержка всё равно достигает 25-30 мс и вся идея теряет смысл.
SCO является синхронным каналом с гарантированной полосой и минимальными задержками и вписался бы замечательно в моё решение, но он предназначен для передачи звука. При открытии канала и передаче данных через него я вижу на приемной стороне не точную копию входного бинарного потока, а некоторую "пародию" на него. Дело в том, что SCO-канал целиком и полностью ориентирован на звук, и перед передачей он аппаратно обрабатывается некими алгоритмами (кодеками), которые далеко не lossless. Таким образом, бинарный поток несколько видоизменяется, что приемлемо для звука, но неприемлемо для данных.
Может, подскажет кто - неужели нельзя использовать SCO-канал для передачи данных?
uriy
Насколько помню в SCO используются только кодеки alaw и ulaw.
А какую скорость вы ожидаете получить?
Если у вас на входе будет пара десятков дискретных значений думаю их вполне можно однозначно детектировать на приемной стороне.
Да и FSK модем на скорости 2.4 кбит/сек думаю должен нормально работать.
SCO не обеспечит гарантированную доставку, это вас устраивает?
Для настройки времени доставки есть параметры настройки. Назывались они кажется page, snif интервал.
А может это имеет место только в режиме ожидания подключения, уже не помню.
gerber
Цитата(uriy @ Nov 29 2016, 07:53) *
Насколько помню в SCO используются только кодеки alaw и ulaw.

Ещё CVSD. И, кстати, начиная с версии 1.2 появился режим voice air coding = transparent data, возможно, это именно то, что мне нужно. До этого я смотрел спецификацию 1.0, и там не было такого режима.
Цитата(uriy @ Nov 29 2016, 07:53) *
А какую скорость вы ожидаете получить?
Если у вас на входе будет пара десятков дискретных значений думаю их вполне можно однозначно детектировать на приемной стороне.
Да и FSK модем на скорости 2.4 кбит/сек думаю должен нормально работать.

Скорость нужна немаленькая, хотя бы 115200 бит/с. Тот канал SCO, который я сейчас вижу, пересылает по 60 байт каждые 3,2 мс, вроде как, нормально, если пойдут через него raw-данные.
Цитата(uriy @ Nov 29 2016, 07:53) *
SCO не обеспечит гарантированную доставку, это вас устраивает?

Это как раз не проблема, потерянные данные восстановит верхний протокол. К тому же там есть механизмы, улучшающие вероятность доставки пакетов, это и восстанавливающие коды FEC, и retransmission. Но гарантии доставки, как у ACL, нет, это понятно.
Цитата(uriy @ Nov 29 2016, 07:53) *
Для настройки времени доставки есть параметры настройки. Назывались они кажется page, snif интервал.
А может это имеет место только в режиме ожидания подключения, уже не помню.

Их я уже покрутил для ACL, стало лучше, но ... синхронный канал с выделенной полосой устроил бы меня гораздо больше.
rat
Вроде как для передачи данных используют SPP?
gerber
Цитата(rat @ Nov 29 2016, 11:23) *
Вроде как для передачи данных используют SPP?

SPP - это верхний уровень BT-стека, который, в конечном итоге, работает поверх ACL-пакетов. В топике речь идёт о передаче данных на самом низком уровне стека, через HCI-интерфейс.
rat
Цитата(gerber @ Nov 29 2016, 16:13) *
SPP - это верхний уровень BT-стека, который, в конечном итоге, работает поверх ACL-пакетов. В топике речь идёт о передаче данных на самом низком уровне стека, через HCI-интерфейс.


Это понятно, но оно того стоит? Или ТС имеет ввиду BLE, где SPP нет?
gerber
Цитата(rat @ Nov 29 2016, 12:54) *
Это понятно, но оно того стоит? Или ТС имеет ввиду BLE, где SPP нет?

СтОит, так как SPP вносит существенные задержки в обмен данными, за счет того, что работает поверх ACL-пакетов. Для "удлинителя COM-порта" это может и неважно, но для моей задачи критично.
Второй момент - мне не нужен весь стек BT, обмен ключами, шифрование, ввод ПИН-кода, service discovery и т. п. Установил соединение через HCI, и готов к обмену данными. Это существенно снижает требования к микроконтроллеру и разгружает его от разбора пакетов и передаче их вверх-вниз по стеку. Оборотная сторона у такого подхода, безусловно, тоже есть - невозможность соединиться с "большими" устройствами под Андроидом/Linux/Windows, но мне это и не требуется. Я соединяю 2 своих устройства прямым линком.
rat
Цитата(gerber @ Nov 29 2016, 17:45) *
СтОит, так как SPP вносит существенные задержки в обмен данными, за счет того, что работает поверх ACL-пакетов. Для "удлинителя COM-порта" это может и неважно, но для моей задачи критично.
Второй момент - мне не нужен весь стек BT, обмен ключами, шифрование, ввод ПИН-кода, service discovery и т. п. Установил соединение через HCI, и готов к обмену данными. Это существенно снижает требования к микроконтроллеру и разгружает его от разбора пакетов и передаче их вверх-вниз по стеку. Оборотная сторона у такого подхода, безусловно, тоже есть - невозможность соединиться с "большими" устройствами под Андроидом/Linux/Windows, но мне это и не требуется. Я соединяю 2 своих устройства прямым линком.


Если не используются преимущества блютуса, может, тогда использовать не блютус, а просто радиоканал типа SIM20? Но это уже оффтоп. Сорри.
gerber
Цитата(rat @ Nov 29 2016, 15:17) *
Если не используются преимущества блютуса, может, тогда использовать не блютус, а просто радиоканал типа SIM20? Но это уже оффтоп. Сорри.

Почему же, преимущества блютуса как раз используются - гарантированная доставка пакетов (ACL), автоматическая смена частот (frequency hopping), выделенный легальный частотный диапазон, уживчивость с соседними блютус-устройствами и т. п.
На "голом" радиоканале всё это тоже возможно, но придется реализовывать "ручками".
Ну и цена тоже немаловажна. Мне блютуз-контроллер обходится в 160 руб в розницу, а сколько стоит ваш SIM20 ? (риторический вопрос).
rat
Цитата(gerber @ Nov 29 2016, 21:07) *
Почему же, преимущества блютуса как раз используются - гарантированная доставка пакетов (ACL), автоматическая смена частот (frequency hopping), выделенный легальный частотный диапазон, уживчивость с соседними блютус-устройствами и т. п.
На "голом" радиоканале всё это тоже возможно, но придется реализовывать "ручками".
Ну и цена тоже немаловажна. Мне блютуз-контроллер обходится в 160 руб в розницу, а сколько стоит ваш SIM20 ? (риторический вопрос).


Логично ) А что за контроллер?
gerber
Цитата(rat @ Nov 29 2016, 17:48) *
Логично ) А что за контроллер?

Texas Instruments СС2560
rat
Цитата(gerber @ Nov 29 2016, 21:50) *
Texas Instruments СС2560


Не подскажете преимущества/недостатки в сравнении с BlueNRG от ST. Возможно, скоро придется осваивать BT4, не могу определиться с производителем.
gerber
Цитата(rat @ Nov 29 2016, 18:01) *
Не подскажете преимущества/недостатки в сравнении с BlueNRG от ST. Возможно, скоро придется осваивать BT4, не могу определиться с производителем.

С BlueNRG дела не имел. CC2560 - это классический BT (не low energy), к тому же довольно древний. У него есть "собрат" CC2564, который может быть и low energy BT 4.1 устройством. Но с ним я тоже не работал.
rat
Цитата(gerber @ Nov 29 2016, 22:10) *
С BlueNRG дела не имел. CC2560 - это классический BT (не low energy), к тому же довольно древний. У него есть "собрат" CC2564, который может быть и low energy BT 4.1 устройством. Но с ним я тоже не работал.


Спасибо )
uriy
Помнится мне SCO 8 бит на 8 кГц. Как же туда загнать 115 кбит/сек?
В BLE нет вовсе SCO.
BLE я для себя выбрал NRF51822.
alx125
Цитата(gerber @ Nov 29 2016, 01:38) *
Может, подскажет кто - неужели нельзя использовать SCO-канал для передачи данных?


Стандарт позволяет (про конкретный Ваш чип не скажу). Но!
Спецификация (Classic BT):
"Four packets are allowed on the SCO logical transport:
HV1, HV2, HV3 and DV. These packets are typically used for 64kb/s speech transmission but may be used for transparent synchronous data"

"The air coding by log PCM or CVSD may be deactivated to achieve a transparent synchronous data link at 64 kbits/s."


Цитата(gerber @ Nov 29 2016, 11:57) *
Скорость нужна немаленькая, хотя бы 115200 бит/с. Тот канал SCO, который я сейчас вижу, пересылает по 60 байт каждые 3,2 мс, вроде как, нормально, если пойдут через него raw-данные.

Это как раз не проблема, потерянные данные восстановит верхний протокол. К тому же там есть механизмы, улучшающие вероятность доставки пакетов, это и восстанавливающие коды FEC, и retransmission. Но гарантии доставки, как у ACL, нет, это понятно.


Если Вы будете использовать "восстанавливающие коды FEC, и retransmission", то где же тут у Вас гарантированная задержка (latency)?
Для Real Time, в этом случае, нужен существенный запас скорости.
:-)
Да и без "восстанавливающие коды FEC, и retransmission" макс. возможная скорость SCO может Вас не устроить.
uriy
С FEC задержка как раз будет гарантированная и фиксированная. Про retransmission в SCO никогда не слышал. Зачем это для звука?
alx125
Цитата(uriy @ Nov 30 2016, 09:08) *
С FEC задержка как раз будет гарантированная и фиксированная. Про retransmission в SCO никогда не слышал. Зачем это для звука?


Не удивительно, что не слышали. Спецификация про это молчит :-)
Но ТС написал , "потерянные данные восстановит верхний протокол".
Т.е. он это планирует взять на себя, а не на спецификацию стека BT возложить.
В принципе - рабочий подход.
Так реализовано было в Skype (по крайней мере до Microsoft).
Чтобы сократить накладные затраты TCP, передачи велись ч/з UPD-пакеты.
А доп.верхний уровень в случае необходимости запрашивал повтор.

Что же касается FEC-кодов ( Forward Error Correction, FEC, помехоустойчивое кодирование), то это решение добавляет избыточность в передачу и конечно же уменьшает скорость для payload.
Представьте на минуту, что он (код) выделил ошибку. То необходимо запросить (т.е. трафик в обратном направлении со всеми timeout-ами) повтор передачи. Какая уж тут гарантированная мин.задержка.
Если же код не только с обнаружением , но и с коррекцией ошибок, то там и избыточность передачи выше и кодирование сложнее.
А возможности коррекции ошибок очень даже ограничены. Например, можно исправить лишь 1-2 бита.
Именно поэтому SCO изначально ориентирован на речь, т.к. там мелкие проблемы в передаче сгладит ухо+мозг.
gerber
Механизм retransmission не подразумевает перезапрос данных - просто при его использовании данные передаются дважды, что увеличивает вероятность правильной доставки и не меняет гарантированную latency. Для retransmission отводится специальное окно в том же тайм-слоте, в котором передается основной пакет.
И таки да, согласен, в классическом SCO нет retransmission, и при использовании пакетов HV1-HV3 симметричная пропускная способность до 64 кбит/с.
Но начиная со спецификации 1.2 появился eSCO, где уже есть и retransmission, и скорость канала можно поднять до 288 кбит/c, при использовании пакетов EV5, и режим air coding = "transparent data". Вот в эту сторону и буду двигаться, благо CC2560 поддерживает eSCO линки.
Кому интересно - информацию можно поискать по ключевым словам "Using eSCO in Profiles", и Handbook of Networked and Embedded Control Systems
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.