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

USB интерфейс с помощью CY7C68013A.

Подниму тему.

Пробую делать обмен с PC через Slave FIFO 8бит Асинхронный CY7C68013A. Помучился уже нормально, не работает... Не понимаю как прочитать данные из fifo. Флаг EP2_Full поднимается по приходу первого байта. Читаю как описано в даташите для Auto Mode: Synchronous FIFO OUT Data Transfers. Но флаг не сбрасывается обратно, и данные не считываются. Пара вопросов.

1. Обязательно ли надо управлять пинами FIFOADR[1:0] при чтениие, или чип выбирает FIFO автоматически?

2. Нужно ли обязательно использовать сигнал SLOEnanle или достаточно SLRD? как строб чтения и вывод данных

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


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

Все это мы с проходили лет 10 назад, поэтому что помню, могу ошибаться.

1. FIFOADR[1:0] с помощью этих пинов вы выбираете с каким FIFO вы будет производить обмен. Соответственно это надо задать одинаково в прошивке и снаружи.

2. С помощью sloe мы разрешаем CY7C68013A выводить данные, т.е. шина данных выходит из высокоимпедансного состояния и становится выходами.

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


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

За 10 лет никто ничего более толкового не сделал, чип актуален и ныне. Да, затык был в SLOE. Я его посчитал избыточным, не подключил и удалил из сигналов в GPIF Designer. Но это наверно аппаратная функция, из без него не прочитать буфер.

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


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

Следующий вопрос.

Как только я ставлю строб считывания SLRD,  флаг FULL переходит в не активное состояние. Теперь надо читать флаг  EMPTY.  Это совместить нельзя? Например, если данные в буфере есть - флаг активен, нет - сбрасывается.  Пинов на проце не хватает.

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


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

3 hours ago, Gradient said:

За 10 лет никто ничего более толкового не сделал, чип актуален и ныне. Да, затык был в SLOE. Я его посчитал избыточным, не подключил и удалил из сигналов в GPIF Designer. Но это наверно аппаратная функция, из без него не прочитать буфер.

Ну не знаю. ИМХО FTDI более интересны в этом плане. И проще и поддержка ОС гораздо лучше. Какой-нибудь FT2322H

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


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

22 minutes ago, Gradient said:

FTDI High Speed позволяют из подключенного контроллера оперативно менять vid pid?

Опуская кучу вопросов, начиная от "зачем?" до степени "оперативности", отвечу: надо курить доки, подсказать не могу:biggrin:

Я рассматриваю FTDI с точки зрения стыка с устройствами (в моему случае это ПЛИС-ПК). Работал и с cypress и с FTDI. FTDI оставил гораздо более положительное впечатление по простоте реализации с обоих сторон.

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


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

Заказал на пробу FT232H, посмотрим. Кипарис меня полностью устраивает, он очень гибкий и не дорогой. Надо решить непонятку с чтением в Асинхронном режиме. Дока - редкостное говно как и индусские примеры. Там например в Manual на странице 110 про флаги ничего! Не понятно что с этим делать.  https://www.cypress.com/file/126446/download

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


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

10 minutes ago, Gradient said:

Заказал на пробу FT232H, посмотрим. Кипарис меня полностью устраивает, он очень гибкий и не дорогой. Надо решить непонятку с чтением в Асинхронном режиме. Дока - редкостное говно как и индусские примеры. Там например в Manual на странице 110 про флаги ничего! Не понятно что с этим делать.  https://www.cypress.com/file/126446/download

О, так у вас fx2. Попробуйте мануалы вот этих ребят: https://github.com/BitwiseSystems/QuickUSB/tree/master/Documentation

У них на гите куча всяких док и примеров. Правда, это для их кастомной поделки под названием QuickUSB. Но основным чипом там используется как cypress. Так что временные диаграмы и их описание, я думаю, будут применительны к вашему случаю.

Начать рекомендую с: https://github.com/BitwiseSystems/QuickUSB/blob/master/Documentation/QuickUSB_User_Guide_2.15.2.pdf

 

ЗЫ. Там же есть примеры драйверов для вин и для линукс. Тоже, думаю, будет полезно

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


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

22.01.2021 в 16:11, Gradient сказал:

Следующий вопрос.

Как только я ставлю строб считывания SLRD,  флаг FULL переходит в не активное состояние. Теперь надо читать флаг  EMPTY.  Это совместить нельзя? Например, если данные в буфере есть - флаг активен, нет - сбрасывается.  Пинов на проце не хватает.

full             : in      std_logic;        -- =0 - значит FIFO EP6 полностью наполнилось, не используется
empty        : in      std_logic;        -- =0 - значит FIFO EP2 пустое, иначе пришла команда с компьютера
pause        : in      std_logic;        -- 0 - значит FIFO EP6 почти наполнилось

Вот что, я вижу у себя в FPGA. Флаг Empty становится 1, когда пришла команда с компьютера и надо её прочесть. Для приостановки выдачи данных на компьютер я использую флаг pause.

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


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

Пока slave FIFO отложил, очень много пинов нужно а их почти нет. Написал на асме эмуляцию SPI и это работает, но есть непонятка.

Если данные приходят в конечную точку, срабатывает прерывание ISR_Ep2inout().

Их надо сразу перекидывать в свой кольцевой буфер или можно потихоньку побайтно вычитывать как из FIFO?

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


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

По программной части не подскажу, эту часть делал другой человек.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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