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

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

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...