Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование FT2232D
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
BVU
Добрый день, уважаемые!

Для организации 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
Сергей Борщ
QUOTE (BVU @ May 24 2018, 14:06) *
Т.е. чтобы перейти на другой канал B, необходимо закрыть предыдущий (A) выполнив: FT_Close(ftHandle); и по аналогии открытия канала A, открыть канал B, лишь с разницей установки требуемого индекса канала: ftStatus = FT_Open(0, &ftHandle); .
Странный подход. Что вам мешает вместо одного ftHandle завести два- ftHandleA и ftHandleB?

QUOTE (BVU @ May 24 2018, 14:06) *
Вопрос, возможно ли одновременно открыть оба канала и работать с обоими каналами 'одновременно'?
Конечно возможно.
BVU
Цитата(Сергей Борщ @ May 24 2018, 14:24) *
Странный подход. Что вам мешает вместо одного ftHandle завести два- ftHandleA и ftHandleB?

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


Пробовал такой вариант, но при чтении серийного номера любого из открытых каналов (А, В):
ftStatus = FT_ListDevices((PVIOD)devIndex, Buffer, FT_LIST_BY_INDEX | FT_OPEN_BYSERIAL_NUMBER);
данная функция возвращает ошибку!!!

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

С уважение,
BVU
Сергей Борщ
QUOTE (BVU @ May 24 2018, 14:41) *
данная функция возвращает ошибку!!!
1) У вас залипает клавиша с восклицательным знаком, пора менять клавиатуру.
2) Какую именно ошибку возвращает эта функция?
QUOTE (BVU @ May 24 2018, 14:41) *
Если работаешь с одним каналом, то всё замечательно...
Приведите больше кода.
BVU
Цитата(Сергей Борщ @ May 24 2018, 15:55) *
2) Какую именно ошибку возвращает эта функция?

статус возвращенный выполняемой функцией принятый в 2DXX Direct:
ftStatus = 1 - false;
ftStatus = 0 - true;

С уважением,
BVU

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

С уважением,
BVU
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.