【续】详解嵌入式设备的文件传输协议

原创 一起学嵌入式 2023-07-09 08:43

扫描关注一起学嵌入式,一起学习,一起成长


上一篇文章,详解嵌入式设备的文件传输协议 详细介绍了文件传输协议 Xmodem 协议族。

Xmodem 协议族通常都是通过串口来进行较近距离的文件传输,但实际上很多文件传输的需求远比这要复杂,需要我们灵活的针对特定场景设计通信协议来实现更加多样化的文件传输。

这篇文章对文件传输协议的内容进行扩展,并结合几个项目对其进行发挥拓展。

CAN文件传输

通过 CAN 来进行文件传输源自于振南的“电动车共享充电柜”项目,如图为共享充电柜实物外观及内部电路

共享充电箱的整体示意图

如图所示,它包括一个主控和若干个从机,它们之间通过 CAN 总线连接以实现通信。

主控具有 4G 通信功能,可接收云端下发的命令,比如打开柜、开始充电、结束充电等,也可以向云端上传状态信息,如柜门开关状态、电流功率等。

对于主控及从机的固件升级,也都实现了远程更新。主控我们暂且不提,先来说一下从机的固件烧录:

主控从云端下载或者从上位机获取从机固件文件,然后通过 CAN 总线将此固件再进一步传给某个从机(通过CAN ID进行区分),最终通过从机的 Bootloader 完成烧录。

在这个过程中,CAN文件传输协议是关键,如图,通过CAN进行文件传输的协议示意

其实 CAN 总线并不适合于批量的数据传输,它每一帧数据仅能传输8个字节。但为了实现高度自动化的批量烧录,我还是基于 CAN 总线实现了文件传输(这实在是有点为难自己的感觉)。

仔细看上图的传输过程,你就会发现它与 Xmodem 其实大同小异,实现思路是一样的。

有小伙伴会问:“相比于CAN文件传输,我更想知道你这个主控是如何实现从云端下载固件的,也就是嵌入式网络文件传输是如何实现的?”

别急,下一节就会涉及到这方面的内容。以“智能充电柜”这个项目为例,也是为了引出这个问题。

通过HTTP下载文件

振南在项目中使用的是 SIM800 这个模块,如图所示,“智能充电柜”项目实际主控板和SIM800模块

SIM800 本身内置了 HTTP 协议,所以就可以直接向服务器 GET 固件数据了。具体的实现代码如下:

