首页 文章

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

提问于
浏览
3

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

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

5 回答

  • 1

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

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

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

  • 2

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

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

  • 0

    串口在挂起条件下给出"end of file",由调制解调器控制线在带外发出信号(丢弃 DCD ) . 如果你're connected with a null-modem, that' ll永远不会发生 .

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

  • 6

    检查串口配置:

    stty -F /dev/ttySx -a
    

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

    stty -F /dev/ttySx cooked
    
  • 0

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

相关问题