Mozart 0 27 июня, 2008 Опубликовано 27 июня, 2008 · Жалоба использую 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. включаю прерывания. когда прерывание происходит второй раз то компьютер уже ничего не получает. в чём может быть проблема? з.ы. Прерывание второй раз происходит смотрел под отладчиком Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 30 июня, 2008 Опубликовано 30 июня, 2008 · Жалоба в чём может быть проблема? В отсутствии переключения TOGGLE (DATA1/DATA0). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 30 июня, 2008 Опубликовано 30 июня, 2008 (изменено) · Жалоба В отсутствии переключения TOGGLE (DATA1/DATA0). enable disable endpoint? Изменено 30 июня, 2008 пользователем Mozart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 30 июня, 2008 Опубликовано 30 июня, 2008 · Жалоба 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. включаю прерывания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 30 июня, 2008 Опубликовано 30 июня, 2008 · Жалоба я заново пересмотрел datasheet Note: ‘Stalling’ a data endpoint will confuse the Data Toggle bit on the stalled endpoint because the internal logic picks up from where it has stalled. Therefore, the Data Toggle bit must be reset by disabling and re-enabling the corresponding endpoint (by setting the bit ‘ENABLE’ to 0 or 1 in the endpoint type register) to reset the PID. больше про Toggle data ничего не сказано...а в programmers guide // Clear the data toggle bit to (set to 0) and clear buffers before clear stall of // the endpoint. wEPCFG = ISP1581_GetEndpointConfig(endp); ISP1581_SetEndpointConfig(endp, 0); // disable endpoint * // Enable endpoint, clear the buffer and set the data toggle bit to 0. ISP1581_SetEndpointConfig(endp, wEPCFG); ISP1581_SetEndpointStatus(endp, 0); // clear the Stall condition of the //endpoint. Chap9_ControlWriteHandshake(); только вот это... что такое Chap9_ControlWriteHandshake();?? точнее как она описывается...?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 30 июня, 2008 Опубликовано 30 июня, 2008 · Жалоба что такое Chap9_ControlWriteHandshake();?? точнее как она описывается...?? Это глава 9 описания работы USB. А именно передача через контрольный канал. Можно скачать с usb.org или вот русский перевод. CH09_R.DOC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 1 июля, 2008 Опубликовано 1 июля, 2008 · Жалоба Нет. В чередовании идентификатора пакета (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 я так понимаю нет, а если есть то где? я не нашёл. а сигнал АСК, вообще устанавливать не надо? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 1 июля, 2008 Опубликовано 1 июля, 2008 · Жалоба я прикрепил лог... из него видно что приходят запросы от хоста, и передаю я только один раз... а после закрытия устройства мне пишет это прога что я не отвечал на эти заросы... как мне надо на них ответить?? UTLog.rar UTLog.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 1 июля, 2008 Опубликовано 1 июля, 2008 · Жалоба а сигнал АСК, вообще устанавливать не надо? При передаче хосту (IN) ACK приходит от хоста, и его устанавливать не надо. Можно и нужно проверить пришёл-ли ACK от хоста в ответ на вашу передачу ему. С логами что-то не разобрался. Что там за передача OUT к передающей (0x82) EP? Или это с точки зрения URB запросов OUT? Но видимо происходят посылки NAK в ответ на IN от хоста (PENDING)? А какие прерывания (по какому событию) вы используете от EP N2? У bulk EP буфер можно заполнять заранее, т.е. использовать прерывания по опустошению буфера (успешной передаче - приёму ACK от хоста). А вообще, чтоб было понятно, выложите дескрипторы вашего устройства - DEVICE, CONFIGURATION, INTERFACE, ENDPOINT и все которые ещё/если есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 1 июля, 2008 Опубликовано 1 июля, 2008 (изменено) · Жалоба 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 }; а как проверить приход сигнала АСК от хоста? Изменено 1 июля, 2008 пользователем Mozart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 1 июля, 2008 Опубликовано 1 июля, 2008 · Жалоба 0x82 это адрес конечной точки, в данном случае она вторая EP2TX (IN). 1. У вас две конечные точки с адресом 2. Первая принимающая (IN) 0x82 и вторая передающая 0x02. Так делать нельзя (забыл где читал), адреса д.б. разными (например 0x82 и 0x03). 2. Зачем вам удалённое пробуждение? 0x60, //...bmAttributes 3. Внешнее питание, и при этом потребление 2 мА? 0x01 //...MaxPower 4. В дескрипторе конфигурации: 0, //...wTotalLength А там д.б. длины дескрипторов: конфигурации (9) + интерфейса (9) + EP (7*2) =32. Странно, что вообще работает. 5. Чему равны поля NUM_ENDPOINTS, //...bNumEndpoints USB_CLASS_CODE_TEST_CLASS_DEVICE, //...bInterfaceClass USB_SUBCLASS_CODE_TEST_CLASS, //...bInterfaceSubClass USB_PROTOCOL_CODE_TEST_CLASS, //...bInterfaceProtocol ? а как проверить приход сигнала АСК от хоста? В описании ISP1581 это д.б. описано. Про дескрипторы прочтите главу 9, которую я посылал. Там только нет HIGH SPEED дескриптора, как впрочем и у вас. А у вас FS или HS девайс? Если FS - длину пакета EP = 0x200 нельзя - 0x40 max. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 1 июля, 2008 Опубликовано 1 июля, 2008 · Жалоба 0x01 //...MaxPower - это случайно затисалось, там должен быть нуль... NUM_ENDPOINTS, //...bNumEndpoints = 2 USB_CLASS_CODE_TEST_CLASS_DEVICE, //...bInterfaceClass = 0xDC USB_SUBCLASS_CODE_TEST_CLASS, //...bInterfaceSubClass = 0xA0 USB_PROTOCOL_CODE_TEST_CLASS, //...bInterfaceProtocol = 0xB0 ИМХО даташит на этот исп ущербен... Про дескрипторы прочтите главу 9, которую я посылал. Там только нет HIGH SPEED дескриптора, как впрочем и у вас. А у вас FS или HS девайс? Если FS - длину пакета EP = 0x200 нельзя - 0x40 max. точно!!! у мну же драйвер на фулл спиде вообще работает... и я где - то читал что так оно и есть в книге Агурова кажется.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 2 июля, 2008 Опубликовано 2 июля, 2008 · Жалоба 4. В дескрипторе конфигурации: 0, //...wTotalLength все дескрипторы описал как однобайтные, и wTotalLength в моём случае равен CONFIG_DESCRIPTOR_LENGTH = 32 2. Первая принимающая (IN) 0x82 и вторая передающая 0x02 при изменении адреса допустим на 0x03 вообще ничего не происходит. ничего не изменилось... :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 3 июля, 2008 Опубликовано 3 июля, 2008 · Жалоба может быть я не на все запросы отвечаю??? хотя девайсина определяется... и вот что ещё заметил передача одного пакета происходит после ресета устройства... или перезагрузки программы.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 3 июля, 2008 Опубликовано 3 июля, 2008 · Жалоба отправка одного пакета в 64 байта происходит когда я сделаю ресет устройству!!!... что может сбрасываться?... не пойму.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться