Libftdi usb_open()失败了

时间:2015-08-07 18:05:26

标签: c libusb

我正在使用Iridium PTT开展项目。 Iridium硬件连接到卫星,然后通过USB连接到我的PC。

Iridium硬件附带了一些在Ubuntu Linux上运行的软件,它在我的电脑上的Virtual Box中运行。该软件全部用C语言编写,在Ubuntu中运行良好。但我想在Windows上使用Visual Studios进行开发。

Ubuntu版本使用libftdi和libusb(来自intra2net)与硬件通信。

我们获得了libftdi,libusb并在Visual Studios 2013 Desktop Express Edition中创建了一个项目。 (我甚至下载了Zadig for Windows来检查以确保我有正确的USB驱动程序。我验证了驱动程序的箭头是绿色的USB连接到硬件。)

当Iridium硬件连接到计算机时,设备管理器中会出现四个串行端口。我在运行程序时试图从Windows打开其中一个串口。当我尝试打开一个时出现错误(即使我可以从Ubuntu轻松打开它,在虚拟机中运行,在同一台PC上)。

我正在使用一些名为“simple.c”的示例代码(来自Intra2net),我正在Visual Studio中运行。我在下面发布了它:

/* simple.c

Simple libftdi usage example

This program is distributed under the GPL, version 2
*/

#include <stdio.h>
#include <stdlib.h>
#include "ftdi.h"

int main(void)
{
    int ret;
    struct ftdi_context *ftdi;
    struct ftdi_version_info version;
    if ((ftdi = ftdi_new()) == 0)
    {
        fprintf(stderr, "ftdi_new failed\n");
        return EXIT_FAILURE;
    }

    version = ftdi_get_library_version();
    printf("Initialized libftdi %s (major: %d, minor: %d, micro: %d, snapshot ver: %s)\n",
        version.version_str, version.major, version.minor, version.micro,
        version.snapshot_str);

    if ((ret = ftdi_usb_open(ftdi, 0x403, 0x6011)) < 0)
    {
        fprintf(stderr, "unable to open ftdi device: %d (%s)\n", ret, ftdi_get_error_string(ftdi));
        ftdi_free(ftdi);
        return EXIT_FAILURE;
    }

    // Read out FTDIChip-ID of R type chips
    if (ftdi->type == TYPE_R)
    {
        unsigned int chipid;
        printf("ftdi_read_chipid: %d\n", ftdi_read_chipid(ftdi, &chipid));
        printf("FTDI chipid: %X\n", chipid);
    }

    if ((ret = ftdi_usb_close(ftdi)) < 0)
    {
        fprintf(stderr, "unable to close ftdi device: %d (%s)\n", ret, ftdi_get_error_string(ftdi));
        ftdi_free(ftdi);
        return EXIT_FAILURE;
    }

    ftdi_free(ftdi);

    return EXIT_SUCCESS;
}

我只修改了Intra2net的原始simple.c中的两行:

  1. 第10行:将#include <ftdi.h>更改为#include "ftdi.h"
  2. 第28行:我将if ((ret = ftdi_usb_open(ftdi, 0x403, 0x6011)) < 0)中的原始十六进制数字更改为Ubuntu C代码中使用的数字,用于我的硬件。
  3. 运行simple.c时遇到的错误是unable to open ftdi device: -4 (usb_open() failed) 这发生在ftdi_usb_open函数的第28行。

    我是低级C编程的新手,我不知道从哪里开始。
    遇到这个问题时意味着什么?我怎么能解决这个问题呢? 谢谢!

1 个答案:

答案 0 :(得分:2)

您对Enable Model Ctrl At Startup的来电打开了第一台具有指定供应商和产品ID的设备。

假设您提供正确的供应商和产品价值,代码中的任何内容都不会出错。

如果您无法打开设备,有些事情值得检查:

  • Windows可以在自动插件上做一些奇怪的事情。尝试在COM端口上禁用串行枚举器。您可以在“设备管理器” - >“端口设置”​​ - >“高级设置”中访问此选项。
  • 在相同的高级设置中,删除{{1}}。在USB上拔下插拔循环后,监视这些信号的设备可能会进入错误状态。来自ftdi芯片供应商的More on this
  • 另一个程序在你的之前声称了芯片的界面。您可能会在USB设备上自动连接某些内容。