реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Помогите с HDLC, асинхронные данные в синхронном потоке
klaks
сообщение Mar 30 2011, 10:26
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 21-06-07
Пользователь №: 28 615



Знающие люди, подскажите, пожалуйста, по HDLC.

Ситуация такая. Устройство работает по USB, два FALCа на борту. Работаю с E1.
Наш драйвер поддерживает всего один поток Bulk, по нему и нужно организовать всю передачу данных. Все бы хорошо, если бы все передаваемые данные были бы синхронные - отсчеты голосовых каналов. Но к этим данным добавляются HDLC, скорость передачи которых отличается от скорости передачи голосовых данных. Чтобы быть точным, она может быть равна этой скорости (для E1 это 8 кГц), либо быть меньшей (поскольку фреймер добавляет сам контрольную сумму и делает битстаффинг). Данные нужно подсовывать фреймеру непрерывно иначе он оборвет передачу.

Есть идея рассмотреть ситуацию как коммутацию двух разноскоростных каналов. В случае переполнения буфера просто забить на потерявшиеся пакеты. Но в HDLC кажется нет органичения по размеру кадра, я не знаю какой буфер делать, чтобы гарантированно уметь передавать самый большой пакет.
Либо если есть возможность фрагментировать пакеты, то может просто их еще в компе разделять допустим на 1кбайтные части.

Это решение вообще корректно? Или может есть более рациональные решения?
Go to the top of the page
 
+Quote Post
tolik1
сообщение Apr 9 2011, 05:49
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 2-03-05
Из: МОСКВА
Пользователь №: 3 016



Цитата(klaks @ Mar 30 2011, 14:26) *
Знающие люди, подскажите, пожалуйста, по HDLC.

Ситуация такая. Устройство работает по USB, два FALCа на борту. Работаю с E1.
Наш драйвер поддерживает всего один поток Bulk, по нему и нужно организовать всю передачу данных. Все бы хорошо, если бы все передаваемые данные были бы синхронные - отсчеты голосовых каналов. Но к этим данным добавляются HDLC, скорость передачи которых отличается от скорости передачи голосовых данных. Чтобы быть точным, она может быть равна этой скорости (для E1 это 8 кГц), либо быть меньшей (поскольку фреймер добавляет сам контрольную сумму и делает битстаффинг). Данные нужно подсовывать фреймеру непрерывно иначе он оборвет передачу.

Есть идея рассмотреть ситуацию как коммутацию двух разноскоростных каналов. В случае переполнения буфера просто забить на потерявшиеся пакеты. Но в HDLC кажется нет органичения по размеру кадра, я не знаю какой буфер делать, чтобы гарантированно уметь передавать самый большой пакет.
Либо если есть возможность фрагментировать пакеты, то может просто их еще в компе разделять допустим на 1кбайтные части.

Это решение вообще корректно? Или может есть более рациональные решения?

Вариант первый. Вы транслируете весь канал в котором лежит HDLC на комп (как речевой) и там разбираете его и выделяете пакет.
Вариант второй . Вы на устройстве реализуете HDLC контроллер.
Вариант третий(не знаю какой у Вас FALC). Вы используете внутренний HDLC контроллер(который внутри FALCa).

По размеру кадра.... HDLC определен как Х.25 layer2. Там размер пакета до 4096. Однако интерфейс стал популярным и я встречал пакеты по 8К и более.
Go to the top of the page
 
+Quote Post
klaks
сообщение Apr 12 2011, 11:56
Сообщение #3





Группа: Участник
Сообщений: 12
Регистрация: 21-06-07
Пользователь №: 28 615



Цитата(tolik1 @ Apr 9 2011, 09:49) *
Вариант первый. Вы транслируете весь канал в котором лежит HDLC на комп (как речевой) и там разбираете его и выделяете пакет.
Вариант второй . Вы на устройстве реализуете HDLC контроллер.
Вариант третий(не знаю какой у Вас FALC). Вы используете внутренний HDLC контроллер(который внутри FALCa).

По размеру кадра.... HDLC определен как Х.25 layer2. Там размер пакета до 4096. Однако интерфейс стал популярным и я встречал пакеты по 8К и более.


Спасибо за ответ.
Использую PEF2256, там три канала HDLC.
Была мысль, соответствующая первому варианту. В принципе это можно реализовать, хотя и придется делать бит-стаффинг тоже на уровне ПК. Поскольку с HDLC раньше не работал, боюсь подводных камней. Поэтому решил поручить это дело фалку, а в него передавать сами данные.
В итоге пока сделал так: в дсп сделал буферы для HDLC, такие чтобы при максимальной разнице скоростей записи в буфер и считывания можно было передать один пакет на 8к. Если буфер переполнился, то удаляем из буфера переполнивший буфер пакет, либо если он занимает весь буфер, то останавливаем передачу и очищаем буфер.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th July 2025 - 16:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016