Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: "Быстрый" USB <=> SPI
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
COMA
Добрый день,

Что посоветуете в качестве контроллера USB?
Основное требование - возможность опторазвязки со стороны SPI, ну и достаточно высокая скорость обмена.
KRS
Цитата(COMA @ Feb 4 2008, 17:54) *
Добрый день,

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


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

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

Можно купить готовый кабель (баксов за 20 - 25) TTL-232R или TTL-232R-3V3
san822
С реализацией SPI на переходнике USB_to_COM надо быть осмотрительнее. Использовал переходник на микросхеме Prolific - получилось, но очень медленно.
http://electronix.ru/forum/index.php?showtopic=38836&hl=
KRS
Цитата(san822 @ Feb 4 2008, 18:52) *
С реализацией SPI на переходнике USB_to_COM надо быть осмотрительнее. Использовал переходник на микросхеме Prolific - получилось, но очень медленно.
http://electronix.ru/forum/index.php?showtopic=38836&hl=

Так принцип совсем иной - там полинг и частоту выше 1 кгц вообще не получить ( так было и на FTDI старых с обычным bitbang туда скорость огромная, а если надо считывать то все тормозит) а с synchro bit bang у вас синхронный поток скорость завист от длины пакета если передавать большими блоками то КПД к 100% приближается.
sergeeff Jr.
Цитата(KRS @ Feb 4 2008, 19:23) *
IMHO самое быстрое и дешовое решение использовать FTDI FT232R или FT245R, именно новую R серию там на борту есть и генератор и еепром и замечательный режим Synchro Bit Bang - spi влет реализуется причем на скорости до 48 mbit. (Сам пробовал на 1Mгц на одной плате стоит FT245R и AVR для апдейта прошивки выше не нужно было)

KRS, а можно на схемку взглянуть (использование FT232RL с SPI)?
rezident
Цитата(sergeeff Jr. @ Feb 4 2008, 21:14) *
KRS, а можно на схемку взглянуть (использование FT232RL с SPI)?

ИМХО тут смотрите. http://www.ftdichip.com/Documents/AppNotes.htm
В частности AN232R-01 и AN2232-01.
KRS
Цитата(sergeeff Jr. @ Feb 4 2008, 19:14) *
KRS, а можно на схемку взглянуть (использование FT232RL с SPI)?

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

Если делать на FT2232C/D то надо еще генератор ставить и чип дороже стоит ( зато SPI там аппаратный практически не надо преобразовывать в последовтаельность бит)
sergeeff Jr.
Спасибо!
COMA
Цитата(KRS @ Feb 4 2008, 20:21) *
Да собственно схема то состоит из одной микросхемы FT232RL и пары конденсаторов.
В даташите есть пример example USB to MCU UART interface. Просто вместо MCU выберите 3 ноги (которые могут участвовать в бит банг) это и будет SPI

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


Если правильно понял у FT2232C/D есть режим "Fast Opto-Isolated Serial Interface". Стоит на него ориентироваться?
Warlord
Цитата(COMA @ Feb 5 2008, 08:42) *
Если правильно понял у FT2232C/D есть режим "Fast Opto-Isolated Serial Interface". Стоит на него ориентироваться?

Fast Opto-Isolated Serial Interface правильно работает на частоте до 6МГц, выше идут сбои. К тому же в SPI еще преобразовывать надо.
COMA
понятно. sad.gif
KRS
Дошли наконец руки поисследовать 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. Но произвольные паузы присутсвуют sad.gif

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


Для баудрейта 1 000 000 тоже пауз не заметил частота практически та же что и для 3 000 000, но клоки немного не симмитричные в разных посылках по разному.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.