0000007_18014 0 21 мая, 2007 Опубликовано 21 мая, 2007 · Жалоба Добрый день. Есть вопросы с работой PDIUSBD12 из микроконтроллера. Есть устройство с 4-мя bulk EP. Написан свой драйвер для Win 2000/XP. Не замечал ли кто-нибудь, что контроллер PDIUSBD12 после перевода его в режим DMA и активной работы по EP2 (Main EP) 8 Кбайт в одну сторону и 8 Кбайт в другую, при работе с EP1 отказывается отправлять пакеты? Ситуация странная, т.к. до начала циклов передачи/отправки по EP2 логика работы с EP1 работает просто замечательно. Также замечательно проходит обмен и по EP2, причем достигается заявленная инженерами philips/nxp? скорость передачи USB-устройство --> хост и наоборот в 1 Мбайт/cек. Общая процедура приема пакетов следующая: void EP1_ReceiveAndSend() { unsigned short status; unsigned short buffer[8]; //заполняется словами SELECT_EP1OUT(status); if( status^2 ) //EP1 Out stalled? { if( status&1 ) //EP1 buffer full? { ReceiveEP1(buffer); //receive buffer, clear buffer //пакет получен EP1_Logic(buffer); //процедура анализа и выдачи результата SELECT_EP1IN(status); //проверяем, есть ли заполненный и не отправленный буфер у PDIUSBD12 в EP1 Out if( status&2 )return ; //EP1 In stalled? Да - выход. while( status&1 ){ //буфер занят? Ждем. //здесь после активной работы в режиме DMA - проблема //бит full статуса EP контроллер PDIUSBD12 не сбрасывает - и бесконечное ожидание в цикле SELECT_EP1IN(status); if( status&2 )return ; //EP1 In stalled? Да - выход. } //отправка данных SendEP1(buffer); //send buffer, validate buffer } } } Схема подключения приблизительно такая же как на странице 7 документации PDIUSBD12 (Fig 3. Example of parallel interface to an 80C51 microcontroller). DMACK, DMREQ, EOT = '0'. Детальную схему подключения к сожалению не могу привести, т.к. есть жадные к успеху конкуренты. (Дело дошло даже до воровства компьютеров :(.) Буду благодарен за разумные предложения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 21 мая, 2007 Опубликовано 21 мая, 2007 · Жалоба Работаем с этой микросхемой несколько лет. Странностей не обнаружено. Но!!! Нарушение временных диаграмм приводило к непредсказуемым результатам. PS. Детальную схему подключения к сожалению не могу привести, т.к. есть жадные к успеху конкуренты. (Дело дошло даже до воровства компьютеров) А вот это непонятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0000007_18014 0 21 мая, 2007 Опубликовано 21 мая, 2007 · Жалоба Работаем с этой микросхемой несколько лет. Странностей не обнаружено. Но!!! Нарушение временных диаграмм приводило к непредсказуемым результатам. PS. А вот это непонятно. Да, наблюдал неоднократно. Если времянки завалены, то внутренний конечный автомат PDIUSBD12, отвечающий за интерфейс команд/данных, в конце концов не знает чего делать. Что именно непонятно? Схема приведенная в datasheet-е к PDIUSBD12? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 21 мая, 2007 Опубликовано 21 мая, 2007 · Жалоба Что именно непонятно? Что это за конкуренты такие. PDIUSBD12 выпускается уже давно - в инете куча примеров и исходников. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0000007_18014 0 22 мая, 2007 Опубликовано 22 мая, 2007 · Жалоба Седой, простите, пожалуйста, но вам сюда: Есть устройство с 4-мя bulk EP. Написан свой драйвер для Win 2000/XP. Не замечал ли кто-нибудь, что контроллер PDIUSBD12 после перевода его в режим DMA и активной работы по EP2 (Main EP) 8 Кбайт в одну сторону и 8 Кбайт в другую, при работе с EP1 отказывается отправлять пакеты? Схема подключения такая же как на странице 7 документации PDIUSBD12 (Fig 3. Example of parallel interface to an 80C51 microcontroller). Кроме того DMACK, DMREQ, EOT = '0'. Схема подключения не такая же как у контроллера Hitachi. >Что это за конкуренты такие. Это жизнь такая. >в инете куча примеров и исходников С примерами в интернете для PDIUSB я уже знаком давно (написаны они Hilbert Zhang ZhenYu). Вот только годятся они только для прототипной платы с ее объемом памяти, а не для устройства с объемом памяти от 8 до 32 Кбайт. >Работаем с этой микросхемой несколько лет. Странностей не обнаружено. А характеристики интерфейса передачи данных через PDIUSB можете привести (число EP, их тип, драйвер в ОС, используется ли режим DMA PDIUSB с двойной буферизацией через main EP)? Поконкретнее пожалуйста. А я постараюсь вам поверить. (Я ж не прошу вас давать информацию о вашем управляющем контроллере или процессоре или чего устройство в целом делает.) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 22 мая, 2007 Опубликовано 22 мая, 2007 · Жалоба Поконкретнее пожалуйста. А я постараюсь вам поверить http://www.slavna.ru/stran/ucc06.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0000007_18014 0 22 мая, 2007 Опубликовано 22 мая, 2007 · Жалоба http://www.slavna.ru/stran/ucc06.htm USB протокол Rev 2.0 (full speed) - ну зачем же так. :) Вижу контроллер и схему. Наверное программно времянки приходится держать? У меня вместо ALE в PDIUSB используется A0, а CLKOUT не используется. Вижу есть драйвер. Вроде свой даже. Вот только отладочную информацию из него надо выкидывать, прежде чем окончательную версию в интернет выпускать. Да и памяти у вас больше - аж целых 128 Кбайт. А сколько логических EP неясно. Нашел две ошибки. 1) Запрещались прерывания, чтобы выжать скорость, не в том месте. Ну и конечно прерывание по приходу пакета в EP1 не ловилось. 2) if( status^2 ) надо заменить на if( !(status&2) ) если кому интересно. Так что пользуйтесь народ PDIUSBD12. Сложно, но можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 22 мая, 2007 Опубликовано 22 мая, 2007 · Жалоба Информации для отладчика в драйвере нет. Есть вызовы некоторых dbg функций с сообщениями для монитора. Драйвер специально создан для данного продукта. Сами используем другой, универсальный, поддерживающий наш класс USB устройств( соответственно и firmware другое - реализующее наш протокол). DMA иcпользовали,потом отказались из-за ненужности. Никаких программных задержек не использовали. В данном устройстве используется аппаратная шина микроконтроллера. Так что пользуйтесь народ PDIUSBD12. Сложно, но можно Ядро USB у Philips (NXP) довольно простое - PDIUSBD11-12, ISPXXXX, LPCXXXX. PDIUSBD12 - устаревшее решение, в новых разработках, кроме бюджетных, не используем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться