Jump to content

    

Использование 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

Share this post


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

 

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

 

Share this post


Link to post
Share on other sites
Странный подход. Что вам мешает вместо одного ftHandle завести два- ftHandleA и ftHandleB?

 

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

 

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

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

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

 

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

 

С уважение,

BVU

Share this post


Link to post
Share on other sites
данная функция возвращает ошибку!!!
1) У вас залипает клавиша с восклицательным знаком, пора менять клавиатуру.

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

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

Share this post


Link to post
Share on other sites
2) Какую именно ошибку возвращает эта функция?

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

ftStatus = 1 - false;

ftStatus = 0 - true;

 

С уважением,

BVU

 

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

Share this post


Link to post
Share on other sites

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

 

С уважением,

BVU

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this