Перейти к содержанию
    

Здравствуйте!

 

Давайте разберемся с прерываниями в этой микросхеме? Очень уж не логично они там наворочали... Я уже задавал подобный вопрос в сайпрессовской техподдержке, ответ получил аж через неделю. И ответ этот несколько странен: он никак не совпадает с данными даташита. Суть проблемы вот в чем. Имеем аппаратную логику, которая считывает поток байт из OUT-ендпойнта. Где-то в процессе считывания может возникнуть прерывание. Эту ситуацию я изобразил на примерной временнОй диаграмме:

 

mistakenint3py.th.png

 

Что будет считано на шину данных по очередному импульсу считывания (nSLRD+nSLOE), когда пришло прерывание? Это будет байт статуса прерывания или все-таки очередной байт данных?

 

В техподдержке мне невнятно сказали, что статус прерывания считывается только по адресу команд (FIFOADR[2..0] = B"100"). В этом случае со считыванием данных вроде все должно быть хорошо. Но почему тогда в даташите нигде не говорится, что статус прерывания считывается именно по адресу FIFOADR[2..0] = B"100"? Написано просто: когда пришло прерывание, то статус байт прерывания выдается по импульсам считывания (nSLRD+SLOE). Вот что мы имеем в даташите (ревизия E):

 

(стр. 3)

When an interrupt occurs, the INT# pin will be asserted, and the corresponding bit will be set in the Interrupt Status Byte. The external master reads the Interrupt Status Byte by strobing SLRD/SLOE. This presents the Interrupt Status Byte on the lower portion of the data bus (FD[7:0]).

 

Т.е. считываем - получаем. Про адрес ничего не сказано.

 

(стр. 7)

An address of [1 0 0] on FIFOADR [2:0] will select the command interface. The command interface is used to write to and read from the SX2 registers and the Endpoint 0 buffer, as well as the descriptor RAM.

 

Опять же, ничего не говорится про статус прерывания.

 

Так как же оно на самом деле?

 

Подскажите, пожалуйста, про этот проклятый байт прерывания...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хм... Провел специальный эксперимент. Микроконтроллер обнаруживает ноль на линии INT#. Выставляет адрес FIFOADR[2..0] = 000b, считывает байт данных. Линия прерывания как была в нуле, так и остается. Тогда микроконтроллер выставляет адрес FIFOADR[2..0] = 100b, считывает байт данных. Линия прерывания уходит в единицу.

 

Похоже, можно верить сайпрессовской техподдержке... Неужели трудно было об этом в даташите написать? Заразы...

 

А микросхема у них превосходная :-) Допкомпонентов нужно мало, в работе проста (когда все необходимые шишки набьешь :-) скорость обеспечивает приличную. А со стороны PC я использую их CY4604 - USB Developer's uStudio v1.5.1.1. На первый взгляд там все просто, как дверь. Во всяком случае прилагаемые примеры откомпилировались без проблем, полученные exe-шники работают, необходимые мне 8 МБайт/сек дают свободно (процессор PC PIV-2.6GHz нагружается на 6-8%, Embedded-мама с VIA C3-1.3GHz - порядка 10-12%). А дальше - совершенствование.

 

Подскажите, пожалуйста, чем хорош драйвер USBIO.SYS по сравнению с CyUSB.sys из их Девелопер Студии?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста, чем хорош драйвер USBIO.SYS по сравнению с CyUSB.sys из их Девелопер Студии?

Что бы ответить на этот вопрос - нужно иметь исходники.

Не знаю как USBIO.SYS, но старый драйвер EZUSB.SYS - прокачивает 26мег в секунду. Единственный косяк, не соответствует спецификации энергосбережения и не поддерживает оверлаппед. К тому же в нём много прибабахов для 68013. А в CyUSB - их поделяли.

Вообще, есть мнение, что самый лучший драйвер для кипариса, получается из исходников EZUSB + пример из ДДК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Исходники там здоровые, черт побери... Без достаточного опыта разработки драйверов тяжко будет ковыряться. Наверное отложу на будущее.

 

Большое спасибо за информацию!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так. К сведению. Запустил свою новую плату на CY7C68001... :-)

 

Микросхема используется в асинхронном режиме. Как и положено, я не загружал ее под завязку быстродействия. Поэтому остановился на 160-ти наносекундном цикле выдачи данных. Работает аки часы швейцарские.

 

Молодца фирма Cypress! В отличие от примененной мною более года назад FTDI, сайпрессовские драйвера не приводят к RESET'у компьютера, не вызывают никаких проблем и сама микросхема проще в применении (да и стоит дешевле).

 

