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

 
 
> драйвер USBIO проблема передачи данных, передаётся первый пакет в 512байт второй не получает приложение...
Mozart
сообщение Jun 27 2008, 19:53
Сообщение #1


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

Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829



использую usb микросхему ISP1581 включенную в режиме GENERIC_MODE.
Скачала с сайта _http://www.thesycon.de/eng/usbio.shtml_ драйвер USBIO и "demo application executable (usbioapp.exe)"
Endpoint настроен как bulk максимальный размер пакета 512байт. При запросе на передачу данных в хост происходит прерывание к примеру от второй endpoint = EP2TX.
после произошедшего прерывания моя последовательность действий такая:

1. отключаю прерывания
2. выбираю конечную точку и устанавливаю длину буфера
3. заполняю буфер данными
4. устанавливаю сигнал ACK
5. включаю прерывания.

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


--------------------
все косяки, даже о которых не знает сам разработчик, - мои
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
galjoen
сообщение Jun 30 2008, 14:20
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Mozart @ Jun 27 2008, 23:53) *
в чём может быть проблема?

В отсутствии переключения TOGGLE (DATA1/DATA0).
Go to the top of the page
 
+Quote Post
Mozart
сообщение Jun 30 2008, 15:25
Сообщение #3


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

Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829



Цитата(galjoen @ Jun 30 2008, 18:20) *
В отсутствии переключения TOGGLE (DATA1/DATA0).

enable disable endpoint?

Сообщение отредактировал Mozart - Jun 30 2008, 15:30


--------------------
все косяки, даже о которых не знает сам разработчик, - мои
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jun 30 2008, 16:18
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Mozart @ Jun 30 2008, 19:25) *
enable disable endpoint?

Нет. В чередовании идентификатора пакета (PID) DATA1 и DATA0 у передаваемых данных. Если два блока данных передаются с одинаковыми DATA, то принимающий считает, что его ACK на 1й блок не дошёл (был повреждён) и передающий перепослал те-же данные (т.к. PID тот-же) , шлёт ACK, а эти данные отбрасывает. Обычно переключение обозначается TOGGLE. У ISP1581 не знаю как обозначается (не пользовался). М.б. у неё автоматически переключается - тогда enable disable endpoint
нельзя т.к. 1й пакет всегда будет с DATA1. Но д.б. режим и с переключением вручную.
Д.б. так:
1. отключаю прерывания
2. выбираю конечную точку и устанавливаю длину буфера
3. заполняю буфер данными

4. Устанавливаю TOGGLE
5. Разрешаю передачу (TxEN?), а не "4. устанавливаю сигнал ACK"?

6. включаю прерывания.
Go to the top of the page
 
+Quote Post
Mozart
сообщение Jul 1 2008, 08:17
Сообщение #5


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

Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829



Цитата(galjoen @ Jun 30 2008, 20:18) *
Нет. В чередовании идентификатора пакета (PID) DATA1 и DATA0 у передаваемых данных. Если два блока данных передаются с одинаковыми DATA, то принимающий считает, что его ACK на 1й блок не дошёл (был повреждён) и передающий перепослал те-же данные (т.к. PID тот-же) , шлёт ACK, а эти данные отбрасывает. Обычно переключение обозначается TOGGLE. У ISP1581 не знаю как обозначается (не пользовался). М.б. у неё автоматически переключается - тогда enable disable endpoint
нельзя т.к. 1й пакет всегда будет с DATA1. Но д.б. режим и с переключением вручную.
Д.б. так:
1. отключаю прерывания
2. выбираю конечную точку и устанавливаю длину буфера
3. заполняю буфер данными

4. Устанавливаю TOGGLE
5. Разрешаю передачу (TxEN?), а не "4. устанавливаю сигнал ACK"?

6. включаю прерывания.


у ISP1581 автоматически происходит передача когда регистр buffer length становится равным MaxPcktSizе, если размер данных меньше MaxPcktSizе то можно битом VENDP дёрнуть и они якобы уйдут, ручное переключение TOGGLE я так понимаю нет, а если есть то где? я не нашёл.
а сигнал АСК, вообще устанавливать не надо?


--------------------
все косяки, даже о которых не знает сам разработчик, - мои
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jul 1 2008, 19:11
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Mozart @ Jul 1 2008, 12:17) *
а сигнал АСК, вообще устанавливать не надо?

При передаче хосту (IN) ACK приходит от хоста, и его устанавливать не надо. Можно и нужно проверить пришёл-ли ACK от хоста в ответ на вашу передачу ему.

С логами что-то не разобрался. Что там за передача OUT к передающей (0x82) EP? Или это с точки зрения URB запросов OUT?
Но видимо происходят посылки NAK в ответ на IN от хоста (PENDING)? А какие прерывания (по какому событию) вы используете от EP N2? У bulk EP буфер можно заполнять заранее, т.е. использовать прерывания по опустошению буфера (успешной передаче - приёму ACK от хоста).

А вообще, чтоб было понятно, выложите дескрипторы вашего устройства - DEVICE, CONFIGURATION, INTERFACE, ENDPOINT и все которые ещё/если есть.
Go to the top of the page
 
+Quote Post
Mozart
сообщение Jul 1 2008, 19:39
Сообщение #7


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

Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829



0x82 это адрес конечной точки, в данном случае она вторая EP2TX (IN).

Код
CONFIGURATION_DESCRIPTOR config_descriptor = {
        SIZEOF_USB_CONFIGURATION_DESCRIPTOR,//...bLength
        USB_CONFIGURATION_DESCRIPTOR_TYPE,  //...bDescriptorType
        CONFIG_DESCRIPTOR_LENGTH,
        0,                             //...wTotalLength
        0x01,                               //...bNumInterfaces
        0x01,                               //...bConfigurationValue
        0x00,                               //...iConfiguration
        0x60,                               //...bmAttributes
        0x01                               //...MaxPower
};  

INTERFACE_DESCRIPTOR interface_descriptor = {
        SIZEOF_USB_INTERFACE_DESCRIPTOR,    //...bLength
        USB_INTERFACE_DESCRIPTOR_TYPE,      //...bDescriptorType
        0x00,                               //...bInterfaceNumber
        0x00,                               //...bAlternateSetting
        NUM_ENDPOINTS,                      //...bNumEndpoints
        USB_CLASS_CODE_TEST_CLASS_DEVICE,   //...bInterfaceClass
        USB_SUBCLASS_CODE_TEST_CLASS,       //...bInterfaceSubClass
        USB_PROTOCOL_CODE_TEST_CLASS,       //...bInterfaceProtocol
        0x00                               //...iInterface
};  

ENDPOINT_DESCRIPTOR EP2_TXDescr = {
        SIZEOF_USB_ENDPOINT_DESCRIPTOR,     //...bLength
        USB_ENDPOINT_DESCRIPTOR_TYPE,       //...bDescriptorType
        0x82,                               //...bEndpointAddress
        USB_ENDPOINT_TYPE_BULK,                 //...bmAttributes
        EP2_PACKET_SIZE&0xff,EP2_PACKET_SIZE/256,//...wMaxPacketSize    
//      0x20,0x3,                           //...wMaxPacketSize
        0x0A                               //...bInterval
};        
        
ENDPOINT_DESCRIPTOR EP2_RXDescr = {
        SIZEOF_USB_ENDPOINT_DESCRIPTOR,     //...bLength
        USB_ENDPOINT_DESCRIPTOR_TYPE,       //...bDescriptorType
        0x02,                               //...bEndpointAddress
        USB_ENDPOINT_TYPE_BULK,                             //...bmAttributes
        EP2_PACKET_SIZE&0xff,EP2_PACKET_SIZE/256,               //...wMaxPacketSize    
//      0x40,0x4,                           //...wMaxPacketSize
        0x0A                               //...bInterval
};


а как проверить приход сигнала АСК от хоста?

Сообщение отредактировал Mozart - Jul 1 2008, 19:40


--------------------
все косяки, даже о которых не знает сам разработчик, - мои
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Mozart   драйвер USBIO проблема передачи данных   Jun 27 2008, 19:53
|- - Mozart   я заново пересмотрел datasheet ЦитатаNote: ‘Stall...   Jun 30 2008, 16:23
||- - galjoen   Цитата(Mozart @ Jun 30 2008, 20:23) что т...   Jun 30 2008, 16:31
|- - galjoen   Цитата(Mozart @ Jul 1 2008, 23:39) 0x82 э...   Jul 1 2008, 20:22
|- - Mozart   0x01 //...MaxPower - это случайно затисалось, там ...   Jul 1 2008, 20:35
- - Mozart   я прикрепил лог... из него видно что приходят запр...   Jul 1 2008, 14:53
- - Mozart   Цитата(galjoen @ Jul 2 2008, 00:22) 4. В ...   Jul 2 2008, 08:09
|- - galjoen   Цитата(Mozart @ Jul 2 2008, 12:09) при из...   Jul 4 2008, 14:28
|- - Mozart   Цитата(galjoen @ Jul 4 2008, 18:28) Так у...   Jul 4 2008, 14:35
|- - galjoen   Цитата(Mozart @ Jul 4 2008, 18:35) так че...   Jul 4 2008, 14:53
|- - Mozart   Цитата(galjoen @ Jul 4 2008, 18:53) Дескр...   Jul 4 2008, 14:59
|- - galjoen   Цитата(Mozart @ Jul 4 2008, 18:59) ну дык...   Jul 4 2008, 15:07
|- - Mozart   Цитата(galjoen @ Jul 4 2008, 19:07) Не др...   Jul 5 2008, 11:12
|- - galjoen   Цитата(Mozart @ Jul 5 2008, 15:12) вот те...   Jul 7 2008, 13:11
|- - Mozart   Цитата(galjoen @ Jul 7 2008, 17:11) 1. В ...   Jul 7 2008, 14:15
|- - Mozart   ну насколько я понимаю весь этот процес... хост шл...   Jul 8 2008, 15:03
|- - Mozart   может быть всё дело в скорости записи... у меня 2 ...   Jul 10 2008, 12:56
- - Mozart   может быть я не на все запросы отвечаю??? хотя дев...   Jul 3 2008, 06:34
|- - Mozart   отправка одного пакета в 64 байта происходит когда...   Jul 3 2008, 14:11
- - Mozart   прилагаю лог... енумерации и пр...   Jul 5 2008, 21:52
- - Mozart   стала появляться ошибка Цитатаpipe82: Error code 0...   Jul 6 2008, 18:29
- - Mozart   Цитата(Mozart @ Jul 6 2008, 22:29) стала ...   Jul 7 2008, 06:49
- - Mozart   с одной конечной точкой такая фигня... и ещё не с ...   Jul 7 2008, 08:07


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:49
Рейтинг@Mail.ru


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