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

时间:2012-12-04 11:13:38

标签: java ftdi

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

有什么建议吗?

2 个答案:

答案 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