Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: что делать с d2xx?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
spindelsinn
Впервые сталкиваюсь с подобного рода задачей. Ничего не понимаю в драйверах.
Итак нужно установить синхронный фифошный режим на чипе FT232H. Он устанавливается только через драйвер, а именно путем назначения параметра ucMode в FT_SetBitmode.
А что и где менять? Писать свой ftd2xx.dll? Менять имеющийся?

Зараннее спасибо.
XVR
Цитата(spindelsinn @ Aug 11 2011, 11:48) *
А что и где менять?
Ничего менять не надо, а надо писать свою программу, которая будет пользоваться функциями из ftd2xx.dll
Цитата
Писать свой ftd2xx.dll? Менять имеющийся?
Тогда уж начните с изготовления своего USB контролера laughing.gif
spindelsinn
ммм..... спасибо))
понимания что делать не пришло, зато пришло понимание чего точно не делать))
XVR
Цитата(spindelsinn @ Aug 11 2011, 12:18) *
понимания что делать не пришло, зато пришло понимание чего точно не делать))

Понимания того, что вам нужно, у меня тоже нет biggrin.gif
Вы можете 'установить синхронный фифошный режим на чипе FT232H' изнутри программы, которая работает с вашим FT232, причем только в том случае, если она работает с ним через драйвер (и ftd2xx.dll), а не через виртуальный СОМ порт
spindelsinn
Вот код програмки для установки параметра. Но что то она не пашет.

Код
// setbit.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "ftd2xx.h"


void getlist ()
{
    FT_STATUS ftStatus;
    FT_HANDLE ftHandleTemp;
    DWORD numDevs;
    DWORD Flags;
    DWORD ID;
    DWORD Type;
    DWORD LocId;
    char SerialNumber[16];
    char Description[64];
    // create the device information list
    ftStatus = FT_CreateDeviceInfoList(&numDevs);
    if (ftStatus == FT_OK) {
        printf("Number of devices is %d\n",numDevs);
    }
    if (numDevs > 0) {
        // get information for device 0
        ftStatus = FT_GetDeviceInfoDetail(0, &Flags, &Type, &ID, &LocId, SerialNumber, Description, &ftHandleTemp);
        if (ftStatus == FT_OK) {
            printf("Dev 0:\n");
            printf(" Flags=0x%x\n",Flags);
            printf(" Type=0x%x\n",Type);
            printf(" ID=0x%x\n",ID);
            printf(" LocId=0x%x\n",LocId);
            printf(" SerialNumber=%s\n",SerialNumber);
            printf(" Description=%s\n",Description);
            printf(" ftHandle=0x%x\n",ftHandleTemp);
        }
    }
}

int setbit(unsigned char mode)
{
    int ret;

    FT_HANDLE ftHandle;
    FT_STATUS ftStatus;
    UCHAR Mask = 0xff;
    UCHAR Mode = mode; // Set mode
    UCHAR BitMode;

    ftStatus = FT_Open(0, &ftHandle);
    if(ftStatus != FT_OK) {
        // FT_Open failed
        puts("FT_Open failed");
        return -1;
    }

    ftStatus = FT_GetBitMode(ftHandle, &BitMode);
    if (ftStatus == FT_OK) {
        // BitMode contains current value
        printf("FT_GetBitMode return 0x%02X\n", BitMode);
    } else {
        // FT_GetBitMode FAILED!
        puts("FT_GetBitMode FAILED!");
    }

    ftStatus = FT_SetBitMode(ftHandle, Mask, Mode);
    if (ftStatus == FT_OK) {
        // 0xff written to device
        printf("FT_SetBitMode 0x%02X written to device\n", Mode);
        ret = 0;
    } else {
        // FT_SetBitMode FAILED!
        puts("FT_SetBitMode FAILED!");
        ret = -1;
    }

    ftStatus = FT_GetBitMode(ftHandle, &BitMode);
    if (ftStatus == FT_OK) {
        // BitMode contains current value
        printf("FT_GetBitMode return 0x%02X\n", BitMode);
    } else {
        // FT_GetBitMode FAILED!
        puts("FT_GetBitMode FAILED!");
    }
    FT_Close(ftHandle);
    return ret;
}




#define MODE 0x40

int _tmain(int argc, _TCHAR* argv[])
{
    printf("start MODE = 0x%X\n", MODE);
    getlist();
    setbit(MODE);
    getchar();
    
    return 0;
}
XVR
Цитата
Но что то она не пашет.
И как это проявляется?
spindelsinn
тем что в окне программы появляется следующий текст:
start FT_SetBitMode = 0x40
FT_GetBitMode return 0x00
FT_SetBitMode 0x40 written to device
FT_GetBitMode return 0x00

Тоесть ничего не изменилось.

Да и ко всему прочему тактовый сигнал с платы не пошел, а должен был.

XVR
Вроде все правильно. А вы во внешнем EEPROM прописали 245 режим?
Цитата
To set this mode the external EEPROM must be set to 245 modes. A software command (FT_SetBitMode) is then sent by the application to the FTDI D2xx driver to tell the chip to enter 245 synchronous FIFO mode.
spindelsinn
Цитата
А вы во внешнем EEPROM прописали 245 режим?

да.

Всё ни с того ни с сего заработало sm.gif
Спасибо за внимание.
spindelsinn
но на этом приколы не закончились. Линии TXE и RXF Всегда имеют значение 1 и исключают тем самым возможность чтения и записи. Что не так?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.