【问题标题】:9 bit serial with ARM Linux and FTDI UART, a quest to fix the FTDI drivers带有 ARM Linux 和 FTDI UART 的 9 位串行,修复 FTDI 驱动程序的任务
【发布时间】:2015-06-05 06:00:43
【问题描述】:

我正在尝试让 9 位串行工作与需要将第 9 位设置为高才能接收的设备通信(是的,我知道...)。

我正在使用一个非常标准的 USB-RS232 加密狗,里面有一个 FTDI 芯片,它似乎在使用系统上的 FTDI 驱动程序。

我一直在使用this MARK/SPACE 奇偶校验指南,我的研究表明这是唯一可行的方法(?)并且我的代码基于this,我被认为是@987654323 @ 但是,嘿,这从来没有阻止过我。

在这一点上,我很确定 Linux FTDI 驱动程序完全忽略了 CMSPAR,但如果有人知道,您的意见将不胜感激。我确实知道 FTDI 加密狗可以在有限的容量下支持 9 位串行,因为我的加密狗在 Windows 机器上工作正常

假设没有人对这一切有一个神奇的答案,我要问的主要问题是,“修复”FTDI 驱动程序(如果需要)工作有多难?此外,对于 linux 设备驱动程序经验有限的人来说,从哪里开始呢?假设一切顺利,看来我不是唯一一个遇到这个问题的人,所以为社区做出一些贡献,无论多么小,都会很棒。

【问题讨论】:

  • 如果该功能在 Windows 上工作,那么它可能会在固件中得到支持,您也许可以通过嗅探 Windows 驱动程序的数据包来弄清楚如何激活它。我认为从 Windows 7 开始,实际上微软提供了一个 USB 嗅探器作为附加工具下载。在虚拟机中运行窗口并在宿主操作系统上嗅探可能是另一种选择。
  • 另一件需要研究的是通过串行 API 推送 9 位数据的难度。如果这看起来很难,您还可以选择不运行内核(模块)USB-Serial 驱动程序,而是使用 Linux USB API 或类似 libusb 包装它们的东西从用户空间与原始 USB 设备通信。
  • 驱动程序本身应该没问题,前提是您的内核不早于this commit - 不幸的是,我对这两者之间的了解不够,无法提供帮助。至于一般驱动参考,LDD3 总是一个好的开始。
  • IMO 使用 8 位 UART/USART 处理 9 位数据的根本问题是您不能同时发送和接收(因为奇偶校验的设置对于硬件和软件中的 Rx 和 Tx 是通用的) )。如果您有主/从配置,这可能不是问题。
  • @ChrisStratton 感谢您提供的信息。这是我没有考虑过的一种有趣的方法。

标签: c linux serial-port arm ftdi


【解决方案1】:

如果第 9 位应始终为高,则只需使用 8 个数据位和比您通常使用的多一个停止位。

要获得更多控制权,请使用提供相对simple C APID2XX Direct Drivers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 2011-04-24
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多