Полная версия этой страницы:
USB
AndreyS
Oct 20 2009, 20:15
Цитата(PDA @ Oct 20 2009, 12:19)

Добрый день!
Работаю с платой KNJN FX2 FPGA boards (
http://www.knjn.com/FPGA-FX2.html ) версия Xylo-L , на которой для обмена по USB используется Cypress CY7C68013. Столкнулся с отсутствием в документации файла ucf - сейчас меня интересует соотвествие пинов FPGA и CY7C68013. Если у кого есть данные, поделитесь пожалуйста. Может у кого найдется разводка платы или эл.-принципиальная схема?
Добрый день.
Ради интереса сходил по вашей ссылке. Вы внимательно изучали тот сайт??
Вот тут есть ссылка на этот документКонкретно страница 40.
Я думаю что там есть все что вам нужно.
AndreyS, спасибо, но на 40 странице часть схемы платы saxo, а не xylo. И там нет данных о пинах ПЛИС.
Решение найдено - нашлась более полная версия документации, а с ней и нужный файл.
Может кому пригодиться.
Код
NET "clk" LOC = "p181" | IOSTANDARD = LVCMOS33;
NET "FX2_FD[0]" LOC = "p192" | IOSTANDARD = LVCMOS33;
NET "FX2_FD[1]" LOC = "p187" | IOSTANDARD = LVCMOS33;
NET "FX2_FD[2]" LOC = "p189" | IOSTANDARD = LVCMOS33;
NET "FX2_FD[3]" LOC = "p190" | IOSTANDARD = LVCMOS33;
NET "FX2_FD[4]" LOC = "p172" | IOSTANDARD = LVCMOS33;
NET "FX2_FD[5]" LOC = "p171" | IOSTANDARD = LVCMOS33;
NET "FX2_FD[6]" LOC = "p168" | IOSTANDARD = LVCMOS33;
NET "FX2_FD[7]" LOC = "p167" | IOSTANDARD = LVCMOS33;
NET "FX2_flags[0]" LOC = "p169" | IOSTANDARD = LVCMOS33;
NET "FX2_flags[1]" LOC = "p174" | IOSTANDARD = LVCMOS33;
NET "FX2_flags[2]" LOC = "p175" | IOSTANDARD = LVCMOS33;
NET "FX2_PA_2" LOC = "p178" | IOSTANDARD = LVCMOS33;
NET "FX2_PA_3" LOC = "p179" | IOSTANDARD = LVCMOS33;
NET "FX2_PA_4" LOC = "p180" | IOSTANDARD = LVCMOS33;
NET "FX2_PA_5" LOC = "p161" | IOSTANDARD = LVCMOS33;
NET "FX2_PA_6" LOC = "p160" | IOSTANDARD = LVCMOS33;
NET "FX2_PA_7" LOC = "p159" | IOSTANDARD = LVCMOS33;
NET "FX2_SLRD" LOC = "p185" | IOSTANDARD = LVCMOS33;
NET "FX2_SLWR" LOC = "p186" | IOSTANDARD = LVCMOS33;
NET "LED[0]" LOC = "p146" | IOSTANDARD = LVCMOS33;
NET "LED[1]" LOC = "p147" | IOSTANDARD = LVCMOS33;
NET "pushbutton" LOC = "p148" | IOSTANDARD = LVCMOS33;
NET "RxD" LOC = "p193" | IOSTANDARD = LVCMOS33;
NET "TxD" LOC = "p196" | IOSTANDARD = LVCMOS33;
NET "Ethernet_RDp" LOC = "p150" | IOSTANDARD = LVCMOS33;
NET "Ethernet_TDm" LOC = "p152" | IOSTANDARD = LVCMOS33;
NET "Ethernet_TDp" LOC = "p151" | IOSTANDARD = LVCMOS33;
Вопрос, наверное, больше к PDA, но может кто-то еще работает с платками от KNJN....Очень бы хотелось посмотреть на примерчики из startup-kit от Xylo или Saxo... Выложите, плс либо в закрома, либо на рапиду....Буду чрезвычайно признателен...
Цитата(janus @ Oct 25 2009, 11:45)

Вопрос, наверное, больше к PDA, но может кто-то еще работает с платками от KNJN....Очень бы хотелось посмотреть на примерчики из startup-kit от Xylo или Saxo... Выложите, плс либо в закрома, либо на рапиду....Буду чрезвычайно признателен...
выложил примеры из sdk для обеих плат. Только эти примеры мало пригодны для использования в реальных приложениях - в основном только для проверки работоспособности и демонстрации. Сейчас делаю свой приемопередатчик.
Цитата(PDA @ Oct 26 2009, 12:00)

Сейчас делаю свой приемопередатчик.
Свой блок в ПЛИС, управляющий обменом данных данных по USB с помощью CY.
Цитата(PDA @ Oct 26 2009, 11:00)

выложил примеры из sdk для обеих плат.
Спасибо.
spindelsinn
Oct 29 2009, 12:56
такой вопрос.
Нужно реализовать демодулятор, подключенный к компьютеру через USB. Демодулятор выдает DVB поток на ПК и управляется по шине I2C. Можно ли при помощи CY7C68013A реализовать такую схему, при которой устройство по USB выдавало информацию и управлялось? То есть CY7C68013A был подключен как к шине данных так и к I2C, различал эти сигналы и отсылал в нужном направлении.
Serg_Sm
Oct 30 2009, 06:51
Какого объема DVB-поток?
В общем случае такое сделать можно, если данных идет не более 30-40Мбайт/с. Желательно добавить к CY7C68013A внешнюю FIFO.
spindelsinn
Oct 30 2009, 07:43
в параллельном режиме частота тактового сигнала примерно 5МГц, так что должно хватить.
А каким образом это реализуется?
Задам здесь свой вопрос.
Режим: Slave FIFO, Synchronous Mode, AUTOOUT, EP6, Double Buffering, Bulk type, size 512, WordWide - 16 bits FD[15:0].
На другом конце 68013 висит Спартан-3. Ну и он является мастером для Slave FIFO. Identify использую, чтобы тупо смотреть временные диаграммы ФИФО интерфейса внутри FPGA.
CyConsole вполне себе нормально видит мой девайс.
Провожу тест номер раз: Из CyConsole посылаю, к примеру, 7 байт. Флаг not-Empty сразу появляется, читаю данные из FIFO. Какие-то непонятные данные читаются из FIFO.
Провожу тест номер два: Полностью перегружаю девайс. Т.е. всё с нуля.
Из CyConsole посылаю 512 байт. Флаг not-Empty сразу появляется, читаю данные из FIFO. Вижу только первые 2 байта. Посылаю снова 512 байт. И снова 2 байта. Первые 2 байта 512 байтовой посылки каким-то образом появляются, а остального нету.
Причем эти 2 байта висят в течении всего времени чтения из FIFO.
Т.е. эти 2 байта записываются во все адреса буфера.
Чтение организовано просто. Флаг empty задерживается на один такт и присваивается флагу чтения.
Что-то, где-то не так.
Дайте наводку, please.
Вернулся к USB - скорость предачи данных около 70 кБайт/сек недопустима. Использую СН7С68013А EzUSB. Причем тормозит работу медленная функция чтения
Код
DWORD USB_BulkRead(DWORD pipe, void* buffer, DWORD buffersize)
{
DWORD nBytes;
assert(buffersize<0x10000);
DeviceIoControl(XyloDeviceHandle, 0x22204E, &pipe, sizeof(pipe), buffer, buffersize, &nBytes, NULL);
return nBytes;
}
Сравнивая скорости, опубликованные другими до 45Мб/с, начал искать проблему.
Вот тут дневник одного разработчика
http://koonlab.com/MultiChannelI2S/MultiChannelI2S.html - у него тоже максимальная скорость была 2Мб/с - это тоже меньше 25-45Мб/с. Решения он, к сожалению, не нашел.
Какие у вас получались скорости передачи, используя эту микросхему?
Были ли особенности у программы(или драйвера) на компе, для увеличения скорости обмена?
Подскажите направления куда копать? Возможно стоит попробовать драйвер CyUSB?
update: кто искал пример связи плиса с микросхемой в режиме слейва - есть исходники по ссылке выше.
Проверял скорость передачи данных и на EzUSB драйвере и на CyUSB драйвере - передача 1МБ за чуть более 4 секунд.
Проект плис построен на автомате: (использую только FIFO2 - как пылесос читает все данные что видит)
1 пока EmptyFlagEP2 = true ожидаем данные, иначе переход на чтение данных ,
2 пока EmptyFlagEP2 = false читаем данные, иначе переход на ожидание данных ,
Программа на С++ выдает в СН7С68013А данные пачками по 32Байта и замеряет скорость передачи 1 МБ.
Уж очень всё медленно...
Konst_777
Feb 2 2010, 15:12
Цитата(PDA @ Feb 2 2010, 16:12)

Проверял скорость передачи данных и на EzUSB драйвере и на CyUSB драйвере - передача 1МБ за чуть более 4 секунд.
...
Программа на С++ выдает в СН7С68013А данные пачками по 32Байта и замеряет скорость передачи 1 МБ.
Уж очень всё медленно...
Попробуйте выдавать в CY7C68013A данные пачками по 32
МБ и измерить скорость передачи 32
МБ.
Может быть Вам поможет
Archive.rar из темы
прием данных из АЦП в ПК по USB, чтобы убедится в существовании более высоких скоростей обмена для FX2LP.
pergunt
Mar 18 2010, 08:03
Уважаемые! Работаем с CY7C68013A в режиме asynhronous Slave Fifo. Один энд-пойнт на запись и один на чтение данных.
Заметил следующее, что когда я гружу прошивку в чип (Сайпрес) посредством Cypress USB Console, то в окне Device Configurations (1) - в столбце Max Power написано 0x32(100mA).
Если я беру чужую прошивку (из какого-то примера), то в этом столбце написано 0х82(260mA).
Нашел, что в файле dscr.a51 для прошивки есть такие строки:
HighSpeedConfigDscr:
db DSCR_CONFIG_LEN ;; Descriptor length
db DSCR_CONFIG ;; Descriptor type
db (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) mod 256 ;; Total Length (LSB)
db (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) / 256 ;; Total Length (MSB)
db 1 ;; Number of interfaces
db 1 ;; Configuration number
db 0 ;; Configuration string
db 10100000b ;; Attributes (b7 - buspwr, b6 - selfpwr, b5 - rwu)
db 50 ;; Power requirement (div 2 ma)
Этот файл просто описательный файл для чипа?
Или через него тоже меняются параметры у Сайпреса?
Тогда если я напишу в нем 150 в строке Power Requirements - станет ли больше возиожность потребления тока Сайпресом?
Где можно найти более подробное описание дескрипторов для этого файла (что означают числа каждой из строк)?
Konst_777
Mar 19 2010, 11:48
Цитата(pergunt @ Mar 18 2010, 11:03)

Этот файл просто описательный файл для чипа?
Или через него тоже меняются параметры у Сайпреса?
Таким образом хост контроллер узнает о характеристиках устройства USB
Цитата(pergunt @ Mar 18 2010, 11:03)

Тогда если я напишу в нем 150 в строке Power Requirements - станет ли больше возиожность потребления тока Сайпресом?
Точнее вот так: если Ваше устройство USB потребляет от шины Vbus 300 мА, то вы обязаны в поле MaxPower дескриптора конфигурации (Configuration Descriptor) передать значение 150 ("150 в строке Power Requirements")
Цитата(pergunt @ Mar 18 2010, 11:03)

Где можно найти более подробное описание дескрипторов для этого файла (что означают числа каждой из строк)?
Don Anderson "System Architecture (USB 2.0)":
Chapter 19 "USB Device Configuration"USB 2.0 Specification :
"9.6 Standard USB Descriptor Definitions"Jan Axelson "USB Complete Third Edition":
"4. Enumeration: How the Host Learns about Devices"Павел Агуров "Интерфейс USB. Практика использования и программирования ":
"4.1.3 Дескрипторы устройства"
_Stalker_
Apr 8 2010, 12:26
Как организовать поток в ПК из устройства, который принимает данные и записывает их в файл (CY7C68013a, CyAPI, CyApi.lib, endpoint типа bulk)?
я пытаюсь писать в VS, кое какие примеры нашел, буду рад любой помощи.
kevin2
Oct 11 2010, 11:58
Ребят, помогите? Есть устройство, но с недавнего времени, я так и не понял почему и когда началось VID стал 0000 а PID так и остался 8613... Соответвенно Device unknown... Что сделать можно?
Konst_777
Oct 12 2010, 10:40
Цитата(kevin2 @ Oct 11 2010, 14:58)

...VID стал 0000 а PID так и остался 8613... Соответвенно Device unknown... Что сделать можно?
Если есть
файл прошивки, то можно
перепрошить EEPROM.
kevin2
Oct 18 2010, 15:18
Попробую рассказать чуть подробнее. Это программатор UPA-USB. Однажды у меня он сбойнул, или я его чем-то пожег, не помню уже, давно было. Перестал он работать. Я пошел и купил новый CY7C86013A. Перепаял и он благополучно работал дальше. Ничего не перешивал. Просто перепаял чип интерфейса. А сейчас на двух программаторах что лежат у меня на столе наблюдаю такое. В совпадения я не верю. Пробовал их подключать к РАЗНЫМ компьютерам. Не помогает ничего...
Sun525
Oct 19 2010, 09:19
kevin2
Повредилось содержимое 24Сxx?
kevin2
Oct 19 2010, 10:04
Прошивку считал, попробую посмотреть, может чего пойму

новое это все для меня
kevin2
Oct 19 2010, 13:18
Починил...
Похоже что именно софт производителя если считает, что устройство не оригинальное трет VID в атмеле 24С128. Идиотизм полный, у меня устройство купленное у производителя. На письма он не отвечает.
Просто прописал VID в 2-3 байты и все поднялось, правда софт (предыдущая версия) заставил перепрошить еепром, но заработало. Попробовал вставить опять в комп где обновленный софт - та же фигня, сразу еепром испортился. Хорошо что у меня 2 таких программатора, первый я починил с помощью Extrapic programmer (ооооочень долго он работает через usb2com), а дельше экспериментировал уже на починенном, пишет он атмел мгновенно.
Konst_777
Oct 19 2010, 17:48
Цитата(kevin2 @ Oct 19 2010, 16:18)

...Похоже что именно софт производителя если считает, что устройство не оригинальное трет VID в атмеле 24С128...
А может это не софт производителя, а Вы стали первым владельцем вируса FX2LP_Killer? Попробуйте запретить запись в EEPROM. Ведь Вы же дружите с паяльником.

Станет ясно, кто портит EEPROM. А если софт производителя затаится, то можно и с помощью программного анализатора USB протокола посмотреть.
kevin2
Oct 20 2010, 05:31
Снес последнюю версию софта, поставил предыдущую - полет нормальный. Так что автор софта неадекватен, я конечно его тоже понимаю где-то, но не до такой же степени быть параноиком.
toweroff
Nov 4 2010, 18:27
Подскажите с такой проблемой
1. Под руками оказалась только AT24C256 - вроде ж должно быть без разницы? А0 висит на VCC, но прошивание EEPROM средствами CyConsole, FxEEPROM приводит ни к чему (при перезапуске супресс опять как дефолтный), хотя они и говорят, что все ок. Заливание прошивки напрямую в RAM вызывает нормальную реинумерацию, но возникает пункт 2.
2. Установка драйвера для Streamer. Прописал в inf VID_04B4, PID_1003. При установке на реальной ОС WinXP x86 дает ошибка 10, при установке под VMWare7 - краш вари. Хотя если подсовывать тот же инф для дефолтных VID_04B4&PID_8613 (в inf прописаны оба девайса), то драйвер устанавливается и всякие CyConsole работают нормально. При установке драйвера под Win7 x64, несмотря на утверждение в мануале о работоспособности под этой ОС, винда драйвер ставит, но отключает как неподписанный
ЗЫ. Софт установил Cypress Suite USB 3.4.2
Konst_777
Nov 4 2010, 19:07
Цитата(toweroff @ Nov 4 2010, 22:27)

Подскажите с такой проблемой
1. Под руками оказалась только AT24C256 - вроде ж должно быть без разницы? А0 висит на VCC, но прошивание EEPROM средствами CyConsole, FxEEPROM приводит ни к чему (при перезапуске супресс опять как дефолтный), хотя они и говорят, что все ок...
Что такое "FxEEPROM"? В CyConsole для прошивки AT24C256 нужно использовать "Lg EEPROM".
А, понял, "FxEEPROM" - это пример из папки "\CyAPI\examples\FxEEPROM".
Выложите схему подключения EEPROM. Ну, или сравните со схемой подключения в теме
Проблема с cy7c68013a.
Цитата(toweroff @ Nov 4 2010, 22:27)

... Заливание прошивки напрямую в RAM вызывает нормальную реинумерацию, но возникает пункт 2.
Проверьте, не используете ли вы драйвер Win7 x64 или WinXP x64 для WinXP x86. Судя по
описанию кода 10, Вы используете не тот драйвер. Хотя, как же не тот, когда CyConsole и FxEEPROM у Вас работают. Попробуйте принудительно установить (обновить) драйвер для Streamer.
Для Win7 x64 смотрите тему
Проблема CyUSB.sys и 64-х битных Windows.
toweroff
Nov 4 2010, 19:24
Цитата(Konst_777 @ Nov 4 2010, 22:07)

Что такое "FxEEPROM"? В CyConsole для прошивки AT24C256 нужно использовать "Lg EEPROM".
Выложите схему подключения EEPROM. Ну, или сравните со схемой подключения в теме
Проблема с cy7c68013a.
FxEEPROM - я так понял, еще одна утилита для прошивки. Но Lg EEPROM тоже пользовался, не помогает
Подключение в порядке, по крайней мере CY7C68001 на той же плате нормально поднимался
Цитата(Konst_777 @ Nov 4 2010, 22:07)

Проверьте, не используете ли вы драйвер Win7 x64 или WinXP x64 для WinXP x86.
точно нет. Но секции [Device], [Device.NT], [Device.NTx86] и [Device.NTamd64] там все одинаковые, во всех присутствует описание вид-пидов и комментарии убраны
Может тут собака порылась?
на всякий случай -
Нажмите для просмотра прикрепленного файлаЦитата(Konst_777 @ Nov 4 2010, 22:07)

Судя по
описанию кода 10, Вы используете не тот драйвер. Для Win7 x64 смотрите тему
Проблема CyUSB.sys и 64-х битных Windows.спасибо, буду посмотреть
toweroff
Nov 4 2010, 21:41
добавлю еще - как только VID_04B4&PID_1003 - вешалка или ошибка установки. В других комбинациях - порядок... мистика
Konst_777
Nov 4 2010, 22:03
Цитата(toweroff @ Nov 4 2010, 22:24)

...Подключение в порядке, по крайней мере CY7C68001 на той же плате нормально поднимался...
А, так Вы
перепаивали CY7C68013A вместо CY7C68001. Тогда проверьте все связи FX2LP с EEPROM (адресация, запрет программирования, резисторы подтяжки на линиях SCL и SDA).
Цитата(toweroff @ Nov 5 2010, 00:41)

добавлю еще - как только VID_04B4&PID_1003 - вешалка или ошибка установки. В других комбинациях - порядок... мистика

Столкнулся с такими же проблемами для Streamer, как и у Вас. Уже почти сдался. Но, после Вашего сообщения решил посмотреть еще раз. И нашел в чем дело

. Этот самый Streamer во время работы что-то записывает в EEPROM. А у Вас и у меня EEPROM отключен. Ну, а дальше понятно.
Выкладываю вариант firmware с отключенной записью в EEPROM. Вообще-то, я там много чего отключил. Будет желание, посмотрите.
toweroff
Nov 4 2010, 22:46
Цитата(Konst_777 @ Nov 5 2010, 01:03)

запрет программирования
аааааааа )))))) нулевка запаяна с WP на VCC
сейчас проверю
PS. Кстати, а как вывести 68013 опять к дефолту, без отрывания ног от прошитой EEPROM?
Konst_777
Nov 4 2010, 23:03
Цитата(toweroff @ Nov 5 2010, 01:46)

