реклама на сайте
подробности

 
 
> "Быстрый" USB <=> SPI
COMA
сообщение Feb 4 2008, 14:54
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 851
Регистрация: 28-08-04
Пользователь №: 559



Добрый день,

Что посоветуете в качестве контроллера USB?
Основное требование - возможность опторазвязки со стороны SPI, ну и достаточно высокая скорость обмена.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Feb 14 2008, 09:43
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Дошли наконец руки поисследовать 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, но клоки немного не симмитричные в разных посылках по разному.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 22:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01285 секунд с 7
ELECTRONIX ©2004-2016