Проблема с передачей данных в пакетном режиме

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: Пред. 1 2
Ответить
RSS
Проблема с передачей данных в пакетном режиме
 
Здравствуйте, проблему озвученную выше решили, ошибку нашли у себя в прошивке микроконтроллера.

У меня возникла проблема при работе с радиомодулем Mbee-868-2.0 в пакетном режиме.

При отправке радиомодулю нескольких команд 0x01 (API-фрейм для передачи данных на UART удаленного модема). Радиомодуль в эфир данные не отправляет, никаких ответов от радиомодуля нет.

Это нормальное поведение радиомодуля или такого не должно происходить?

Если между командами поставить задержку (~7 мс), тогда радиомодуль отправляет в ответ, API-фрейм статуса оправки пакета (0x8B) и данные отправляются в эфир.

Моя задача использовать 100% времени канала, как это лучше реализовать в пакетном режиме?

Каким образом контролировать переполнение приемного буфера UART на радиомодуле при передачи данных на отправку в пакетном режиме?

Получение ответа API-фрейм статуса оправки пакета (0x8B) занимает более 50 мс, что для меня является критичным.
 
Добрый день! В Вашем случае проблема может быть в некорректном соотношении значений потоков данных по эфиру и по UART. Чтобы проанализировать Ваш случай, нам нужны дополнительные сведения:
1. Установленная битовая скорость UART.
2. Установленная эфирная битовая скорость.
3. Наличие шифрования.
4. Количество байт в типовом пакете, передаваемом по UART.
5. Максимальное расстояние между узлами сети (необходимо, чтобы оценить запас по энергетическому потенциалу, влияющего на эфирную битовую скорость).
6. Необходимость локального подтверждения передачи пакета.
7. Необходимость удаленного подтверждения.
 
1. Установленная битовая скорость UART.
230400 бит/c

2. Установленная эфирная битовая скорость.
115200 бит/c

3. Наличие шифрования.
нет

4. Количество байт в типовом пакете, передаваемом по UART.
40

5. Максимальное расстояние между узлами сети (необходимо, чтобы оценить запас по энергетическому потенциалу, влияющего на эфирную битовую скорость).
100 м

6. Необходимость локального подтверждения передачи пакета.
Необязательно (по ответу от удаленного узла)

7. Необходимость удаленного подтверждения
Необязательно (по ответу от удаленного узла)
 
Добрый день. Первое, что бросается в глаза - это то, что скорость UART у вас в 2 раза больше, чем эфирная. Напоминаем, что обе эти битовые скорости относятся только к физическим параметрам среды передачи данных и рассчитывать, что поток полезных данных будет в точности равен им, нельзя ни в коем случае. Как в пакетном режиме UART, так и в эфирном протоколе есть присутствуют служебные байты. Например, в используемом эфирном протоколе на 40 байт полезной нагрузки, имеются 24 дополнительных байта. Отсюда получается, что в идеальных условиях эфира, каких на практике, разумеется, не бывает, Вы уже получите на выходе поток данных не более 62,5% от эфирной битовой скорости. В Вашем случае вместо 14400 байт/с всего 9000 байт/с. В неидеальных условиях, появляются повторные попытки передачи (если эта опция включена), потери пакетов и тому подобные причины, еще больше снижающие максимально возможный поток данных.
В Вашем случае, получается, что данные в эфир уходят медленнее, чем они поступают по UART. Эфир, получается, является "узким горлышком" тракта передачи. При отсутствии пауз между пакетами, поступающими в приемный буфер UART, радиоядро просто не успевает "вычерпывать" и отправлять из него данные. Переполнение приемного буфера, в этом случае, неизбежно. Нормальной практикой при больших потоках передачи данных является превышение эфирной скорости над битовой скоростью UART. Величина этого превышения оценивается достаточно просто исходя из максимального потока данных, который требуется "прокачать" через тракт.
 
Мы понимаем, что реальная скорость будет заметно меньше скорости радиоканала.
Хоть это и «костыльное» решение, мы сделали так, как вы сказали и понизили скорость UART в два раза относительно эфирной скорости. Результат тот же. При непрерывной отправке пакетов на передачу в эфире пакеты не появляются (предположительно радиомодуль не готов к приему пакетов на передачу). Нас интересует есть ли способ достоверно и с минимальной задержкой детектировать готовность радиомодуля получать пакеты на передачу по UART (мы понимаем, что принятый пакет не будет отправлен моментально). При всех своих экспериментах мы контролировали значение пина RTS (означающего готовность радиомодуля принимать данные по UART) RTS остается всегда в низком уровне, т. е. сообщает о готовности радиомодуля принимать данные от хоста по UART. Состояние пина CTS радиомодуль отрабатывает корректно и не отправляет данные хосту пока CTS находится в высоком состоянии.
 
Странно. Выход модуля, предварительно настроенный в режим RTS активируется при 80-ти процентном заполнении приемного буфера UART и деактивируется при 20-и процентном. Проверьте, пожалуйста, настройку вывода, на котором Вы контролируете сигнал RTS. Режим должен быть установлен равным 9.
 
Добрый день!
Проверили настройки вывода, всё корректно.
При работе модуля в прозрачном режиме мы видим, что функция RTS работает, а при переключении в пакетный режим RTS не включается
В пакетном режиме мы направляем данные по UART на скорости ниже эфирной без задержки, пакеты не отправляются в эфир (RTS не включается). Как только вводим задержку 7 мс радиомодуль начинает воспринимать пакеты и отправляет их в эфир.
Изменено: Илья - 20.02.2024 12:20:00
 
Здравствуйте! С пакетным режимом, действительно, немного сложнее получается. Дело в специфике организации приемного буфера UART из-за ограниченности ресурсов микроконтроллера. Добавьте паузу между 2-мя последовательными пакетами 2 мс. В дальнейшем, этот таймаут можем подстроить под Вашу систему, сделав для Вас индивидуальную прошивку.
P. S. Если Вам нужна более подробная информация по особенностям пакетного режима, пишите, разъясним.
Страницы: Пред. 1 2
Ответить
Читают тему (гостей: 3)
Форма ответов
 
Текст сообщения*
Отправить Отменить