使用Linux和C通过串行端口发送文件

时间:2009-08-22 23:12:33

标签: c linux serial-port

我正在开发一个从串口读取数据并通过TCP连接发送数据的应用程序,反之亦然。不幸的是,从串口读取数据时,它永远不会停止。它不会检测EOF标记,也不会检测EOL或其他特殊字符。

那么,我如何通过C和Linux中的串口检测文件结束(或“连接结束”)?

5 个答案:

答案 0 :(得分:6)

取决于您对用于串行链路的协议的控制程度。除非文件隐含地包含一些文件结束标记(并且我已经理解了他们没有的帖子),否则你需要实现某种通信协议才能传输文件。

在BBS时代使用的一些最简单的procols是XMODEM,它是衍生物。它们可能很简单,您可以使用它。

如果您在串行线路的另一端有一台完整的计算机,那么通过串行线路建立PPP链路并通过TCP / IP进行通信可能会简单得多。

答案 1 :(得分:2)

串行链路仅发送字节。没有数据包帧,没有错误检查,因此您无法通过原始串行链路可靠地发送文件。您需要使用一些协议,如XMODEM,KERMIT等。

实施此类协议并非易事。如果另一端也是计算机,则可以更容易地通过链路运行TCP / IP。请查看SLIPPPP

答案 2 :(得分:1)

串口在挂断条件下给出“文件结束”,由调制解调器控制线(丢弃DCD)在带外发出信号。如果您使用零调制解调器连接,那将永远不会发生。

使用框架机制,就像其他答案所建议的那样。你可能不需要像ZMODEM这样的东西 - 只需要在文件前加上文件大小和CRC32校验和,如果链接没有合理的错误且8位清理。

答案 3 :(得分:0)

检查串口配置:

stty -F /dev/ttySx -a

设置cooked链接而不是raw链接:

stty -F /dev/ttySx cooked

答案 4 :(得分:0)

廉价而肮脏的解决方案: 在linux,unix或osx上运行'screen -L< serial_device> <波特率>”。在另一端,以原始模式将文件的输出写入控制台。 -L将其记录到文件中,其内容将是您从另一端传输的文件。使用xxd检查内容以验证它们与源中的内容相匹配。