当前位置: 首页 > 面试题库 >

在Linux下为FTDI虚拟串行端口指定非标准波特率

俞新翰
2023-03-14
问题内容

我有一个USB设备,我正在尝试通过ftdi_sio内核模块提供的虚拟串行端口进行通信。但是,在将端口的波特率设置为14400时遇到了一些麻烦:

  • termios.h没有为14400指定常量,因此我不能使用cfsetispeedcfsetospeed
  • 在ftdi_sio内核模块的源代码中,波特率设置为24000000,似乎没有办法更改它。这意味着我无法将自定义除数与TIOCSSERIALioctl 一起使用,从而无法获得14400的波特率。
  • 模块源有一条注释,听起来好像将端口alt_speedtty_struct结构成员设置为14400即可完成我想要的操作,但是鉴于现有接口,似乎没有任何办法将其设置为14400。

有人对此有任何想法吗?通过破解内核模块来解决这个问题非常容易,但是我确实在寻找不需要更改内核的解决方案。


问题答案:

您不能更改波特率,我想它与硬件有关。因此,弄乱模块不会对您有任何好处。在您的第三点中,您仅谈论提出的用于设置自定义波特率的第一种方法,您需要在其中访问tty->alt_speed。似乎没有接口可以直接从用户空间设置tty结构,至少没有使用ftdi_sio驱动程序。
但是,注释中还解释了另一种方法:

     * 3. You can also set baud rate by setting custom divisor as follows
     *    - set tty->termios->c_cflag speed to B38400
     *    - call TIOCSSERIAL ioctl with (struct serial_struct) set as
     *      follows:
     *      o flags & ASYNC_SPD_MASK == ASYNC_SPD_CUST
     *      o custom_divisor set to baud_base / your_new_baudrate

你试过了吗?



 类似资料:
  • 问题内容: 我需要在Linux上测试一个串行端口应用程序,但是,我的测试计算机只有一个串行端口。 有没有一种方法可以通过在Shell或脚本中模拟设备来向Linux添加虚拟串行端口并测试我的应用程序? 注意:我无法重新映射端口,它在ttys2上进行了硬编码,我需要在编写应用程序时对其进行测试。 问题答案: 您可以为此使用pty(“ pseudo-teletype”,其中串行端口是“ real tel

  • 问题内容: 我正在使用C开发嵌入式解决方案,并且正在使用两个USB传感器。如果我单独连接每个传感器,它们将使用以下名称: 设备1 (我不知道为什么要使用6个名称…) / dev / ttyACM0 / dev / ttyACM1 / dev / ttyACM2 / dev / ttyACM3 / dev / ttyACM4 / dev / ttyACM5 / dev / ttyACM6 设备2 /

  • 问题内容: 我想创建一个程序来模拟CAN端口,以用于另一个大型应用程序的测试。程序应通过此虚拟CAN发送以前记录的数据。有人对这种东西有经验吗? 我正在考虑建立虚拟COM,并通过它发送打包在CAN框架中的数据。能行吗?以及如何在Linux上建立虚拟COM?找到了用于Linux的线程虚拟串行端口, 但可惜我不知道如何将其实现为程序的源代码(初学者linux用户和linux下的程序员)。 很想阅读您的

  • 如何使用不同的端口运行mongodb服务? 就像我在centos 6.5上成功一样 谢谢

  • 本文向大家介绍详解在Linux虚拟机下配置tomcat,包括了详解在Linux虚拟机下配置tomcat的使用技巧和注意事项,需要的朋友参考一下 1、到Apache官网下载tomcat http://tomcat.apache.org/download-80.cgi 我下载的是tomcat8 jdk是1.8 如果你们的jdk是1.7或者1.7以下的就下载tomcat6或者tomcat7 2、把下载好

  • 我想先写串口。为此,我使用usb到串行ftdi电缆。电缆连接到COM4。运行64位Windows 7 a) 使用RXTX项目。http://rxtx.qbang.org/wiki/index.php/Main_Page 为了使用RXTX,我试着按照这些说明去做 下载rxtx-2.1-7-bins-r2。zip 解压缩它 复制RXTX序列。dll转换为c:\program files\java\jr