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

 
 
> FT2233H в SPI режиме обеспечивает дуплекс?
misyachniy
сообщение Jan 12 2012, 17:50
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



В AN 135: http://www.ftdichip.com/Support/Documents/...SPI_Example.pdf,
написано следующее:
Цитата
"Full duplex data transfers can be made up to 30 Mbits/sec with the FT2232H. There is no fixed bit length in
SPI. A generic SPI system consists of the following signals and is illustrated in Figure 1."

В примере есть отдельные функции чтения и записи по SPI.
Обмена в дуплексном режиме я не нашел.
В функции чтения есть возможность передать управляющий поток бит WriteControlBuffer, а затем прочитать ответ устройства на него -ReadDataBuffer.
Цитата
Status = SPI_ReadHiSpeedDevice(ftHandle, &ReadStartCondition, true, false, NUM_93LC56B_CMD_CONTOL_BITS,
&WriteControlBuffer, NUM_93LC56B_CMD_CONTOL_BYTES, true, false, NUM_93LC56B_CMD_DATA_BITS, ReadDataBuffer,
&dwNumDataBytesReturned, &HighPinsWriteActiveStates);

Тут автор корневого поста пишет, что дуплекс есть.
http://www.edaboard.com/thread114333.html
Цитата
Since SPI is a full duplex transfer

Fruity 4 часа пытался организовать дуплекс, но результата не получил.
Цитата
I actually have a similar question about FT2232 ( I am using the FT2232H but the principle is the same ).

I am trying to use the bidirectional feature of SPI.
I want to send one byte via MOSI while receiving one byte via MISO, so all that in 8 SPI CLK.

I have searched and searched for hours, and can't make it work. It is has if everything was always half duplex.


В режме запись/чтение я с этим чипом работал много, почти год. "Лишних байт" не получал и не принимал.
Сейчас понадобился дуплекс. Я пробовал читать с нулевой и ненулевой длиной "WriteControlBuffer"
При чтении с нулевой длиной, читается требуемые мне 6 байт, при добавлении 6 байтной команды - посылка удлиняется в два раза.

Так есть дуплекс или нет?


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ReAl
сообщение Jan 16 2012, 22:00
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Несколько мс - это разбивка на несколько независимых USB-ных обменов выходит. У меня CS-а то как такового нет, RESET при программировании AVR меняется нечасто и неспеша. Думаю, нужно просто одним FT_Write отправлять и CS, и данные, как-то так:

Код
    index = 0;
    // Активизировать CS - это фрагмент из моего update_signals, которым я CS да светодиоді дергаю
    buffer[index++] = ftdi_chip_t::MPSSE_SET_LOW_BYTE;
    buffer[index++] = LINE_STATE_WITH_CS_ACTIVE; // тут правильные начальные полярности
    buffer[index++] = LINE_DIRECTION;
    // Отправить данные по SPI
    buffer[index++] = shift_mode | ftdi_chip_t::MPSSE_WRITE_TDI | ftdi_chip_t::MPSSE_READ_TDO;
    buffer[index++] = len - 1;
    buffer[index++] = (len - 1) >> 8;
    memcpy(buffer + index, obuf, len);
    index += len;
    // Побыстрее получить ответ
    buffer[index++] = ftdi_chip_t::MPSSE_SEND_IMMEDIATE;
    // Деактивизировать CS
    buffer[index++] = ftdi_chip_t::MPSSE_SET_LOW_BYTE;
    buffer[index++] = LINE_STATE_WITH_CS_PASSIVE;
    buffer[index++] = LINE_DIRECTION;

    ft2232_->write(buffer, index);
    ft2232_->read(ibuf, len);


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 07:36
Рейтинг@Mail.ru


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