0

抱歉我的无知,但我在 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=&parametr;

    ftStatus = FT_Write(ftHandle0,pkod,nBufferSize,&dwBytesWritten);
    ftStatus = FT_Close(ftHandle0);
}

我的问题是。如何在同一个程序中读取 D4 到 D7 引脚的状态,编程为输入?我的意思是“printf”到标准输出表示输入引脚(或所有输入/输出引脚)状态(零或一)的数字。有人可以帮助新手吗?

更新-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 的值

4

2 回答 2

0

最后我发现出了什么问题。我使用了错误版本的 ftdi 库。专用于 x86_64 平台的正确版本位于此处:

链接到 FTDI 库

于 2016-09-08T15:27:36.913 回答
0

FT_GetBitMode 返回引脚的瞬时值。将返回一个字节,其中包含引脚的当前值,包括输入和输出。

来源

于 2016-09-05T13:18:49.010 回答