BVU 0 24 мая, 2018 Опубликовано 24 мая, 2018 · Жалоба Добрый день, уважаемые! Для организации 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 24 мая, 2018 Опубликовано 24 мая, 2018 · Жалоба Т.е. чтобы перейти на другой канал B, необходимо закрыть предыдущий (A) выполнив: FT_Close(ftHandle); и по аналогии открытия канала A, открыть канал B, лишь с разницей установки требуемого индекса канала: ftStatus = FT_Open(0, &ftHandle); .Странный подход. Что вам мешает вместо одного ftHandle завести два- ftHandleA и ftHandleB? Вопрос, возможно ли одновременно открыть оба канала и работать с обоими каналами 'одновременно'?Конечно возможно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 24 мая, 2018 Опубликовано 24 мая, 2018 · Жалоба Странный подход. Что вам мешает вместо одного ftHandle завести два- ftHandleA и ftHandleB? Конечно возможно. Пробовал такой вариант, но при чтении серийного номера любого из открытых каналов (А, В): ftStatus = FT_ListDevices((PVIOD)devIndex, Buffer, FT_LIST_BY_INDEX | FT_OPEN_BYSERIAL_NUMBER); данная функция возвращает ошибку!!! Если работаешь с одним каналом, то всё замечательно... С уважение, BVU Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 24 мая, 2018 Опубликовано 24 мая, 2018 · Жалоба данная функция возвращает ошибку!!!1) У вас залипает клавиша с восклицательным знаком, пора менять клавиатуру. 2) Какую именно ошибку возвращает эта функция? Если работаешь с одним каналом, то всё замечательно...Приведите больше кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 25 мая, 2018 Опубликовано 25 мая, 2018 · Жалоба 2) Какую именно ошибку возвращает эта функция? статус возвращенный выполняемой функцией принятый в 2DXX Direct: ftStatus = 1 - false; ftStatus = 0 - true; С уважением, BVU P.S. Сергей, спасибо, что вы пытаетесь мне помочь! А практически, вы сами работали с FT2232 в таком режиме? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 25 мая, 2018 Опубликовано 25 мая, 2018 · Жалоба Всем спасибо за участие! Вопрос снимается... была путаница в индексации каналов С уважением, BVU Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться