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

 
 
> Непонятки с UDP у SAM7S64
sgrig
сообщение May 24 2007, 07:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-11-05
Из: Tomsk
Пользователь №: 10 464



Зашел в тупик, бьюсь не первый день. Может, что подскажете?

Делаю HID-устройство на SAM7S64.
Обслуживаю прерывание от EP0 стандартно: получаю запрос, разгребаю его и отправляю в ответ дескриптор или репорт. Для справки: размер EP0 равен 8 байтам, а дескрипторы и репорты могут быть больше.

Суть проблемы:
Если перед загрузкой в FIFO очередной порции данных флаг TXCOMP опрашиваю поллингом в цикле (так сделано в примере HID mouse от Atmel) - все работает как надо, вопросов нет. Но крутиться в прерывании как-то некрасиво.
Если же я начинаю делать "подкачку" данных в прерывании по TXCOMP, то, почему-то, не отправляется уже вторая порция данных.

Например, обрабатывается запрос хоста GET_DESCRIPTOR_DEVICE:
1) по прерыванию от EP0 выгребаю запрос из FIFO
2) формирую дескриптор устройства
3) первые 8 байт дескриптора загружаю в FIFO и поднимаю TXPKTRDY
4) жду прерывания от TXCOMP - и оно приходит
5) сбрасываю TXCOMP
6) очередную порцию дескриптора загружаю в FIFO и поднимаю TXPKTRDY
и ничего не передается, хост ждет некоторое время и обрывает транзакцию IN.

Про необходимость правильной реакции на обрыв транзакции знаю.
Где могут быть грабли? Любые соображения приму с багодарностью.

PS. Обратите внимание, что в случае поллинга флага TXCOMP все работает как часы, поэтому обсуждать правильность реализации протокола, видимо, не имеет смысла.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Serg_Sm
сообщение Mar 28 2016, 13:58
Сообщение #2


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

Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167



Подскажите по очень похожему вопросу - в теме решение своей проблемы не нашел.
Тоже SAM7S64. Процесс энумерации без прерываний.
Проблема в сбое энумерации - возникает не всегда и не на каждой системе. Но нашел один комп, на котором такое постоянно происходит (на других все тесты USB2CV проходят без ошибок).

1) по ENDBUSRESET сброс EP и т.п.;
2) Получаю запрос на дескриптор устройства;
3) Первые 8 байт дескриптора загружаю в FIFO и поднимаю TXPKTRDY, сбрасываю TXCOMP;
4) Жду TXCOMP, посылаю следующие 8 байт (поднимая TXPKTRDY), сбрасываю TXCOMP.
И вот здесь наблюдается затык, потому что хост прервал получение дескриптора и уже шлет "Set Address":
В UDP_CSR0 выставляется RXSETUP, но данных нет (FIFO занял отправленный ранее запрос) - соответственно обмен остановлен.
Признака по которому видно, что хост прервал транзакцию я не нашел - транзакции с обрывом и полной передачей данных идут одинаково (состояния UDP_ ISR и UDP_CSR0 идентичны до сбоя).
Go to the top of the page
 
+Quote Post
misyachniy
сообщение Mar 30 2016, 18:03
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Цитата(Serg_Sm @ Mar 28 2016, 15:58) *
1) по ENDBUSRESET сброс EP и т.п.;
2) Получаю запрос на дескриптор устройства;
3) Первые 8 байт дескриптора загружаю в FIFO и поднимаю TXPKTRDY, сбрасываю TXCOMP;
4) Жду TXCOMP, посылаю следующие 8 байт (поднимая TXPKTRDY), сбрасываю TXCOMP.
И вот здесь наблюдается затык...


Это классические грабли.
Windows псоле получения первых 8 байт дескриптора устройства - поизводит BUS_RESET.
Потом опять шлет запрос дескриптора и получает его целиком.

Нужно по ENDBUSRESET обязательно отменять передачу дескриптора, да и любые передачи.
Go to the top of the page
 
+Quote Post
Serg_Sm
сообщение Apr 1 2016, 06:31
Сообщение #4


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

Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167



Цитата(misyachniy @ Mar 30 2016, 21:03) *
Это классические грабли.
Windows псоле получения первых 8 байт дескриптора устройства - поизводит BUS_RESET.
Потом опять шлет запрос дескриптора и получает его целиком.

Нужно по ENDBUSRESET обязательно отменять передачу дескриптора, да и любые передачи.

8-ка и 10-ка не производит BUS_RESET (после получения 8 байт дескриптора - скорость так подняли). В общем решил так - после BUS_RESET передаю только 8 байт дескриптора. Нашел про это в стандарте (п.5.5.3 USB2.0) - коряво написано:
Цитата
In order to determine the maximum packet size for the Default Control Pipe, the USB System Software reads the device descriptor. The host will read the first eight bytes of the device descriptor. The device always responds with at least these initial bytes in a single packet. After the host reads the initial part of the device descriptor, it is guaranteed to have read this default pipe’s wMaxPacketSize field (byte 7 of the device descriptor).

Но вроде так можно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sgrig   Непонятки с UDP у SAM7S64   May 24 2007, 07:35
- - KAlex   Цитата(sgrig @ May 24 2007, 11:35) 5) сбр...   May 24 2007, 08:24
|- - sgrig   Цитата(KAlex @ May 24 2007, 15:24) Попроб...   May 24 2007, 08:35
|- - KAlex   Вот кусок рабочего кода. Никаких прерываний. AT91F...   May 24 2007, 09:32
|- - sgrig   Цитата(KAlex @ May 24 2007, 16:32) Вот ку...   May 24 2007, 12:45
- - KAlex   Цитата(sgrig @ May 24 2007, 11:35) Наприм...   May 24 2007, 13:17
|- - sgrig   Цитата(KAlex @ May 24 2007, 20:17) О...   May 24 2007, 14:40
|- - KAlex   Цитата(sgrig @ May 24 2007, 18:40) Ведь T...   May 25 2007, 07:41
|- - sgrig   Попробовал и это. Не помогло. Пойду напьюсь, может...   May 25 2007, 09:52
|- - KAlex   Цитата(sgrig @ May 25 2007, 13:52) Попроб...   May 25 2007, 10:15
|- - sgrig   Цитата(KAlex @ May 25 2007, 17:15) Тоже...   May 25 2007, 10:28
|- - Calculator   Цитата(sgrig @ May 25 2007, 16:28) Наприм...   May 28 2007, 05:26
|- - sgrig   Цитата(Calculator @ May 28 2007, 12:26) Н...   May 28 2007, 09:10
- - YKonstantin   Цитата(sgrig @ May 24 2007, 10:35) 3) пер...   May 28 2007, 17:38
|- - sgrig   Цитата(YKonstantin @ May 29 2007, 00:38) ...   May 29 2007, 03:36
|- - YKonstantin   А вот еще вариант : может слишком долго в прерыван...   May 29 2007, 05:26
|- - sgrig   Цитата(YKonstantin @ May 29 2007, 12:26) ...   May 29 2007, 07:47
|- - YKonstantin   Цитата(sgrig @ May 29 2007, 10:47) Как я ...   May 29 2007, 07:57
|- - sgrig   Цитата(YKonstantin @ May 29 2007, 14:57) ...   May 29 2007, 08:35
|- - YKonstantin   Цитата(sgrig @ May 29 2007, 11:35) При от...   May 29 2007, 09:02
|- - sgrig   Цитата(YKonstantin @ May 29 2007, 16:02) ...   May 29 2007, 11:37
|- - YKonstantin   Цитата(sgrig @ May 29 2007, 14:37) То ест...   May 29 2007, 11:51
|- - sgrig   Цитата(YKonstantin @ May 29 2007, 18:51) ...   May 29 2007, 12:08
- - aaarrr   Нет, так нельзя. В приведенной цитате сказано, что...   Apr 1 2016, 12:20
|- - Serg_Sm   Цитата(aaarrr @ Apr 1 2016, 15:20) Нет, т...   Apr 1 2016, 12:33
|- - aaarrr   Цитата(Serg_Sm @ Apr 1 2016, 15:33) Указа...   Apr 1 2016, 12:55
|- - Serg_Sm   Цитата(aaarrr @ Apr 1 2016, 15:55) Это зн...   Apr 1 2016, 12:55
- - Serg_Sm   Так все-таки, подскажите - запрос GetDeviceDescrip...   Apr 15 2016, 10:29
|- - misyachniy   Цитата(Serg_Sm @ Apr 15 2016, 13:29) Так ...   Apr 15 2016, 15:38
|- - Serg_Sm   Цитата(misyachniy @ Apr 15 2016, 19:38) П...   Apr 15 2016, 19:43
|- - misyachniy   Цитата(Serg_Sm @ Apr 15 2016, 22:43) RESE...   Apr 16 2016, 12:29
- - Serg_Sm   Цитата(misyachniy @ Apr 16 2016, 16:29) В...   Apr 18 2016, 06:22
|- - misyachniy   Цитата(Serg_Sm @ Apr 18 2016, 09:22) RESE...   Apr 18 2016, 17:20
|- - Serg_Sm   Цитата(misyachniy @ Apr 18 2016, 20:20) Н...   Apr 19 2016, 06:54
- - Serg_Sm   Всё, вроде разобрался)) Теперь работает везде где ...   Apr 21 2016, 14:20


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

 


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


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