我正在尝试与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执行这些系统命令。