Перейти к содержанию
    

Непонятки с UDP у SAM7S64

Так все-таки, подскажите - запрос GetDeviceDescriptor после сброса, есть система запрашивающая 18 байт и честно получающая все 18 байт, эта же система может запросить 8 байт и ждет 8 байт. Тут всё нормально. Но есть система запрашивающая 18 байт, которая после получения 8 байт разрывает обмен и тут же посылает следующий SETUP пакет. Вот здесь и начинается самое интересное - если до разрыва контроллер успел забить очередь следующими 8 байтами, то при получении SETUP получаем тотальный сбой с невозможностью что либо принять/передать по USB, если же очередь заполнить не успели, то всё проходит нормально.

Как на такое реагировать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так все-таки, подскажите - запрос GetDeviceDescriptor после сброса, есть система запрашивающая 18 байт и честно получающая все 18 байт, эта же система может запросить 8 байт и ждет 8 байт. Тут всё нормально. Но есть система запрашивающая 18 байт, которая после получения 8 байт разрывает обмен и тут же посылает следующий SETUP пакет. Вот здесь и начинается самое интересное - если до разрыва контроллер успел забить очередь следующими 8 байтами, то при получении SETUP получаем тотальный сбой с невозможностью что либо принять/передать по USB, если же очередь заполнить не успели, то всё проходит нормально.

Как на такое реагировать?

 

Получили RESET - очищайте все передачи.

И ждите SETUP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получили RESET - очищайте все передачи.

И ждите SETUP.

RESET получен, SETUP с запросом GetDeviceDescriptor 18 байт length. После 8 байт передачи идет следующий SETUP без RESET и всё. В старых системах (на XP) после такого шел RESET, а на 8-ке SETUP. RESET убрали для повышения скорости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

RESET получен, SETUP с запросом GetDeviceDescriptor 18 байт length. После 8 байт передачи идет следующий SETUP без RESET и всё. В старых системах (на XP) после такого шел RESET, а на 8-ке SETUP. RESET убрали для повышения скорости.

 

В чем вопрос?

Получили RESET - все конечные точки в режим STALL.

Не получили - продолжаете передачу.

Я с SAM7S64 уже лет 5 не работаю.

Но точно помню, что вопросов не возникало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В чем вопрос?

Получили RESET - все конечные точки в режим STALL.

Не получили - продолжаете передачу.

Я с SAM7S64 уже лет 5 не работаю.

Но точно помню, что вопросов не возникало.

 

RESET уже прошел - обработали и забыли. Далее идет обмен, вот картинка для наглядности:

post-21167-1460960276_thumb.png

8 байт отослали хосту, затем он рвет связь (что не удается отследить). В это время в очередь загружается последующие 8 байт и с приходом следующего SETUP получаем невосстанавливаемый сбой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

RESET уже прошел - обработали и забыли. Далее идет обмен, вот картинка для наглядности:

post-21167-1460960276_thumb.png

8 байт отослали хосту, затем он рвет связь (что не удается отследить). В это время в очередь загружается последующие 8 байт и с приходом следующего SETUP получаем невосстанавливаемый сбой.

 

Не могу понять по картинке, где ошибка?

Ищите у себя в программе.

 

Вот моих два старых проекта на SAM7S

 

http://njnmnp.narod.ru/proj/usb_bulk_sam7/usb_bulk_sam7.html

http://njnmnp.narod.ru/proj/prog16/prog16.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могу понять по картинке, где ошибка?

Ищите у себя в программе.

 

Вот моих два старых проекта на SAM7S

 

http://njnmnp.narod.ru/proj/usb_bulk_sam7/usb_bulk_sam7.html

http://njnmnp.narod.ru/proj/prog16/prog16.html

Ошибка в том, что запрос SetAddress не проходит - SETUP пакет не принимается корректно.

Что касается двух ссылок с проектами, то оба проекта не работают под искомой системой (в Windows XP на другой машине работают).

Отличие только в том, что возвращается STALL на запрос SetAddress (в моем случае идет безответный сбой). Естественно после этого устройство не работоспособно.

 

PS: Может у кого есть точно рабочий проект с USB на SAM7S64? Проверенный на 8-ке и без больших тормозящих навесок (с задержками более 1мс между обработкой прерываний скорее всего заработает), нужен только процесс энумерации. Хоть бинарник киньте - попробую проверить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё, вроде разобрался)) Теперь работает везде где проверял с тестами и так (XP, 8.1 и 10).

Причина была во флаге TXCOMP. У меня использовался переделанный пример из под FREERTOS, и есть там такая фича - сброс сразу кучи прерываний в обработчике (осталась у меня в проекте). А TXCOMP был задефайнен в эту кучу. Т.е. TXCOMP сбрасывался еще до обработки прерывания на него. Соответственно сделал сброс TXCOMP только в одном месте после полной обработки соответствующего прерывания - проблема ушла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...