2

我正在尝试与 linux (ubuntu) 上的 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());

有什么建议吗?

4

2 回答 2

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 中执行那些系统命令。

于 2015-09-04T19:43:35.260 回答
0

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

如果您很绝望,请查看是否安装了 ftdi_sio 并尝试使用 'rmmod ftdi_sio' 将其删除(这对我有用)

于 2013-01-30T23:16:18.320 回答