1. OTA 下载的时候,为什么使用十六进制下载,读取 URC 事件? 因为使用二进制下载的时候,经常会出现错误,并且会失败?然后最稳定传输的办法,是每次传输的时候,是分块,而且每次分块都要“删/建”http实例。推测原因是因为我们现在是直接传输文件的源代码,代码中含有了一些字符串可能和 AT指令重复,导致了 AT 模块在解释的时候出错。而使用 16 进制的方式,可以避免这个问题。因为十六进制直接把数据先转成了字符串,然后在设备端再把字符串转成数据,这样就不可能出现 AT的指令,从而减少了麻烦。 2. OTA 下载的时候,为什么不用 AT 模块里 HTTPDLFILE 的指令? 因为在测试中发现,使用 HTTPDLFILE,其实是下载到了 4G 模块内部,需要重新从模块内部转到存储卡,而且 4G 模块的存储较小,大概只有 40k,所以还需要分块来下载和转存,比较麻烦,于是最终使用了使用读取串口事件的模式。 3. OTA 下载的时候,为什么不用 AT 模块里 HTTPREAD 的指令? 因为之前测试发现,READ模式其实是需要多步: 3.1. AT+MHTTPCREATE 3.2. AT+MHTTPCFG 3.3. AT+MHTTPREQUEST 3.4. AT+MHTTPREAD 它其实也是把数据下载到 4g 模块的缓存里,然后再从缓存里读取出来。所以也是比较繁琐的,还不如 HTTPDLFILE 简单。 4. 4.