Serg_Sm 0 15 апреля, 2016 Опубликовано 15 апреля, 2016 · Жалоба Так все-таки, подскажите - запрос GetDeviceDescriptor после сброса, есть система запрашивающая 18 байт и честно получающая все 18 байт, эта же система может запросить 8 байт и ждет 8 байт. Тут всё нормально. Но есть система запрашивающая 18 байт, которая после получения 8 байт разрывает обмен и тут же посылает следующий SETUP пакет. Вот здесь и начинается самое интересное - если до разрыва контроллер успел забить очередь следующими 8 байтами, то при получении SETUP получаем тотальный сбой с невозможностью что либо принять/передать по USB, если же очередь заполнить не успели, то всё проходит нормально. Как на такое реагировать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 15 апреля, 2016 Опубликовано 15 апреля, 2016 · Жалоба Так все-таки, подскажите - запрос GetDeviceDescriptor после сброса, есть система запрашивающая 18 байт и честно получающая все 18 байт, эта же система может запросить 8 байт и ждет 8 байт. Тут всё нормально. Но есть система запрашивающая 18 байт, которая после получения 8 байт разрывает обмен и тут же посылает следующий SETUP пакет. Вот здесь и начинается самое интересное - если до разрыва контроллер успел забить очередь следующими 8 байтами, то при получении SETUP получаем тотальный сбой с невозможностью что либо принять/передать по USB, если же очередь заполнить не успели, то всё проходит нормально. Как на такое реагировать? Получили RESET - очищайте все передачи. И ждите SETUP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg_Sm 0 15 апреля, 2016 Опубликовано 15 апреля, 2016 · Жалоба Получили RESET - очищайте все передачи. И ждите SETUP. RESET получен, SETUP с запросом GetDeviceDescriptor 18 байт length. После 8 байт передачи идет следующий SETUP без RESET и всё. В старых системах (на XP) после такого шел RESET, а на 8-ке SETUP. RESET убрали для повышения скорости. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 16 апреля, 2016 Опубликовано 16 апреля, 2016 · Жалоба RESET получен, SETUP с запросом GetDeviceDescriptor 18 байт length. После 8 байт передачи идет следующий SETUP без RESET и всё. В старых системах (на XP) после такого шел RESET, а на 8-ке SETUP. RESET убрали для повышения скорости. В чем вопрос? Получили RESET - все конечные точки в режим STALL. Не получили - продолжаете передачу. Я с SAM7S64 уже лет 5 не работаю. Но точно помню, что вопросов не возникало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg_Sm 0 18 апреля, 2016 Опубликовано 18 апреля, 2016 · Жалоба В чем вопрос? Получили RESET - все конечные точки в режим STALL. Не получили - продолжаете передачу. Я с SAM7S64 уже лет 5 не работаю. Но точно помню, что вопросов не возникало. RESET уже прошел - обработали и забыли. Далее идет обмен, вот картинка для наглядности: 8 байт отослали хосту, затем он рвет связь (что не удается отследить). В это время в очередь загружается последующие 8 байт и с приходом следующего SETUP получаем невосстанавливаемый сбой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 18 апреля, 2016 Опубликовано 18 апреля, 2016 · Жалоба RESET уже прошел - обработали и забыли. Далее идет обмен, вот картинка для наглядности: 8 байт отослали хосту, затем он рвет связь (что не удается отследить). В это время в очередь загружается последующие 8 байт и с приходом следующего SETUP получаем невосстанавливаемый сбой. Не могу понять по картинке, где ошибка? Ищите у себя в программе. Вот моих два старых проекта на SAM7S http://njnmnp.narod.ru/proj/usb_bulk_sam7/usb_bulk_sam7.html http://njnmnp.narod.ru/proj/prog16/prog16.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg_Sm 0 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба Не могу понять по картинке, где ошибка? Ищите у себя в программе. Вот моих два старых проекта на 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мс между обработкой прерываний скорее всего заработает), нужен только процесс энумерации. Хоть бинарник киньте - попробую проверить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg_Sm 0 21 апреля, 2016 Опубликовано 21 апреля, 2016 · Жалоба Всё, вроде разобрался)) Теперь работает везде где проверял с тестами и так (XP, 8.1 и 10). Причина была во флаге TXCOMP. У меня использовался переделанный пример из под FREERTOS, и есть там такая фича - сброс сразу кучи прерываний в обработчике (осталась у меня в проекте). А TXCOMP был задефайнен в эту кучу. Т.е. TXCOMP сбрасывался еще до обработки прерывания на него. Соответственно сделал сброс TXCOMP только в одном месте после полной обработки соответствующего прерывания - проблема ушла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться