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

 
 
 
Reply to this topicStart new topic
> at91sam7x256 USB+IAR5.4, проблемы с примером usb-cdc в IAR 5.4
SergeySpbRu
сообщение Jun 9 2010, 06:41
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 22-10-09
Пользователь №: 53 129



Добрый день!

Процессор AT91SAM7X256.
Работаю в IAR 5.4 с примером “usb-device-cdc-serial-project”. В примере запрещены прерывания от таймера и UARTа до момента установки переменной ‘isSerialConnected’. Я добавил таймер Т2 с обработчиком прерываний, таймер запускаю сразу не дожидаясь установки переменной ‘isSerialConnected’. После подключения к USB программа виснет в файле ‘USBD_UDP.c’ в функции ‘USBD_Write(…)’ в строке ‘SET_CSR(bEndpoint, AT91C_UDP_TXPKTRDY);’.
Возникает вопросы:
1.Неужели нельзя использовать прерывания при работе с USB?
2.Использую пример из IAR (без добавления таймера T2). При передачи пакета в USB длинной 63 байта и менее все работает, но если послать пакет длинной 64 байта, то в терминалке ничего не отображается. Может проблема в драйвере windows (специального драйвера не ставил)?
3. Какую максимальную скорость удалось получить при передачи в одну сторону?
4. Есть ли другие рабочие примеры работы CDC для SAM7?


Заранее благодарю, Сергей.

Сообщение отредактировал SergeySpbRu - Jun 9 2010, 06:42
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 9 2010, 08:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(SergeySpbRu @ Jun 9 2010, 10:41) *
1.Неужели нельзя использовать прерывания при работе с USB?

Другие прерывания можно. Прерывания от Endpoint'ов UDP тоже можно, но в большинстве случаев не нужно.
Макросы типа SET_CSR у Атмела сделаны абсолютно неграмотно, поэтому и виснет.

Цитата(SergeySpbRu @ Jun 9 2010, 10:41) *
2.Использую пример из IAR (без добавления таймера T2). При передачи пакета в USB длинной 63 байта и менее все работает, но если послать пакет длинной 64 байта, то в терминалке ничего не отображается. Может проблема в драйвере windows (специального драйвера не ставил)?

Тоже атмеловская ошибка - если размер передачи кратен размеру буфера Endpoint'а, в конце должен передаваться пакет нулевой длины.

Цитата(SergeySpbRu @ Jun 9 2010, 10:41) *
3. Какую максимальную скорость удалось получить при передачи в одну сторону?

Под XP SP2 от хоста к устройству более 500 кбайт/с, от устройства к хосту - 128 кбайт/с, если память мне не изменяет.

Цитата(SergeySpbRu @ Jun 9 2010, 10:41) *
4. Есть ли другие рабочие примеры работы CDC для SAM7?

Лучше разобраться и написать самостоятельно - это меньше тысячи строк кода на все.
Go to the top of the page
 
+Quote Post
SergeySpbRu
сообщение Jun 11 2010, 07:33
Сообщение #3





Группа: Участник
Сообщений: 9
Регистрация: 22-10-09
Пользователь №: 53 129



Большое спасибо за ответы!!
Цитата(aaarrr @ Jun 9 2010, 12:39) *
Другие прерывания можно. Прерывания от Endpoint'ов UDP тоже можно, но в большинстве случаев не нужно.
Макросы типа SET_CSR у Атмела сделаны абсолютно неграмотно, поэтому и виснет.

Поправил, все заработало.
Цитата(aaarrr @ Jun 9 2010, 12:39) *
>Тоже атмеловская ошибка - если размер передачи кратен размеру буфера Endpoint'а, в конце должен передаваться пакет нулевой длины.

Т.е. после передачи моего пакета максимальной длинны я должен послать следующий пакет длинной 0?
Цитата(aaarrr @ Jun 9 2010, 12:39) *
>Под XP SP2 от хоста к устройству более 500 кбайт/с, от устройства к хосту - 128 кбайт/с, если память мне не изменяет.

Для того чтобы получить большую скорость надо писать свой драйвер, или как я прочитал, можно взять из DDK XP?
Цитата(aaarrr @ Jun 9 2010, 12:39) *
Лучше разобраться и написать самостоятельно - это меньше тысячи строк кода на все.

С этим согласен, но пока надо понять насколько сложно получить скорость от устройства к хосту ~ 1 Мбайт/с, какие трудозатраты.
Посоветуйте утилитку, которая позволит мониторить трафик на PC.

Сообщение отредактировал SergeySpbRu - Jun 11 2010, 07:38
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 11 2010, 08:01
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(SergeySpbRu @ Jun 11 2010, 11:33) *
Т.е. после передачи моего пакета максимальной длинны я должен послать следующий пакет длинной 0?

Да, если это последний пакет.

Цитата(SergeySpbRu @ Jun 11 2010, 11:33) *
Для того чтобы получить большую скорость надо писать свой драйвер, или как я прочитал, можно взять из DDK XP?

...пока надо понять насколько сложно получить скорость от устройства к хосту ~ 1 Мбайт/с, какие трудозатраты.

Можно написать свое на основе чего-нибудь. Тогда можно со спокойной совестью отказаться от использования стандартных классов.

Цитата(SergeySpbRu @ Jun 11 2010, 11:33) *
Посоветуйте утилитку, которая позволит мониторить трафик на PC.

Я иногда пользуюсь snoopypro.
Go to the top of the page
 
+Quote Post
SergeySpbRu
сообщение Jun 11 2010, 12:38
Сообщение #5





Группа: Участник
Сообщений: 9
Регистрация: 22-10-09
Пользователь №: 53 129



Цитата(aaarrr @ Jun 11 2010, 12:01) *
Можно написать свое на основе чего-нибудь. Тогда можно со спокойной совестью отказаться от использования стандартных классов.

От какого рабочего примера лучше стартовать (желательно с исходниками драйвера)?
Go to the top of the page
 
+Quote Post
athlon64
сообщение Aug 26 2011, 07:33
Сообщение #6


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

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Цитата(aaarrr @ Jun 9 2010, 14:39) *
Тоже атмеловская ошибка - если размер передачи кратен размеру буфера Endpoint'а, в конце должен передаваться пакет нулевой длины.

У меня такая же проблема с атмеловским USB CDC, но при приёме. Если входящий пакет размером = размеру буфера Endpoint, окончание приёма не детектируется.
Может быть знаете решение?


--------------------
Руслан
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 31 2011, 13:15
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(athlon64 @ Aug 26 2011, 11:33) *
У меня такая же проблема с атмеловским USB CDC, но при приёме. Если входящий пакет размером = размеру буфера Endpoint, окончание приёма не детектируется.
Может быть знаете решение?

Увы, по атмеловским примерам я знаю только одно решение - переписать все как следует самому.
Go to the top of the page
 
+Quote Post

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

 


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


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