对不起我的无知,但我是FTDI芯片Linux软件开发的新手。 我有基于FT245RL芯片的模块,编程为4端口输出(继电器)和4端口光隔离输入单元。 我在C中的Internet程序中发现打开/关闭连接到输出D0到D3的继电器。编译后它可以正常工作。以下工作计划草案:
/* switch4.c
* # gcc -o switch4 switch4.c -L. -lftd2xx -Wl,-rpath,/usr/local/lib
* Usage
* # switch4 [0-15], for example # switch4 1
* */
#include <stdio.h>
#include <stdlib.h>
#include "./ftd2xx.h"
int main(int argc, char *argv[])
{
FT_STATUS ftStatus;
FT_HANDLE ftHandle0;
int parametr;
LPVOID pkod;
DWORD nBufferSize = 0x0001;
DWORD dwBytesWritten;
if(argc > 1) {
sscanf(argv[1], "%d", ¶metr);
}
else {
parametr = 0;
}
FT_SetVIDPID(0x5555,0x0001); // id from lsusb
FT_Open(0,&ftHandle0);
FT_SetBitMode(ftHandle0,15,1);
pkod=¶metr;
ftStatus = FT_Write(ftHandle0,pkod,nBufferSize,&dwBytesWritten);
ftStatus = FT_Close(ftHandle0);
}
我的问题是。如何读取同一程序,D4到D7引脚的状态,编程为输入?我的意思是“printf”表示输入引脚(或所有输入/输出引脚)的状态(零或一)的数字。 任何人都可以帮助新手吗?
UPDATE-1
这是我的FT_GetBitMode程序
// # gcc -o read5 read5.c -L. -lftd2xx -Wl,-rpath,/usr/local/lib
#include <stdio.h>
#include <stdlib.h>
#include "./ftd2xx.h"
int main(int argc, char *argv[])
{
FT_STATUS ftStatus;
FT_HANDLE ftHandle0;
UCHAR BitMode;
FT_SetVIDPID(0x5555,0x0001); // id from lsusb
ftStatus = FT_Open(0,&ftHandle0);
if(ftStatus != FT_OK) {
printf("FT_Open failed");
return;
}
FT_SetBitMode(ftHandle0,15,1);
ftStatus = FT_GetBitMode(ftHandle0, &BitMode);
if (ftStatus == FT_OK) {
printf("BitMode contains - %d",BitMode);
}
else {
printf("FT_GetBitMode FAILED!");
}
ftStatus = FT_Close(ftHandle0);
}
但它返回“FT_GetBitMode FAILED!”而是BitMode的值
答案 0 :(得分:0)
FT_GetBitMode返回引脚的瞬时值。单个字节 返回包含引脚的当前值,包括输入和 那些是产出的。
答案 1 :(得分:0)
最后我发现什么是错的。我使用了错误版本的ftdi库。专用于x86_64平台的正确版本位于: