2

在过去的几周里,我一直在开发一个在特定设备上执行固件更新的引导加载程序。设置如下:

  1. 固件二进制文件及其各自的 SHA1 哈希存储在 Web 服务器中;

  2. 该设备由 ESP8266 和 STM32 微控制器(STM32F401 或 STM32F030,有两个硬件版本,但我使用的是 F401)组成。ESP 仅与 AT+ 命令一起使用,即,我没有构建它的固件,只是使用了 Espressif 的最新版本。

这个想法是,STM32 引导加载程序应该使用 ESP 从网络服务器下载固件哈希和二进制文件,然后在哈希正常的情况下启动固件。下载是在被动模式下使用 ESP 进行的,即 STM 必须手动请求 X 字节才能从 ESP 缓冲区读取,目前我使用的是 1 MTU(1460 字节)。

起初,与网络服务器的连接是使用 HTTP 进行的,一切正常,但是,我不得不将其更改为 HTTPS,这就是问题开始的地方。在 STM 接收到大约 100kB 的固件(有 110kB)之后,ESP 每次请求只提供 30 个字节(应该是 1 MTU 左右),因此下载时间非常长。

我已经进行了一些挖掘,试图找出这是否与 ESP 有关,但没有找到任何东西。此外,这个 30 字节下载速率开始发生的点并不总是在 100kB 标记处,我已经用 170kB 固件进行了测试,它开始发生在 160kB ish,所以看起来它总是最后的 10kB。

当数据包大小小于 1 MTU 时,我还在固件中添加了一些延迟,以便为 ESP 提供更多时间来处理数据包,因为 SSL 解密需要更长的时间来处理;但它没有帮助。

我的问题是:HTTPS/SSL 协议中是否有一些特性可以减少数据包长度?这里发生的事情可能是什么原因?

4

0 回答 0