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

 
 
> Помогите разобраться с USB
Vladimir_T
сообщение Aug 22 2012, 09:06
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Здравствуйте, уважаемые коллеги, помогите пожалуйста! Делаю USB-устройство (Device) на МК, ПК мой приборчик принимает, и принимает пакеты правильно, а вот из ПК пакеты идут длиной в один байт, т.е. если из терминальной программы через вертуальный порт отправляю строку, то эта строка приходит в МК не целиком, а побайтно... Буфер конечной точки настроены правильно, т.е. минимальный размер буфера (8 байт). Просматриваю поток с помощью программы USBlyzer так и есть строка передается побайтно... В чем может быть дело?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Vladimir_T
сообщение Aug 22 2012, 09:54
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Строку посылаю из терминальной программы в виртуальный порт по протоколу CDC. Неужели эта программа побайтно посылает в порт побайтно? Тогда как понять тот факт, что конечная точка имеет буфер, пусть 8 байт, и Host знает об этом, значит он должен все же отправить пакет такой длинны, а потом принять от девайса статус результата транзакции...
Go to the top of the page
 
+Quote Post
Xenia
сообщение Aug 22 2012, 10:00
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Vladimir_T @ Aug 22 2012, 13:54) *
Тогда как понять тот факт, что конечная точка имеет буфер, пусть 8 байт, и Host знает об этом, значит он должен все же отправить пакет такой длинны, а потом принять от девайса статус результата транзакции...


Нет, Host не обязан ждать, когда буфер заполнится. Иначе посылки из числа байт, меньшего 8, никогда не дождешься. Величина буфера означает лишь то, что в поезд, при наличии очереди, нельзя сажать больше 8-ми пассажиров, но не означает, что поезд не отправится в срок, ожидая своего заполнения.

Вот еще добавление. На моем AT90USB647 под число принимаемых байт выделен специальный аппаратный регистр UEBCLX:
Цитата
UEBCLX - Byte Count Bits
Set by the hardware:
- (for IN endpoint) increased after each writing into the endpoint and decremented after each byte sent.
- (for OUT endpoint) increased after each byte sent by the host, and decremented after each byte read by the software.

И по наличии прерывания по вектору "USB_Endpoint_Pipe" (когда приходит посылка) я забираю из буфера ТОЛЬКО то число байт, которое указано в "Byte Count", хотя буфер по размеру больше (у меня в нём 32 байта).

Отсюда следует, что либо посылки бывают более короткими, чем размер буфера, либо бывают посылки с "мусором" вместо значимых байт. Установить, которое из этих предположений истинно, не удается, т.к. аппаратная кухня от программиста закрыта. Но я полагаю первое предположение более вероятным.
Go to the top of the page
 
+Quote Post



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

 


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


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