Jump to content

    

billidean

Свой
  • Content Count

    245
  • Joined

  • Last visited

Everything posted by billidean


  1. Спасибо всем, текущая проблема решена... Не увидел сначала на схеме, что на Reset по умолчанию подан ноль. Подцепил порт PD4, подал на него 1 - и все заработало. Но это я только начал с этим разбираться, возможно дальше еще на что-нибудь "наступлю" ...тогда продолжу эту тему..
  2. Добрый день. Изучаю работу с STM32F407 с применением HAL-библиотек. Завис на изучении I2C. Пробую вести обмен с микросхемой CS43L22, которая стоит на плате. По схеме на плату вижу подключение ног I2C этой микросхемы к пинам PB6(SCL) и PB9(SDA) Также по схеме вижу их подтяжку к питанию через 4,7 кОм В STM32CubeMX создал проект и настроил эти пины STM-ки на интерфейс I2C настроил скорость и параметры пинов (скорость обмена сделал маленькую - 10кГц, но пробовал и 100кГц) В даташите на CS43L22 нашел циклограмму чтения и пытаюсь вычитать ИД микросхемы, т.е. регистр с адресом 0х01 int main(void) { /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM6_Init(); MX_I2C1_Init(); LCD_init(); LCD_clear(); HAL_TIM_Base_Start(&htim6); HAL_TIM_Base_Start_IT(&htim6); while (1) { LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("BEGIN"); HAL_Delay(1000); LCD_clear(); LCD_Cursor(0, 0); aTxBuffer[0] = 0x01; LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("Wait ready..."); while( HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY ) { LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("Not ready..."); } HAL_Delay(1000); LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("Wait write..."); while(HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)0x94, aTxBuffer, (uint16_t)1, (uint32_t) 1000) != HAL_OK) { if(HAL_I2C_GetError(&hi2c1) != HAL_I2C_ERROR_AF) { LCD_clear(); LCD_Cursor(0, 0); // позиция курсора начинается с 0 LCD_write_String("Buffer ERROR!"); } } while( HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY ) { LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("..CONTINUE.."); } LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("Write OK!"); I2C_ReadBuffer(&hi2c1, (uint16_t)0x94, (uint16_t)1); HAL_Delay(1000); } } Т.е. я сначала записываю адрес этого регистра 0х01 (использую стандартную ф-цию HAL_I2C_Master_Transmit), затем собираюсь читать (уже использую свою ф-цию I2C_ReadBuffer)...но до чтения прога не доходит, зависает в цикле while(HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)0x94, aTxBuffer, (uint16_t)1, (uint32_t) 1000) != HAL_OK). Адрес микросхемы 0х94 - по даташиту. Находил несколько статей по работе именно с этой микросхемой на этой плате, код примерно такой же. Смотрел видео-пример по работе с часами реального времени, там код вообще совпадает. Если кто работал с этой микросхемой, подскажите плз, где я мог накосячить? Код минимальный.
  3. Спасибо, что помогаете мне :a14: Вы еще что-нибудь обнаружили в проекте плохое?
  4. Да, увидел. Возможно это просто опечатка в названии...
  5. Я пока не захватываю данные внутрь ПЛИСки вообще. Пока просто выставляю управляющие сигналы на входы EZ, и снимаю картинку встроенным анализатором прям на ногах ПЛИС (ну почти на ногах, внутри ПЛИС рядом с ногами). Сегодня снял картинку, тактируя анализатор 150 МГц: Можно сказать, что это на ногах EZ. На EZ с компа записываю все 0хЕЕ, на ногах должно быть: cy_fd(7) = 0 cy_fd(6) = 1 cy_fd(5) = 1 cy_fd(4) = 1 ...но это не получается ( UPD: Если кто-нибудь сможет разобраться в проекте на эклипсе, будет клёвооо!!! SlaveFifoSync__MYYY__ECLIPSE.rar
  6. Тааак...вот, что нарыл еще: сделал запись тем же самым внутренним анализатором, но записывал на частоте 50 МГц. Т.е. верхняя шкала, это такты частоты 50 МГц. Данные должны чередоваться 0xA - 0x5 - 0xA - 0x5... всего 8 слов (четыре Ф, четыре 5) Два средних бита нормально ставятся, а вот два крайних (страший и младший) какие-то неуверенные. Старший вроде становится в 1, когда должно быть А, но только в самом конце удержания слова и то...на очень короткое время. Хотя может быть это просто наводки с проводов. Верхний сигнал - это тактовая, которую я подаю на EZ, она 50 МГц деленная на 4. Её я подаю инверсной по отношению к той на которой работает ПЛИСка. Кстати, пробовал и не инверсную подавать - результат тот же. З.Ы.: лучше пока не становится ((
  7. Сегодня немного продвинулся...получил пару битиков "правильных" данных ))) Но в том-то и дело, что всего лишь пару битов из слова: Вот, какие данные я подавал: И вот, какая циклограмма получилась: Сейчас у меня проводками подключены только 4 разряда данных (DQ0..DQ3) и они на картинке cy_fd7..cy_fd4. 4-й и 7-й биты при активации кипариса падают в 0 и не дышат...а два других что-то кажут, но тоже пока не понятно...как-то неуверенно это делают. Бедаааа..... Мне бы кто подарил прошивочку бодрую/рабочую на этот cypress :crying:
  8. Нет, работа будет только с одним девайсом. Я пробовал ставить CS=0 на постоянку. Это SignalTap, инструмент отладки прям внутри ПЛИС, встроенный отладчик (анализатор внутренних сигналов проекта ПЛИС). Похожий код у меня тоже используется в программе для компа. Но для выдачи данных я использую также и программу ControlCenter от кипариса. Да я бы понял, если бы вообще не работало ничего, значит косяк СИЛЬНЫЙ в кодах. Но здесь же, когда ПЛИС вычитывает ФИФО, то оно после чтения данных опустошается, количество считываемых данных, после которого ФИФО становится пустым, совпадает с количеством подаваемых с компа данных. Это вы в каких кодах переделывали? Наверное для FX2? Для FX3 примеры идут под Эклипс. Пробовал найти в этих проектах похожие слова...нашел только такое: т.е. типа нет в этих проектах таких макросов... Вот автомат состояний FX3 из одного из примеров, который я использовал (из программы GPIF II Designer). Там видно условие перехода в режим чтения...прям как у меня сделано...
  9. Да, все так и получается...данные типа вычитываются, флаги меняются как надо...но самих данных нет... Попробовал асинхр. режим...толку ноль. Здесь самая беда в том, что я почти не понимаю проекты для МК cypress, которые пишутся на эклипсе. Я не понимаю, где и что надо изменить или добавить, чтобы перевести чип в режим работы СлейвФИФО без вмешательства МК, т.е. в режим AUTO (где-то вычитал, что такое можно). Огромная просьба поделиться прошивкой для чипа cypress...я просто не могу ничего понять ((( Блинн........... Что вообще надо этой фигне сделать????? Все примеры перепробовал... Про всякие там "длительность управляющих сигналов, синфазность и т.п." рассуждать нет смысла, т.к. в доках все делается просто, на CS подается 0, на OE подается 0, на RD подается 0. На остальные подается 1...всё, чтение сделано. С другой стороны, если бы данные с компа не записывались в буферы чипа, то флаги не устанавливались бы...и т.д. ПЛЗЗЗ!!! Памагите люди добрые!!!
  10. На днях попробую асинхронный режим (времени вообще нет). Но в чем меня убивает текущий синхронный режим, так это то, что флаги-то от ФИФО идут какими и должны быть при чтении. Когда данные кончаются, т.е. все вычитаны, то они возвращаются в исходное состояние...но данные = 0.
  11. Был очень занят, некогда было пока этим заниматься... Я не совсем понял, что значит без GPIF? Можете подробнее сказать? глядя на эту картинку из даташита, без GPIF никак не получится.
  12. Да, кстати про нижний предел тактовой...он 5 МГц! Но я пробовал и на 10-50 МГц - результат примерно тот же. Про #def'ы спасибо, посмотрю. На диаграмме тактирование идет самой тактовой PCLK.
  13. Маркировка чипа - CYUSB3014-BZX (или 8ZX - очень плохо читается) CYP 623831 Стробирование по линии PCLK, у чипа она настроена как вход (без этих тактов даже флаг С не изменяется) CS настроен на активный уровень 0...пробовал его чуть ранее выставлять в 0 и не снимать вообще...никакой разницы. Номер ФИФО выставлен в "11" (т.е. 3) (с другими номерами никакой реакции чипа не наблюдается) CLK как писал выше подается на PCLK (25 кГц) В целом моя циклограмма похожа на те, что приводятся в документации, но результат совсем не тот. Очень большие подозрения, что нужно что-то сделать с процессором чипа, но что там и как...очень грустно лезть в эти изучения, да и времени уйдет не один месяц ( Очень надеялся, что будет, как с FTDI...настроил в FT_PROG галочки, зашил и забыл про этот чип...только и пиши программы для устройств, использующих его. Асинхронный режим попробую...но он мне не нужен, в дальнейшем нужна максимально возможная скорость обмена.
  14. Добрый день всем. Пытаюсь запустить обмен ПЛИС с EZ-USB FX3 в режиме синхронного Slave FIFO. На данный момент добился того, что ПЛИС читает данные из этого ФИФО...но только одни ноли ) Очень нужна помощь опытного пользователя данных типов USB-мостов. В-общем, я опишу, что и как я сделал, а вы, если в теме, подскажите (плзз), что я делаю не так 1. Из фирменного архива AN65974.zip ввзял примерный проект для настрой GPIF II "GPIFII_Designer_sync_SlaveFIFO.cydsn" и доработал его следующим образом Все флаги имеют активный уровень 1, а инициализацию 0. 2. Полученный после компиляции файл cyfxgpif2config.h копирую в папку с фирменным примером "SlaveFifoSync" из того же архива. Что там где изменять в проекте под Еклипсом, я не знаю...поэтому просто компилю его. 3. Результирующий файл SlaveFifoSync.img из папки "Release" заливаю в EEPROM платы EZ-USB FX3. 4. Для ПЛИСки написал управление ногами GPIF ФИФО. По циелограмме работы требуется сначал почитать одно слово из ФИФО, проанализировать его и уже потом продолжить чтение остальных слов из ФИФО. Когда подключал плату с ПЛИС к плате USB моста, у меня кончились проводнички, поэтому я вынужден был ограничиться подключением только двух линий ДАННЫХ от ФИФО, поэтому анализировать по SignalTap'у можно только два разряда cy_fd[6] и cy_fd[7]. В-общем, запускаю SignslTap на ПЛИСке, подаю данные на USB-мост, и вижу такую картину ...читаются НОЛИ... По картинке вижу что сначала вычитывается одно слово, затем пауза в один такт, затем читается все остальное. Тактирование обмена с ФИФО ведет ПЛИС с чатотой около 25 кГц (системную тактовую ПЛИС 50 МГц поделил на 2000...для опытов). То, что данные вычитываются из ФИФО - это факт. Если данные из ФИФО не вычитываются (если ПЛИС не подключать к ФИФО), то после нескольких подач данных с компа мост вешается намертво и со стороны компа выдаются ошибки. А с моей прошитой ПЛИСкой мост не зависает при многократных подачах данных. Кто что может сказать о правильности моих действий?
  15. В-общем, как-то случайно нарыл в инете решение. Оказывается нужно было подключать библиотеку cyapi не .lib, а .a Наткнулся на форуме cypress'a как один чел другому описывал, с какими средами возможно использование .lib, и там он конкретно написал о неподдержке Qt. И уже потом на githab'e нашел исходники этой либы и собранную под mingw. В итоге: программа видит плату, выдает на неё данные. Теперь надо саму микросхему настроить на работу в режиме ФИФО.
  16. Вы на Qt писали? Если да, то не могли бы скинуть проект, можно даже самый начальный, работающий...а то времени мало, а разбираться с libusb придется какое-то время.
  17. Приветствую. Стоит задача написать подобную прогу на Qt (буквы верные написал, на всякий случай) для обмена с EZ-USB FX3 (Cypress). Почитал по инету, наткнулся на вашу тему. Ясно, что нужно подключить указанные 4 библиотеки... Первые три я нашел, но вот legacy_stdio_definitions.lib не могу найти. Подскажите, где её найти? И еще, без неё проект не собирается? Писал проги для работы с FTDI - проблем вообще не возникло, подключил либу ftd2xx и все. Здесь же я пока только готовлюсь, но уже какие-то грабли начинаются с подключением кучи библиотек... Неужели Cypress менее заботится о своих потребителях?
  18. Ахахахах...как часто бывает, причина - плохой контакт/непропай :) Получилось так, что соединив платы ПЛИС и FTDI я прозвонил все линии между платами (с обратной стороны разъемов)...и делал это раза три... Сегодня к плате FTDI подцепил еще одну ПЛИСку с проектом АЛЯ-осциллограф и увидел, что сигнал WR# не приходит на FTDI, хотя сигналтап на ПЛИСке-отправителе присуствовал... Не знаю, может порт вылетел или еще чего, но особо выяснять не стал, взял перекинул линию на другой порт...и всё стало норм. Всем спасибо за советы и удачи )) UPD: Позже перепаялся обратно, все стало нормально. Т.е. получилось так, что для прозвонки контакта между штекером разъема и проводом хватало, а вот для нормальной передачи короткого импульса - не хватало.
  19. Привет всем. Делаю управление ПЛИСкой со стороны ПК с применением FT232H в режиме синхронного FIFO. Данные могут быть от одного до 1000 байт. В сторону ПЛИС данные идут стабильно, ПЛИС их читает, все нормально. Но вот обратно из ПЛИС не получается выдать ни одного байта (( Вроде все делаю стандартно: - проверяю TX# чтобы был 0 - ставлю WR#=0 и на каждом такте CLK (от FTDI) подставляю байты - по окончании данных ставлю WR#=1 ...Пока пытаюсь передать 4 байта. На ПК код такой: ftStatus = FT_Write(ftHandle, byOutputBuffer, dwNumBytesToSend, &dwNumBytesSent); if( (ftStatus != FT_OK) || (dwNumBytesSent != dwNumBytesToSend) ) // Did the write-command execute OK? { mdebug("Error in FT_Write"); return -1; // Exit with error } while(1) { qApp->processEvents(); // ftStatus = FT_GetStatus(ftHandle,&RxBytes,&TxBytes,&EventDWord); ftStatus = FT_GetQueueStatus(ftHandle,&RxBytes); if( (ftStatus != FT_OK) ) // Did the FT_GetStatus-command execute OK? { mdebug("Error in FT_GetStatus"); return -1; // Exit with error } mdebug("RxBytes=" + QString::number(RxBytes) + "\tTxBytes=" + QString::number(TxBytes) + "\tEventDWord=" + QString::number(EventDWord)); Sleep(1000); // проверяем наличие данных в приемном буфере микросхемы if (RxBytes > 0) { ftStatus = FT_Read(ftHandle,RxBuffer,RxBytes,&BytesReceived); // по этой команде считываем данные // из микросхемы, RxBuffer содержит сами данные, // RxBytes — количество доступных для чтения данных, // BytesReceived — число принятых данных if (ftStatus == !FT_OK) { mdebug("Error in FT_GetStatus"); return -1; // Exit with error } else { mdebug("Data is OK"); return 0; } } } Сигналтапом в ПЛИСке вижу, что сигналы TX# и WR# имеют запланированные уровни. Но прога на ПК висит в цикле и пишет, что RxBytes = 0. Все связи прозвонил...уже не знаю, к чему придраться... Кто работал с такими микросхемами, подскажите плз, что может быть не так у меня. Буду очень благодарен за рабочие проектики по подобной теме. Вот картина на сигналтапе, здесь я пытаюсь выдать 12 байт 0xFF (не спрашивайте зачем...так надо) Видно, что циклограмма "рабочая"... ...но ПК не видит данных в буфере FT232H...
  20. Приветствую всех. Интересует вопрос, как создать свою библиотеку из исходников, чтобы потом подключать её как library qwerty; Проект будет компилиться и симулироваттся в моделсиме. Например в xilinx ise есть возможность руками прям в проекте её сформировать, указав лишь папку с исходниками и требуемое имя. Заранее спасибо за ответы.
  21. В-общем, похоже нельзя избавиться от калибровки. В файл mig_7series_0_mig_sim.v (топовый файл ядра для симуляции) есть такие строки: parameter SIM_BYPASS_INIT_CAL = "FAST", // # = "OFF" - Complete memory init & // calibration sequence // # = "SKIP" - Not supported // # = "FAST" - Complete memory init & use // abbreviated calib sequence Я пробовал менять значение на SKIP, но при этом калибровка вообще не завершилась. Так что максимум, что можно из этого поиметь, это сокращенный вариант калибровки при значении FAST. Или я что-то не так делаю и все-таки можно полностью избавиться от калибровки??
  22. Посмотрел я эту тему...это все описано для сгенерированного примерного проекта, в котором в тестбенче заводится параметр SIM_BYPASS_INIT_CAL... Плюс ко всему это все на верилоге, а я работаю на vhdl, но не в этом проблема, а в том, что топовый файл MIG-ядра не имеет никаких параметров. Еще я в pdf-ке на ядро нашел всякие параметры. Но не понятно, где их можно изменить...ковырять сгенеренные исходники ядра? или как-то иначе? Кто-нибудь отключал вообще эту калибровку??
  23. Привет всем. Использую Вивадо 2016.4. Недавно начал разбираться с ядром MIG. Настроил, сгенерил, позапускал пример... Написал свой модуль управления с использованием интерфейса UI (сделал это для упрощения себе жизни в дальнейшем). Сейчас немного запарился с моментом, когда RDY падает, а потом снова встает в 1...но с этим я разберусь...главная проблема в том, что при изменении кода приходится заново перезапускать симуляцию (это и понятно), а в начале запуска ядро проводит "долгую" калибровку. На моей машине с i5 и 16Г памяти эта калибровка занимает пол-часа. Подскажите, плз, как отключить этот режим калибровки в начале работы ядра??? Очень думается, что где-то что-то надо установить в 1 или в 0...
  24. При большом желании можно самому написать некую программу-генератор шаблонов... Можно всё это сделать параметризируемое.
  25. Все некогда было написать...сори... В-общем, проблема решилась сама собой. После перезапуска компа и очистки системных временных файлов и т.п. все стало работать ровно. Даже не знаю, с чем это было связано, но это уже второй подобный большой и непонятный косяк со стороны квартуса за время моей работы с ним, причем первая проблема было еще с версией 9.1. В первый раз была проблема в том, что не проходила компиляция проекта и выдавалась какая-то, уже не помню какая, ошибка, смысл которой был вообще левый...И решилось это только пересозданием проекта с подключением ВСЕХ тех же файлов. Так что нужно предусматривать и подвохи со стороны квартуса )