对于一个项目,我们在定制硬件上有多个 FTDI 串行到 USB 转换器。其中一些串行到 USB 转换器具有需要设置的特殊参数(即它们从何处获取数据)。现在,设置此功能的正常方法是使用 FTD2XX 库,它允许我们直接在 USB 到串行转换器上设置数据。但是,D2XX驱动程序不能与标准ftdi_sio驱动程序同时使用,这意味着我们不能像普通设备一样使用串口。
我这里有三个基本选项:
修改标准驱动程序以使用新的 IOCTL。由于我们的目标环境非常具体,所以我对此表示同意,但我不确定是否可以处理所有可能出现的细微差别,这些细微差别可能会导致 USB 转换器在进入不同模式时如何工作。
让一切都使用 D2XX 驱动程序。这并不理想,因为如果我们需要使用另一个 FTDI USB 转串口转换器,任何程序需要使用该串行转换器也必须使用 D2XX 驱动程序,这在我们想要使用不同的 USB 转串口转换器之前会很好(因为我们将像平常一样打开/dev/ttyUSBX)
创建一个假 TTY,例如/dev/serialX,然后将信息传递到 D2XX 驱动程序。这样,我们仍然可以像平常一样打开串行端口,但我们可以添加新功能来执行更高级的选项。命名与我们现在所做的类似,即使用 udev 创建指向正确端口的符号链接(symbolic link)。
选项 #3 可能是最好的选择,但我不确定具体该怎么做。我查看了 openpty功能,但这似乎并没有完全达到我想要的效果,主要是能够在假串行端口上设置 TTY 设置,并在真实串行端口上设置相同的设置。我猜测 mknod/mkdev 会以某种方式在这里使用,但我不知道到底是如何使用的。
解决这个问题的最佳方法是什么?
最佳答案
执行此操作的正常方法是利用 FTDI 芯片可以使用小型附加 EEPROM 来加载配置设置的事实。因此,您无需使用 D2XX 设置自定义参数,而是烧录 EEPROM,FTDI 将自动配置自身。然后你只需使用 noraml 串行端口驱动程序即可。
关于Linux TTY 和驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13316872/