【问题标题】:FTDI TTL with LinuxFTDI TTL 与 Linux
【发布时间】:2013-07-17 16:21:25
【问题描述】:

为了向外部设备发送命令,我使用了 FTDI 的 TTL-232R-3V3 线。我想在那里设置特定的路径到高或低。不需要奇偶校验位或停止位。

我的操作系统是 Ubuntu Linux 13.04。

我想开发一个可以发送这些命令的 Java 或 C 应用程序。但是当我尝试安装线材驱动时出现错误:

我遵循this 指令,我决定安装D2XX 驱动程序。我想我已经按照步骤 2.1 中的说明成功安装了共享对象和静态库,无论如何我没有收到任何错误消息。

但是当我尝试编译示例代码时,如步骤 3 中所述,执行make -B 命令时得到以下输出。

for n in BitMode EEPROM/erase EEPROM/read EEPROM/write EEPROM/user/read EEPROM/user/size EEPROM/user/write Events LargeRead MultiThread SetVIDPID Simple Timeouts ; do make -C $n || exit 1; done
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/BitMode'
gcc main.c -o bitmode -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib  
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/BitMode'
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/erase'
gcc main.c -o erase -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/erase'
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/read'
gcc main.c -o read -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/read'
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/write'
gcc main.c -o write -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/write'
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/read'
gcc main.c -o readua -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/read'
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/size'
gcc main.c -o sizeua -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/size'
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/write'
gcc main.c -o writeua -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/write'
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/Events'
gcc main.c -o events -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/Events'
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/LargeRead'
gcc main.c -o largeread -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/LargeRead'
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/MultiThread'
gcc main.c -o multi -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/MultiThread'
gcc main.c -o multi -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib
/usr/bin/ld: /tmp/ccoAsrRg.o: undefined reference to symbol     'pthread_create@@GLIBC_2.2.5'
/usr/bin/ld: note: 'pthread_create@@GLIBC_2.2.5' is defined in DSO /lib/x86_64-linux-    gnu/libpthread.so.0 so try adding it to the linker command line
/lib/x86_64-linux-gnu/libpthread.so.0: could not read symbols: Ungültiger Vorgang
collect2: Fehler: ld gab 1 als Ende-Status zurück
make[1]: *** [multi] Fehler 1
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples    /MultiThread'
make: *** [subdirs] Fehler 1

我该如何解决这个错误?有人使用过这种线和 Linux 吗? 提前致谢!

【问题讨论】:

    标签: linux serial-port driver


    【解决方案1】:

    某些示例或其依赖项之一正在使用 pthreads,但未为此配置 Makefile。

    编辑 Makefile 并将-pthread 添加到CFLAGSLDFLAGS。您可以通过添加行来做到这一点

    CFLAGS += -pthread
    LDFLAGS += -pthread
    

    但是,您可能根本不需要 D2XX 库。 FTDI 内核驱动程序应该创建一个/dev/ttyUSBn 设备,您可以像使用“真实”串行端口一样使用它。

    【讨论】:

    • 非常感谢!抱歉回复晚了。是的,你是对的,有一个名为ttyUSB0 的设备。我已尝试按照this 教程中的说明打开串行端口。我下载了 termios 头文件,但无法执行。 fd是什么?它是一个变量吗? Eclipse 只是在备注:Symbol 'fd' could not be resolved。你(或其他人)知道一个好的教程吗?
    • fd 是文件描述符的常用变量名。如int fd = open("/dev/ttyUSB0", O_RDWR | O_EXCL); 好的,该教程包含大部分重要部分,您只需将 fd 声明为 int fd; 通常您的 Linux 系统上应该已经有一个 termios.h 文件,它是系统头文件之一。如果没有,您可能需要使用包管理器来安装系统头文件。
    • 好的。我现在已经设法(我希望如此)打开、自定义和关闭端口。 View the Code here。但我不知道我必须使用什么命令来将一条路径设置为高/低。我有一个 LED 连接到地和另一根电线,当我将“串行端口”连接到我的计算机时,它就亮了。我怎样才能将其关闭并重新打开?
    • @IndexOutOfBoundsException:哦,如果你想在 bitbang 模式下控制 FTDI CBUS 引脚,那么是的,你确实需要 D2XX。不过,您不能只将 LED 连接到 FTDI 引脚。您需要限流电阻器,可能还需要一个晶体管来切换比 GPIO 所能承受的更大的电流。如果您使用 GPIO,低端开关通常效果更好。发布原理图,我可能会告诉您是否需要更改接线。但这个讨论真的应该在 EE.stackexchange 上,而不是 SO。
    • 是的,没错。但我已经有一个电阻。如何使用ee.stackexchange?你是对的,实际上这很糟糕。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2015-06-05
    相关资源
    最近更新 更多