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

 
 
 
Reply to this topicStart new topic
> USB на AT91SAM7A3
shrek
сообщение Nov 22 2010, 10:51
Сообщение #1


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

Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126



Не так давно удалось все таки победить злополучный USB. Пробовал мышку, клаву, светодиодами мигал (NumLock, CapsLock). Был резистор специально для джойстика 2 оси, распаял к АЦП подцепил, АЦП работало в 10 бит режиме выдавало по тригеру от счетчика каждые 2мс значение которое отсылалось по USB на комп. Пробовали в BattleField 2 AIX. Удобно управлять только самолетами biggrin.gif (хотя это дело привычки).
Пример проекта для джойстика в прикрепленном файле.
Прикрепленный файл  USB.ZIP ( 807.65 килобайт ) Кол-во скачиваний: 109

Загрузился идеей, да не идеей, а просто необходимо реализовать виртуальный ком порт по USB. По Агурову пример пробовал чет не вышло. Скачал спецификацию для CDC класса, поизучал. Расписано в принципе тоже что и у Агурова, но более конкретнне расписаны все заголовочные и прочие дескрипторы. Ну в общем 3 дня помаялся в результате добился чтобы из какой нибудь проги типа "термоядерной" netweak.exe без проблем открывался порт. Дальше интересно. запустил некий цикл, который раз в пол секунды отправляет какой нибудь байт. netweak.exe принимал. Ну и пробовал отправлять. Судя по USB монитору отправлял. НО!!! При условии что размер конечных точек для данных равен 64 байта!!!! Если использовать 4 и 5 конечные точки по 512 байт (по теории 4 мегабита в одну сторону), то при отправке данных USB девайс в контроллере непрерывно генерит прерывание по RX_DATA_BK0 и RX_DATA_BK1! Сброс этих битов вообще не помогает. Если использовать точки по 64 байта все работает, это конечно маловато... 512 килобит в одну сторону. Квазидуплекс 256 килобит. Для команд управления например подойдет, а если будут сыпаться данные, то это уже немного маловато...
Для примера код из атмеловских библиотек для мышки весил около 20кб. Для моей мышки)))) 2,5 - 3 кб. Использовать их тажеловесный код не хочется, хотя в AT91SAM7A3 256 килобайт за глаза, но с другой стороны мне спокойнее когда я знаю как должно (в принципе smile3046.gif ) работать устройство))))
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 22 2010, 15:23
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(shrek @ Nov 22 2010, 18:51) *
НО!!! При условии что размер конечных точек для данных равен 64 байта!!!! Если использовать 4 и 5 конечные точки по 512 байт (по теории 4 мегабита в одну сторону), то при отправке данных USB девайс в контроллере непрерывно генерит прерывание по RX_DATA_BK0 и RX_DATA_BK1! Сброс этих битов вообще не помогает. Если использовать точки по 64 байта все работает, это конечно маловато... 512 килобит в одну сторону. Квазидуплекс 256 килобит. Для команд управления например подойдет, а если будут сыпаться данные, то это уже немного маловато...
У CDC устройтсва имеется одна IN и одна OUT точка типа BULK. Точки типа BULK для полноскоростных устройств (AT91ххххххх) по спецификации USB могут размер до 64 байт: "...For full speed endpoints, the maximum bulk packet size is either 8, 16, 32 or 64 bytes long..."

Сообщение отредактировал prottoss - Nov 22 2010, 15:24


--------------------
Go to the top of the page
 
+Quote Post
shrek
сообщение Nov 22 2010, 17:42
Сообщение #3


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

Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126



Если у AT91SAM7A3 Full speed USB то зачем девайсу две конечных точки по 512 байт?...
Я могу быть не прав, но вроде как 8, 16, 32 или 64 это размеры данных для Low speed USB или для HID устройств... Хотя по теории))) если Full speed USB имеет частоту тактов 12МГц за кадр можно передать 1500 байт)))) без учета маркеров пакета CRC и другой инфы.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 22 2010, 17:55
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(shrek @ Nov 23 2010, 01:42) *
Я могу быть не прав...
Для низкоскоростных устройств максимальный размер любой конечной точки - 8 байт. Тип BULK не может быть использован для передачи данных: "...Bulk transfers are only supported by full and high speed devices..."


--------------------
Go to the top of the page
 
+Quote Post
shrek
сообщение Nov 22 2010, 18:43
Сообщение #5


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

Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126



Да точно... Только посмотрел... две точки по 512 байт используются для изохорных передач... Да все верно по спецификации "...For full speed endpoints, the maximum bulk packet size is either 8, 16, 32 or 64 bytes long..."
Получается если нужна скорость передачи данных, ну например температура, давление, любая физическая или какая-то величина, которая "сыпится" из контроллера необходимо использовать изохорный тип передачи данных...

С другой стороны возникает вопрос... Какой класс из известных Винде не требующий рукописных драйверов использует изохорный тип передачи любых данных?...

Сообщение отредактировал shrek - Nov 22 2010, 18:04
Go to the top of the page
 
+Quote Post

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

 


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


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