【发布时间】:2013-06-08 13:40:06
【问题描述】:
我需要使用 c 以 250kbps 的速度运行我的 /dev/ttyUSB0(多产 pl2303 USB-RS232 转换器)。我到处查看,每个人都说最接近的可实现速度是 230400 bps(http://lxr.linux.no/#linux+v3.9.5/drivers/usb/serial/pl2303.c 和几行之后(第 325 行)“注意:仅支持 baud_sup 中定义的值!”)。 但我 100% 确定它可以完成,因为在 windows 上(使用 c# 默认 SerialPort 组件)我可以将 250000 设置为波特率,它会很乐意以那个速度输出数据(用示波器测量,所以它是如第 325 行的 linux 驱动程序中所述,不切换到最近的可用或 9600!)。
有人知道在 linux 中设置自定义波特率的方法吗?
在你问之前,我已经开发了一种以 250kbps 进行通信的设备,该速度是必需的,并且是我能达到的最高速度而不会出错,所以不,我不能改变它。
【问题讨论】:
-
termios2 不起作用,here 发布的代码将波特率设置为最接近的可用 (230.4k)
-
看起来这是 PL2303 linux 驱动程序的问题。所有代码都在基于 FTDI 的转换器上运行良好,所以我暂时使用那个。我仍然对 Windows 使用的从时钟为 460800 的设备获取 250k 的技巧感到好奇(从 'setserial -a /dev/ttyUSB0' 获取该信息),所以当我有时间时,我可能会尝试嗅探 Windows 中的 USB 流量。
-
我怀疑
460800不是端口的内部时钟,而是分频值。无论如何,听起来你正在路上。找到解决方案后,请发布您自己的答案。顺便说一句,Windows 250000 可能只有 250000 左右。我相信你知道波特可以容忍几个 % 的错误。 -
是linux驱动的问题。从line 333 到第 348 行,驱动程序强制设置波特率。删除该代码后,波特率使用公式12*1000*1000*32 / baud 计算,在 250kbps 时给出的误差为 0%,与我在 Windows 上得到的完全一致。期待官方驱动的改进,如果你知道如何please help me! :)
-
我们目前正在努力支持 PL2303 驱动程序中的任意波特率:thread.gmane.org/gmane.linux.usb.general/87717/focus=89380
标签: linux serial-port usb