Java 在linux上与DLP-IO20(使用FTDI芯片)通信

Java 在linux上与DLP-IO20(使用FTDI芯片)通信,java,ftdi,Java,Ftdi,我试图在linux(ubuntu)上与th DLP-IO20板通信,但每次都会出错。同样的程序在windows下运行良好 为了与主板通信,我首先安装了所有的FTDI驱动程序,然后为linux libjd2xx.so生成了一个库 现在,当我尝试运行JD2XX.java文件的主程序时,出现以下错误: 索引:0,标志:0x0,类型:0x5,id:0x4036001,位置:0x204,序列号:12345678,描述:DLP-IO20,句柄:0x0 线程“main”java.io.IOException中

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

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

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

索引:0,标志:0x0,类型:0x5,id:0x4036001,位置:0x204,序列号:12345678,描述:DLP-IO20,句柄:0x0 线程“main”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());

有什么建议吗?

试着运行FTDI驱动程序附带的读取示例程序(在release/examples/EEPROM/read if all下)。看看有没有问题

如果您感到绝望,请查看是否安装了ftdi_-sio,并尝试使用“rmmod ftdi_-sio”将其删除。

以下不是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
十六进制)。现在,您应该可以在第1个端子中看到您的电压值

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