Перейти к содержанию

    

Использование FT2232D

Добрый день, уважаемые!

 

Для организации USB канала, была выбрана микросхема - FT2232D (режим работы: 245 FIFO). Как известно у неё существуют два канала: A и B.

Во многих статьях посвященных данному устройству (FT2232), а так же в описании от производителя, говориться, что эти каналы настраиваются и работают независимо друг от друга...

Но при использовании библиотеки высшего уровня для программирования (D2XX Direct), мы имеем следующее:

 

1. чтобы открыть канал передачи необходимо выполнить:

#include "ftd2xx.h"

FT_HANDLE ftHandle; // Handle of the FTDI device

FT_STATUS ftStatus;

ftStatus = FT_Open(1, &ftHandle); // Открытие канала A

if (ftStatus == FT_OK)

{ ... }

else

{ ... }

 

2. что бы передать или принять данные используем функции:

ftStatus = FT_Read(ftHandle, RxBuffer, dwByteToRead, &dwByteReseived);

и

ftStatus = FT_Write(ftHandle, TxBuffer, dwByteToWrite, &dwBytesWritten);

 

Как видно, что в функциях FT_Read и FT_Write идентификатором работы с устройством является Handle - ftHandle, который так же жёстко привязан к номеру канала, который мы открыли ранее (A).

Т.е. чтобы перейти на другой канал B, необходимо закрыть предыдущий (A) выполнив: FT_Close(ftHandle); и по аналогии открытия канала A, открыть канал B, лишь с разницей установки требуемого индекса канала: ftStatus = FT_Open(0, &ftHandle); .

 

Вопрос, возможно ли одновременно открыть оба канала и работать с обоими каналами 'одновременно'??!

 

С уважением,

VBU

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Т.е. чтобы перейти на другой канал B, необходимо закрыть предыдущий (A) выполнив: FT_Close(ftHandle); и по аналогии открытия канала A, открыть канал B, лишь с разницей установки требуемого индекса канала: ftStatus = FT_Open(0, &ftHandle); .
Странный подход. Что вам мешает вместо одного ftHandle завести два- ftHandleA и ftHandleB?

 

Вопрос, возможно ли одновременно открыть оба канала и работать с обоими каналами 'одновременно'?
Конечно возможно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Странный подход. Что вам мешает вместо одного ftHandle завести два- ftHandleA и ftHandleB?

 

Конечно возможно.

 

Пробовал такой вариант, но при чтении серийного номера любого из открытых каналов (А, В):

ftStatus = FT_ListDevices((PVIOD)devIndex, Buffer, FT_LIST_BY_INDEX | FT_OPEN_BYSERIAL_NUMBER);

данная функция возвращает ошибку!!!

 

Если работаешь с одним каналом, то всё замечательно...

 

С уважение,

BVU

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
данная функция возвращает ошибку!!!
1) У вас залипает клавиша с восклицательным знаком, пора менять клавиатуру.

2) Какую именно ошибку возвращает эта функция?

Если работаешь с одним каналом, то всё замечательно...
Приведите больше кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2) Какую именно ошибку возвращает эта функция?

статус возвращенный выполняемой функцией принятый в 2DXX Direct:

ftStatus = 1 - false;

ftStatus = 0 - true;

 

С уважением,

BVU

 

P.S. Сергей, спасибо, что вы пытаетесь мне помочь! А практически, вы сами работали с FT2232 в таком режиме?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем спасибо за участие! Вопрос снимается... была путаница в индексации каналов

 

С уважением,

BVU

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация