在发送更多数据之前有没有办法告诉终端等待?

时间:2011-08-03 10:01:25

标签: embedded terminal

我有嵌入式固件,有终端串行传输。我正在从终端执行命令,等待应保存到闪存芯片的数据(文本文件)。但是,写入闪存比终端传输要慢得多。

文本文件可能相当大(很多kB),因此在小型嵌入式环境中我不能简单地将其转储到RAM中。我是否可以与标准终端仿真器(对文件具有拖动/支持)进行通信,以便在每次写入缓冲区已满时暂停传输,并在写入完成后再次告诉继续?我没有找到任何可以帮助我解决这个问题的事情。

嗯,当然我可以让PC前端理解这个技巧,但在基本级别,如果需要所有功能都可以通过普通终端使用,那将是很好的。

2 个答案:

答案 0 :(得分:2)

对于基本串行连接,您可以看到硬件是否支持流量控制。这将是CTS,RTS线(清除发送,请求发送) http://en.wikipedia.org/wiki/RS-232_RTS/CTS#RTS.2FCTS_handshaking

然而,许多简单的嵌入式系统都没有实现这种类型的流控制。

如果硬件不支持流量控制,那么您将不得不考虑使用某种形式的软件流控制。您可能能够实现Xon / Xoff流控制(http://en.wikipedia.org/wiki/XON/XOFF)或者可以实现简单的文件传输协议,如XMODEM或ZMODEM,甚至tftp。这取决于您的终端可以支持的内容。

答案 1 :(得分:2)

当通过PC的串行链接将数据编程到FLASH中时,我总是使用XMODEM。使用XMODEM时,它一次只发送一个数据包,等待您在发送下一个数据包之前确认该数据包。

这意味着我们通过接收方的软件控制流量:

  • 获取数据包 - >
  • 写入数据包 - >
  • Ack数据包 - >
  • 重复util done ...

XMODEM可以在最小的设备(小于1K RAM)上实现,代码非常简单。所有串行终端都支持XMODEM(Windows XP附带支持XMODEM的终端)。 XMODEM不需要特殊硬件。

Here is the spec.

Here is an example implementation.