CN113157303A - 升级方法、嵌入式系统、终端及计算机存储介质 - Google Patents

升级方法、嵌入式系统、终端及计算机存储介质 Download PDF

Info

Publication number
CN113157303A
CN113157303A CN202110582816.XA CN202110582816A CN113157303A CN 113157303 A CN113157303 A CN 113157303A CN 202110582816 A CN202110582816 A CN 202110582816A CN 113157303 A CN113157303 A CN 113157303A
Authority
CN
China
Prior art keywords
upgrading
program
version
storage area
program package
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.)
Pending
Application number
CN202110582816.XA
Other languages
English (en)
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.)
Yinghe Shenzhen Robot and Automation Technology Co Ltd
Original Assignee
Yinghe Shenzhen Robot and Automation Technology Co Ltd
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 Yinghe Shenzhen Robot and Automation Technology Co Ltd filed Critical Yinghe Shenzhen Robot and Automation Technology Co Ltd
Priority to CN202110582816.XA priority Critical patent/CN113157303A/zh
Publication of CN113157303A publication Critical patent/CN113157303A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请涉及一种升级方法、嵌入式系统、终端及计算机存储介质,升级方法应用于嵌入式系统,包括:根据升级请求指令确定嵌入式系统的程序版本变更信息;根据程序版本变更信息确定待更新版本的程序包所在的存储区;根据存储区的程序包更新运行区。通过上述方式,本申请能有效避免嵌入式系统在升级失败时,不能正常启动的问题。

Description

升级方法、嵌入式系统、终端及计算机存储介质
技术领域
本申请涉及嵌入式系统技术领域,具体涉及一种升级方法、嵌入式系统、终端及计算机存储介质。
背景技术
嵌入式系统升级的一般方式是,bootloader将升级程序数据写入到flash指定地址,然后启动该程序。这其中存在以下问题:如果在升级过程中断电或升级包在复制中出错,则会导致升级失败。而升级之前的程序又被覆盖,导致嵌入式系统不能正常工作。
发明内容
针对上述技术问题,本申请提供一种升级方法、嵌入式系统、终端及计算机存储介质,能有效避免嵌入式系统在升级失败时,不能正常启动的问题。
为解决上述技术问题,本申请提供一种升级方法,应用于嵌入式系统,包括:
步骤201.根据升级请求指令确定所述嵌入式系统的程序版本变更信息;
步骤202.根据所述程序版本变更信息确定待更新版本的程序包所在的存储区;
步骤203.根据所述存储区的程序包更新运行区。
其中,所述步骤201,包括:
若升级请求指令为版本升级,且升级次数等于零,则确定所述程序变更信息为版本升级;
若升级请求指令为版本回滚,则确定所述程序变更信息为版本回滚;
若升级请求指令为版本升级,且升级次数不等于零,则确定所述程序变更信息为版本回滚。
其中,所述步骤202,包括:
若所述程序变更信息为版本升级,则确定待更新版本的程序包所在的存储区为第一存储区,所述第一存储区的程序包版本为升级程序包;
若所述程序变更信息为版本回滚,则确定待更新版本的程序包所在的存储区为第二存储区,所述第二存储区的程序包版本与所述运行区的程序包版本一致。
其中,所述步骤201之前,还包括:
接收升级请求指令;
根据所述升级程序包更新所述第一存储区。
其中,所述根据所述升级程序包更新所述第一存储区之前,还包括:
比较各存储区的程序包版本;
确定低版本的程序包所在的存储区为第一存储区;
擦除所述第一存储区的程序包。
其中,所述根据所述升级程序包更新所述第一存储区,包括:
复制所述升级程序包至所述第一存储区;
对所述第一存储区接收到的升级程序包逐帧校验。
其中,所述步骤203之后,还包括:
在所述运行区启动程序包;
若启动失败,则执行步骤201以实现所述运行区的程序包版本回滚;
若启动正常,则根据所述升级次数显示升级消息。
本申请还提供一种嵌入式系统,所述嵌入式系统包括启动区、数据区、运行区和多个存储区;
所述多个存储区,用于存储多个版本的程序包;
所述运行区,用于存储并运行程序包,包括存储升级程序包的第一存储区和存储当前运行版本的程序包的第二存储区;
所述数据区,用于记录升级过程中的中间数据;
所述启动区,用于引导程序运行,以执行如上所述的升级方法。
本申请还提供一种终端,包括至少一个处理器和至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理器并且存储用于由所述至少一个处理器执行的指令,所述指令当由所述至少一个处理器执行时,使得所述终端执行如上所述的升级方法。
本申请还提供一种计算机存储介质,所述计算机存储介质上存储有计算机程序指令;所述计算机程序指令被处理器执行时实现如上所述的升级方法。
本申请的升级方法、嵌入式系统、终端及计算机存储介质,升级方法应用于嵌入式系统,包括:根据升级请求指令确定嵌入式系统的程序版本变更信息;根据程序版本变更信息确定待更新版本的程序包所在的存储区;根据存储区的程序包更新运行区。通过上述方式,本申请能有效避免嵌入式系统在升级失败时,不能正常启动的问题。
附图说明
图1是根据本发明实施例示出的升级方法的流程示意图;
图2是根据本发明实施例示出的升级程序包烧写流程示意图;
图3是根据本发明实施例示出的升级方法的具体流程示意图;
图4是根据本发明实施例示出的指令回滚的流程示意图;
图5是根据本发明实施例示出的嵌入式系统的结构示意图。
具体实施方式
以下由特定的具体实施例说明本申请的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本申请的其他优点及功效。
在下述描述中,参考附图,附图描述了本申请的若干实施例。应当理解,还可使用其他实施例,并且可以在不背离本申请的精神和范围的情况下进行机械组成、结构、电气以及操作上的改变。下面的详细描述不应该被认为是限制性的,这里使用的术语仅是为了描述特定实施例,而并非旨在限制本申请。
虽然在一些实例中术语第一、第二等在本文中用来描述各种元件,但是这些元件不应当被这些术语限制。这些术语仅用来将一个元件与另一个元件进行区分。
再者,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。应当进一步理解,术语“包含”、“包括”表明存在所述的特征、步骤、操作、元件、组件、项目、种类、和/或组,但不排除一个或多个其他特征、步骤、操作、元件、组件、项目、种类、和/或组的存在、出现或添加。此处使用的术语“或”和“和/或”被解释为包括性的,或意味着任一个或任何组合。因此,“A、B或C”或者“A、B和/或C”意味着“以下任一个:A;B;C;A和B;A和C;B和C;A、B和C”。仅当元件、功能、步骤或操作的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。
第一实施例
图1是根据第一实施例示出的升级方法的流程示意图。如图1所示,本实施例的升级方法,包括:
步骤201,根据升级请求指令确定嵌入式系统的程序版本变更信息;
步骤202,根据程序版本变更信息确定待更新版本的程序包所在的存储区;
步骤203,根据存储区的程序包更新运行区。
本申请将嵌入式系统flash拆分成启动区、运行区、存储区和数据区。启动区,即bootloader,用于引导程序运行。运行区,即imageRUN,用于存储并运行程序。存储区,包括image0、image1等,用于存储多个版本的可执行程序包。数据区,即DATA区,用于记录bootloader升级信息,各个存储区存储的镜像程序版本信息以及系统数据等。需要说明的是,运行程序具有写入升级程序包到存储区的功能,并在数据区记录升级过程信息。在第一次烧录程序时,运行区和存储区的程序版本一致,并保存烧录相关信息到数据区。运行区和存储区的程序运行空间地址一致,程序镜像数据一致,满足发行版本统一性。嵌入式系统升级出错时,可根据存储区的程序包将运行区的程序包回滚至之前版本,从而保证嵌入式系统正常启动。
在一实施方式中,开始升级之前,接收到升级请求指令,比较各存储区的程序包版本,确定低版本的程序包所在的存储区为第一存储区,并擦除第一存储区的程序包。擦除第一存储区的程序包之后,接收升级程序包,将升级程序包烧写至存储区。烧写完成后,对升级标志位置位,确认开始升级。
图2是根据本发明实施例示出的升级程序包烧写流程示意图。如图2所示,运行程序收到升级请求指令后,比较各个存储区中镜像程序包的版本号。本实施例中存储区为两个,即image0和image1。比较image0和image1中镜像程序的版本号,擦除低版本镜像程序所在的存储区,若各存储区版本相同则擦除image0。然后,运行程序逐帧复制并校验升级程序包到擦除的存储区,直至复制完整个升级程序包。若校验时检测到版本不正确,则重发升级请求指令,以确保准确复制升级程序包。在bootloader升级过程中,bootloader选择升级程序包所在存储区,以确保使用正确的程序包对嵌入式系统进行升级。需要说明的是,将低版本的程序包保存在其他存储区,如将运行区升级前的程序包备份至第二存储区,使升级失败后运行区的程序可回滚至之前版本,确保嵌入式系统能正常运行。当然,在其他实施例中,还可设置存储区数量多于两个,以存储当前程序版本之前的程序版本,或存储多种升级程序包,以实现更加灵活的程序版本变更策略。
在一实施方式中,升级请求指令包括升级请求标志位和升级方向标志位。可选地,根据升级方向标志位确定程序版本变更信息,然后根据程序版本变更信息确定待更新版本的程序包所在的存储区。若升级请求指令为版本升级,且升级次数等于零,则确定程序变更信息为版本升级;若升级请求指令为版本回滚,则确定程序变更信息为版本回滚;若升级请求指令为版本升级,且升级次数不等于零,则确定程序变更信息为版本回滚。接着,根据程序变更信息查找对应的程序包所在的存储区。若程序变更信息为版本升级,则确定待更新版本的程序包所在的存储区为第一存储区,第一存储区的程序包版本为升级程序包;若程序变更信息为版本回滚,则确定待更新版本的程序包所在的存储区为第二存储区,第二存储区的程序包版本与运行区的程序包版本一致。通过升级请求指令和升级过程对升级次数的计数,实现了指令升级、指令回滚和自动回滚三种升级方式的有机结合,保证嵌入式系统升级后能正常运行。
在一实施方式中,根据存储区的程序包更新运行区之后,在运行区启动程序包。若启动失败,则重新执行步骤201以实现运行区的程序包版本回滚。若启动正常,则根据升级次数显示升级消息。
图3是根据本发明实施例示出的升级方法的具体流程示意图。图4是根据本发明实施例示出的指令回滚的流程示意图。如图3和图4所示,将升级包烧写之第一存储区之后,系统重启。指令升级时,在系统启动后,bootloader分别检测升级标志位和升级方向标志位。若升级标志位已置位,则确定变更系统程序版本。接着根据升级方向标志位判断后续操作为系统升级或回滚。若系统升级,即将运行区的当前程序升级为高版本。判断升级计数是否等于零,若是,bootloader比较存储区image0和image1中程序的版本号,找到高版本的程序,即升级程序包。此时升级次数加1,bootloader复制第一存储区的数据包到imageRUN运行区。复制完成后,从imageRUN中启动程序。若运行程序无法启动,对嵌入式系统进行重启。bootloader在下次重启后,根据升级标志位和升级计数执行系统回滚。升级次数加1,bootloader复制第二存储区的数据包到imageRUN运行区。复制完成后,从imageRUN中启动程序。若系统正常启动,则复位升级标志位。判断升级次数是否大于1,若是,则上传升级失败消息;若否,则上传升级成功消息。最后复位升级计数的参数。通过上述方式,实现了升级出错后回滚至之前程序。
指令回滚时,在系统启动后,bootloader分别检测升级标志位和升级方向标志位。若升级标志位已置位,则确定变更系统程序版本。接着根据升级方向标志位判断后续操作为系统回滚。复位升级方向标志位,bootloader比较存储区image0和image1中程序的版本号,找到低版本的程序。升级次数加1,bootloader复制第二存储区的数据包到imageRUN运行区。
本实施例的升级方法,应用于嵌入式系统,包括:根据升级请求指令确定嵌入式系统的程序版本变更信息;根据程序版本变更信息确定待更新版本的程序包所在的存储区;根据存储区的程序包更新运行区。通过上述方式,本申请能有效避免嵌入式系统在升级失败时,不能正常启动的问题。
第二实施例
图5是根据第二实施例示出的嵌入式系统的结构示意图。如图5所示,嵌入式系统包括启动区bootloader、数据区DATA、运行区imageRUN和多个存储区;
多个存储区,用于存储多个版本的程序包;
运行区,用于存储并运行程序包,包括存储升级程序包的第一存储区image0和存储当前运行版本的程序包的第二存储区image1;
数据区,用于记录升级过程中的中间数据,如记录bootloader升级信息,image0和image1镜像版本信息以及系统数据;
启动区,用于引导程序运行,以执行如第一实施例的升级方法。
可选地,imageRUN,image0和image1程序运行空间地址一致,程序镜像数据一致,满足发行版本统一性。嵌入式系统升级出错时,可根据存储区的程序包将运行区的程序包回滚至之前版本,从而保证嵌入式系统正常启动。
本申请还提供一种终端,包括至少一个处理器和至少一个存储器,至少一个存储器被耦合到至少一个处理器并且存储用于由至少一个处理器执行的指令,指令当由至少一个处理器执行时,使得终端执行如第一实施例所述的升级方法。
本申请还提供一种计算机存储介质,计算机存储介质上存储有计算机程序指令;计算机程序指令被处理器执行时实现如第一实施例所述的升级方法。
上述实施例仅例示性说明本申请的原理及其功效,而非用于限制本申请。任何熟悉此技术的人士皆可在不违背本申请的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本申请所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本申请的权利要求所涵盖。

