Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с USB2.0 SX2
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Страницы: 1, 2, 3
AndreyS
Цитата(jur @ Feb 7 2007, 13:30) *
Цитата(-Al- @ Feb 7 2007, 09:48) *
А может просто было когда-то подключено устройство, собранное на FX2??? Ведь FX2 может грузится на лету при подключении, а там стоит драйвер со скриптом, который при обнаружении FX2 грузит в него прошиву и рестартует FX2, поэтому и VID с DID меняются...
ЗЫ это только предположение...
Темное дело... По идее, в этом случае не зависело бы от гнезда USB. Ведь VID/PID те же самые.


Согласен, что дело темное, но оно относится к тому же самому, что при первтыкании из порта в порт Винда просит снова поставить дрова. Вот в этот момент может и происходит подмена. Т.е ка и у вас на наших машинах при перестановки из порта в порт винда частенько просит драйвер. Происходит не всегда, но бывает, подсовываем INF каталог и все ок.

Цитата
Цитата(AndreyS @ Feb 7 2007, 08:29) *
Объясните пожалуйста, как аппаратная часть последовательного порта (диф пара), предположим плохо разведена, может работать на одном и том же порту как Кипресс, а на другом как DVB????
Тут еще может сказываться, какой именно USB на данном порту. У меня, к примеру, четыре 82801EB USB и только один 82801EB USB2. Может это как-то сказывается?... У меня FX2 всегда появляется на порту USB2, куда бы я его не втыкал. Но что интересно, при первом втыкании в другой порт Винда заново запрашивает установку драйвера. Тоже непонятно...

Ну и, в конце концов, можно попробовать для этого странного устройства DVB сделать апдейт драйвера, чтобы "отцепить" этот посторонний драйвер (если он как-то пролез в систему) и назначить нужный.


Через виндовый диспетчер сменить конечно же не дает. Только если самому инфик сделать на основе Кипрессовского. Тупа перетирать драйверок в системной папке нет большого желания. Но в общем путь понятен. А вот с перетыканием у нас схожие проблеммы. Правда мы пользуем ezusb.sys с другим драйвером не пробовали, но на сколько я понял вы именно со вторым драйвером в последнее время
работаете и проблемма осталась.

На маме с П4 хост FW82801EB От 2002 L3450240 вот на нем то определяется, то нет. В любом порту. Может у этого хоста нагрузочная способность маленькая. Просто странно как-то на новых платах с П4 все работате нормально и на старых машинах с USB1 И PCI картах от VIA все работает нормуль (ну кроме как с перевключением из порта в порт иногда просит снова драйверок поставить), а вот на этой тачке (мама от MSI с П4), она такая единственная, работает через раз. Мы работаем на USB1, до 2.0 не разгонял.

Есть железяка на FTDI так с перевключением из порта в порт с ней таже лажа. Т.е. иногда просит драйверок. Так что это какая-то закономерность связанная с виндой. Правда при этом еще и виртуальный порт меняет собака на любой (то 18 то 10 то 4) хотя в системе свободных начиная с 3-го.
AndreyS
Добрый день еще раз.

Snoopy кое в чем помог. На машине где на одном из портов железка детектится как DVB увидил смену драйвера. Т.е как и предположил уважаемый -Al- железка задетектилась как кипрес и тут же в нее была перезалита прошивка и сброшено. После этого устройство задетектилось уже как DVB. Теперь осталось выдрать эту гадость и осознать как это произошло.

Могли бы подсказать как мне засечь, что именно заливает прошивку DVB в ядро??

Извиняюсь. wub.gif Засек и удалил.

Обидно, но USB monitor от HHD Software на той машинке нормально не сканит, не все пакеты ловит. Смог поймать только Дисконнект устройства в системе и все. Сам процесс инициализации почему то не поймал.
AndreyS
Добрый день.

На FX2 есть большая небходимость отключить поддержку USB2.0. Как это сделать? В Device Descriptor значение USB Specification Version заставит хост не переходить на High?

Спасибо.
Гяук
Возвращаясь к SX2 (а то что-то народ все про FX2...)
Дорос до осознания того, что нужно пользоваться самодельным дескриптором, ибо то что по умолчанию уже не удовлетворяет....
Задача: ep6 (она же 0x86) сделать изохронной...
Пытаюсь начать с малого - добиться того, чтобы просто грузить целиком дескриптор, приведенный в datasheet. Получается пока не очень.
Гружу дескриптор не из флеш, а из внешнего мастера.
Питание - ок
прерывание READY - ок
Запись регистров -ок
Запись команды B0 - ок
Запись общей длины дескриптора (посчитал по сумме длин секций дефолтового - 0хА0) - ок
...и запись дескриптора тоже вроде проходит, но вот после того как все записал не происходит прерывания ENUMOK... sad.gif Собственно говоря вообще никакого прерывания не происходит...

Windows выкидывает тряпку "One of the USB devices attached to this computer has malfunctioned, and Windows dose not recognize it"

Ладно...

Читаю записанный дескриптор из регистрового файла SX2.
Сравнение файлов показывает, что все секции вплоть до //StringDscr1 совпадают (в смысле считалось то же что записалось), потом три неправильных (всегда одних и тех же) байта, потом вроде как до конца все ок...
Но! Я вычитываю все 500 байт из регистра с дескриптором, и после того как "мой" дескриптор закончился - там еще остается какая-то муть... sad.gif

Пробовал после того как записал дескриптор установть бит DISCON в 0 - не помогает.

Подскажите, что я не так делаю, а? sad.gif
jur
Цитата(Гяук @ Mar 15 2007, 16:36) *
Запись общей длины дескриптора (посчитал по сумме длин секций дефолтового - 0хА0) - ок
...и запись дескриптора тоже вроде проходит, но вот после того как все записал не происходит прерывания ENUMOK... sad.gif Собственно говоря вообще никакого прерывания не происходит...
Windows выкидывает тряпку "One of the USB devices attached to this computer has malfunctioned, and Windows dose not recognize it"
Странно... У меня после записи дескриптора енумерация нормально происходит... Может быть ты неверно размер дескриптора вычисляешь? Я это делаю с помощью оператора sizeof(CustomDescriptor). Собственно, текст моей функции вот такой:

void WriteCustomDescriptor(void)
{
word i;
byte b;
prog_char *ptr;

PRINT_STRING("Load custom descriptor, len=");
sprintw(sizeof(CustomDescriptor));
crlf();

low_level_command_write (0x30 | 0x80); //Write request, bit7 = 1, bit6 = 0
low_level_command_write ((sizeof(CustomDescriptor) & 0x00F0) >> 4); //Write length high nibble of lsb
low_level_command_write ( sizeof(CustomDescriptor) & 0x000F ); //Write length low nibble of lsb
low_level_command_write ((sizeof(CustomDescriptor) & 0xF000) >> 12); //Write length high nibble of msb
low_level_command_write ((sizeof(CustomDescriptor) & 0x0F00) >> 8); //Write length low nibble of msb
ptr = (prog_char *)CustomDescriptor;
for(i = 0;i < sizeof(CustomDescriptor);i++) {
b = pgm_read_byte_near(ptr++);
low_level_command_write ((b & 0xF0) >> 4); //Write data high nibble
low_level_command_write ( b & 0x0F ); //Write data low nibble
}
PRINT_STRING("Loading done\r\n");
}

Пояснение: программа для микроконтроллера AVR фирмы Atmel. Функция pgm_read_byte_near служит для доступа к программной памяти (ПЗУ), т.к. у этого микроконтроллера память программ и память данных разделены. CustomDescriptor, соответственно, тоже хранится в ПЗУ. Функция low_level_command_write взята из аппноты. PRINT_STRING - макрос для печати отладочных строк в последовательный порт (к ним же относятся sprintw() и crlf()).
Гяук
2 jur: Спасибо, я уже разобрался.
У меня ПЛИС и дескриптор просто хранится в ROM. Так вот глюк был связан с тем, что в дескрипторе было одно "лишнее" значение (в файле инициализации ROM был пропущен один адрес).
Теперь все в норме.
Гяук
Проблемы продолжаются angry.gif
Установил ЕР6 как изохронную. По этому поводу программа A_d_v_a_n_c_e_d U_S_B P_o_r_t M_o_n_i_t_o_r сообщает следующее: (кстати, болеет программка. Ни у кого микстуры нету?)
Код
    Endpoint descriptor
      Endpoint address:  0x86, Input
      Transfer type:  Isochronous
      Synchronization type:  none - вот эта строчка меня тихо смущает... :(
      Usage type:  data endpoint
      Max packet size:  0x0200 (512)
      Interval:  0x00 (0)


Теперь о главном. Пытаюсь читать из этой ЕР...
Данные в FIFO сыпятся когда только можно (то есть если FIFO заполнилось, то прекращаю сыпаться. Как только оно не пустое - пишем снова).
FIFO забивается целиком (то есть все 1024 байта) за 1,825 мс.
Почитал CyAPI Programmer's Reference. Согласно ему
Цитата
For ISOC transfers, the buffer length and the endpoint's transfers size (see SetXferSize) must be a multiple of 8 times the endpoint's MaxPktSize

То бишь размер буфера на прием должен быть равен восьми размерам пакета. Причем поскольку EP изохронная не обязательно что все пакеты будут приняты. Вот мой кусочек проги, которым осуществляется чтение данных в ПК. Прием данных осуществляется в отдельном потоке. Оставил только все самое ценное...
Код
    CCyIsocEndPoint *IsoIn = USBDevice->IsocInEndPt;
    if(IsoIn)
    {
        long i_count = 4096; //количество принимаемых байт
        UCHAR buf[4096]={0}; //буфер для приема

        long recvdBytes; //реальное количество принятых байт

        CFile f;
        f.Open("ADC_contents.i16",CFile::modeCreate|CFile::modeWrite); //принятые данные пишутся в файл
        
        for(int addr=0; addr<100; addr++) // больше сотни раз не принимать
        {
            i_count = 4096;
            CCyIsoPktInfo *isoPktInfos;
            int pkts;  
            isoPktInfos = IsoIn->CreatePktInfos(i_count, pkts);
            if(!(IsoIn->XferData(buf,i_count,isoPktInfos))
            {
            //обработчик ошибки, когда невозможно принять данные от USB
            }
            else
            {
                recvdBytes = 0;
                for (int i=0; i<pkts; i++)
                {
                    if (isoPktInfos[i].Status == 0)
                    {
                        recvdBytes += isoPktInfos[i].Length;
                    }
                }
                                                f.Write(buf,recvdBytes);
                delete[]isoPktInfos;
            }
        }
        f.Close();
    }
    return(0);

Собственно в чем проблема:
Согласно тому же ЮСБ Порт Монитору из 4к данных при каждой попытке принимается только 2к sad.gif
Но самое жуткое, что период между двумя "приемами" составляет порядка секунды angry.gif
Код
[21] URB_FUNCTION_ISOCH_TRANSFER 20070317163800.578 (+0)
Pipe handle: 0x84C999CC
Transfer flags: 0x00000007 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)
[21] URB_FUNCTION_ISOCH_TRANSFER (SUCCESS/0x00000000) 20070317163801.421 (+843)
IRP status: 0x00000000 (STATUS_SUCCESS)


Ну какой он после это Isochronous? У меня Bulk передавал быстрее sad.gif
Никто с подобным не сталкивался?
Гяук
Вернулся обратно к булкам.
При увеличении буфера према в программе на ПК до 8192 байт, т.е. грубо говоря
Код
USBDevice->EndPoints[3]->XferData(buf[8192],8192)

добился скорости в 7,5Мб/сек. Дальнейшее увеличение размера буфера прибавки в скорости не дает.

Ну что ж, будем жить так...
jur
Цитата(Гяук @ Mar 17 2007, 16:14) *
Код
      Synchronization type:  none - вот эта строчка меня тихо смущает... :(
По всей видимости, Монитор имеет ввиду, что изохронная передача не использует квитирования.

Цитата(Гяук @ Mar 17 2007, 16:14) *
Собственно в чем проблема:
Согласно тому же ЮСБ Порт Монитору из 4к данных при каждой попытке принимается только 2к sad.gif
Но самое жуткое, что период между двумя "приемами" составляет порядка секунды
К сожалению, с изохронами я не работал, ничего толкового подсказать не могу...

Цитата(Гяук @ Mar 19 2007, 13:40) *
Вернулся обратно к булкам.
При увеличении буфера према в программе на ПК до 8192 байт, т.е. грубо говоря
Код
USBDevice->EndPoints[3]->XferData(buf[8192],8192)
добился скорости в 7,5Мб/сек. Дальнейшее увеличение размера буфера прибавки в скорости не дает.
Ну что ж, будем жить так...
Странно... Булка стабильно качает под 40 МБ/сек. Я проверял даже на слабых embedded-материнках. Думаю, что стоило бы попробовать передавать не с помощью синхронной XferData, а с помощью асинхронной связки BeginDataXfer-WaitForXfer-FinishDataXfer. Дело в том, что эта троица позволяет здорово распараллеливать процесс передачи данных, поэтому получается наивысшая возможная скорость передачи (я использую очередь из 4-х запросов, как в сайпрессовском примере Strimmer). А простая XferData - синхронная передача. Пока одну передачу не завершит новую не начнет. Наверное именно в этом проблема.
vhlshik
скиньте плз у кого есть содержание eepromины с дескрипторами (не дефолтовыми). Я по образу и подобию приведенного в датащите написал свой, но винда ругается и говорит, что устройство failed enumeration
vhlshik
пардон, дефолтовая енумерация тож не проходит, хотя сайпрес пзуху читает - видно на осциллографе, после чтения подтягивает D+ - и все!
вот то что я гружу
c4 0a 00 c4 06 00 33 33 20 02 10 11 (все ID "от фонаря")
что бы это могло быть?
jur
Цитата(vhlshik @ Mar 20 2007, 18:12) *
вот то что я гружу
c4 0a 00 c4 06 00 33 33 20 02 10 11 (все ID "от фонаря")
что бы это могло быть?
Может стоит попробовать реальные ID? Их можно взять из INF файла USB-шного драйвера (VID и PID).
Warlord
Какие грузить VID и PID - это все равно, проблема еще в чем-то. Попробуй микросовтовскую утилиту USBView или USB Monitor, глянь ходит ли там ваще чего-нибудь.
vhlshik
докладываю smile.gif
USBView - все в нулях, похоже обмена по юсб нет ваще. для чистоты эксперимента подтянул к 3.3 SLRD,SLWR,SLOE,RST так что при енумерации ниче не должно мешать. кварц вроде тож завелся. чудеса какие-то
Warlord
Если по нулям, то может камню не нравится содержимое пзухи или он не может ее прочитать, хотя делает попытки... А почему первый байт 0xC4??
Цитата
During the power-up sequence, internal logic checks the I2C
port for the connection of an EEPROM whose first byte is
either 0xC0 or 0xC2.
vhlshik
странно, у меня в описании написано
During the power-up sequence, internal logic of the SX2 checks for the presence of an I2C EEPROM.[1,2] If it finds an EEPROM,
it will boot off the EEPROM. When the presence of an EEPROM is detected, the SX2 checks the value of first byte. If the first
byte is found to be a 0xC4, the SX2 loads the next two bytes into the IFCONFIG and POLAR registers, respectively. и т.д.
у меня cy7c68001.pdf revision D. ща скачаю более новый
Warlord
прости, я про fx2... но не суть важно, убедись, что камень считывает ПЗУху, т.е. достает информацию. А то может он стучит, а достучаться не может.. В мануале сказано, что если нет памяти внешней никакой, то камень грузит инфу по умолчанию, так вот я проверил, что если выдернуть ПЗУху, то камень молчит как партизан, виндофс говорит, что устройство неправильно пронумеровано, а USBView соотвесно дает нули.. почему камень не энумеруется, вот вопрос..
vhlshik
у меня без пзу D+ висит в воздухе. так что, по крайней мере, первые два байта читаются smile.gif. Ладно, буду искать аппаратные глюки
vhlshik
дас, все прозаично glare.gif
на плате были перептаны местами D+ и D-...
Гяук
Цитата(jur @ Mar 20 2007, 08:26) *
Странно... Булка стабильно качает под 40 МБ/сек. Я проверял даже на слабых embedded-материнках. Думаю, что стоило бы попробовать передавать не с помощью синхронной XferData, а с помощью асинхронной связки BeginDataXfer-WaitForXfer-FinishDataXfer. Дело в том, что эта троица позволяет здорово распараллеливать процесс передачи данных, поэтому получается наивысшая возможная скорость передачи (я использую очередь из 4-х запросов, как в сайпрессовском примере Strimmer). А простая XferData - синхронная передача. Пока одну передачу не завершит новую не начнет. Наверное именно в этом проблема.


Переделал программу под BeginDataXfer-WaitForXfer-FinishDataXfer. Ничего не изменилось. Все те же 7.5 Мбайт/сек.
Данные запихиваются в SX2 через каждые три такта 20 мегагерцового клока. Используется асинхронный интерфейс с SX2.
То бишь в контроллер я засовываю данные со скоростью 13 Мбайт в секунду, а с другой стороны (в ПК) получаю их в два раза медленнее sad.gif.

2 jur:
1. Вы с SX2 работаете синхронно или асинхронно?
2. Дескриптор тот что по умолчанию или свой?
3. Какие-то настройки в регистрах делаете?
4. Когда принимаете большой массив (например 100 мегабайт) связкой BeginDataXfer-WaitForXfer-FinishDataXfer какой выставляете размер буфера на прием?
Заранее спасибо за ответы!
Warlord
2Гяук
Какова ширина шины фифо?? Разницы как работать с SX2 синхронно или асинхронно ИМХО нет. Дескриптор тоже рояли не играет.
Попробуйте проект Streamer и поиграйте параметрами, какую скорость он покажет в Вашем случае??
Гяук
2 Warlord Ширина шины 16
Проект Streamer это где?

upd. Нашел, буду пробовать, спасибо!

upd2. Попробовал 10000 с копейками кБайт в секунду. То есть не шибко быстрее чем в моем варианте sad.gif
Выкладываю картинки
Нажмите для просмотра прикрепленного файла
stream - это скриншот Streamer'а,
Нажмите для просмотра прикрепленного файла
DMS - это статистика, собранная с помошью Device Monitoring Studio. Очень огорчают падения скорости, видные на графике от DMS. Я так понимаю это она (DMS) позагрузила систему - но скорость падает уж очень сильно sad.gif
Warlord
Цитата(Гяук @ Mar 23 2007, 13:50) *
Данные запихиваются в SX2 через каждые три такта 20 мегагерцового клока.
То бишь в контроллер я засовываю данные со скоростью 13 Мбайт в секунду, а с другой стороны (в ПК) получаю их в два раза медленнее sad.gif.

Почему 13МБ\с получилось?? Через каждые 3 такта - это есть на каждый 4-й. Т.е. частота 5МГц, по 2 байта за герц, получается 10МБ\с. Это совпадает с результатами Streamer-а smile.gif Если все же 13МБ\с, то проверьте действительно ли записываются 16 бит (если 8 то результат тоже объясним).
Гяук
2 Warlord
С Мегабайтами разобрался, все было не так как Вы предположили - вместо клока 20 МГц был 15 smile.gif
Особую радость Стримера тоже увидел - там запускается QueueSize BeginDataXfer'ов, что дает хорошую защиту приема от загруженности машины.

Спасибо!
jur
Цитата(Гяук @ Mar 23 2007, 12:50) *
2 jur:
1. Вы с SX2 работаете синхронно или асинхронно?
2. Дескриптор тот что по умолчанию или свой?
3. Какие-то настройки в регистрах делаете?
4. Когда принимаете большой массив (например 100 мегабайт) связкой BeginDataXfer-WaitForXfer-FinishDataXfer какой выставляете размер буфера на прием?
1. Я работаю с SX2 асинхронно. Длительность импульсов SLRD/SLWR и паузы между ними по 80 ns (минимально-допустимый предел для асинхрона 70 ns).
2. Взял стандартный и изменил для своих нужд VID, PID и стринги.
3. Хм... Вообще-то ничего особенного... Конфигурацию ендпойнтов на 16 бит, флаги принудительно пристегнул, прерывание от FLAGS вырубил. По мелочи, в общем.
4. Я принимаю данные в буфер по 4 КБ (т.е. 8 512-байтных блоков) в быстром режиме и по одному блоку в медленном. Очередь заряжена на 4 запроса. Сейчас у меня максимальная скорость данных порядка 8 МБ/сек. Но собираюсь увеличить до ~16 и перехожу на FX2LP (темно с ней пока...).
TailWind
Поделитесь кто-нибудь рабочим содержимым eeprom с самописным дескрипоторм!

А то у меня короткий default desciptor работает.

А когда свой записываю нет. (
vhlshik
вот прошивка на 3 эндпоинта - 82 in 512*4, 84 in 512*2, 08 out 512*2 вроде работает
Нажмите для просмотра прикрепленного файла
TailWind
Огромное спасибо!
ночной гость
Цитата(sphera @ Apr 17 2005, 12:55) *
Запускаю SX2
Собрал макетную плату к параллельной шине подключил ATmega8 которая в свою очередь управляется от PC через RS232. Сейчас ситуация следующая: при подключении к USB микросхема распознается, читается VID PID и.т.д. Могу передають данные от PC к SX2 через USB при помощи панели CyConsole с драйвером CyUSB.sys читаю через ATmega8 вроде все правильно. Но как только пытаюсь записать в SX2 что то через параллельную шину т.е. подаю 0 на SLWR, SX2 начинает жрать кучу тока, падает напряжение питания и перестает работать кварц и SX2 пропадает с шины USB. Проверил все тестером тыкал на SLOE, SLWR, ADR0-2 все правильно, на всякий случай на параллельную шину SX2 поставил резисторы 1кОм; то же самое. Собрал вторую макетную плату работает точно так же как и первая я в отчаянии. Может у кого были подобные симптомы поделитесь рецептом или есть сгоревшие образцы которые не работают так же как и мои и надо собирать третью макетную плату.


Точно такая же проблема, как только начинаю дергать SLWR, перестает работать кварц и SX2 пропадает с шины USB. ((((( Так и не понял, что я делаю неправильно.
ночной гость
В общем проблему решил, вывод Reserved не был подключен к GND. Подключил, всё заработало стабильно.
qqqqqq
Собрал плату: SX2 с ATMEGA8. без EEPROM.
Генератор 24МГц внешний.
Во время ресета SX2 на линиях INT и READY SX2 - единицы,
после снятия ресета с SX2 сначала переходит в 0 READY на 80мкс,
потом обратно в 1.
Ещё через 20 мкс переходит в 0 INT.
Вроде как можно читать байт статуса прерывания.
Читаю - читается байт 1 - т.е. вроде как READY - пока всё как и должно быть.
После чтения байта статуса INT уходит обратно в 1 - как и положено.

После всего этого пытаюсь прочитать/записать регистры SX2.
При попытках записи сигнал READY в 0 не уходит вопреки даташиту,
и на выходах ничего не меняется (в частности не появляется частота на IFCLK, не происходит
никаких изменений на D+ и D- - там нули)
При попытках чтения, также не могу дождаться ухода в 0 сигнала INT, который должен
сигнализировать о готовности данных. При чтении без готовности, читается всё тот же
байт 1, как и в самом начале.

Длительности импульсов чтения-записи около 1мкс. Адрес = 100. CS = 0. Питание не приседает.
Похоже, только мне так повезло sad.gif спать пойду...


Собрал плату: SX2 с ATMEGA8. без EEPROM.
Генератор 24МГц внешний.
Во время ресета SX2 на линиях INT и READY SX2 - единицы,
после снятия ресета с SX2 сначала переходит в 0 READY на 80мкс,
потом обратно в 1.
Ещё через 20 мкс переходит в 0 INT.
Вроде как можно читать байт статуса прерывания.
Читаю - читается байт 1 - т.е. вроде как READY - пока всё как и должно быть.
После чтения байта статуса INT уходит обратно в 1 - как и положено.

После всего этого пытаюсь прочитать/записать регистры SX2.
При попытках записи сигнал READY в 0 не уходит вопреки даташиту,
и на выходах ничего не меняется (в частности не появляется частота на IFCLK, не происходит
никаких изменений на D+ и D- - там нули)
При попытках чтения, также не могу дождаться ухода в 0 сигнала INT, который должен
сигнализировать о готовности данных. При чтении без готовности, читается всё тот же
байт 1, как и в самом начале.

Длительности импульсов чтения-записи около 1мкс. Адрес = 100. CS = 0. Питание не приседает.
Похоже, только мне так повезло sad.gif спать пойду...
krokodil111
Извините если не в тему. Какие нужно иметь инструменты для разработки устройства в котором используется SX? скока это по деньгам? Планируется SX как USB для ПЛИСины. Т.е. плис засылает в SX требуемую инфу для дальнейшей передачи в комп и от компа в обратном порядке.
-Al-
Цитата(krokodil111 @ Oct 10 2007, 15:35) *
Извините если не в тему. Какие нужно иметь инструменты для разработки устройства в котором используется SX? скока это по деньгам? Планируется SX как USB для ПЛИСины. Т.е. плис засылает в SX требуемую инфу для дальнейшей передачи в комп и от компа в обратном порядке.

Присмотритесь лучше к FX2LP (Cy7C68013A), избавите себя от кучи головной боли, связанной с инициализацией, а также улучшите характеристики устройства по энергопотреблению и теплоотдаче smile.gif
qqqqqq
Цитата
Присмотритесь лучше к FX2LP (Cy7C68013A), избавите себя от кучи головной боли, связанной с инициализацией, а также улучшите характеристики устройства по энергопотреблению и теплоотдаче


Мда... как ни странно она ещё и дешевле в 1.5 раза.. надо будет переориентироваться...
А насчёт кучи головной боли - у меня её, наверно, будет больше с FX2. т.к. AVRки уже давно освоены, а 51й - для меня новый контроллер.

Заработала плата. После замены SX2. То ли была дохлая, то ли я её при впаивании сжёг. Похоже на SLWR не откликается, но сам вход звонится как целый...
krokodil111
Спасибо, сам к тому же склоняюсь, просто я пока слепо бреду во всем этом наборе микросхем и т.д. что выражается в рождении нескольких тем на этом форуме smile.gif
Но вопрос тот же остается по инструментарию и т.д.
-Al-
Цитата(krokodil111 @ Oct 11 2007, 14:00) *
Спасибо, сам к тому же склоняюсь, просто я пока слепо бреду во всем этом наборе микросхем и т.д. что выражается в рождении нескольких тем на этом форуме smile.gif
Но вопрос тот же остается по инструментарию и т.д.

Мы сразу сделали п/п c SX2 56SSOP и ПЛИС под свой проект, на ней и отлаживались. Впоследствие оказалось, что SX2 с легкостью меняется на FX2LP без переделки п/п, отделались изменениями в программе ПЛИС (она стала ЗНАЧИТЕЛЬНО проще).
qqqqqq
Цитата(-Al- @ Oct 11 2007, 17:20) *
Мы сразу сделали п/п c SX2 56SSOP и ПЛИС под свой проект, на ней и отлаживались. Впоследствие оказалось, что SX2 с легкостью меняется на FX2LP без переделки п/п, отделались изменениями в программе ПЛИС (она стала ЗНАЧИТЕЛЬНО проще).


А вы конфигурировали её с плиса? Нехило! Пришлось, поди, какое-нибудь мелко-процессорное ядро использовать?
Имхо, значительно проще и дешевле было бы сразу внешний МК пристроить...

Кстати, вопрос: как защитить от чтения программу этого 51го МК в FX2LP?
-Al-
Цитата(qqqqqq @ Oct 12 2007, 10:50) *
А вы конфигурировали её с плиса? Нехило! Пришлось, поди, какое-нибудь мелко-процессорное ядро использовать?
Имхо, значительно проще и дешевле было бы сразу внешний МК пристроить...

Кстати, вопрос: как защитить от чтения программу этого 51го МК в FX2LP?

Да просто все оказалось, т.к. конфигурация достаточно фиксированная то и дело закончилось конечным автоматом без всяких мелко-процессорных ядер :) В EPM1270 все это дело вместе с арбитром и буферными регистрами заняло 109 LC. Использовать еще и внешний МК вообще смысла не было. Только в SX2, если спользуется автоматическая выдача пакетов по заполнению FIFO, не стоит забывать о FullSpeed/HighSpeed, т.к. регистры надо будет перестраивать динамически под нужную длину (64/512), но и это все решается :)

Защитить от чтения программу во встроенном 51ом МК нельзя, т.к. она в любом случае внешняя - грузится или из I2C EEPROM или с USB.
qqqqqq
Warlord писал:
Какова ширина шины фифо?? Разницы как работать с SX2 синхронно или асинхронно ИМХО нет. Дескриптор тоже рояли не играет.
Попробуйте проект Streamer и поиграйте параметрами, какую скорость он покажет в Вашем случае??

А кому-нибудь удавалось запустить проект streamer на SX2? Ищу информацию на эту тему.
У меня запускается и даже даёт нажать "Start", но измерений не происходит - скорость всегда 0.
Может быть дело в прошивке МК или конфигурации SX2?
Glitko
Всем добрый вечер. Только начал работать с SX2 есть проблемы которые не могу понять.Плату собирал сам на ней SX2 подключен к ПЛИС, установлен микроконтроллер Atmega 64 то-же подключен к ПЛИС портами А,В и частично С, установлен отдельный высоко скоросной АЦП- подключен к ПЛИС и 3 канала гальванической развязки для отдельного АЦП и двух каналов АЦП Atmega 64.В SX2 дискриптор грузится через TWI микроконтроллера Atmega 64 с его флеш. Дискриптор гружу по умолчанию из тех. описания .SX2 нормально определяется, устанавливаю драйвер CyUSB. Дальше проблемы ....Нужен обмен около 3-х МГц по 16 бит ,в начале от РС настройки и старт а дальше в комп.
Не могу разобратся с обменом.Прошу помочь.
1.Нужно ли загружать дополнительные настройки в регистры кипруса через командный интерфейс для моего обмена или можно обойтись по умолчанию ?
2.У меня состояние всех флагов FLAG(А,В,С) "1" и не меняется,Прошивка в ПЛИС устанавливает FIFOADR
(2..0)- 001 ,с помощью EZ-USB Control Panel подаю данные в конечную точку EP4-буфер заполняется - флаги не меняются... Как же должно быть?
3.Может кто нибуть" просто" обьяснить особености обмена или какие и как менять-читать управляюшие сигналы для моего конкретно обмена (с английским туго ,из тех. описания много го не понимаю думаю, что в конце концов разберусь методом "научного тыка" но очень ограничен во времени).Очень прошу помочь,и подсказать,мне еще аналоговую часть настраивать....без ввода в РС никак! java script:emoticon(':unsure:', 'smid_24')Заранее спасибо!
qqqqqq
Цитата(Glitko @ Nov 1 2007, 01:58) *
проблемы ....Нужен обмен около 3-х МГц по 16 бит ,в начале от РС настройки и старт а дальше в комп.
Не могу разобратся с обменом.Прошу помочь.
1.Нужно ли загружать дополнительные настройки в регистры кипруса через командный интерфейс для моего обмена или можно обойтись по умолчанию ?


Да вроде бы можно и на дефолтных... Двух ендпайпов IN и OUT для почти любой задачи достаточно.

Цитата
2.У меня состояние всех флагов FLAG(А,В,С) "1" и не меняется,Прошивка в ПЛИС устанавливает FIFOADR
(2..0)- 001 ,с помощью EZ-USB Control Panel подаю данные в конечную точку EP4-буфер заполняется - флаги не меняются... Как же должно быть?


Должны меняться. А откуда известно, что он заполняется?

Цитата
3.Может кто нибуть" просто" обьяснить особености обмена или какие и как менять-читать управляюшие сигналы для моего конкретно обмена (с английским туго ,из тех. описания много го не понимаю думаю, что в конце концов разберусь методом "научного тыка" но очень ограничен во времени).Очень прошу помочь,и подсказать,мне еще аналоговую часть настраивать....без ввода в РС никак! java script:emoticon(':unsure:', 'smid_24')Заранее спасибо!


Научный тык в данном случае больше времени потребует, нежели перевод и изучение описания.
-Al-
Цитата(qqqqqq @ Nov 1 2007, 00:10) *
Да вроде бы можно и на дефолтных... Двух ендпайпов IN и OUT для почти любой задачи достаточно.
Должны меняться. А откуда известно, что он заполняется?
Научный тык в данном случае больше времени потребует, нежели перевод и изучение описания.

По умолчанию буфер в SX2 - 1кБ (т.е. на два фрейма для HighSpeed USB) на каждый эндпоинт и пока он не заполнится флаг FIFO Full не выставится.
qqqqqq
[quote]
По умолчанию буфер в SX2 - 1кБ (т.е. на два фрейма для HighSpeed USB) на каждый эндпоинт и пока он не заполнится флаг FIFO Full не выставится.
[\quote]

Выставится, если отправить хотя бы 2 пакета длиной хотя бы 1 байт. 1кБ при этом, естественно, не заполнится.
Кстати! Флаг FIFO-empty после енумерации и до всяких передач должен быть в нуле.
Если такого нет - то может адрес всё же неправильно выставлен?
Glitko
Цитата(Glitko @ Oct 31 2007, 22:58) *
Всем добрый вечер. Только начал работать с SX2 есть проблемы которые не могу понять.Плату собирал сам на ней SX2 подключен к ПЛИС, установлен микроконтроллер Atmega 64 то-же подключен к ПЛИС портами А,В и частично С, установлен отдельный высоко скоросной АЦП- подключен к ПЛИС и 3 канала гальванической развязки для отдельного АЦП и двух каналов АЦП Atmega 64.В SX2 дискриптор грузится через TWI микроконтроллера Atmega 64 с его флеш. Дискриптор гружу по умолчанию из тех. описания .SX2 нормально определяется, устанавливаю драйвер CyUSB. Дальше проблемы ....Нужен обмен около 3-х МГц по 16 бит ,в начале от РС настройки и старт а дальше в комп.
Не могу разобратся с обменом.Прошу помочь.
1.Нужно ли загружать дополнительные настройки в регистры кипруса через командный интерфейс для моего обмена или можно обойтись по умолчанию ?
2.У меня состояние всех флагов FLAG(А,В,С) "1" и не меняется,Прошивка в ПЛИС устанавливает FIFOADR
(2..0)- 001 ,с помощью EZ-USB Control Panel подаю данные в конечную точку EP4-буфер заполняется - флаги не меняются... Как же должно быть?
3.Может кто нибуть" просто" обьяснить особености обмена или какие и как менять-читать управляюшие сигналы для моего конкретно обмена (с английским туго ,из тех. описания много го не понимаю думаю, что в конце концов разберусь методом "научного тыка" но очень ограничен во времени).Очень прошу помочь,и подсказать,мне еще аналоговую часть настраивать....без ввода в РС никак! java script:emoticon(':unsure:', 'smid_24')Заранее спасибо!

Обен запустил. Проблема была в WAKEUP: подал вместо нуля еденицу и еше промухал INCONFIG внес в него в ходе эксперементов изменения и забыл вернуть значение по умолчанию.Правда появилась другая проблема: загрузка в плату из компа идет нормально (пишу через EZ-USB Control Panel во вторую точку все выгружается без проблем,на ПЛИС прошит цикл чтения из SX2 длительностью по времени 8МГц) нажимаю клавишу Trancfer Data огромное количество раз- косяков нет,а при записи в комп(пишу в 6 точку)С через несколько нажатий в проге EZ-USB Control Panel клавиши Trancfer Data (количество считываемых байтов 65000 за одно нажатие) SX2 пропадает как устройство при этом микросхема очень горячая.Цикл записи в SX2 прошитый в ПЛИСЕ выгружает простой 16 битный счетчик и по времени равен 5,5 МГц,считаные данные без косяков.
У меня на плате:
-XTALOUT-24МГц от внешнего генератора;
-READY-используется для запуска чтения (цикл записи запускается по передаче пятерки);
-IN#-в воздухе;
-RESET#-через резистор 100Ком на 3.3В и кондер 10 МФ на землю;
-IFCLK-в воздухе;
-Reserved-на землю;
-WAKEUP-на землю;
остальные сигнальные используются так как описано в документации и запаяны непосредственно на ПЛИС.Вся шина данных SX2 на прямую запаяна на ПЛИС. Питание на ПЛИСе 3.3В.
МОЖЕТ надо поставить резисторы между ПЛИС и SX2 ? Или я всетаки что-то в цикле записи промухал?
Стабилизаторы на плате IRU1010-33(1ампер),для ПЛИС и для SX2 отдельно.
В чем проблема?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.