int WEBDOWN(void)
{
  char bin_name[30];
  if(SIM800_Check_GPRS())
 {
   return 1; //**无网络
 }

  if(SIM800_Config_Bearer1())
  {
    return 2;
  } //**设置网络参数失败

  if(SIM800_Config_Bearer2())
  {
    return 3;
  } //**设置网络参数失败

  if(SIM800_Open_GPRS_Context())
  {
    return 4;
  } //**打开GPRS**场景

  if(SIM800_Query_GPRS_Context())
  {
    return 5;
  } //**索取GPRS**场景信息

  if(SIM800_HTTP_INIT())
  {
    return 6;
  } //**初始化HTTP**协议失败

  if(SIM800_HTTP_SET_PARA1())
  {
    return 7;
  } //**设置HTTP**参数1

  strcpy(bin_name,"master.bin");

  if(SIM800_HTTP_SET_PARA2("www.znmcu.com",bin_name))
  {
  return 8;
  };//**设置HTTP**参数2

  if(SIM800_HTTP_GET())
  {
    return 9;
  }; //GET**方法,可获取要下载文件的大小

  {
    unsigned int temp=(web_download_file_len/1024);
    unsigned int i=0,prog_addr=0;
    unsigned char total_chksum=0;
    unsigned char \*p;

    DEBUG_OUT("T Ts:%d\r\n",temp);
    for(i=0;i
    {
      SIM800_HTTP_READDATA(i\*1024L,1024);
    }
    if(web_download_file_len%1024)
    {
      SIM800_HTTP_READDATA(i\*1024L,(web_download_file_len%1024));
      i++;
    }
  }
  //**对固件进行校验、重启后BL**将固件烧写到APP**区
}

实际的代码非常冗长,很多无关的东西。上面的代码是精简之后的,主要用于说明 HTTP 从服务器上拉取固件文件的主要过程。

如果你需要这方面的源代码,可以登录网站查看:

http://www.znmcu.com/tg/519.html

Json传输文件

有经验的嵌入式工程师对 Json 并不陌生,我们可以用它来实现不同平台之间的结构化数据的交换。

所以,在有些应用中 Json 会被用来进行文件数据的传输,比如我曾经研发过的一些 WIFI 设备,请看图,通过Json传输固件数据。

我们知道 Json 本身是一个字符串,所以它是不能直接传输二进制数据的,那固件的二进制数据如何通过 Json 来传输呢?

这不光是 Json 的问题,也是所有文本协议所面临的问题,比如我们经常使用的电子邮件 Email 的通信协议,再比如我们最常用的HTTP协议。

HTTP本身就是超文本传输协议,其实它只传文本,也就是ASCII,但是我们上网的时候经常会使用HTTP来下载文件,那它的二进制数据是怎么传的呢?不知道大家有没有考虑过这个问题?

为了解决这个问题,人们提出了 Base64 编码,请看图,通过 Base64 编码来表达二进制数据。希望大家可以体会到它的巧妙。

Base64 的基本思想是:将数据的二进制序列按 6 位进行分隔,然后用 64 个可打印字符进行表达。所以,每3个字节可以转化为 4 个字符。如果不足 3 个字节,则用 = 来进行占位。

本系列文章介绍了一些文件传输的相关协议,并结合几个项目对其进行了发挥拓展。

这里所涉及的内容,在实际应用时可能会有更大的外延,比如 Xmodem 协议经过改良,可用于卫星数据传输。

再复杂的技术也是由简单的元素构成的,了解和掌握了基础,才能让我们在技术上走得更远。希望大家从文章内容能够得到启发,并最终应用到自己的实际开发之中,让知识产生价值。


推荐一个学习的网站,会有你想要的内容(复制链接到浏览器,即可获赠课程充值券哦):

http://www.znmcu.com/tg/519.html


扫码,拉你进高质量嵌入式交流群


关注我【一起学嵌入式】,一起学习,一起成长。


觉得文章不错,点击“分享”、“”、“在看” 呗!

一起学嵌入式 公众号【一起学嵌入式】,RTOS、Linux编程、C/C++,以及经验分享、行业资讯、物联网等技术知
评论
  • 全球智能电视时代来临这年头若是消费者想随意地从各个通路中选购电视时,不难发现目前市场上的产品都已是具有智能联网功能的智能电视了,可以宣告智能电视的普及时代已到临!Google从2021年开始大力推广Google TV(即原Android TV的升级版),其他各大品牌商也都跟进推出搭载Google TV操作系统的机种,除了Google TV外,LG、Samsung、Panasonic等大厂牌也开发出自家的智能电视平台,可以看出各家业者都一致地看好这块大饼。智能电视的Wi-Fi连线怎么消失了?智能电
    百佳泰测试实验室 2024-12-12 17:33 53浏览
  • 在智能化技术快速发展当下,图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进步,对于图像数据的采集、处理和分析的需求日益增长,这不仅要求我们拥有高性能的相机硬件,还要求我们能够高效地集成和测试各种算法。我们探索了一种多源相机数据采集与算法集成测试方案,能够满足不同应用场景下对图像采集和算法测试的多样化需求,确保数据的准确性和算法的有效性。一、相机组成相机一般由镜头(Lens),图像传感器(Image
    康谋 2024-12-12 09:45 75浏览
  • 本文介绍瑞芯微RK3588主板/开发板Android12系统下,APK签名文件生成方法。触觉智能EVB3588开发板演示,搭载了瑞芯微RK3588芯片,该开发板是核心板加底板设计,音视频接口、通信接口等各类接口一应俱全,可帮助企业提高产品开发效率,缩短上市时间,降低成本和设计风险。工具准备下载Keytool-ImportKeyPair工具在源码:build/target/product/security/系统初始签名文件目录中,将以下三个文件拷贝出来:platform.pem;platform.
    Industio_触觉智能 2024-12-12 10:27 62浏览
  • 铁氧体芯片是一种基于铁氧体磁性材料制成的芯片,在通信、传感器、储能等领域有着广泛的应用。铁氧体磁性材料能够通过外加磁场调控其导电性质和反射性质,因此在信号处理和传感器技术方面有着独特的优势。以下是对半导体划片机在铁氧体划切领域应用的详细阐述: 一、半导体划片机的工作原理与特点半导体划片机是一种使用刀片或通过激光等方式高精度切割被加工物的装置,是半导体后道封测中晶圆切割和WLP切割环节的关键设备。它结合了水气电、空气静压高速主轴、精密机械传动、传感器及自动化控制等先进技术,具有高精度、高
    博捷芯划片机 2024-12-12 09:16 85浏览
  • 首先在gitee上打个广告:ad5d2f3b647444a88b6f7f9555fd681f.mp4 · 丙丁先生/香河英茂工作室中国 - Gitee.com丙丁先生 (mr-bingding) - Gitee.com2024年对我来说是充满挑战和机遇的一年。在这一年里,我不仅进行了多个开发板的测评,还尝试了多种不同的项目和技术。今天,我想分享一下这一年的故事,希望能给大家带来一些启发和乐趣。 年初的时候,我开始对各种开发板进行测评。从STM32WBA55CG到瑞萨、平头哥和平海的开发板,我都
    丙丁先生 2024-12-11 20:14 73浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 109浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-11 17:58 86浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-12 10:13 40浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 112浏览
  • 应用环境与极具挑战性的测试需求在服务器制造领域里,系统整合测试(System Integration Test;SIT)是确保产品质量和性能的关键步骤。随着服务器系统的复杂性不断提升,包括:多种硬件组件、操作系统、虚拟化平台以及各种应用程序和服务的整合,服务器制造商面临着更有挑战性的测试需求。这些挑战主要体现在以下五个方面:1. 硬件和软件的高度整合:现代服务器通常包括多个处理器、内存模块、储存设备和网络接口。这些硬件组件必须与操作系统及应用软件无缝整合。SIT测试可以帮助制造商确保这些不同组件
    百佳泰测试实验室 2024-12-12 17:45 53浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