SergeySpbRu 0 9 июня, 2010 Опубликовано 9 июня, 2010 (изменено) · Жалоба Добрый день! Процессор 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? Заранее благодарю, Сергей. Изменено 9 июня, 2010 пользователем SergeySpbRu Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 9 июня, 2010 Опубликовано 9 июня, 2010 · Жалоба 1.Неужели нельзя использовать прерывания при работе с USB? Другие прерывания можно. Прерывания от Endpoint'ов UDP тоже можно, но в большинстве случаев не нужно. Макросы типа SET_CSR у Атмела сделаны абсолютно неграмотно, поэтому и виснет. 2.Использую пример из IAR (без добавления таймера T2). При передачи пакета в USB длинной 63 байта и менее все работает, но если послать пакет длинной 64 байта, то в терминалке ничего не отображается. Может проблема в драйвере windows (специального драйвера не ставил)? Тоже атмеловская ошибка - если размер передачи кратен размеру буфера Endpoint'а, в конце должен передаваться пакет нулевой длины. 3. Какую максимальную скорость удалось получить при передачи в одну сторону? Под XP SP2 от хоста к устройству более 500 кбайт/с, от устройства к хосту - 128 кбайт/с, если память мне не изменяет. 4. Есть ли другие рабочие примеры работы CDC для SAM7? Лучше разобраться и написать самостоятельно - это меньше тысячи строк кода на все. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeySpbRu 0 11 июня, 2010 Опубликовано 11 июня, 2010 (изменено) · Жалоба Большое спасибо за ответы!! Другие прерывания можно. Прерывания от Endpoint'ов UDP тоже можно, но в большинстве случаев не нужно. Макросы типа SET_CSR у Атмела сделаны абсолютно неграмотно, поэтому и виснет. Поправил, все заработало. >Тоже атмеловская ошибка - если размер передачи кратен размеру буфера Endpoint'а, в конце должен передаваться пакет нулевой длины. Т.е. после передачи моего пакета максимальной длинны я должен послать следующий пакет длинной 0? >Под XP SP2 от хоста к устройству более 500 кбайт/с, от устройства к хосту - 128 кбайт/с, если память мне не изменяет. Для того чтобы получить большую скорость надо писать свой драйвер, или как я прочитал, можно взять из DDK XP? Лучше разобраться и написать самостоятельно - это меньше тысячи строк кода на все. С этим согласен, но пока надо понять насколько сложно получить скорость от устройства к хосту ~ 1 Мбайт/с, какие трудозатраты. Посоветуйте утилитку, которая позволит мониторить трафик на PC. Изменено 11 июня, 2010 пользователем SergeySpbRu Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 11 июня, 2010 Опубликовано 11 июня, 2010 · Жалоба Т.е. после передачи моего пакета максимальной длинны я должен послать следующий пакет длинной 0? Да, если это последний пакет. Для того чтобы получить большую скорость надо писать свой драйвер, или как я прочитал, можно взять из DDK XP? ...пока надо понять насколько сложно получить скорость от устройства к хосту ~ 1 Мбайт/с, какие трудозатраты. Можно написать свое на основе чего-нибудь. Тогда можно со спокойной совестью отказаться от использования стандартных классов. Посоветуйте утилитку, которая позволит мониторить трафик на PC. Я иногда пользуюсь snoopypro. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeySpbRu 0 11 июня, 2010 Опубликовано 11 июня, 2010 · Жалоба Можно написать свое на основе чего-нибудь. Тогда можно со спокойной совестью отказаться от использования стандартных классов. От какого рабочего примера лучше стартовать (желательно с исходниками драйвера)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
athlon64 0 26 августа, 2011 Опубликовано 26 августа, 2011 · Жалоба Тоже атмеловская ошибка - если размер передачи кратен размеру буфера Endpoint'а, в конце должен передаваться пакет нулевой длины. У меня такая же проблема с атмеловским USB CDC, но при приёме. Если входящий пакет размером = размеру буфера Endpoint, окончание приёма не детектируется. Может быть знаете решение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 31 августа, 2011 Опубликовано 31 августа, 2011 · Жалоба У меня такая же проблема с атмеловским USB CDC, но при приёме. Если входящий пакет размером = размеру буфера Endpoint, окончание приёма не детектируется. Может быть знаете решение? Увы, по атмеловским примерам я знаю только одно решение - переписать все как следует самому. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться