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

billidean

Свой
  • Постов

    245
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о billidean

  • Звание
    Местный
    Местный

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

2 283 просмотра профиля
  1. Спасибо всем, текущая проблема решена... Не увидел сначала на схеме, что на Reset по умолчанию подан ноль. Подцепил порт PD4, подал на него 1 - и все заработало. Но это я только начал с этим разбираться, возможно дальше еще на что-нибудь "наступлю" ...тогда продолжу эту тему..
  2. I2C на плате STM32F4Discovery

    Добрый день. Изучаю работу с 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. В итоге: программа видит плату, выдает на неё данные. Теперь надо саму микросхему настроить на работу в режиме ФИФО.
×
×
  • Создать...