CN108062230A - 一种因特网范围内串口透传和程序更新系统及其方法 - Google Patents

一种因特网范围内串口透传和程序更新系统及其方法 Download PDF

Info

Publication number
CN108062230A
CN108062230A CN201810008774.7A CN201810008774A CN108062230A CN 108062230 A CN108062230 A CN 108062230A CN 201810008774 A CN201810008774 A CN 201810008774A CN 108062230 A CN108062230 A CN 108062230A
Authority
CN
China
Prior art keywords
mqtt
data
target device
byte
update
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201810008774.7A
Other languages
English (en)
Other versions
CN108062230B (zh
Inventor
胡艳军
董子汉
张南飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Anhui University
Original Assignee
Anhui University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Anhui University filed Critical Anhui University
Priority to CN201810008774.7A priority Critical patent/CN108062230B/zh
Publication of CN108062230A publication Critical patent/CN108062230A/zh
Application granted granted Critical
Publication of CN108062230B publication Critical patent/CN108062230B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • H04L67/025Protocols based on web technology, e.g. hypertext transfer protocol [HTTP] for remote control or remote monitoring of applications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/51Discovery or management thereof, e.g. service location protocol [SLP] or web services

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明公开了一种因特网范围内的串口透传和程序更新系统,其特征是包括:n个通信装置、更新控制终端、MQTT服务器、n个目标设备,且第i个通信装置仅与第i个目标设备相连接;本发明可以在传输双方均通过分配私有IP的路由器或其他NAT设备的普遍网络架构连接到因特网时,实现因特网范围内点对点串口透传,而且可以在不需要目标设备进行任何操作、不对原有程序代码进行任何修改的情况下,通过因特网实现远程程序的无缝安全更新,从而在不增加额外开发工作量的情况下实现工控设备和家用电器在因特网范围内的数据传输和行为更新。

Description

一种因特网范围内串口透传和程序更新系统及其方法
技术领域
本发明涉及一种通信系统,尤其涉及一种实现了因特网范围内串口透传与远程程序更新的系统和方法。主要用于将工业控制和智能家居中应用的嵌入式微控制器、数字信号处理器、FPGA等有因特网通信需求的装置在极少更改原有设计的情况下接入因特网并实现串口透传与程序在线更新。
背景技术
随着物联网技术的发展,越来越多的工业设备和家用电器开始有了在因特网范围内通过数据传输来显示和更改工作状态,以及通过自身程序更新来优化行为的需求。但是工业设备和家用电器多数由于控制所需的计算量较低,在设计时一般使用8位到32位嵌入式微处理器、可编程逻辑控制器、数字信号处理器等作为主控来满足机器的控制需求,主控芯片无法提供现在的网络协议栈所需要的程序空间和计算能力;即使少量设备可以为了接入因特网而更换主控芯片,也需要把设备控制程序移植到新主控上,还需要重新进行测试、认证,对于设备厂商来说开发工作量很大;因此市场上急需一种在保持设备原有主控芯片不变,尽可能少的更改主控芯片内程序的情况下,就可以将以上设备简易、有效的接入因特网的通信方法。
目前,仅考虑数据传输功能,在智能家居和工业控制领域应用的网络通信模块,绝大部分均工作于计算机网络体系结构中的传输层,使用TCP或者UDP协议进行网络传输。如中国专利201610029034.2与中国专利201620167221.2,这类发明提供了一种基于TCP协议实现的通信模块,属于运输层协议通信类,它的通信过程需要通信双方中至少接受连接的一方拥有一个可被发起方连接的IP地址和一个打开的端口,否则连接发起方无法向接受方建立传入连接,该条件在分配本地IP的局域网内时可以被满足,但当通信范围扩展到因特网内时,由于因特网IP地址的枯竭和网络安全的需要,家庭网络用户得到的出口IP均经过NAT转换,并非公网IP,企业网络用户即使网络出口可能是公网IP,也不可能在出口IP上针对每个通信模块打开一个端口并配置相关的访问规则,这两种情况都导致进行点对点通信时,接受连接的一方的IP地址无法被连接发起方访问,因此这类通信模块在因特网范围内只能使用Client/Server架构,需要固定一个有公网IP和打开端口的服务器作为通信的一方,无法实现点对点通信,也无法实现串口透传。
如中国专利201510496705.1,提供一种有线的串口转以太网数据传输装置,这种装置在运输层TCP协议的基础上,针对通信装置自身的部分消息传输,使用了MQTT物联网协议作为应用层协议,似乎扩展了传输范围,但是该装置说明书[0014]、[0015]中明确指出,MQTT协议只适用于此传输装置自身与其他传输装置之间进行通信,对于外部目标设备传输的RS-232串口数据,仍使用运输层TCP或UDP协议进行传输。因此对于发送串口数据的目标设备,该模块与前述模块相同,仍属于运输层协议通信类,通信范围局限于局域网内,无法实现因特网范围内串口透传。并且,该设备的以太网接入必须通过RJ-45接口使用网线连接,无法实现无线通信,而在智能家居应用场景中,很难将灯泡、智能音箱、洗衣机、电饭煲等各式各样的物联网终端接上网线。
如刊登于2017年第25卷《计算机测量与控制》的《基于串口转WiFi的物联网终端远程控制实现方法》一文,虽然使用WiFi接入以太网,避免了网线连接,但在数据传输方面,与前述装置类似,仅将MQTT协议用于控制指令的发送与接收,对于外部设备的串口数据来说,仍使用TCP或UDP协议进行传输,因此仍然无法实现因特网范围内串口透传。
综上所述,现有市面上的通过串口进行数据传输的通信装置,均使用了面向连接的传输层协议进行通信,当需要进行因特网范围内通信时,由于现有网络架构的普遍限制,只能实现通信装置与网络服务器之间的通信,而网络服务器如果在传输层将数据向其他的通信装置进行转发,需要为每个通信装置固定分配一个传输层端口,并且维护一张登记了所有通信装置的路由表,这在通信方的数量较多时基本不可能实现,因此以上通信装置均无法实现因特网范围内点对点通信,也无法实现因特网范围内串口透传。
目前,随着嵌入式系统功能的增加,程序代码的复杂化,一方面程序难免出现行为缺陷甚至安全漏洞,不及时更新代码会影响产品运行甚至人身安全,另一方面,厂商和用户都有通过更新程序来升级优化功能的需求,但以前述专利为代表的现有物联网通信模块往往只实现数据传输功能,没有针对程序更新的解决方案,传统上,工业设备和家用电器的厂商为了实现程序更新,往往需要将产品召回,针对大型设备甚至需要派遣工程人员到达安装现场进行固件更新,造成了极大的人力物力的浪费。
近年来,有一部分具有联网功能的消费类电子产品开始使用OTA技术远程进行自身程序更新,如刊登于2014年第4卷《电子技术与软件工程》的《远程更新ARM程序的设计与实现》,均使用目标设备的微控制器自身的程序代码来实现该功能,但是由于涉及控制器对自身程序代码的擦除和改写,开发工作量很大且难度较大,对于设备开发厂商来说难以实现。而且如果在设备更新自身程序时出现断电、死机等问题,更新被中断,由于此时程序存储器数据未写入完整,会导致设备无法使用,也无法再次运行OTA程序进行远程修复。并且诸如数字信号处理器、大部分嵌入式微处理器等用于智能家居与工业控制的目标设备,是不支持通过自身指令来改写自身程序或者无法处理网络数据包的,无法使用该类方法进行程序更新。
发明内容
本发明是为了解决上述现有技术存在的不足之处,提出一种因特网范围内串口透传和程序更新系统及其方法,以期能在传输双方均通过分配私有IP的路由器或其他NAT设备的普遍网络架构连接到因特网时,实现因特网范围内点对点串口透传,而且可以在不需要目标设备进行任何操作、不对原有程序代码进行任何修改的情况下,通过因特网实现远程程序的无缝安全更新,从而在不增加额外开发工作量的情况下实现工控设备和家用电器在因特网范围内的数据传输和行为更新。
为达到上述目的,本发明采用如下技术方案:
本发明一种因特网范围内的串口透传和程序更新系统的特点是包括:n个通信装置、更新控制终端、MQTT服务器、n个目标设备,且第i个通信装置仅与第i个目标设备相连接;
任意第i个通信装置作为订阅方按照自身的运行参数主动与因特网上的MQTT服务器建立连接,当建立成功后,从所述MQTT服务器上订阅串口传输主题、程序更新主题和参数配置主题;
令第j个通信装置作为发送方并检测所述第j个目标设备在运行过程中是否产生串口数据,当产生串口数据时,所述第j个通信装置通过串口传输主题将所述串口数据进行打包,形成MQTT报文并发送给所述MQTT服务器;
所述更新控制终端作为另一个订阅方通过因特网向MQTT服务器订阅更新状态主题,将需要更新的目标设备的信息和固件数据进行分段打包并通过程序更新主题分段发送至MQTT服务器,并将需要更新的通信装置的运行参数进行打包并通过参数配置主题发送至MQTT服务器;
所述MQTT服务器等待接收其他通信装置发送的MQTT报文,并判断所接收的MQTT报文是否符合所有订阅方订阅的主题,若符合,则所述MQTT服务器将符合的MQTT报文按照MQTT协议规范,自动向相应的订阅方转发相应的MQTT报文;若不符合,则丢弃相应的MQTT报文;
所述第i个通信装置作为接收方检测并接收所述MQTT服务器发送的MQTT报文,并按照所述MQTT报文的主题进行分类,若得到的分类主题为串口传输主题,则将相应的MQTT报文中的串口数据解包发送给所述第i个目标设备;若得到的分类主题为程序更新主题,则根据相应的MQTT报文中的目标设备的信息和固件数据对第i个目标设备进行校验、缓存和更新,从而实现程序更新操作;若得到的分类主题为参数配置主题,则根据相应的MQTT报文中的运行参数更新自身的运行参数;
所述更新控制终端作为另一个接收方检测并接收所述第i个通信设备发送的更新状态主题的MQTT报文,并判断所述第i个目标设备的当前更新状态,若当前更新状态为固件数据校验失败,则所述更新控制终端重新发送当前分段的MQTT报文;若当前更新状态为缓存成功,则所述更新控制终端打包发送下一个分段的MQTT报文;若当前更新状态为目标设备的信息校验失败,则所述更新控制终端停止更新;若当前更新状态为更新完成,则表示所述更新控制终端完成对第i个目标设备的更新。
本发明一种因特网范围内的串口透传和程序更新方法的特点是应用于由n个通信装置、更新控制终端、MQTT服务器、n个目标设备构成的更新系统中,且第i个通信装置仅与第i个目标设备相连接;所述串口透传和程序更新方法是按如下步骤进行:
步骤1、任意第i个通信装置作为订阅方按照自身的运行参数主动与因特网上的MQTT服务器建立连接,当建立成功后,从所述MQTT服务器上订阅串口传输主题、程序更新主题和参数配置主题;
步骤2、令第j个通信装置作为发送方并检测所述第j个目标设备在运行过程中是否产生串口数据,当产生串口数据时,所述第j个通信装置通过串口传输主题将所述串口数据进行打包,形成MQTT报文并发送给所述MQTT服务器;
步骤3、所述更新控制终端作为另一个订阅方通过因特网向MQTT服务器订阅更新状态主题,将需要更新的目标设备的信息和固件数据进行分段打包并通过程序更新主题分段发送至MQTT服务器,并将需要更新的通信装置的运行参数进行打包并通过参数配置主题发送至MQTT服务器;
步骤4、所述MQTT服务器等待接收其他通信装置发送的MQTT报文,并判断所接收的MQTT报文是否符合所有订阅方订阅的主题,若符合,则所述MQTT服务器将符合的MQTT报文按照MQTT协议规范,自动向相应的订阅方转发相应的MQTT报文;若不符合,则丢弃相应的MQTT报文;
步骤5、所述第i个通信装置作为接收方检测并接收所述MQTT服务器发送的MQTT报文,并按照所述MQTT报文的主题进行分类,若得到的分类主题为串口传输主题,则将相应的MQTT报文中的串口数据解包发送给所述第i个目标设备;若得到的分类主题为程序更新主题,则根据相应的MQTT报文中的目标设备的信息和固件数据对第i个目标设备进行校验、缓存和更新,从而实现程序更新操作;若得到的分类主题为参数配置主题,则根据相应的MQTT报文中的运行参数更新自身的运行参数;
步骤6、所述更新控制终端作为另一个接收方检测并接收所述第i个通信设备发送的更新状态主题的MQTT报文,并判断所述第i个目标设备的当前更新状态,若当前更新状态为固件数据校验失败,则所述更新控制终端重新发送当前分段的MQTT报文;若当前更新状态为缓存成功,则所述更新控制终端打包发送下一个分段的MQTT报文;若当前更新状态为目标设备信息校验失败,则所述更新控制终端停止更新;若当前更新状态为更新完成,则表示所述更新控制终端完成对第i个目标设备的更新。
本发明所述的串口透传和程序更新方法的特点也在于,
所述步骤1中,订阅方主动与因特网上的MQTT服务器建立连接是按如下步骤进行:
步骤1.1、所述订阅方从自身Flash读取运行参数,包括:WiFi热点信息,MQTT服务器信息、订阅的主题信息,所述订阅的主题信息包括:串口传输主题、程序更新主题和参数配置主题;
步骤1.2、所述订阅方根据所述WiFi热点信息连接WiFi热点,若连接成功,则执行步骤1.6;若连接不成功,则重复步骤1.2,直到重复连接次数超过s次后,进入步骤1.3;
步骤1.3、所述订阅方进入WiFi连接配置模式,等待从个人终端获取配置数据包;
步骤1.4、所述个人终端通过支持Airkiss或SmartConfig协议的应用程序扫描所述订阅方的二维码,并填入WiFi热点信息后形成数据包发送给所述订阅方;
步骤1.5、所述订阅方检测到所述数据包后,从所述数据包中解析出WiFi热点信息,并写入Flash后,执行步骤1.2;
步骤1.6、所述订阅方根据所述MQTT服务器信息通过因特网连接到所述MQTT服务器。
所述步骤2中,第j个通信装置是按如下步骤通过串口传输主题将串口数据进行打包:
步骤2.1、利用式(1)得到不同运行环境下第j个通信装置的打包间隔时间Tj
式(1)中,表示当前网络环境下第j个通信装置在应用层的最大传输单元的字节长度,Baudj表示与第j个目标设备相连接的通信装置的串口波特率,表示第j个通信装置的串口通信帧的总位数,表示第j个通信装置的串口通信帧的数据位宽;R表示MQTT报文的报头开销字节数;
步骤2.2、每隔一个打包间隔时间Tj,执行步骤2.3;
步骤2.3、所述第j个通信装置新建一个主题为串口接收、有效载荷段数据为空的MQTT报文;
步骤2.4、在当前打包间隔时间Tj内所述第j个通信装置将第j个目标设备发送的串口数据,按照发送的先后顺序依次填充至MQTT报文的有效载荷段内,从而完成串口数据的打包。
所述步骤3中,另一个订阅方是按如下步骤将需要更新的目标设备的信息和固件数据进行分段打包:
步骤3.1、若所述另一个订阅方的数据指针未初始化,则初始化数据指针,并将数据指针移动至与所述接收方相连接的目标设备的固件数据起始位置后,执行步骤3.2;若数据指针已初始化,则直接执行步骤3.2;
步骤3.2、所述另一个订阅方新建一个主题为JTAG更新、有效载荷段数据为空的MQTT报文作为当前报文;
步骤3.3、所述另一个订阅方将第i个目标设备的JTAG-DP接口单元识别ID,按照小端序填充至所述当前报文的有效载荷段的第1字节至第4字节中;
步骤3.4、所述另一个订阅方将JTAG接口时钟速度按照小端序填充至所述当前报文的有效载荷段的第5字节至第8字节中;
步骤3.5、所述另一个订阅方将当前数据指针与固件数据起始位置之间的偏移量,加上第i个目标设备的程序存储器的基地址后得到的地址数据,按照小端序填充至所述当前报文的有效载荷段的第9字节至第12字节中;
步骤3.6、所述另一个订阅方根据数据指针的当前位置,判断数据指针与存储所述固件数据的文件尾的偏移量是否大于H个字节,若是,则读取H个字节作为固件更新数据,从而将数据指针增加H个字节的偏移量;否则,读取数据指针与文件尾之间的全部字节作为固件更新数据,从而将数据指针指向存储所述固件数据的文件尾;
步骤3.7、所述另一个订阅方将读取到的固件更新数据的字节长度按照小端序填充至所述当前报文的有效载荷段的第13字节到第14字节中;
步骤3.8、如果当前报文是固件更新的首段报文,将第一标志字节置入所述当前报文的有效载荷段的第15字节中,如果当前报文是最后一段报文,将第二标志字节置入所述当前报文的有效载荷段的第15字节中;否则,将第三标志字节置入所述当前报文的有效载荷段的第15字节中;
步骤3.9、所述另一个订阅方将校验标志字节置入所述当前报文的有效载荷段的第16字节中;
步骤3.10、所述另一个订阅方将读取到的固件更新数据从所述当前报文的有效载荷段的第17字节依次开始填充,直到填充完成为止;若填充的固件更新数据的字节长度不能被4整除,则以0x00作为空字节来填充,直到固件更新数据与空字节的总长度能被4整除为止;
步骤3.11、所述另一个订阅方将所述当前报文的有效载荷段中已填充的数据按照4个字节一组进行分组,并依次按照循环进位加法对所有组的数据进行累加,得到的累加结果取补码后,附加在所述当前报文的有效载荷段数据的末尾,从而完成分段打包操作。
所述步骤5中,程序更新操作是按如下步骤进行:
步骤5.1、所述第i个通信装置作为接收方对接收到的程序更新主题的MQTT报文进行逐4字节循环进位累加计算,若计算结果为0x00000000,则执行步骤5.2;否则执行步骤5.3;
步骤5.2、所述接收方检查程序更新主题的MQTT报文的第16字节是否与校验标志字节相同,若相同,则执行步骤5.4;否则,执行步骤5.3;
步骤5.3、所述接收方向所述MQTT服务器发送内容为固件数据校验失败的更新状态主题的MQTT报文,并结束程序更新操作;
步骤5.4、所述接收方根据MQTT报文的有效负载段中第9字节至第12字节记载的地址加上偏移量D作为缓存写入地址,将MQTT报文的有效负载段中的固件更新数据写入自身Flash中,若写入成功,则向MQTT服务器发送内容为缓存成功的更新状态主题的MQTT报文后,执行步骤5.5;若写入不成功,则向MQTT服务器发送内容为缓存失败的更新状态主题的MQTT报文,并结束程序更新操作;
步骤5.5、所述接收方检查第i个目标设备的内存是否大于自身Flash中已缓存的数据大小H个字节以上,若大于,执行步骤5.6,否则,执行步骤5.7;
步骤5.6、所述接收方检查更新状态主题的MQTT报文中状态标志字节是否为第二标志字节,若是,执行步骤5.7,若不是,则结束程序更新操作;
步骤5.7、所述接收方向MQTT服务器发送内容为程序存储器更新开始的更新状态主题的MQTT报文,并使用JTAG接口与第i个目标设备内部JTAG-DP单元建立访问通道;
步骤5.8、所述接收方通过JTAG-DP单元执行调试指令,使第i个目标设备的CPU内核停止运行后,使能复位后停止运行模式,再复位第i个目标设备的CPU内核;
步骤5.9、所述接收方通过JTAG-DP单元读取并校验第i个目标设备的芯片型号,若与填充在JTAG更新的MQTT报文中的JTAG-DP接口单元识别ID相符合,则执行步骤5.10,否则,向MQTT服务器发送内容为目标设备信息校验失败的更新状态主题的MQTT报文,并结束程序更新操作;
步骤5.10、所述接收方通过JTAG-DP单元执行调试指令,与第i个目标设备的内存访问接口建立连接;
步骤5.11、所述接收方通过所述内存访问接口向第i个目标设备的内存最低位地址中,写入临时辅助程序,置位运行标志位,并向第i个目标设备的内存中写入接收方的Flash中缓存的固件更新数据;所述临时辅助程序为对自身程序存储器进行更新的相关指令,以及更新程序存储器的数据地址和长度;
步骤5.12、所述接收方通过JTAG-DP单元执行调试指令,将第i个目标设备的程序指针指向自身内存的最低位地址后,恢复第i个目标设备的CPU内核运行,从而使第i个目标设备通过运行所述临时辅助程序执行自身程序存储器的写入操作;
步骤5.13、所述接收方通过所述内存访问接口,检测第i个目标设备内存中运行标志位的值,并判断程序存储器的写入操作是否执行完成,若完成,则向MQTT服务器发送内容为程序存储器更新成功的更新状态主题的MQTT报文后,执行步骤5.14,否则,重复步骤5.13执行;
步骤5.14、所述接收方检查程序更新主题的MQTT报文中的状态标志字节是否为第二标志字节,若是,则通过JTAG-DP单元执行调试指令,关闭所述复位后停止运行模式后,复位第i个目标设备的CPU内核,再向MQTT服务器发送内容为更新完成的更新状态主题的MQTT报文,从而结束程序更新操作;否则,直接结束程序更新操作。
与已有技术相比,本发明的有益效果体现在:
1、本方法通过使用工作在应用层的MQTT协议对串口数据进行分段打包,并主动连接至MQTT服务器,服务器通过MQTT协议规范进行自动转发,来实现串口数据透传,克服了传统使用传输层协议的串口透传通信系统中,传输双方中的被动连接方必须拥有固定独立公网IP地址的弊端,将串口透传的范围从传统的单个局域网内扩展到因特网内,并且无需设置即可穿透多个NAT设备或防火墙,对于双方均通过使用私有IP地址的不同局域网连接到因特网的情况仍然可以工作,满足了现在设备厂商和嵌入式设备开发者对物联网应用的需求。
2、本方法通过MQTT协议分段打包传输目标设备的固件数据,并使用JTAG接口连接目标设备进行程序存储器的修改,实现了因特网范围内的目标设备的远程程序更新,满足了家用电器和工业设备在运行环境下远程优化更新行为的需求。并且,与传统远程程序更新方案相比,①通用性强,只需使用JTAG接口与目标设备连接,无需目标设备自身具有网络数据包处理能力,在目标设备的程序设计上无需进行任何更改,对于使用常见的各种内核架构的微控制器和数字信号处理器的家用电器和工控设备均可适用;②安全性高,由于其不依赖目标设备自身程序来执行更新操作,即使更新过程中断或者出错,仍然可以再次执行更新,最大限度的避免了程序更新过程中的风险。
3、本方法在通过JTAG接口对目标设备进行程序更新的过程中,借助目标设备的CPU和内存运行临时辅助代码,来执行其内部程序存储器的擦除和写入操作,与传统直接访问目标设备寄存器来进行程序存储器写入的方法相比,写入速度提升了10倍以上。
4、本方法中,通信装置通过WiFi连接无线路由器或无线AP来接入因特网,和以往通信设备通过双绞线和RJ-45接口接入网络相比,减少了安装工作量,扩展了应用范围。
5、本方法中,通信装置将自身相关配置参数存储在装置中Flash内,并通过Airkiss数据包、SmartConfig数据包和远程MQTT数据包,进行自身参数的在线更新,不仅避免了传统通信模块使用前繁琐的配置过程,而且可以通过远程指令对该装置进行统一管理,使目标设备可以无缝接入因特网。
附图说明
图1为本发明系统的结构框图;
图2为本发明JTAG更新主题MQTT报文有效负载段的数据格式示意图;
图3为本发明系统中通信装置的结构框图;
图4为通信装置主动连接MQTT服务器并订阅主题的流程示意图;
图5为通信装置打包串口数据的流程示意图;
图6为更新控制终端打包目标设备信息和固件数据的流程示意图;
图7为通信装置对目标设备进行程序更新的流程示意图。
具体实施方式
下面结合具体实例对发明做进一步说明。
本实施例中,一种因特网范围内的串口透传和程序更新系统包括:n个通信装置、更新控制终端、MQTT服务器、n个目标设备,且第i个通信装置仅与第i个目标设备相连接,如图1所示;
通信装置包括:射频SoC模块,天线模块,RS-232串口模块,JTAG接口模块,电源管理模块,如图3所示;
通信装置中的射频SoC模块用于与MQTT服务器建立连接,处理MQTT数据包,并控制JTAG接口模块与RS-232串口模块;射频SoC模块的第一接口与RS-232串口模块相连,用于向RS-232串口模块传输数据,射频SoC模块的第二接口和JTAG接口模块相连,用于向JTAG接口模块传输JTAG指令;射频SoC模块的第三接口和天线模块连接,用于传输射频信号,从而与MQTT服务器建立连接。
通信装置中的JTAG接口模块与目标设备的JTAG接口相连,实现了JTAG接口的物理层电路,包括接口输入/输出方向转换与电平平移,使装置可以适配不同的目标设备工作电压;并通过I/O端口源端端接与远端端接的方式,解决了与目标设备使用阻抗不可控连接器传输JTAG高速信号时的信号完整性问题,提高了JTAG指令执行速度。
通信装置中的RS-232串口模块与目标设备的RS-232串口相连,实现了将射频SoC模块的3.3V CMOS电平信号转换成符合RS-232标准的信号电平的功能,使装置便于和目标设备通信;
通信装置中的天线模块,将天线馈入端通过阻抗变换网络调节到与射频SoC模块第三接口的输出阻抗相匹配,完成射频信号与空间电磁场的相互转换;
通信装置中的电源管理模块与射频SoC模块,RS-232串口模块,JTAG接口模块连接,为上述几部分提供稳定可靠的电源供应。
任意第i个通信装置作为订阅方按照自身的运行参数主动与因特网上的MQTT服务器建立连接,当建立成功后,从MQTT服务器上订阅串口传输主题、程序更新主题和参数配置主题;
令第j个通信装置作为发送方并检测第j个目标设备在运行过程中是否产生串口数据,当产生串口数据时,第j个通信装置通过串口传输主题将串口数据进行打包,形成MQTT报文并发送给MQTT服务器;
更新控制终端是指,能够按照MQTT协议规范对固件数据进行打包并发送到因特网的终端,可以是PC机,服务器,手机等设备。
更新控制终端作为另一个订阅方通过因特网向MQTT服务器订阅更新状态主题,将需要更新的目标设备的信息和固件数据进行分段打包并通过程序更新主题分段发送至MQTT服务器,并将需要更新的通信装置的运行参数进行打包并通过参数配置主题发送至MQTT服务器;
MQTT服务器是指,运行符合MQTT协议规范中Broker角色定义的服务程序,并且连接到因特网的设备。前述服务程序可以是Mosquitto、EMQ等程序,前述设备可以自行使用前述服务程序搭建,也可以使用百度云、阿里云、Eclipse IoT等公共物联网服务提供商提供的设备。
MQTT服务器等待接收其他通信装置发送的MQTT报文,并判断所接收的MQTT报文是否符合所有订阅方订阅的主题,若符合,则MQTT服务器将符合的MQTT报文按照MQTT协议规范,自动向相应的订阅方转发相应的MQTT报文;若不符合,则丢弃相应的MQTT报文;
目标设备是指,在家用电器和工业自动化等领域中应用的,有接入因特网进行数据传输和程序更新需求的设备,其通过串口和JTAG接口与通信模块相连接。
第i个通信装置作为接收方检测并接收MQTT服务器发送的MQTT报文,并按照MQTT报文的主题进行分类,若得到的分类主题为串口传输主题,则将相应的MQTT报文中的串口数据解包发送给第i个目标设备;若得到的分类主题为程序更新主题,则根据相应的MQTT报文中的目标设备的信息和固件数据对第i个目标设备进行校验、缓存和更新,从而实现程序更新操作;若得到的分类主题为参数配置主题,则根据相应的MQTT报文中的运行参数更新自身的运行参数;
更新控制终端作为另一个接收方检测并接收第i个通信设备发送的更新状态主题的MQTT报文,并判断第i个目标设备的当前更新状态,若当前更新状态为固件数据校验失败,则更新控制终端重新发送当前分段的MQTT报文;若当前更新状态为缓存成功,则更新控制终端打包发送下一个分段的MQTT报文;若当前更新状态为目标设备的信息校验失败,则更新控制终端停止更新;若当前更新状态为更新完成,则表示更新控制终端完成对第i个目标设备的更新。
上文中提到的MQTT协议规范是指,符合ISO/IEC 20922:2016标准的一种工作在应用层的即时通讯协议。由于MQTT协议规范与其他应用层协议规范相比较,有着较小的报头开销和简洁的发布/订阅模式,因此把它作为本系统的应用层通信协议。
之所以使用应用层通信协议,是因为传统串口透传使用的传输层通信协议,例如TCP与UDP协议,均为面向连接的,在通信双方不能直接在传输层相互连接,需要第三方进行中转时,使用面向连接的协议来进行数据的转发就非常困难,进行中转的第三方需要为每个通信方固定分配一个传输层端口,并且维护一张登记了所有通信方的路由表,这在通信方的数量较多时基本不可能实现,因此需要使用在传输层进行再次封装的应用层通信协议,从而实现所有通信方只使用一个传输层端口,来进行可被通信方自主控制的路由转发功能。
可选的,通信装置中的射频SoC模块,包括上海乐鑫公司的ESP8266微处理器,其使用了集成片上SRAM的Tensilica L106架构,为本装置所需的数据处理和网络通信功能提供了足够的性能;另外,其内部集成了天线开关,射频巴伦器,功率放大器,低噪声接收放大器等,只需要很少的外部器件,就可以提供装置所需的WiFi网络连接,降低了所需的PCB面积。
可选的,通信装置中的射频SoC模块,包括华邦公司的W25Q256串行Flash,其于前述ESP8266微处理器相连,来存储通信装置运行所需的程序代码和系统参数,并缓存目标设备的固件信息。
可选的,通信装置中的JTAG接口模块,包括德州仪器公司SN74LVC1T45双电源总线收发器,提供了I/O接口的方向转换和电平平移功能,并且通过和外围RC无源器件配合,解决了使用外部连接器时的信号完整性问题,提升了JTAG接口信号传输速度。
本发明还实现了一种因特网范围内的串口透传和程序更新方法,应用于由n个通信装置、更新控制终端、MQTT服务器、n个目标设备构成的更新系统中,且第i个通信装置仅与第i个目标设备相连接;该串口透传和程序更新方法是按如下步骤进行:
步骤1、如图4所示,任意第i个通信装置作为订阅方,是按照如下步骤主动与因特网上的MQTT服务器建立连接,并订阅相应主题:
步骤1.1、订阅方从自身Flash读取运行参数,包括:WiFi热点信息,MQTT服务器信息、订阅的主题信息,订阅的主题信息包括:串口传输主题、程序更新主题和参数配置主题;
步骤1.2、订阅方根据WiFi热点信息连接WiFi热点,若连接成功,则执行步骤1.6;若连接不成功,则重复步骤2,直到重复连接次数超过s次后,进入步骤1.3;在一般环境中,可以令s=3,来确保不因为偶发原因导致WiFi热点连接失败,同时避免重试时间太长。
步骤1.3、订阅方进入WiFi连接配置模式,等待从个人终端获取配置数据包;
步骤1.4、个人终端通过支持Airkiss或SmartConfig协议的应用程序扫描订阅方的二维码,并填入WiFi热点信息后形成数据包发送给订阅方;
支持Airkiss或SmartConfig协议的应用程序是指,通过扫描订阅方的二维码来将WiFi热点信息按照Airkiss或SmartConfig协议规范打包,并经由IEEE802.11协议发送给通信装置的应用程序,可以是微信、IoT Espressif等应用程序。
个人终端是指,可以为支持Airkiss或SmartConfig协议的应用程序提供运行环境的设备,可以是运行Android、iOS系统的手机、平板等。
步骤1.5、订阅方检测到数据包后,从数据包中解析出WiFi热点信息,并写入Flash后,执行步骤1.2;
步骤1.6、订阅方根据MQTT服务器信息通过因特网连接到MQTT服务器。
步骤1.7、当订阅方与MQTT服务器建立成功后,从MQTT服务器上订阅串口传输主题、程序更新主题和参数配置主题;
通信装置订阅的串口传输主题,可以是与希望接收串口数据的发送方的串口传输主题一致,或通过通配符匹配的字段拼接的字符串,其中,前述通配符是指通过‘#’来通配零个、一个或多个字符。通过订阅不同的串口传输主题,可以实现指定设备之间的点对点,点对多,多对点,多对多的串口透传。
主动连接,是因为所有的防火墙和NAT设备,除了极少数情况,都会允许传出连接,但是禁止传入连接,而通信设备主动与MQTT服务器建立连接的情况,在通信设备的防火墙与NAT设备看来,属于传出连接,不会受到阻碍,因此,通过主动连接可以实现穿透防火墙和NAT设备。
步骤2、如图5所示,令第j个通信装置作为发送方并检测第j个目标设备在运行过程中是否产生串口数据,当产生串口数据时,第j个通信装置是按照如下步骤t通过串口传输主题将串口数据进行打包,形成MQTT报文并发送给MQTT服务器的:
步骤2.1、为了使通信装置能够处理应用层MQTT报文,需要节约设备TCP/IP协议栈的内存开销和数据运算量,避免发生数据包的分片和重组,从而必须限制单个MQTT报文的长度小于当前使用网络的最大传输单元。因此,需要利用式(1)得到不同运行环境下第j个通信装置打包单个报文的打包间隔时间Tj
式(1)中,表示当前网络环境下第j个通信装置在应用层的最大传输单元的字节长度,可由数据链路层的数据帧最大长度减去网络层IP报头开销和运输层TCP协议头部开销得到,R表示MQTT报文的报头开销字节数,表示除去MQTT报文的报头开销之后,MQTT报文的有效负载段可以占用最大字节数,由于在进行串口透传时,有效负载段全部用来填充串口数据,因此也是串口数据在单个传输单元内可以占用最大字节数,代表将前述字节数转化为比特数,Baudj表示与第j个目标设备相连接的通信装置的串口波特率,表示第j个通信装置的串口通信帧的总位数,表示第j个通信装置的串口通信帧的数据位宽,即为目标设备串口在连续发送数据时,每秒发送的比特数;
相除,即可得到目标设备串口在连续发送数据时,串口数据填满一个最大传输单元的时间,作为打包间隔时间Tj
例如,在一般情况下,数据链路层的最大数据帧长度为1500字节,IP数据报头部开销为20字节,TCP协议头部开销为20字节,则为1460字节,MQTT报文的报头开销R的大小可以为60字节,令第j个通信装置与第j个目标设备相连接的串口波特率Baudj为115200,数据位为8位,无奇偶校验位,一个停止位,则为8,为10。经式(1)计算,可得此时的打包时间间隔Tj为0.122s。
步骤2.2、每隔一个打包间隔时间Tj,执行步骤2.3步骤2.4步骤2.5,该步骤确保了在打包间隔时间Tj内,即使目标设备一直在发送数据,形成的MQTT报文也不会超过一个最大传输单元的大小;
步骤2.3、第j个通信装置新建一个主题为串口接收、有效载荷段数据为空的MQTT报文;
第j个通信装置作为发送方,串口传输主题可以是由前缀'send/'和用户自定义字段拼接的字符串;其中,用户自定义字符可以是发送方通信装置MAC地址;
步骤2.4、在当前打包间隔时间Tj内第j个通信装置将第j个目标设备发送的串口数据,按照发送的先后顺序依次填充至MQTT报文的有效载荷段内,从而完成串口数据的打包。
步骤2.5、将打包完成后的MQTT报文发送给MQTT服务器。
步骤3、如图6所示,更新控制终端作为另一个订阅方通过因特网向MQTT服务器订阅更新状态主题,并且将需要更新的目标设备的信息和固件数据按照如下步骤分段发送至MQTT服务器。
步骤3.1、因为需要更新的目标设备的固件数据是分段打包发送的,所以需要一个数据指针来确认当前读取的固件数据的位置,若另一个订阅方的数据指针未初始化,则初始化数据指针,并将数据指针移动至与接收方相连接的第i个目标设备的固件数据起始位置后,执行步骤3.2;若数据指针已初始化,则直接执行步骤3.2;
步骤3.2、另一个订阅方新建一个主题为JTAG更新、有效载荷段数据为空的MQTT报文作为当前报文;
步骤3.3、为了通信装置能够校验第i个目标设备的信息,另一个订阅方将第i个目标设备的JTAG-DP接口单元识别ID,按照小端序填充至当前报文的有效载荷段的第1字节至第4字节中,如图2所示;
JTAG-DP接口单元识别ID由目标设备的生产商确定,通信装置可以通过该ID唯一确定目标设备的芯片型号,从而避免将固件数据写入到错误的目标设备上。
步骤3.4、另一个订阅方将JTAG接口时钟速度按照小端序填充至当前报文的有效载荷段的第5字节至第8字节中,如图2所示;
步骤3.5、另一个订阅方将当前数据指针与固件数据起始位置之间的偏移量,加上第i个目标设备的程序存储器的基地址后得到的地址数据,按照小端序填充至当前报文的有效载荷段的第9字节至第12字节中,如图2所示;该地址数据即为该分段的固件数据写入第i个目标设备的存储器地址。
步骤3.6、另一个订阅方根据数据指针的当前位置,判断数据指针与存储固件数据的文件尾之间的偏移量是否大于H个字节,若是,则读取H个字节作为固件更新数据,从而将数据指针增加H个字节的偏移量;否则,读取数据指针与文件尾之间的全部字节作为固件更新数据,从而将数据指针指向存储固件数据的文件尾;在一般情况下,为了提高数据包处理效率,可以令H为1024。
步骤3.7、另一个订阅方将读取到的固件更新数据的字节长度按照小端序填充至当前报文的有效载荷段的第13字节到第14字节中,如图2所示;
步骤3.8、如图2所示,如果当前报文是固件更新的首段报文,将第一标志字节置入当前报文的有效载荷段的第15字节中,如果当前报文是最后一段报文,将第二标志字节置入当前报文的有效载荷段的第15字节中;否则,将第三标志字节置入当前报文的有效载荷段的第15字节中;在一般情况下,第一标志字节可以为0xA1,第二标志字节可以为0xA2,第三标志字节可以为0xA3。
步骤3.9、另一个订阅方将校验标志字节置入当前报文的有效载荷段的第16字节中,如图2所示;在一般情况下,校验标志字节可以为0xAA;
步骤3.10、如图2所示,另一个订阅方将读取到的固件更新数据从当前报文的有效载荷段的第17字节依次开始填充,直到填充完成为止;为了使下一步骤的数据校验字节可以按照逐四字节累加进行计算,若填充的固件更新数据的字节长度不能被4整除,则以0x00作为空字节来填充,直到固件更新数据与空字节的总长度能被4整除为止;
步骤3.11、为了防止数据在传输过程中发生错误,需要在MQTT报文中加入数据校验字节来进行数据完整性校验,如图2所示。
较为常用的CRC32算法,即使采用优化过后的查表法进行计算,每4字节数据仍然需要进行至少4次迭代,每次迭代至少需要几十个指令周期,而4字节宽度的校验和算法,在现今32位微控制器已经普及的情况下,每4字节数据只需要2个指令周期。因此,考虑到通信装置的计算能力有限,本方法使用了4字节宽度的校验和算法进行数据完整性校验。
具体来说,另一个订阅方将当前报文的有效载荷段中已填充的数据按照4个字节一组进行分组,并依次按照循环进位加法对所有组的数据进行累加,得到的累加结果取补码后,附加在当前报文的有效载荷段数据的末尾,从而完成目标设备固件数据和信息的分段打包操作。
更新控制终端除了将需要更新的目标设备相关数据进行打包发送之外,还可以将需要更新的通信装置的运行参数进行打包并通过参数配置主题发送至MQTT服务器;具体操作步骤是,新建一个主题为参数配置,有效载荷段数据为空的MQTT报文,将通信装置的配置参数序列化成JSON编码数据,填充至MQTT报文的有效载荷段,之后发送至MQTT服务器。
步骤4、MQTT服务器等待接收其他通信装置发送的MQTT报文,并判断所接收的MQTT报文是否符合所有订阅方订阅的主题,若符合,则MQTT服务器将符合的MQTT报文按照MQTT协议规范,自动向相应的订阅方转发相应的MQTT报文;若不符合,则丢弃相应的MQTT报文;
步骤5、第i个通信装置作为接收方检测并接收MQTT服务器发送的MQTT报文,并按照MQTT报文的主题进行分类:
若得到的分类主题为订阅串口传输主题,则将相应的MQTT报文中的串口数据解包发送给第i个目标设备;
若得到的分类主题为程序更新主题,则如图7所示,根据相应的MQTT报文中的目标设备的信息和固件数据,按照下列步骤对第i个目标设备进行校验、缓存和更新,从而实现程序更新操作;
步骤5.1、第i个通信装置作为接收方对接收到的程序更新主题的MQTT报文进行逐4字节循环进位累加计算,若计算结果为0x00000000,则代表通过校验和进行的校验操作成功,执行步骤5.2;否则代表通过校验和进行的校验操作失败,执行步骤5.3;
步骤5.2、接收方检查程序更新主题的MQTT报文的第16位是否与校验标志字节相同,若相同,则代表通过校验标志字节进行的校验操作成功,执行步骤5.4;否则,代表通过校验标志字节进行的校验操作失败,执行步骤5.3;
步骤5.3、接收方向MQTT服务器发送内容为固件数据校验失败的更新状态主题的MQTT报文,从而可以由MQTT服务器通知更新控制终端固件数据校验失败,并结束程序更新操作;
步骤5.4、接收方根据MQTT报文的有效负载段中第9字节至第12字节记载的地址加上偏移量D作为缓存写入地址,将MQTT报文的有效负载段中的固件更新数据写入自身Flash中,从而进行固件数据的缓存;若写入成功,则向MQTT服务器发送内容为缓存成功的更新状态主题的MQTT报文后,执行步骤5.5;若写入不成功,则向MQTT服务器发送内容为缓存失败的更新状态主题的MQTT报文,并结束程序更新操作;
步骤5.5、接收方检查第i个目标设备的内存是否大于自身Flash中已缓存的数据大小H个字节以上,从而确认目标设备是否能够在容纳当前缓存的固件数据的情况下,继续容纳下一个分段报文的固件数据,若大于,意味着可以继续容纳下一个分段报文的固件数据,执行步骤5.6,否则意味着目标设备已经不能继续容纳下一个分段报文的固件数据,需要通过执行步骤5.7来进行已缓存固件数据的写入;
步骤5.6、接收方检查更新状态主题的MQTT报文中状态标志字节是否为第二标志字节,若是,意味着当前报文已经是最后一个分段报文的固件数据,需要通过执行步骤5.7来进行已缓存固件数据的写入,若不是,则意味着当前报文不是最后一个分段报文的固件数据,因此直接结束程序更新操作;
步骤5.7、接收方向MQTT服务器发送内容为程序存储器更新开始的更新状态主题的MQTT报文,并使用JTAG接口与第i个目标设备内部JTAG-DP单元建立访问通道,从而让通信装置可以对目标设备执行调试指令;
步骤5.8、为了让目标设备的CPU内核在一个确定的状态停止运行,接收方通过JTAG-DP单元执行调试指令,使第i个目标设备的CPU内核停止运行后,使能复位后停止运行模式,再复位第i个目标设备的CPU内核;
步骤5.9、接收方通过JTAG-DP单元读取并校验第i个目标设备的芯片型号,若与填充在JTAG更新的MQTT报文中的JTAG-DP接口单元识别ID相符合,则执行步骤5.10,否则,向MQTT服务器发送内容为目标设备信息校验失败的更新状态主题的MQTT报文,从而可以由MQTT服务器通知更新控制终端目标设备信息校验失败,并结束程序更新操作;
步骤5.10、为了能够访问目标设备的内存单元,接收方通过JTAG-DP单元执行调试指令,与第i个目标设备的内存访问接口建立连接;
步骤5.11、传统写入目标设备程序存储器的方式是通过改写目标设备内部与存储器操作相关的寄存器,但该方式的写入速度过慢,为了加速程序存储器的写入速度,本方法通过在目标设备内存中写入临时辅助程序,并使用目标设备CPU执行临时辅助程序的方式,让临时辅助程序执行目标设备程序存储器的写入操作。
具体来说,接收方通过内存访问接口向第i个目标设备的内存最低位地址中,写入临时辅助程序,置位运行标志位,并向第i个目标设备的内存中写入接收方的Flash中缓存的固件更新数据;
对于写入在目标设备内存中的临时辅助程序,其自身在目标设备中运行时实现的操作简述如下:
步骤5.11.1、根据需要写入程序存储器的数据长度,擦除指定长度的存储器区块。
步骤5.11.2、将内存中的固件数据按照每32位一组,写入至指定地址的程序存储器,循环该操作直到需要写入程序存储器的数据写入完成。
步骤5.11.3、清除运行标志位,停止自身运行。
步骤5.12、接收方通过JTAG-DP单元执行调试指令,将第i个目标设备的程序指针指向自身内存的最低位地址后,恢复第i个目标设备的CPU内核运行,从而使第i个目标设备通过运行临时辅助程序执行自身程序存储器的写入操作;
步骤5.13、接收方通过内存访问接口,检测第i个目标设备内存中运行标志位的值,并判断程序存储器的写入操作是否执行完成,若完成,则向MQTT服务器发送内容为程序存储器更新成功的更新状态主题的MQTT报文后,执行步骤5.14,否则,重复步骤5.13执行;
步骤5.14、接收方检查程序更新主题的MQTT报文中的状态标志字节是否为第二标志字节,若是,则通过JTAG-DP单元执行调试指令,关闭复位后停止运行模式后,复位第i个目标设备的CPU内核,再向MQTT服务器发送内容为更新完成的更新状态主题的MQTT报文,从而结束程序更新操作;否则,直接结束程序更新操作。
若得到的分类主题为参数配置主题,则通信装置将相应的MQTT报文中有效载荷段的数据作为JSON编码数据,对其进行反序列化,得到通信装置自身的运行参数,并写入通信装置的参数配置寄存器;
步骤6、更新控制终端作为另一个接收方检测并接收第i个通信设备发送的更新状态主题的MQTT报文,并判断第i个目标设备的当前更新状态,若当前更新状态为固件数据校验失败,则更新控制终端重新发送当前分段的MQTT报文;若当前更新状态为缓存成功,则更新控制终端打包发送下一个分段的MQTT报文;若当前更新状态为目标设备信息校验失败,则更新控制终端停止更新;若当前更新状态为更新完成,则表示更新控制终端完成对第i个目标设备的更新。

Claims (6)

1.一种因特网范围内的串口透传和程序更新系统,其特征是包括:n个通信装置、更新控制终端、MQTT服务器、n个目标设备,且第i个通信装置仅与第i个目标设备相连接;
任意第i个通信装置作为订阅方按照自身的运行参数主动与因特网上的MQTT服务器建立连接,当建立成功后,从所述MQTT服务器上订阅串口传输主题、程序更新主题和参数配置主题;
令第j个通信装置作为发送方并检测所述第j个目标设备在运行过程中是否产生串口数据,当产生串口数据时,所述第j个通信装置通过串口传输主题将所述串口数据进行打包,形成MQTT报文并发送给所述MQTT服务器;
所述更新控制终端作为另一个订阅方通过因特网向MQTT服务器订阅更新状态主题,将需要更新的目标设备的信息和固件数据进行分段打包并通过程序更新主题分段发送至MQTT服务器,并将需要更新的通信装置的运行参数进行打包并通过参数配置主题发送至MQTT服务器;
所述MQTT服务器等待接收其他通信装置发送的MQTT报文,并判断所接收的MQTT报文是否符合所有订阅方订阅的主题,若符合,则所述MQTT服务器将符合的MQTT报文按照MQTT协议规范,自动向相应的订阅方转发相应的MQTT报文;若不符合,则丢弃相应的MQTT报文;
所述第i个通信装置作为接收方检测并接收所述MQTT服务器发送的MQTT报文,并按照所述MQTT报文的主题进行分类,若得到的分类主题为串口传输主题,则将相应的MQTT报文中的串口数据解包发送给所述第i个目标设备;若得到的分类主题为程序更新主题,则根据相应的MQTT报文中的目标设备的信息和固件数据对第i个目标设备进行校验、缓存和更新,从而实现程序更新操作;若得到的分类主题为参数配置主题,则根据相应的MQTT报文中的运行参数更新自身的运行参数;
所述更新控制终端作为另一个接收方检测并接收所述第i个通信设备发送的更新状态主题的MQTT报文,并判断所述第i个目标设备的当前更新状态,若当前更新状态为固件数据校验失败,则所述更新控制终端重新发送当前分段的MQTT报文;若当前更新状态为缓存成功,则所述更新控制终端打包发送下一个分段的MQTT报文;若当前更新状态为目标设备的信息校验失败,则所述更新控制终端停止更新;若当前更新状态为更新完成,则表示所述更新控制终端完成对第i个目标设备的更新。
2.一种因特网范围内的串口透传和程序更新方法,其特征是应用于由n个通信装置、更新控制终端、MQTT服务器、n个目标设备构成的更新系统中,且第i个通信装置仅与第i个目标设备相连接;所述串口透传和程序更新方法是按如下步骤进行:
步骤1、任意第i个通信装置作为订阅方按照自身的运行参数主动与因特网上的MQTT服务器建立连接,当建立成功后,从所述MQTT服务器上订阅串口传输主题、程序更新主题和参数配置主题;
步骤2、令第j个通信装置作为发送方并检测所述第j个目标设备在运行过程中是否产生串口数据,当产生串口数据时,所述第j个通信装置通过串口传输主题将所述串口数据进行打包,形成MQTT报文并发送给所述MQTT服务器;
步骤3、所述更新控制终端作为另一个订阅方通过因特网向MQTT服务器订阅更新状态主题,将需要更新的目标设备的信息和固件数据进行分段打包并通过程序更新主题分段发送至MQTT服务器,并将需要更新的通信装置的运行参数进行打包并通过参数配置主题发送至MQTT服务器;
步骤4、所述MQTT服务器等待接收其他通信装置发送的MQTT报文,并判断所接收的MQTT报文是否符合所有订阅方订阅的主题,若符合,则所述MQTT服务器将符合的MQTT报文按照MQTT协议规范,自动向相应的订阅方转发相应的MQTT报文;若不符合,则丢弃相应的MQTT报文;
步骤5、所述第i个通信装置作为接收方检测并接收所述MQTT服务器发送的MQTT报文,并按照所述MQTT报文的主题进行分类,若得到的分类主题为串口传输主题,则将相应的MQTT报文中的串口数据解包发送给所述第i个目标设备;若得到的分类主题为程序更新主题,则根据相应的MQTT报文中的目标设备的信息和固件数据对第i个目标设备进行校验、缓存和更新,从而实现程序更新操作;若得到的分类主题为参数配置主题,则根据相应的MQTT报文中的运行参数更新自身的运行参数;
步骤6、所述更新控制终端作为另一个接收方检测并接收所述第i个通信设备发送的更新状态主题的MQTT报文,并判断所述第i个目标设备的当前更新状态,若当前更新状态为固件数据校验失败,则所述更新控制终端重新发送当前分段的MQTT报文;若当前更新状态为缓存成功,则所述更新控制终端打包发送下一个分段的MQTT报文;若当前更新状态为目标设备信息校验失败,则所述更新控制终端停止更新;若当前更新状态为更新完成,则表示所述更新控制终端完成对第i个目标设备的更新。
3.根据权利要求2所述的串口透传和程序更新方法,其特征是,所述步骤1中,订阅方主动与因特网上的MQTT服务器建立连接是按如下步骤进行:
步骤1.1、所述订阅方从自身Flash读取运行参数,包括:WiFi热点信息,MQTT服务器信息、订阅的主题信息,所述订阅的主题信息包括:串口传输主题、程序更新主题和参数配置主题;
步骤1.2、所述订阅方根据所述WiFi热点信息连接WiFi热点,若连接成功,则执行步骤1.6;若连接不成功,则重复步骤1.2,直到重复连接次数超过s次后,进入步骤1.3;
步骤1.3、所述订阅方进入WiFi连接配置模式,等待从个人终端获取配置数据包;
步骤1.4、所述个人终端通过支持Airkiss或SmartConfig协议的应用程序扫描所述订阅方的二维码,并填入WiFi热点信息后形成数据包发送给所述订阅方;
步骤1.5、所述订阅方检测到所述数据包后,从所述数据包中解析出WiFi热点信息,并写入Flash后,执行步骤1.2;
步骤1.6、所述订阅方根据所述MQTT服务器信息通过因特网连接到所述MQTT服务器。
4.根据权利要求2所述的串口透传和程序更新方法,其特征是,所述步骤2中,第j个通信装置是按如下步骤通过串口传输主题将串口数据进行打包:
步骤2.1、利用式(1)得到不同运行环境下第j个通信装置的打包间隔时间Tj
<mrow> <msub> <mi>T</mi> <mi>j</mi> </msub> <mo>=</mo> <mfrac> <mrow> <mo>(</mo> <msubsup> <mi>L</mi> <mrow> <mi>M</mi> <mi>T</mi> <mi>U</mi> </mrow> <mi>j</mi> </msubsup> <mo>-</mo> <mi>R</mi> <mo>)</mo> <mo>&amp;times;</mo> <mn>8</mn> </mrow> <mrow> <msub> <mi>Baud</mi> <mi>j</mi> </msub> <mo>&amp;times;</mo> <mfrac> <msubsup> <mi>L</mi> <mrow> <mi>D</mi> <mi>a</mi> <mi>t</mi> <mi>a</mi> </mrow> <mi>j</mi> </msubsup> <msubsup> <mi>L</mi> <mrow> <mi>F</mi> <mi>r</mi> <mi>a</mi> <mi>m</mi> <mi>e</mi> </mrow> <mi>j</mi> </msubsup> </mfrac> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow>
式(1)中,表示当前网络环境下第j个通信装置在应用层的最大传输单元的字节长度,Baudj表示与第j个目标设备相连接的通信装置的串口波特率,表示第j个通信装置的串口通信帧的总位数,表示第j个通信装置的串口通信帧的数据位宽;R表示MQTT报文的报头开销字节数;
步骤2.2、每隔一个打包间隔时间Tj,执行步骤2.3;
步骤2.3、所述第j个通信装置新建一个主题为串口接收、有效载荷段数据为空的MQTT报文;
步骤2.4、在当前打包间隔时间Tj内所述第j个通信装置将第j个目标设备发送的串口数据,按照发送的先后顺序依次填充至MQTT报文的有效载荷段内,从而完成串口数据的打包。
5.根据权利要求2所述的串口透传和程序更新方法,其特征是,所述步骤3中,另一个订阅方是按如下步骤将需要更新的目标设备的信息和固件数据进行分段打包:
步骤3.1、若所述另一个订阅方的数据指针未初始化,则初始化数据指针,并将数据指针移动至与所述接收方相连接的目标设备的固件数据起始位置后,执行步骤3.2;若数据指针已初始化,则直接执行步骤3.2;
步骤3.2、所述另一个订阅方新建一个主题为JTAG更新、有效载荷段数据为空的MQTT报文作为当前报文;
步骤3.3、所述另一个订阅方将第i个目标设备的JTAG-DP接口单元识别ID,按照小端序填充至所述当前报文的有效载荷段的第1字节至第4字节中;
步骤3.4、所述另一个订阅方将JTAG接口时钟速度按照小端序填充至所述当前报文的有效载荷段的第5字节至第8字节中;
步骤3.5、所述另一个订阅方将当前数据指针与固件数据起始位置之间的偏移量,加上第i个目标设备的程序存储器的基地址后得到的地址数据,按照小端序填充至所述当前报文的有效载荷段的第9字节至第12字节中;
步骤3.6、所述另一个订阅方根据数据指针的当前位置,判断数据指针与存储所述固件数据的文件尾的偏移量是否大于H个字节,若是,则读取H个字节作为固件更新数据,从而将数据指针增加H个字节的偏移量;否则,读取数据指针与文件尾之间的全部字节作为固件更新数据,从而将数据指针指向存储所述固件数据的文件尾;
步骤3.7、所述另一个订阅方将读取到的固件更新数据的字节长度按照小端序填充至所述当前报文的有效载荷段的第13字节到第14字节中;
步骤3.8、如果当前报文是固件更新的首段报文,将第一标志字节置入所述当前报文的有效载荷段的第15字节中,如果当前报文是最后一段报文,将第二标志字节置入所述当前报文的有效载荷段的第15字节中;否则,将第三标志字节置入所述当前报文的有效载荷段的第15字节中;
步骤3.9、所述另一个订阅方将校验标志字节置入所述当前报文的有效载荷段的第16字节中;
步骤3.10、所述另一个订阅方将读取到的固件更新数据从所述当前报文的有效载荷段的第17字节依次开始填充,直到填充完成为止;若填充的固件更新数据的字节长度不能被4整除,则以0x00作为空字节来填充,直到固件更新数据与空字节的总长度能被4整除为止;
步骤3.11、所述另一个订阅方将所述当前报文的有效载荷段中已填充的数据按照4个字节一组进行分组,并依次按照循环进位加法对所有组的数据进行累加,得到的累加结果取补码后,附加在所述当前报文的有效载荷段数据的末尾,从而完成分段打包操作。
6.根据权利要求2所述的串口透传和程序更新方法,其特征是,所述步骤5中,程序更新操作是按如下步骤进行:
步骤5.1、所述第i个通信装置作为接收方对接收到的程序更新主题的MQTT报文进行逐4字节循环进位累加计算,若计算结果为0x00000000,则执行步骤5.2;否则执行步骤5.3;
步骤5.2、所述接收方检查程序更新主题的MQTT报文的第16字节是否与校验标志字节相同,若相同,则执行步骤5.4;否则,执行步骤5.3;
步骤5.3、所述接收方向所述MQTT服务器发送内容为固件数据校验失败的更新状态主题的MQTT报文,并结束程序更新操作;
步骤5.4、所述接收方根据MQTT报文的有效负载段中第9字节至第12字节记载的地址加上偏移量D作为缓存写入地址,将MQTT报文的有效负载段中的固件更新数据写入自身Flash中,若写入成功,则向MQTT服务器发送内容为缓存成功的更新状态主题的MQTT报文后,执行步骤5.5;若写入不成功,则向MQTT服务器发送内容为缓存失败的更新状态主题的MQTT报文,并结束程序更新操作;
步骤5.5、所述接收方检查第i个目标设备的内存是否大于自身Flash中已缓存的数据大小H个字节以上,若大于,执行步骤5.6,否则,执行步骤5.7;
步骤5.6、所述接收方检查更新状态主题的MQTT报文中状态标志字节是否为第二标志字节,若是,执行步骤5.7,若不是,则结束程序更新操作;
步骤5.7、所述接收方向MQTT服务器发送内容为程序存储器更新开始的更新状态主题的MQTT报文,并使用JTAG接口与第i个目标设备内部JTAG-DP单元建立访问通道;
步骤5.8、所述接收方通过JTAG-DP单元执行调试指令,使第i个目标设备的CPU内核停止运行后,使能复位后停止运行模式,再复位第i个目标设备的CPU内核;
步骤5.9、所述接收方通过JTAG-DP单元读取并校验第i个目标设备的芯片型号,若与填充在JTAG更新的MQTT报文中的JTAG-DP接口单元识别ID相符合,则执行步骤5.10,否则,向MQTT服务器发送内容为目标设备信息校验失败的更新状态主题的MQTT报文,并结束程序更新操作;
步骤5.10、所述接收方通过JTAG-DP单元执行调试指令,与第i个目标设备的内存访问接口建立连接;
步骤5.11、所述接收方通过所述内存访问接口向第i个目标设备的内存最低位地址中,写入临时辅助程序,置位运行标志位,并向第i个目标设备的内存中写入接收方的Flash中缓存的固件更新数据;所述临时辅助程序为对自身程序存储器进行更新的相关指令,以及更新程序存储器的数据地址和长度;
步骤5.12、所述接收方通过JTAG-DP单元执行调试指令,将第i个目标设备的程序指针指向自身内存的最低位地址后,恢复第i个目标设备的CPU内核运行,从而使第i个目标设备通过运行所述临时辅助程序执行自身程序存储器的写入操作;
步骤5.13、所述接收方通过所述内存访问接口,检测第i个目标设备内存中运行标志位的值,并判断程序存储器的写入操作是否执行完成,若完成,则向MQTT服务器发送内容为程序存储器更新成功的更新状态主题的MQTT报文后,执行步骤5.14,否则,重复步骤5.13执行;
步骤5.14、所述接收方检查程序更新主题的MQTT报文中的状态标志字节是否为第二标志字节,若是,则通过JTAG-DP单元执行调试指令,关闭所述复位后停止运行模式后,复位第i个目标设备的CPU内核,再向MQTT服务器发送内容为更新完成的更新状态主题的MQTT报文,从而结束程序更新操作;否则,直接结束程序更新操作。
CN201810008774.7A 2018-01-04 2018-01-04 一种因特网范围内串口透传和程序更新系统及其方法 Active CN108062230B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810008774.7A CN108062230B (zh) 2018-01-04 2018-01-04 一种因特网范围内串口透传和程序更新系统及其方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810008774.7A CN108062230B (zh) 2018-01-04 2018-01-04 一种因特网范围内串口透传和程序更新系统及其方法

Publications (2)

Publication Number Publication Date
CN108062230A true CN108062230A (zh) 2018-05-22
CN108062230B CN108062230B (zh) 2019-08-30

Family

ID=62141285

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810008774.7A Active CN108062230B (zh) 2018-01-04 2018-01-04 一种因特网范围内串口透传和程序更新系统及其方法

Country Status (1)

Country Link
CN (1) CN108062230B (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108932193A (zh) * 2018-06-01 2018-12-04 四川斐讯全智信息技术有限公司 一种mqtt服务器接口测试方法及系统
CN109218146A (zh) * 2018-10-12 2019-01-15 浙江工商大学 基于微信公众号的红外家电云控制方法和系统
CN109358889A (zh) * 2018-12-26 2019-02-19 山东有人信息技术有限公司 一种串口设备升级方法
CN110244969A (zh) * 2019-07-09 2019-09-17 山西方是科技有限公司 一种智能设备管理和控制终端
CN110536323A (zh) * 2019-09-04 2019-12-03 四川长虹电器股份有限公司 一种WiFi智能设备验收检测方法
CN110620783A (zh) * 2019-09-26 2019-12-27 成都博高信息技术股份有限公司 一种基于nat内网穿透的互联网络串口透传通信方法
CN111182058A (zh) * 2019-12-30 2020-05-19 福建天泉教育科技有限公司 在Android端实现跨租户访问的方法、存储介质
CN111225455A (zh) * 2019-12-04 2020-06-02 广州市星翼电子科技有限公司 一种基于4g网络的无线终端设备及无线数据传输方法
CN112073359A (zh) * 2019-06-11 2020-12-11 腾讯科技(深圳)有限公司 信息交互方法、装置、设备及系统
CN112230968A (zh) * 2020-12-17 2021-01-15 清华四川能源互联网研究院 固件更新方法、装置、服务器和计算机可读存储介质
CN112995321A (zh) * 2021-03-04 2021-06-18 华录智达科技股份有限公司 基于mqtt协议远程即时更新客户端的方法
CN113595933A (zh) * 2021-08-18 2021-11-02 石家庄科林电气股份有限公司 一种基于mqtt通信协议的串口复用方法和装置
CN113872982A (zh) * 2021-10-09 2021-12-31 中远海运科技股份有限公司 一种基于mqtt协议的船舶监控数据传输方法及系统
CN114826979A (zh) * 2022-04-07 2022-07-29 中国联合网络通信集团有限公司 网络链路质量获取方法、装置、系统、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105207869A (zh) * 2015-08-13 2015-12-30 徐晓哲 一种基于mqtt物联网协议的串口与以太网转换装置
US20160065653A1 (en) * 2014-08-26 2016-03-03 Fujitsu Limited Internet of things (iot) device configuration construction
CN106909206A (zh) * 2017-04-18 2017-06-30 湖北科技学院 一种云端穿透型串口服务器
CN107231425A (zh) * 2017-06-15 2017-10-03 哈尔滨新中新电子股份有限公司 一种基于mqtt协议的无线通讯装置和方法以及一种控水器

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160065653A1 (en) * 2014-08-26 2016-03-03 Fujitsu Limited Internet of things (iot) device configuration construction
CN105207869A (zh) * 2015-08-13 2015-12-30 徐晓哲 一种基于mqtt物联网协议的串口与以太网转换装置
CN106909206A (zh) * 2017-04-18 2017-06-30 湖北科技学院 一种云端穿透型串口服务器
CN107231425A (zh) * 2017-06-15 2017-10-03 哈尔滨新中新电子股份有限公司 一种基于mqtt协议的无线通讯装置和方法以及一种控水器

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
白昊 等: "基于串口转WiFi的物联网终端远程控制实现方法", 《计算机测量与控制》 *

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108932193A (zh) * 2018-06-01 2018-12-04 四川斐讯全智信息技术有限公司 一种mqtt服务器接口测试方法及系统
CN109218146A (zh) * 2018-10-12 2019-01-15 浙江工商大学 基于微信公众号的红外家电云控制方法和系统
CN109358889A (zh) * 2018-12-26 2019-02-19 山东有人信息技术有限公司 一种串口设备升级方法
CN112073359A (zh) * 2019-06-11 2020-12-11 腾讯科技(深圳)有限公司 信息交互方法、装置、设备及系统
CN112073359B (zh) * 2019-06-11 2023-01-24 腾讯科技(深圳)有限公司 信息交互方法、装置、设备及系统
CN110244969A (zh) * 2019-07-09 2019-09-17 山西方是科技有限公司 一种智能设备管理和控制终端
CN110536323A (zh) * 2019-09-04 2019-12-03 四川长虹电器股份有限公司 一种WiFi智能设备验收检测方法
CN110620783A (zh) * 2019-09-26 2019-12-27 成都博高信息技术股份有限公司 一种基于nat内网穿透的互联网络串口透传通信方法
CN110620783B (zh) * 2019-09-26 2022-03-25 成都博高信息技术股份有限公司 一种基于nat内网穿透的互联网络串口透传通信方法
CN111225455A (zh) * 2019-12-04 2020-06-02 广州市星翼电子科技有限公司 一种基于4g网络的无线终端设备及无线数据传输方法
CN111182058A (zh) * 2019-12-30 2020-05-19 福建天泉教育科技有限公司 在Android端实现跨租户访问的方法、存储介质
CN111182058B (zh) * 2019-12-30 2022-07-26 福建天泉教育科技有限公司 在Android端实现跨租户访问的方法、存储介质
CN112230968A (zh) * 2020-12-17 2021-01-15 清华四川能源互联网研究院 固件更新方法、装置、服务器和计算机可读存储介质
CN112995321A (zh) * 2021-03-04 2021-06-18 华录智达科技股份有限公司 基于mqtt协议远程即时更新客户端的方法
CN113595933A (zh) * 2021-08-18 2021-11-02 石家庄科林电气股份有限公司 一种基于mqtt通信协议的串口复用方法和装置
CN113595933B (zh) * 2021-08-18 2023-04-28 石家庄科林电气股份有限公司 一种基于mqtt通信协议的串口复用方法和装置
CN113872982A (zh) * 2021-10-09 2021-12-31 中远海运科技股份有限公司 一种基于mqtt协议的船舶监控数据传输方法及系统
CN113872982B (zh) * 2021-10-09 2023-10-31 中远海运科技股份有限公司 一种基于mqtt协议的船舶监控数据传输方法及系统
CN114826979A (zh) * 2022-04-07 2022-07-29 中国联合网络通信集团有限公司 网络链路质量获取方法、装置、系统、设备及存储介质
CN114826979B (zh) * 2022-04-07 2023-08-15 中国联合网络通信集团有限公司 网络链路质量获取方法、装置、系统、设备及存储介质

Also Published As

Publication number Publication date
CN108062230B (zh) 2019-08-30

Similar Documents

Publication Publication Date Title
CN108062230B (zh) 一种因特网范围内串口透传和程序更新系统及其方法
CN104010039B (zh) 一种基于WebSocket的多雷达远程监控系统及方法
CN107347025A (zh) 数据处理方法、装置、服务器及系统
CN101383822A (zh) 航空电信网路由器虚拟机
CN104993947A (zh) 批量升级固件的方法
CN106452833B (zh) 一种rtu多协议动态加载的数据传输方法
CN108055688A (zh) 一种用于智能显示设备的配网方法及装置、终端设备
CN111092854B (zh) 用于将从源设备发送的分组发送到目的地设备的方法
CN106130855B (zh) 数据处理的方法及装置
CN108322443A (zh) 设备交互通信方法、装置、存储介质及计算机设备
CN103841587B (zh) 一种物联网融合网关的实现方法、装置及系统
CN107426770A (zh) 基于数据链路层的数据通讯方法、数据终端及系统
CN110290061A (zh) 一种基于网关的物联网通信方法及网关
CN109147118A (zh) 小区门禁系统、适配方法及物联网网关
CN107508828B (zh) 一种超远程数据交互系统及方法
CN102255800B (zh) Can总线上ip数据包和can消息之间数据格式相互转换的方法
CN104486341B (zh) 数据转换处理的方法、装置及系统
CN108683590A (zh) 工业物联网及其中的智能网关、智能网关的数据传输方法
CN107918375A (zh) 一种设备云端监控管理系统
CN104539576B (zh) 基于IPv6网络的通信方法与系统
CN109286688A (zh) 一种数据下载方法及装置
CN107277011A (zh) 终端设备的数据分类方法及装置
CN107959631A (zh) 一种基于OpenWrt操作系统的6LoWPAN边界路由器的实现方法
CN103795729A (zh) 一种多协议的统一设备控制方法
CN111682965A (zh) 一种fota控制器

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant