Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: at91sam7x256 USB+IAR5.4
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
SergeySpbRu
Добрый день!

Процессор 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?


Заранее благодарю, Сергей.
aaarrr
Цитата(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?

Лучше разобраться и написать самостоятельно - это меньше тысячи строк кода на все.
SergeySpbRu
Большое спасибо за ответы!!
Цитата(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.
aaarrr
Цитата(SergeySpbRu @ Jun 11 2010, 11:33) *
Т.е. после передачи моего пакета максимальной длинны я должен послать следующий пакет длинной 0?

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

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

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

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

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

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

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

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

Увы, по атмеловским примерам я знаю только одно решение - переписать все как следует самому.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.