Jump to content

    
Sign in to follow this  
BVU

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

Recommended Posts

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

 

Для организации 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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this