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

что делать с d2xx?

Впервые сталкиваюсь с подобного рода задачей. Ничего не понимаю в драйверах.

Итак нужно установить синхронный фифошный режим на чипе FT232H. Он устанавливается только через драйвер, а именно путем назначения параметра ucMode в FT_SetBitmode.

А что и где менять? Писать свой ftd2xx.dll? Менять имеющийся?

 

Зараннее спасибо.

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


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

А что и где менять?
Ничего менять не надо, а надо писать свою программу, которая будет пользоваться функциями из ftd2xx.dll

Писать свой ftd2xx.dll? Менять имеющийся?
Тогда уж начните с изготовления своего USB контролера :laughing:

 

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


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

ммм..... спасибо))

понимания что делать не пришло, зато пришло понимание чего точно не делать))

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


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

понимания что делать не пришло, зато пришло понимание чего точно не делать))

Понимания того, что вам нужно, у меня тоже нет :biggrin:

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

 

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


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

Вот код програмки для установки параметра. Но что то она не пашет.

 

// 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;
}

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


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

тем что в окне программы появляется следующий текст:

start FT_SetBitMode = 0x40

FT_GetBitMode return 0x00

FT_SetBitMode 0x40 written to device

FT_GetBitMode return 0x00

 

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

 

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

 

 

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


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

Вроде все правильно. А вы во внешнем 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.

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


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

А вы во внешнем EEPROM прописали 245 режим?

да.

 

Всё ни с того ни с сего заработало :)

Спасибо за внимание.

Изменено пользователем spindelsinn

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


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

но на этом приколы не закончились. Линии TXE и RXF Всегда имеют значение 1 и исключают тем самым возможность чтения и записи. Что не так?

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


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

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

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

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

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

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

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

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

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

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