我正在尝试与Linux(ubuntu)上的DLP-IO20板进行通信,但是每次都会出现错误。 Windows下的相同程序运行良好。

为了与开发板通信,我首先安装了所有FTDI驱动程序,然后为linux libjd2xx.so生成了一个库。

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


  索引: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的答案,而是说明了如何在不安装任何驱动程序的情况下非常简单直接地与DLP-IO8通信,也许这可以帮助您使用DLP-IO20

在linux设备上,文件是抽象的(与Windows上不同,例如,在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执行这些系统命令。

07-24 19:29