我正在尝试与linux(ubuntu)上的DLP-IO20板通信,但每次都会出错。 Windows下的相同程序运行良好。
为了与主板通信,我首先安装了所有FTDI驱动程序,然后我为linux libjd2xx.so生成了一个库
现在,当我尝试运行JD2XX.java文件的主程序时,出现以下错误:
index:0,flags:0x0,type:0x5,id:0x4036001,location:0x204,serial:12345678,description:DLP-IO20,handle:0x0 线程中的异常“main”java.io.IOException:无效句柄(1)
正如您所看到的那样,程序会读取电路板信息,但是当它尝试向电路板发送命令时,会抛出上述异常。 抛出异常的行是以下代码中的 last one :
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());
有什么建议吗?
答案 0 :(得分: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执行这些系统命令。
答案 1 :(得分:0)
尝试运行随FTDI驱动程序提供的读取示例程序(如果我记得,则在发行版/ examples / EEPROM / read下)。看看是否有任何问题。
如果你绝望了,看看是否安装了ftdi_sio并尝试使用'rmmod ftdi_sio'删除它(那就是worked for me)