Jump to content

    
Sign in to follow this  
COMA

"Быстрый" USB <=> SPI

Recommended Posts

Добрый день,

 

Что посоветуете в качестве контроллера USB?

Основное требование - возможность опторазвязки со стороны SPI, ну и достаточно высокая скорость обмена.

Share this post


Link to post
Share on other sites
Добрый день,

 

Что посоветуете в качестве контроллера USB?

Основное требование - возможность опторазвязки со стороны SPI, ну и достаточно высокая скорость обмена.

 

Если нужен только мастер:

 

IMHO самое быстрое и дешовое решение использовать FTDI FT232R или FT245R, именно новую R серию там на борту есть и генератор и еепром и замечательный режим Synchro Bit Bang - spi влет реализуется причем на скорости до 48 mbit. (Сам пробовал на 1Mгц на одной плате стоит FT245R и AVR для апдейта прошивки выше не нужно было)

 

Можно купить готовый кабель (баксов за 20 - 25) TTL-232R или TTL-232R-3V3

Edited by KRS

Share this post


Link to post
Share on other sites

С реализацией SPI на переходнике USB_to_COM надо быть осмотрительнее. Использовал переходник на микросхеме Prolific - получилось, но очень медленно.

http://electronix.ru/forum/index.php?showtopic=38836&hl=

Share this post


Link to post
Share on other sites
С реализацией SPI на переходнике USB_to_COM надо быть осмотрительнее. Использовал переходник на микросхеме Prolific - получилось, но очень медленно.

http://electronix.ru/forum/index.php?showtopic=38836&hl=

Так принцип совсем иной - там полинг и частоту выше 1 кгц вообще не получить ( так было и на FTDI старых с обычным bitbang туда скорость огромная, а если надо считывать то все тормозит) а с synchro bit bang у вас синхронный поток скорость завист от длины пакета если передавать большими блоками то КПД к 100% приближается.

Share this post


Link to post
Share on other sites
IMHO самое быстрое и дешовое решение использовать FTDI FT232R или FT245R, именно новую R серию там на борту есть и генератор и еепром и замечательный режим Synchro Bit Bang - spi влет реализуется причем на скорости до 48 mbit. (Сам пробовал на 1Mгц на одной плате стоит FT245R и AVR для апдейта прошивки выше не нужно было)

KRS, а можно на схемку взглянуть (использование FT232RL с SPI)?

Edited by sergeeff Jr.

Share this post


Link to post
Share on other sites
KRS, а можно на схемку взглянуть (использование FT232RL с SPI)?

Да собственно схема то состоит из одной микросхемы FT232RL и пары конденсаторов.

В даташите есть пример example USB to MCU UART interface. Просто вместо MCU выберите 3 ноги (которые могут участвовать в бит банг) это и будет SPI

 

Если делать на FT2232C/D то надо еще генератор ставить и чип дороже стоит ( зато SPI там аппаратный практически не надо преобразовывать в последовтаельность бит)

Edited by KRS

Share this post


Link to post
Share on other sites
Да собственно схема то состоит из одной микросхемы FT232RL и пары конденсаторов.

В даташите есть пример example USB to MCU UART interface. Просто вместо MCU выберите 3 ноги (которые могут участвовать в бит банг) это и будет SPI

 

Если делать на FT2232C/D то надо еще генератор ставить и чип дороже стоит ( зато SPI там аппаратный практически не надо преобразовывать в последовтаельность бит)

 

Если правильно понял у FT2232C/D есть режим "Fast Opto-Isolated Serial Interface". Стоит на него ориентироваться?

Share this post


Link to post
Share on other sites
Если правильно понял у FT2232C/D есть режим "Fast Opto-Isolated Serial Interface". Стоит на него ориентироваться?

Fast Opto-Isolated Serial Interface правильно работает на частоте до 6МГц, выше идут сбои. К тому же в SPI еще преобразовывать надо.

Share this post


Link to post
Share on other sites

Дошли наконец руки поисследовать Synchro Bit Bang

Исследовал на FT245RL.

Для начала с помощью простейшей программки

#include <windows.h>
#include <stdlib.h>
#include <assert.h>
#include "ftd2xx.h"

#define SCK_PIN 5
#define OUT_PIN 6
FT_HANDLE hFtdi;
unsigned buf[4];
int main(int argc, char* argv[])
{
    unsigned tmp;
    unsigned baud;
    DWORD num;

    assert(FT_Open(0,&hFtdi)==FT_OK);
    assert(FT_SetLatencyTimer(hFtdi,2)==FT_OK);
    assert(FT_SetBitMode(hFtdi,(1<<OUT_PIN) | (1<<SCK_PIN),4)==FT_OK);
    assert(argc>1);
    baud = atoi(argv[1]);
    assert(baud);
    assert(FT_SetBaudRate(hFtdi,baud)==FT_OK);
    FT_Purge(hFtdi,FT_PURGE_RX | FT_PURGE_TX);
    tmp = (1<<OUT_PIN) | (1<<SCK_PIN);
    assert(FT_Write(hFtdi,&tmp,1,&num)==FT_OK);
    Sleep(10);
    FT_Purge(hFtdi,FT_PURGE_RX | FT_PURGE_TX);
    Sleep(10);

    while(1) {
        tmp = (((1<<OUT_PIN) | (1<<SCK_PIN))<<8) | (((1<<OUT_PIN) | (1<<SCK_PIN))<<24);
        buf[0] = tmp;
        buf[1] = tmp;
        buf[2] = tmp;
        buf[3] = tmp;
        assert(FT_Write(hFtdi,buf,16,&num)==FT_OK);
        assert(FT_Read(hFtdi,buf,16,&num)==FT_OK);
        Sleep(2000);
    }

    return 0;
}

 

Результаты как и следовало ожидать очень интересные.

Как я уже выяснил давно ( еще и на старых FTDI с обычным bitbang ) баудрейт задает максимальную скорость выдачи семплов иногда возникают существенные задержки в произвольном месте(и это не связно с передачей по USB данные уходят в одном пакете). Что сделало невозможным использование тогда для С2 интерфейса (там клоки на ресет идут). Но тогда я не пробовал ставить бауд рейт выше 1E6/16 = 62500. А сейчас попробовал и вот что получилось:

 

Для баудрейта 62500 частота выдачи должна быть 1 mhz, так и получается, но произвольные задержки в разных местах иногда возникают.

Ставлю бауд рейт 187500 (187500*16 = 3 Mhz = 0.33 mks) на оцилографе вижу минимум ~ 0.66

Вообще судя по всему получается для бауд рейтов выше 62500 ( 1 mhz) частота выдачи получается странная и по осцилографу не получается выше 0.5 с маленьким хвостиком mks т.е. практически 2 mhz. Но произвольные паузы присутсвуют :(

 

Но самое интересное получается если баудрейт установить 3 000 000.

Получается идеальная картинка с частотой практически 1 Mhz ( т.е. частота выдачи 2 mhz) и никаких пауз.

 

Для баудрейта 1 000 000 тоже пауз не заметил частота практически та же что и для 3 000 000, но клоки немного не симмитричные в разных посылках по разному.

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.

Sign in to follow this