Теперь приступаю к углублению в вопросы программной "обвязки" со стороны компьютера. Пошерстю форум и, возможно, понаоткрываю кучу новых топиков! :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ситуевина такая. 68001 прилеплен к ПЛИСене. ЕЕПРОМа нет. ПЛИСина грузит ВИД, ПИД и ДИД (после прерывания SETUP) нумеруется хостом и вывешивает ENUMOK. Дрова EZUSB. Т.е. все ОК. При этом ендпоинты по умолчанию 4шт по 512байт (0х200) даблбуфер. Это я вижу в ЕЗ-мониторе. Т.е норма для ХайСпид. Если я начинаю их конфигурить ПЛИСиной через запись в EPxCFG(регистры 0х06...0х09) - оставляю 2 и 6 по 1024 даблбуфферинг, 4 и 8 убираю VALID=0 остальное по дефолту, то вижу что все равно присутствуют все 4-ре и размером 0х40 (64байт) - ФулСпид!!!! Лучше бы я их совсем не трогал! Никто не сталкивался? Чо за хрень такая? И как правильно их сконфигурить? Грузить весь Endpoint Configuration?? Через дескрипторы (регистр 0х30)? Софтом? Хелп, плз!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ситуевина такая. 68001 прилеплен к ПЛИСене. ЕЕПРОМа нет. ПЛИСина грузит ВИД, ПИД и ДИД (после прерывания SETUP) нумеруется хостом и вывешивает ENUMOK. Дрова EZUSB. Т.е. все ОК. При этом ендпоинты по умолчанию 4шт по 512байт (0х200) даблбуфер. Это я вижу в ЕЗ-мониторе. Т.е норма для ХайСпид. Если я начинаю их конфигурить ПЛИСиной через запись в EPxCFG(регистры 0х06...0х09) - оставляю 2 и 6 по 1024 даблбуфферинг, 4 и 8 убираю VALID=0 остальное по дефолту, то вижу что все равно присутствуют все 4-ре и размером 0х40 (64байт) - ФулСпид!!!! Лучше бы я их совсем не трогал! Никто не сталкивался? Чо за хрень такая? И как правильно их сконфигурить? Грузить весь Endpoint Configuration?? Через дескрипторы (регистр 0х30)? Софтом? Хелп, плз!!!

 

 

Динамическое конфигурирование сайпрессом не поддерживается. Это значит, что нужно сконфигурить микруху и сделать ренумерацию с соответствующими дескрипторами...

 

Молодца фирма Cypress! В отличие от примененной мною более года назад FTDI, сайпрессовские драйвера не приводят к RESET'у компьютера, не вызывают никаких проблем и сама микросхема проще в применении (да и стоит дешевле).

 

Видимо вы не работали с драйвером EZUSB.SYS...

Всякий раз при попытке AbortPipe не существующего пайпа - происходил мгновенный выброс из винды...

Меня трижды выкинуло, пока я понял в чём дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Динамическое конфигурирование сайпрессом не поддерживается. Это значит, что нужно сконфигурить микруху и сделать ренумерацию с соответствующими дескрипторами...

 

В DS указанно такое. Но как мне правильно (аппаратно) сконфигурить ендпоинты.

 

Если я правильно понял нуна залить конфигурацию ЕР-тов после СЕТАПа, а потом залить дескрипторы

или залить дескрипторы с прописанными ЕР??? А потом я получу ЕНУМОК?!

 

Т.о. жду прерывания с СЕТАПом, потом я гружу все конфиги и настройки. Потом гружу регистр 0х30 с дескрипторами. И получаю прерывание ЕНУМОК. ??! Правильно?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подскажите, пожалуйста, в драйвере CyUSB.sys имеется возможность какой-нибудь командой сбросить буферы данных драйвера?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 Trashy. SX2. Гружу регистры 06-09 (выключаю 4 и 8-й ЕР) что сначала, что после дескрипторов одна кухня - в ЕЗМОНе вижу все четыре точки. В чем может быть трабла? Зачем делать FLUSH FIFO?

Заранее благодарен!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вы не читали CY3682 Design Notes (на сайте есть), там описана процедура инициализации чипа. Сначала ждешь прерывания SETUP, затем грузишь регистры, затем дескрипторы. После этого винда енумерует устройство, если есть подходящий драйвер.

У меня еще не работает устройство, я пока на пути... но инициализация проходит.

Тоже нет Епрома, работаю с ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вы не читали CY3682 Design Notes (на сайте есть), там описана процедура инициализации чипа. Сначала ждешь прерывания SETUP, затем грузишь регистры, затем дескрипторы. После этого винда енумерует устройство, если есть подходящий драйвер.

У меня еще не работает устройство, я пока на пути... но инициализация проходит.

Тоже нет Епрома, работаю с ПЛИС.

Читал. Написано грузим конфиг. Что именно ??? Потом дескрипторы. Какие??? Потом размер- и все!

Для моей задачи устраивает почти все по дефолту, только надо выключить два Ер, а два других увеличить в два раза.

Поэтому после РЕДИ, гружу 06-09 - выключаю ЕР 4 и 8. Потом дескрипторы 6 байт, ловлю ЕНУМОК. ПК видит девайс и раньше видел, но два ЕР присутствуют- опять вижу в ЕЗМОНе.

Можно только дескрипторы загрузить и все. Кстати когда до или потом грузишь ЕРхКОНФ размеры буферов изменяются с 512 до 64. Что за штука???

Почему они не выключаются я им ВАЛИД убираю!!!

 

((Потом я должен увидеть ХСГРАНТ и настроить размер буферов.))

 

Или для загрузки интерфейса (до загрузки дескрипторов) я все равно должен загрузить все регистры с 0х01 поп 0х2Е.???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю, что для того чтобы получить только 2 ендпоинта, вместо 4-х, нужно переписать полную таблицу дескрипторов для вашего случая (2 ендпоинта по 1024 байта) по адресу 300. Винда определяет наличие и конфигурацию ендпоинтов по этой информации, а у вас по умолчанию там записана конфигурация для 4-х ендпоинтов. На последней странице даташита описаны default descriptors, а то что значат эти цифры можно найти в спецификации на шину USB2.0.

Надеюсь, что вам помог.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...