我们有一个定制的微控制器卡(ST32 / ARM Cortex M3),它附带了一个摄像头。相机以1280x1024分辨率捕获10位灰度。我们需要通过串行将图像数据发送回PC主机。这是一大堆数据;如果一切顺利,在115200波特转移将是3分钟。我实现的任何确保健壮性的东西似乎都会减慢该过程(例如分成块,校验块,如果损坏则要求重新发送)。所以想知道人们如何在速度和诚信之间做出妥协。
我们目前看到的实际转移时间约为6分钟。我们不得不将UART波特率设置为一个奇怪的值 - 1036800 - 因为在115200有问题(PC运行在115200)。我的软件比硬件更多,所以任何关于为什么会发生这种情况的想法都会有所帮助!
答案 0 :(得分:5)
首先对图片进行一些简单的压缩。
运行长度编码或增量编码可以减少要发送的数据。
有很多更好的算法,比如TIFF,但是你可能想要在缓冲区中更换TIFF的复杂性,以便在嵌入式软件上使用更简单的软件。
然后你可以为压缩数据买到像Xmodem这样简单的东西。
它具有作为标准协议的有用属性。
这可能会导致您使用终端+ xmodem传输样式界面到您的主机。 这将使调试界面变得非常简单。
答案 1 :(得分:4)
Tim Williscroft关于压缩数据的答案是一个不错的第一步。
现在从串行协议方面来看,实际传输速率很大程度上取决于您如何配置和实施软件。波特率不是唯一值得关注的事情:
首先要做的是查看时间: 用示波器观察UART信号。如你所说,传输需要两倍的理论时间,你不应该看到连续的信号。没有硬件流控制,STM32需要时间来输出数据。通过硬件流控制,还可以查看流量控制信号,以确定哪一侧导致暂停(可能是两者)。