Claims (10)

1.一种升级方法,应用于嵌入式系统,其特征在于,包括:
步骤201.根据升级请求指令确定所述嵌入式系统的程序版本变更信息;
步骤202.根据所述程序版本变更信息确定待更新版本的程序包所在的存储区;
步骤203.根据所述存储区的程序包更新运行区。
2.根据权利要求1所述的升级方法,其特征在于,所述步骤201,包括:
若升级请求指令为版本升级,且升级次数等于零,则确定所述程序变更信息为版本升级;
若升级请求指令为版本回滚,则确定所述程序变更信息为版本回滚;
若升级请求指令为版本升级,且升级次数不等于零,则确定所述程序变更信息为版本回滚。
3.根据权利要求1或2所述的升级方法,其特征在于,所述步骤202,包括:
若所述程序变更信息为版本升级,则确定待更新版本的程序包所在的存储区为第一存储区,所述第一存储区的程序包版本为升级程序包;
若所述程序变更信息为版本回滚,则确定待更新版本的程序包所在的存储区为第二存储区,所述第二存储区的程序包版本与所述运行区的程序包版本一致。
4.根据权利要求3所述的升级方法,其特征在于,所述步骤201之前,还包括:
接收升级请求指令;
根据所述升级程序包更新所述第一存储区。
5.根据权利要求4所述的升级方法,其特征在于,所述根据所述升级程序包更新所述第一存储区之前,还包括:
比较各存储区的程序包版本;
确定低版本的程序包所在的存储区为第一存储区;
擦除所述第一存储区的程序包。
6.根据权利要求4所述的升级方法,其特征在于,所述根据所述升级程序包更新所述第一存储区,包括:
复制所述升级程序包至所述第一存储区;
对所述第一存储区接收到的升级程序包逐帧校验。
7.根据权利要求1所述的升级方法,其特征在于,所述步骤203之后,还包括:
在所述运行区启动程序包;
若启动失败,则执行步骤201以实现所述运行区的程序包版本回滚;
若启动正常,则根据所述升级次数显示升级消息。
8.一种嵌入式系统,其特征在于,所述嵌入式系统包括启动区、数据区、运行区和多个存储区;
所述多个存储区,用于存储多个版本的程序包;
所述运行区,用于存储并运行程序包,包括存储升级程序包的第一存储区和存储当前运行版本的程序包的第二存储区;
所述数据区,用于记录升级过程中的中间数据;
所述启动区,用于引导程序运行,以执行如权利要求1至7任一项所述的升级方法。
9.一种终端,其特征在于,包括至少一个处理器和至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理器并且存储用于由所述至少一个处理器执行的指令,所述指令当由所述至少一个处理器执行时,使得所述终端执行如权利要求1至7任一项所述的升级方法。
10.一种计算机存储介质,其特征在于,所述计算机存储介质上存储有计算机程序指令;所述计算机程序指令被处理器执行时实现如权利要求1至7中任一项所述的升级方法。
CN202110582816.XA 2021-05-27 2021-05-27 升级方法、嵌入式系统、终端及计算机存储介质 Pending CN113157303A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110582816.XA CN113157303A (zh) 2021-05-27 2021-05-27 升级方法、嵌入式系统、终端及计算机存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110582816.XA CN113157303A (zh) 2021-05-27 2021-05-27 升级方法、嵌入式系统、终端及计算机存储介质