...Кстати, а как вывести 68013 опять к дефолту, без отрывания ног от прошитой EEPROM?
Рекомендуемую схему подключения EEPROM можно посмотреть в теме
Проблема с cy7c68013a. А обсуждение такого решения в теме
Использование EEPROM для CY7C68013A (FX2LP).
Все. Уползаю спать.
toweroff
Nov 5 2010, 00:01
Konst_777, большое спасибо, драйвер встал как надо. Теперь буду разбираться с проектом вообще
Но пока, похоже, Streamer не видит девайс... буду разбираться с проблемой
Цитата(Konst_777 @ Nov 5 2010, 02:03)

Рекомендуемую схему подключения EEPROM можно посмотреть в теме
Проблема с cy7c68013a. А обсуждение такого решения в теме
Использование EEPROM для CY7C68013A (FX2LP).
нет-нет, это мой косяк, специально на плате подтянул Write Protect к питанию, а потом постоянно на него наступал

Итак, в булку Transfer Rate показывает 43800 КБайт/с, что есть хорошо и косяков с платой нет. Теперь попробую все это отконфигурить под свой проект и заточить под libusb
Konst_777, еще раз большое спасибо!
toweroff
Nov 5 2010, 13:17
А вот еще проблемка интересная - теперь уже по поводу интерфейса FX2--Master в режиме FX2 - Slave FIFO
С SX2 понятно - событие, ловим прерывание, спрашиваем, что случилось, что-то делаем.
Тут как такового прерывания к мастеру нет. Как счастливые пользователи FX2 и контроллера с обычной шиной (A, D, /W, /R, /CS) выгребают данные / отправляют данные, чтобы контроллер мог заняться чем-то еще, кроме как вертеть в цикле FIFOADDR и проверять флаги?
уточню:
1. Плата разрабатывалась под 68001, с (может быть - токопотребление свою роль играет) заменой на 68013А. Документация изучалась для 68001, для 68013 бегло, в этой или в параллельной ветке по супрессу указывалась пин-в-пин замена, поэтому дальше копать не стал
2. Т.к. большинство алгоритмов было заточено под прерывание от слэйва, а с 68013 это аппаратно, похоже, не получится, насколько критично, с точки зрения производительности, будет выставлять (и сбрасывать) этот флаг в 68013 (имеется ввиду PA1/INT1#) внутри FX2? Похоже, для FIFO нет прерывания для мастера, EP0 вообще должен обрабатывать только супресс
Konst_777
Nov 5 2010, 18:18
Цитата(toweroff @ Nov 5 2010, 17:17)

...С SX2 понятно - событие, ловим прерывание, спрашиваем, что случилось, что-то делаем...
То же самое и для FX2LP: конфигурируем, например, FLAGA (а есть еще FLAGB, FLAGC и FLAGD) в Fixed mode, чтобы он устанавливался в нужное состояние, когда выбранное OUT FIFO непустое. Тогда FLAGA и будет Вашим прерыванием. И даже не нужно спрашивать, что случилось. Сразу вычитывайте OUT FIFO, пока оно не станет пустым. И не нужно "вертеть в цикле FIFOADDR".
toweroff
Nov 5 2010, 22:28
Цитата(Konst_777 @ Nov 5 2010, 21:18)

То же самое и для FX2LP: конфигурируем, например, FLAGA (а есть еще FLAGB, FLAGC и FLAGD) в Fixed mode, чтобы он устанавливался в нужное состояние, когда выбранное OUT FIFO непустое. Тогда FLAGA и будет Вашим прерыванием. И даже не нужно спрашивать, что случилось. Сразу вычитывайте OUT FIFO, пока оно не станет пустым. И не нужно "вертеть в цикле FIFOADDR".
это понятно

я имею ввиду ситуацию, когда нет возможности сделать прервание на фронт произвольной ноги контроллера
прерывание контроллера уже заведено на ногу 41 FX2 (т.е. SX2 - разрабатывалось для него) в корпусе SSOP56
вся трабла в том, что дока по 13А читалась бегло, что порождает кучу софтверных и, скорее всего, хардварных проблем
Konst_777
Nov 6 2010, 06:52
Цитата(toweroff @ Nov 6 2010, 01:28)

...вся трабла в том, что дока по 13А читалась бегло, что порождает кучу софтверных и, скорее всего, хардварных проблем
Да ладно

Ну, перешла печатная плата Вашего модуля из разряда "боевой" в разряд макетной. Что, это в первый раз, что ли

. Решите все вопросы с помощью этой платы, скальпеля и паяльника. А, после получения работающего модуля, переразведете плату
toweroff
Nov 6 2010, 09:12
Цитата(Konst_777 @ Nov 6 2010, 09:52)

Да ладно

Ну, перешла печатная плата Вашего модуля из разряда "боевой" в разряд макетной. Что, это в первый раз, что ли

. Решите все вопросы с помощью этой платы, скальпеля и паяльника. А, после получения работающего модуля, переразведете плату

ну только и остается

зато можно попробовать реализовать еще одну фичу - засунуть прошивку EEPROM в контроллер и, фактически, выступать для FX2 в ее роли. Дабы никто не испортил загрузчик супресса
Konst_777
Nov 6 2010, 12:32
Цитата(toweroff @ Nov 6 2010, 13:12)

... засунуть прошивку EEPROM в контроллер и, фактически, выступать для FX2 в ее роли...
Только, тогда и Reset должен поступать на FX2 от контролера. И, если Reset выдается на контроллер, то он должен формироваться и для FX2 (предусмотреть подтяжку к нулю питания вывода Reset для FX2).
А какой контроллер Вы используете? И какую скорость обмена по USB планируете получить?
toweroff
Nov 6 2010, 14:24
Цитата(Konst_777 @ Nov 6 2010, 15:32)

Только, тогда и Reset должен поступать на FX2 от контролера. И, если Reset выдается на контроллер, то он должен формироваться и для FX2 (предусмотреть подтяжку к нулю питания вывода Reset для FX2).
А какой контроллер Вы используете? И какую скорость обмена по USB планируете получить?
с ресетом понятно, изначально так и закладывалось, что управляться будет контроллером
используется ARM LPC2468, скорость вполне устроит ~30МБайт/с
кстати, насчет прерываний. У меня, фактически, можно без них обойтись, софт тупо ждет пакет, потом либо гонит данные в себя, либо из себя, в известном объеме. Потом опять ждет. То есть в этой реализации можно обойтись без прерываний, вопрос был, скорее, на будущее
Konst_777
Nov 6 2010, 17:47
Цитата(toweroff @ Nov 6 2010, 17:24)

... скорость вполне устроит ~30МБайт/с...
То есть, будете использовать для Slave FIFO синхронные чтение и запись. Скорость асинхронного чтения Slave FIFO не более 20 МБайт/с, а записи и того меньше.
toweroff
Nov 6 2010, 20:22
Цитата(Konst_777 @ Nov 6 2010, 20:47)

То есть, будете использовать для Slave FIFO синхронные чтение и запись. Скорость асинхронного чтения Slave FIFO не более 20 МБайт/с, а записи и того меньше.
ой.. пугаете
откуда у контроллера синхронный интерфейс? асинхронно будет...
А откуда подобные цифры? На каком девайсе производился замер?
Кстати, есть еще один вопрос. Если контроллер занят обработкой полученных данных и не может забрать из full FIFO, FX2 корректно это отработает?
Konst_777
Nov 7 2010, 08:52
Цитата(toweroff @ Nov 6 2010, 23:22)

...А откуда подобные цифры?...
Из
Datasheet. Разделы "10.8 Slave FIFO Asynchronous Read" и "10.10 Slave FIFO Asynchronous Write".
Цитата(toweroff @ Nov 6 2010, 23:22)

...Кстати, есть еще один вопрос. Если контроллер занят обработкой полученных данных и не может забрать из full FIFO, FX2 корректно это отработает?
FX2 отработает корректно: будет отсылать NAK хост контроллеру USB. Таймауты обмена по USB задает Ваша программа для ПЭВМ.
Есть устройство "
AD9959/PCB evaluation board" в котором для управления DDS используется CY7C68013. К устройству есть софт для управления по USB. Есть пакеты снятые USB Logger в режиме настройки. Нужно реализовать свою программу управления, которая формирует необходимые пакеты.
- Как лучше подобраться к решению вопроса?
- Можно ли не переделывать драйвер?
- С чего лучше начать?
Есть много ссылок на использование пакета EZ-USB Development Tools V2.61.700, но на сайте Cypress его не нашел. Или может указанный пакет не сильно поможет?
toweroff
Nov 8 2010, 13:18
Что-то никак не дрыгаются флаги
Отконфигурированы так: EP2 - bulk OUT 512 (x4), EP6 - bulk IN 512 x4, флаги:
PINFLAGSAB = 0xE0; // FLAGB - EP6FF
PINFLAGSCD = 0x08; // FLAGC - EP2EF
в результате флаги не дрыгаются никак (FLAGB - 1, FLAGC - 0). Пробовал отсылать в точку EP2 пакеты и меньше 512 байт, и больше, и забить фсю FIFO - 2048 байт.
Дескриптор точно в порядке, перепроверял не один раз
Драйвер пользуется libusb - может тут что-то не в порядке? Может супресс любит только свой драйвер?
проект для FX2 базируется на этом
Manual Mode Operation of EZ-USB FX2LP™ in GPIF and Slave FIFO Configuration
toweroff
Nov 8 2010, 18:49
Цитата(toweroff @ Nov 8 2010, 16:18)

Что-то никак не дрыгаются флаги
Отконфигурированы так: EP2 - bulk OUT 512 (x4), EP6 - bulk IN 512 x4, флаги:
PINFLAGSAB = 0xE0; // FLAGB - EP6FF
PINFLAGSCD = 0x08; // FLAGC - EP2EF
в результате флаги не дрыгаются никак (FLAGB - 1, FLAGC - 0). Пробовал отсылать в точку EP2 пакеты и меньше 512 байт, и больше, и забить фсю FIFO - 2048 байт.
Дескриптор точно в порядке, перепроверял не один раз
Драйвер пользуется libusb - может тут что-то не в порядке? Может супресс любит только свой драйвер?
проект для FX2 базируется на этом
Manual Mode Operation of EZ-USB FX2LP™ in GPIF and Slave FIFO Configurationпроблема снята - криворукий копипаст называется
Но появился новый проблем. Отсылаю в точку 4 байта. Точка отконфигурирована с WORDWIDE=1, т.е. 16 бит
По идее, я в асинхронном режиме должен забрать эти 4 байта за две шинных операции, однако флаг FIFOEMPTY устанавливается уже после первого чтения FIFO. При этом софт на ПК говорит, что все 4 байта в точку доставлены. Где могут быть грабли?
ЗЫ. Младшая часть U32 с ПК доставлена корректно
toweroff
Nov 9 2010, 18:15
В общем ситуация такая: отправляю 512/1024/... и тд, кратно размеру точки, - все в порядке. Как только меньше - считываю только два байта (при WORDWIDE=1 флаг EPxEF устанавливается после одной шинной операции, при WORDWIDE=0 - после двух)
Так что же теперь - вне зависимости ни от чего гнать 512 байт вместо нужных, например, 16-20?
Konst_777
Nov 9 2010, 19:13
Цитата(toweroff @ Nov 9 2010, 21:15)

...Так что же теперь - вне зависимости ни от чего гнать 512 байт вместо нужных, например, 16-20?

Попробуйте выдавать на два байта больше. Или выдавать за коротким пакетом еще и пустой пакет. Ну и "погуглить" в интернете, есть ли какие-то особенности у libusb.sys.
toweroff
Nov 9 2010, 19:44
Цитата(Konst_777 @ Nov 9 2010, 22:13)

Попробуйте выдавать на два байта больше. Или выдавать за коротким пакетом еще и пустой пакет. Ну и "погуглить" в интернете, есть ли какие-то особенности у libusb.sys.
насчет libusb - тот же проект был под внутренний USB модуль LPC2468, все работало как часы
просто захотелось бОльшей скорости, поэтому был выбран интерфейс FX2
toweroff
Nov 10 2010, 23:36
Не принимаю данные с точки IN. TraceUSB говорит, что пакет есть, но данных ноль, хотя длина пакета указывается корректно - 0х200
может что наинитил не то...
Код
void TD_Init( void )
{ // Called once at startup
SYNCDELAY; //
REVCTL=0x03;
SYNCDELAY; //
CPUCS = 0x10; // CLKSPD[1:0]=10, for 48MHz operation, output CLKOUT
SYNCDELAY; //
IFCONFIG = 0xCB; // for async
SYNCDELAY; //
PORTACFG = 0x40; // FLAGD is /CHIPSELECT
// EP2 512 BULK OUT 4x
SYNCDELAY; // see TRM section 15.14
EP2CFG = 0xA0; // BUF[1:0]=00 for 4x buffering
// EP6 512 BULK IN 4x
SYNCDELAY; //
EP6CFG = 0xE0; // BUF[1:0]=00 for 4x buffering
// EP4 and EP8 are not used in this implementation...
SYNCDELAY; //
EP4CFG = 0x20; // clear valid bit
SYNCDELAY; //
EP8CFG = 0x60; // clear valid bit
SYNCDELAY;
FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions
SYNCDELAY; // see TRM section 15.14
FIFORESET = 0x82; // reset, FIFO 2
SYNCDELAY; // see TRM section 15.14
FIFORESET = 0x84; // reset, FIFO 4
SYNCDELAY; // see TRM section 15.14
FIFORESET = 0x86; // reset, FIFO 6
SYNCDELAY; //
FIFORESET = 0x88; // reset, FIFO 8
SYNCDELAY; // see TRM section 15.14
FIFORESET = 0x00; // deactivate NAK-ALL
SYNCDELAY; //
OUTPKTEND = 0x82;
SYNCDELAY; //
OUTPKTEND = 0x82;
SYNCDELAY; //
OUTPKTEND = 0x82;
SYNCDELAY; //
OUTPKTEND = 0x82;
SYNCDELAY; //
EP2FIFOCFG = 0x11; // AUTOOUT=1, WORDWIDE=1
SYNCDELAY; //
EP6FIFOCFG = 0x0D; // AUTOIN=1, WORDWIDE=1
SYNCDELAY;
EP6AUTOINLENH = 0x02;
SYNCDELAY;
EP6AUTOINLENL = 0x00;
SYNCDELAY;
PINFLAGSAB = 0xE0; // FLAGA - indexed, FLAGB - EP6FF
SYNCDELAY;
PINFLAGSCD = 0x08; // FLAGC - EP2EF, FLAGD - indexed
SYNCDELAY;
FIFOPINPOLAR = 0x00;
SYNCDELAY;
}
с другими объемами передачи то же самое, т.е. в USB Trace показывается длина данных, которая ожидается (1024), а не та, которая передается (2048)
Buffer Size при этом в снифере==0, т.е. ничего не принято
где я накосячил в инициализации? вроде ж все верно...
toweroff
Nov 13 2010, 20:59
Переделал вместо фифы6 на фифу8
опа, словил на PC 2 байта.
Но это не 512 точно
уже перепробовал замену полностью fw.c на оригинальный (ну.. мало ли что.. я ж не фирмваре пишу, а как slave пользую), соответственно td_init поменялся в конфиге на 8-ю фифу
нихт, точнее - уже что-то начал принимать то, и не то, и не все
Ровно 2 байта, совершенно других
Сигналы /WR, /RD, A, D смотрелись осциллом с полосой 200МГц, нет никаких пертрубаций, иголок точно не увидел
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.