【问题标题】:Communication with DLP-IO20 (using a FTDI chip) on linux在 Linux 上与 DLP-IO20(使用 FTDI 芯片)通信
【发布时间】:2012-12-04 11:13:38
【问题描述】:

我正在尝试与 linux (ubuntu) 上的 DLP-IO20 板通信,但每次都会出错。 windows下同样的程序运行良好。

为了和板子通信,我先安装了所有的 FTDI 驱动,然后我为 linux libjd2xx.so 生成了一个库

现在,当我尝试运行 JD2XX.java 文件的主程序时,出现以下错误:

索引:0,标志:0x0,类型:0x5,id:0x4036001,位置:0x204,序列:12345678,描述:DLP-IO20,句柄:0x0 线程“主”java.io.IOException 中的异常:无效句柄 (1)

如您所见,程序会读取电路板信息,但是当它尝试向电路板发送命令时,会引发上述异常。 引发异常的行是以下代码中的最后一个

 DeviceInfo di = jd.getDeviceInfoDetail(0);
    System.out.println(di.toString());
    jd.open(0);
    String msg = "Hello dude. This is the message.";
    int ret = jd.write(msg.getBytes());

有什么建议吗?

【问题讨论】:

    标签: java ftdi


    【解决方案1】:

    以下不是 Java 答案,而是说明如何在不安装任何驱动程序的情况下非常简单直接地与 DLP-IO8 通信,也许这可以帮助您使用 DLP-IO20

    在 linux 设备上由文件抽象(不像在 Windows 上,您必须调用 .dll 的函数来访问设备)。

    因此,当我将 DLP-IO8 插入 USB 端口时,会出现 /dev/ttyUSB0 文件。 (它可能会有所不同,因此您可以在终端中运行dmesg,它会显示所有已连接/断开连接的 USB 设备及其位置的日志,以便您推断 DLP-IO8 的位置)

    现在您不需要任何驱动程序或任何东西。 /dev/ttyUSB0 已被识别并与您的 DLP-IO20 相对应,所以您可以开始使用,您可以向 /dev/ttyUSB0 写入/读取以写入/读取您的 DLP-IO8。

    因此,根据 DLP 文档,您必须以 115200 的波特率进行通信。您可以使用以下方式设置此波特值:

    sudo stty -F /dev/ttyUSB0 115200
    

    仍然来自 DLP 文档,如果要获取通道 1 上的电压值,则必须将 ascii 字符 'Z' 发送到 DLP-IO8。所以打开两个终端,在其中一个运行:

    sudo cat /dev/ttyUSB0
    

    为了查看返回板的内容。使用另一个终端运行:

    echo -en '\x5A' > /dev/ttyUSB0
    

    为了发送字符'Z'(其ascii编号为十六进制的5A)。现在你应该在第一个终端看到你的电压值。

    因此,如果您不知道如何在纯 Java 中执行操作,则始终可以从 Java 中执行那些系统命令。

    【讨论】:

      【解决方案2】:

      尝试运行 FTDI 驱动程序提供的读取示例程序(如果我记得的话,在 release/examples/EEPROM/read 下)。看看有没有问题。

      如果你很绝望,看看是否安装了 ftdi_sio 并尝试使用 'rmmod ftdi_sio' 删除它(这就是 worked for me

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多