Publications (1)

Publication Number Publication Date
CN113157303A true CN113157303A (zh) 2021-07-23

Family

ID=76877745

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110582816.XA Pending CN113157303A (zh) 2021-05-27 2021-05-27 升级方法、嵌入式系统、终端及计算机存储介质

Country Status (1)

Country Link
CN (1) CN113157303A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113672257A (zh) * 2021-08-05 2021-11-19 深圳市道通智能汽车有限公司 一种微控制单元软件升级方法、电子设备及存储介质
CN114691180A (zh) * 2022-03-24 2022-07-01 洛阳热感科技有限公司 处理器芯片的软件升级方法、装置、处理器和处理器系统
CN115437670A (zh) * 2022-09-06 2022-12-06 北京斯年智驾科技有限公司 基于tftp的汽车控制器程序升级系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110647333A (zh) * 2018-06-26 2020-01-03 霍尼韦尔环境自控产品(天津)有限公司 固件升级方法及配置成对其中的固件进行升级的设备
CN111240723A (zh) * 2020-03-13 2020-06-05 乐普医学电子仪器股份有限公司 一种嵌入式程序升级的方法
CN112015447A (zh) * 2020-08-10 2020-12-01 上海高仙自动化科技发展有限公司 电子设备的系统更新方法及装置、电子设备及存储介质
CN112148328A (zh) * 2020-09-14 2020-12-29 雷沃工程机械集团有限公司 一种目标元件远程升级时程序回滚方法及系统
CN112527322A (zh) * 2019-08-28 2021-03-19 阿里巴巴集团控股有限公司 物联网设备中的系统升级方法、装置、设备及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110647333A (zh) * 2018-06-26 2020-01-03 霍尼韦尔环境自控产品(天津)有限公司 固件升级方法及配置成对其中的固件进行升级的设备
CN112527322A (zh) * 2019-08-28 2021-03-19 阿里巴巴集团控股有限公司 物联网设备中的系统升级方法、装置、设备及存储介质
CN111240723A (zh) * 2020-03-13 2020-06-05 乐普医学电子仪器股份有限公司 一种嵌入式程序升级的方法
CN112015447A (zh) * 2020-08-10 2020-12-01 上海高仙自动化科技发展有限公司 电子设备的系统更新方法及装置、电子设备及存储介质
CN112148328A (zh) * 2020-09-14 2020-12-29 雷沃工程机械集团有限公司 一种目标元件远程升级时程序回滚方法及系统

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113672257A (zh) * 2021-08-05 2021-11-19 深圳市道通智能汽车有限公司 一种微控制单元软件升级方法、电子设备及存储介质
CN113672257B (zh) * 2021-08-05 2024-05-28 深圳市塞防科技有限公司 一种微控制单元软件升级方法、电子设备及存储介质
CN114691180A (zh) * 2022-03-24 2022-07-01 洛阳热感科技有限公司 处理器芯片的软件升级方法、装置、处理器和处理器系统
CN115437670A (zh) * 2022-09-06 2022-12-06 北京斯年智驾科技有限公司 基于tftp的汽车控制器程序升级系统
CN115437670B (zh) * 2022-09-06 2023-11-21 北京斯年智驾科技有限公司 基于tftp的汽车控制器程序升级系统

