Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить

Структрное сопряжение по USB

Вт авг 04, 2009 14:45:40

Доброго времени!
Разрабатываю устройство, которое будет,по запросу ПК:
1) сливать поток данных А, 10МБайт, накопленные во время его (ПК) спячки (ПК выключен);
2)транслировать данные В, реального времени, около 4кБайт/сек.
Поток А необходимо передать с максимально возможной скоростью и в самом начале обмена.
При этом нежелательно плодить тьму соединений (типа уарт1+уарт2 и т.п.). :evil:
Поизучав Агурова "Практика разработки устройств ..." пришел к выводу:
а) На старте удовлетворяет скорость (да позволят нам все ресурсы) 12Мбит с длиной пакета 256 байт;
б) закончив передачу потока А, можно перейти на более медленную скорость или на короткую длину.
в)для передачи обоих потоков (старт обмена) было бы хорошо транслировать совместно данные потокв А и В. Получается чтото близкое к 200 байтам от А и 20-32 байт от В в "посылке".
В ПК предполагается обработка потоков А и В двумя независимыми программами.
У меня вопрос об организации сопряжения девайса с компом по USB.
Как лучше и проще организовать разработку всего "тракта" передачи данных, включая программно-аппаратную часть на АТ90USB1287, драйвер, и софт который будет принимать эти данные. Что лучше написать проги и дрова на фиксированную длину 256 байт или "загнуть" под меняющуюся длину пакета/скорость?
Вероятность повторения пакета А после окончания его передачи близка к 0.
Выскажите свое мнение по данному поводу.
Огромный данке щён, всем откликнувшимся. :)

Вт авг 04, 2009 18:39:08

К сожалению не программист, и не всё понял.. :)
По поводу данных - не совсем понял :
- хочешь сразу придумать структуру данных для потока ??
- по моему - зачем тебе мешать потоки А и Б ?? По идее в USB их можно раскидать по End-point..
- для данных считаю лучше пакеты динамической длинны.
- Скорость то зачем менять, используем столько - сколько надо..
- Драйвер наверное один, скажем так универсальный, а вот программы 2 или сколько понадобится.. :)
- Структура для данных зависит понятное дело от самих данных - или поток или конечные данные.. Вам уж виднее..

Тема интересная :) с удовольствием посмотрю (возможно и поучаствую) на программную реализацию ..
Как я понял интерфейс с ПК уже выбран, а то бы предложил Ethernet т.е. по локальной сетке данные гонять.. Скорость тоже не плохая, реализация со стороны ПК проста, драйверов не надо только софт пиши и радуйся жизни.. ;)

Вт авг 04, 2009 20:14:38

Pe3ucTop писал(а): Как я понял интерфейс с ПК уже выбран.

Да интерфейс выбран, обжалованию не подлежит.
Приятно иметь дело с человеком, который не бросается фразами "возьми и пр.":)
Pe3ucTop писал(а): - хочешь сразу придумать структуру данных для потока ??

Структуру или может правильнее назвать "соглашением о порядке представления данных" при передаче от устройства1 к устройству2. Что за устройства 1 и 2, я думаю разницы нет, ясен пень одно из них- ПК. В любом случае о том что протокол обмена должен ответить и на вопрос как представить (упаковать) данные на входе, что бы на выходе получить (распаковать) их же обходится многими авторами стороной. Что есть совсем неправильно.
Pe3ucTop писал(а): - по моему - зачем тебе мешать потоки А и Б ?? По идее в USB их можно раскидать по End-point..

Вопрос "коррекции полета": можно ли на 1 физическое соединение иметь n (разумное число) эндпоинтов. Т.е. если правильно понял, то указываю точку с назначением данных и получателем, и дело "табак"?:)
За динамическую длину, спасибо отдельное.
Pe3ucTop писал(а):Тема интересная...

Перерыл форумы, не нашел ответа на самые главные вопросы:
- что имеем?
- что хотим?
- как будем реализовывать...
Без этих ответов, любая разработка - метод ненаучногоо тыка.

Спасибо за участие:)

Пт авг 07, 2009 00:25:39

Meteor писал(а):Вопрос "коррекции полета": можно ли на 1 физическое соединение иметь n (разумное число) эндпоинтов. Т.е. если правильно понял, то указываю точку с назначением данных и получателем, и дело "табак"?:)


Да, можно. Одно физическое соединение может адресовать до 16-ти конечных точек (исключение низкоскоростное ус-во - до 4).
На практике :
-1 : один контрольный
/2 : они однонаправленные, т.е. если передача с подтверждением то надо использовать 2 конечных точки - приём и передача
Ограничение железа - т.е. обычно в документации на микроконтроллер обеспечивающий USB сколько конечных точек он поддерживает :)
и обычно это в виде 7 к.т. = 1 контр / 3 вх / 3 вых..
Что удобно - так это то что обычно каждая к.т. имеет свои Буфер (FIFO)..

Далее, всётаки, необходимо вам определитьса с структурои данных :)
(как-то я пришел к другу и говорю сделай интерфеис для осциллографа, данные по сетке будут приходить, типа их как надо обработаем и на экран - для меня казалось смаое сложное, а он мне:
Какая структура данных будет ? С чем имеем соб-но дело ?
И я на долго от него отстал :)) Замечу - в моём случае пакет строгой длинны - потоковые данные)

Если хотите углубится в USB и с английским нормально - хороший ресурс:
http://www.beyondlogic.org/usbnutshell/usb1.htm

Пн авг 10, 2009 14:35:55

2 РеЗисТор Спасибо за ссылочку и ответ. Буду маять ее :) и систему в целом. Беру тайм-аут на "обработку" информации
Ответить