确保在关闭Mac上的串口连接时数据已刷新
我正在尝试在Mac OS上连接一个Agilent 54622D示波器,使用的是一个ftdi usb-串口线。我观察到以下情况:如果我在写入命令后立即关闭串口连接的文件描述符(我不期望设备有任何回应,只是发送一个命令),连接会立即关闭,这导致并不是所有数据都发送到设备。这看起来有点道理,但我从来没有见过有人在关闭串口连接之前添加任何特殊的延迟。
我可能遗漏了什么呢?
这里有一个简单的python脚本来说明这个问题:
import serial
port=serial.Serial(port="/dev/cu.usbserial-A603PQBN",baudrate=57600,timeout=1, rtscts=True, dsrdtr=False, stopbits=serial.STOPBITS_ONE)
port.write(":RUN\n")
port.close()
更新:
我在VirtualBox上运行Linux时尝试了同样的脚本,没有发现任何类似的问题。现在我在想这是不是Mac的UART驱动或者FTDI驱动的问题。
2 个回答
0
看起来你是提前关闭了连接,然后数据还没有完全处理完,尽管你的连接速度很快(我习惯的是9600)。
那么为什么不试试使用 flush()
呢?文档里是这样描述的:
“像文件一样的对象的刷新。在这种情况下,等到所有数据都写入完成。”
import serial
port=serial.Serial(port="/dev/cu.usbserial-A603PQBN",baudrate=57600,timeout=1, rtscts=True, dsrdtr=False, stopbits=serial.STOPBITS_ONE)
port.write(":RUN\n")
port.flush() # this might help
port.close()
0
我试过官方的FTDI驱动程序,问题就解决了。这可能是Mavericks系统中FTDI驱动的一个bug(我已经报告了这个问题)。