Similar Documents

Publication Publication Date Title
US9792105B2 (en) Method and system for booting and automatically updating software, and recovering from update error, and computer readable recording medium storing method
US7971199B1 (en) Mobile device with a self-updating update agent in a wireless network
CN104572229B (zh) 嵌入式系统的固件升级方法以及固件升级装置
CN113157303A (zh) 升级方法、嵌入式系统、终端及计算机存储介质
JP5113700B2 (ja) ファームウェア更新装置及び方法
US8806476B2 (en) Implementing a software installation process
US20070055969A1 (en) System and method for updating firmware
US20110004871A1 (en) Embedded electronic device and firmware updating method thereof
US20100169709A1 (en) System Of Updating Firmware And Method Thereof, And Method Of Creating Firmware
CN107102871A (zh) 嵌入式系统升级的方法和装置
RU2248627C2 (ru) Способ и устройство для изменения содержимого запоминающих устройств блоков управления
US7689981B1 (en) Mobile handset with efficient interruption point detection during a multiple-pass update process
CN111562934A (zh) 一种基于热补丁的软件系统升级方法、终端及存储介质
CN112015447B (zh) 电子设备的系统更新方法及装置、电子设备及存储介质
US20050033954A1 (en) Computer system having BIOS with multiple memory block
JP2001331327A (ja) 電子機器
CN113806139B (zh) 操作系统恢复方法、设备、存储介质及计算机程序产品
CN111026417A (zh) 一种嵌入式设备的升级方法及嵌入式设备
CN114265603A (zh) 基于不对称分区的系统升级方法、装置和电子设备
CN113220319A (zh) 一种数据更新方法、装置及车辆
JP2005284902A (ja) 端末装置、その制御方法及び制御プログラム、ホスト装置、その制御方法及び制御プログラム、遠隔更新システム、方法及びプログラム
CN114356658A (zh) 固件升级异常的处理方法、计算机设备以及可读存储介质
WO2022093197A1 (en) Firmware overwrites using queues and pointers
US20210326125A1 (en) Installing application program code on a vehicle control system
US20190227865A1 (en) Information processing device and information processing method

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20210723