Jump to content

    
aleshanoff

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

Recommended Posts

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
3 hours ago, Gradient said:

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

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

Share this post


Link to post
Share on other sites
22 minutes ago, Gradient said:

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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

 

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.