装置、更新器、控制装置的方法、及控制更新器的方法

文档序号:10663555阅读:228来源:国知局
装置、更新器、控制装置的方法、及控制更新器的方法
【专利摘要】根据各种实施例可提供一种装置。该装置可包括:启动加载器;存储器,被配置为存储用于控制该装置的固件数据;处理器,被配置为以装置操作模式或以启动加载器模式操作;以及界面。装置操作模式可以是其中处理器控制启动加载器载入存储在存储器中的固件数据的模式。启动加载器模式可以是其中处理器控制启动加载器使用界面发送装置的识别符、使用界面接收固件数据且将固件数据存储在存储器中的模式。
【专利说明】
装置、更新器、控制装置的方法、及控制更新器的方法
技术领域
[0001 ]各种实施例大体上涉及装置、更新器、控制装置的方法、以及控制更新器的方法。
【背景技术】
[0002] 装置可能需要固件以便控制其操作。这种固件可以期望被更新。

【发明内容】

[0003] 根据各种实施例,可提供一种装置。该装置可包括:启动加载器;存储器,被配置为 存储用于控制装置的固件数据;处理器,被配置为以装置操作模式或以启动加载器模式操 作;以及界面。装置操作模式可以是其中处理器控制启动加载器载入存储在存储器中的固 件数据的模式。启动加载器模式可以是其中处理器控制启动加载器使用界面发送装置的识 别符、使用界面接收固件数据且将固件数据存储在存储器中的模式。
[0004] 根据各种实施例,可提供一种更新器。该更新器可包括:接收器,被配置为从处于 启动加载器模式的装置接收装置的识别符;以及发送器,被配置为基于所接收的识别符将 固件数据发送至装置。
[0005] 根据各种实施例,可提供一种控制装置的方法。该方法可包括:控制启动加载器; 控制存储器以存储用于控制装置的固件数据;控制处理器以装置操作模式或以启动加载器 模式操作;以及控制界面。装置操作模式可以是其中处理器控制启动加载器以载入存储在 存储器中的固件数据的模式。启动加载器模式可以是其中处理器控制启动加载器使用界面 发送装置的识别符、使用界面接收固件数据且将固件数据存储在存储器中的模式。
[0006] 根据各种实施例,可提供一种控制更新器的方法。该方法可包括:控制接收器从处 于启动加载器模式的装置接收装置的识别符;以及控制发送器基于所接收的识别符将固件 数据发送至装置。
【附图说明】
[0007] 在附图中,在全部不同视图中,相同参考符号大体上指相同部件。附图未必按比例 绘制,相反,重点通常是关注对本发明原理的例示。各种特征或元素的尺寸可出于清晰度任 意地扩展或缩减。在以下描述中,本发明的各种实施例参考所附附图来描述,其中:
[0008] 图1示出了根据实施例的装置和更新器的系统;
[0009] 图2示出了根据实施例的装置;
[0010] 图3示出了根据实施例的装置;
[0011] 图4示出了根据实施例的更新器;
[0012] 图5示出了例示根据实施例的控制装置的方法的流程图;
[0013] 图6示出了例示根据实施例的控制更新器的方法的流程图;
[0014] 图7示出了例示根据实施例的控制装置的方法的流程图;
[0015] 图8示出了例示根据实施例的控制更新器的方法的流程图;
[0016] 图9示出了根据实施例的存储器映射;
[0017] 图10示出了根据实施例的数据存储;以及
[0018] 图11示出了根据实施例的存储器映射。
【具体实施方式】
[0019] 以下【具体实施方式】引用了通过图示的方式示出的、可实践本发明的特定细节及实 施例的附图。这些实施例被足够详细地描述,以使本领域技术人员可实践本发明。可利用其 他实施例,并且可进行结构及逻辑改变而不脱离本发明的范畴。各种实施例不需要互相排 斥,诸如一些实施例可与一个或多个其他实施例组合以形成新的实施例。
[0020] 为使本发明可易于理解并投入到实践效果中,将以举例且非限制的方式并参考图 描述特定实施例。
[0021] 装置可包括存储器,该存储器例如用于由装置进行的处理。更新器可包括存储器, 该存储器例如用于由更新器进行的处理。用于实施例中的存储器可以是易失存储器,例如 DRAM (动态随机访问存储器),或非易失存储器,例如PR0M (可程序化只读存储器)、EPROM (可 擦除PROM)、EEPR0M(电子可擦除PR0M),或者快闪存储器,例如浮动栅极存储器、电荷捕捉存 储器、MRAM(磁阻随机存取存储器)或PCRAM(相变随机存取存储器)。
[0022] 在实施例中,"电路"可理解为任何种类的逻辑实施实体,该逻辑实施实体可以是 执行存储在存储器中的软件、固件或其任何组合的专用目的的电路或处理器。因此,在实施 例中,"电路"可以是硬连线逻辑电路或可程序化逻辑电路,诸如可程序化处理器,例如微处 理器(例如复杂指令集计算机(CISC)处理器或精简指令集计算机(RISC)处理器)。"电路"也 可以是执行软件的处理器,该软件例如任何种类的计算机程序,例如使用虚拟机代码的计 算机程序,诸如,例如Java。将在以下更详细地描述的各自功能的任何其他种类的实行方案 也可根据替代实施例理解为"电路"。将被理解的是,此处以不同名称(例如"电路A"及"电路 B")描述为电路的内容也可提供于如以上所述的实体电路中。
[0023]提供了装置的各种实施例,且提供了方法的各种实施例。将被理解的是,装置的基 本性质也适用于方法,且反之亦然。因此,为简洁起见,可省略这种性质的重复描述。
[0024] 将被理解的是,此处对特定装置描述的任何性质也可适用于此处所述的任何装 置。将被理解的是,此处对特定方法描述的任何性质也可适用于此处所述的任何方法。此 外,将被理解的是,对于此处所述的任何装置或方法而言,不是所描述的所有组件或步骤都 必须纳入装置或方法中,而是可以仅纳入一些(但不是所有)组件或步骤。
[0025] 装置可能需要固件以便控制其操作。这种固件可以期望被更新。
[0026] 图1示出了根据实施例的装置102及更新器104的系统100。装置102可包括可被用 于操作该装置的固件数据。装置102可期望接收更新了的固件数据。装置102可经由连接106 从更新器104接收更新了的固件数据。
[0027]图2示出了根据实施例的装置200。装置200可包括启动加载器202(例如启动加载 器电路)。装置200可进一步包括存储器204,该存储器204被配置为存储用于控制装置200的 固件数据。装置200可进一步包括处理器206,该处理器206被配置为以装置操作模式或以启 动加载器模式操作。装置200可进一步包括界面208(例如与将在以下描述的更新器,例如图 4的更新器400连接的界面),例如界面电路。装置操作模式可以是其中处理器206控制启动 加载器202载入存储在存储器204中的固件数据的模式。启动加载器模式可以是其中处理器 206控制启动加载器202使用界面208发送装置200的识别符(例如发送至更新器)、使用界面 208接收固件数据(例如从更新器接收)且将固件数据存储在存储器204中的模式。启动加载 器202、存储器204、处理器206和界面208可经由连接210(或多个分开的连接)连接,该连接 210例如电气连接或光学连接、例如任何种类的电缆或总线。
[0028]装置200可包括或可以是输入装置和/或输出装置。
[0029] 固件数据可包括或可以是用于控制输入装置和/或输出装置的数据。
[0030] 启动加载器模式可以是其中处理器206不控制启动加载器202载入存储在存储器 204中的固件数据的模式。
[0031] 界面208可包括或可以是以下至少一个:通用串行总线(USB)界面、火线界面、PS/2 界面、霹雳界面、局域网(LAN)界面、蓝牙界面、红外线界面、无线局域网(WLAN)界面、和无线 移动通信界面。
[0032]启动加载器可使用存储在存储器的固定部分中的数据。
[0033]图3示出了根据实施例的装置300。类似于图2的装置200,装置300可包括启动加载 器202。类似于图2的装置200,装置300可进一步包括存储器204。类似于图2的装置200,装置 300可进一步包括处理器206。类似于图2的装置200,装置300可进一步包括界面208。装置 300可进一步包括如将在以下描述的接收器302(例如接收器电路)。装置300可进一步包括 如将在以下描述的有效性检验器304(例如有效性检验电路)。装置300可进一步包括如将在 以下描述的模式变换器306(例如模式变换电路)。启动加载器202、存储器204、处理器206、 界面208、接收器302、有效性检验器304、和模式变换器306可经由连接308(或多个分开的连 接)连接,该连接308例如电气连接或光学连接,例如任何种类的电缆或总线。
[0034]接收器302可被配置为接收从装置操作模式变换至启动加载器模式的指令。接收 器302可被配置为使用界面208接收指令。
[0035]接收器302可被配置为接收从启动加载器模式变换至装置操作模式的指令。接收 器302可被配置为使用界面208接收指令。
[0036]有效性检验器304可被配置为检验存储在存储器204中的固件数据是否有效。模式 变换器306可被配置为当确定存储在存储器204中的固件数据无效时,从装置操作模式变换 至启动加载器模式。
[0037]装置300可进一步被配置为确定在启动装置300时以何种模式操作。
[0038]图4示出了根据实施例的更新器400。更新器400可包括接收器402(例如接收器电 路),该接收器402被配置为从处于启动加载器模式的装置(例如从图2的装置200或图3的装 置300)接收装置的识别符。更新器400可进一步包括发送器404(例如发送器电路),该发送 器404被配置为基于所接收的识别符将固件数据发送至装置。接收器402和发送器404可经 由连接406(或多个分开的连接)连接,该连接406例如电气连接或光学连接,例如任何种类 的电缆或总线。
[0039]发送器404可进一步被配置为将用于变换至启动加载器模式的指令发送至不处于 启动加载器模式的装置。
[0040]发送器404可进一步被配置为将用于变换至装置操作模式的指令发送至处于启动 加载器模式的装置。
[0041] 图5示出了例示根据实施例的控制装置的方法的流程图500。在502,可控制启动加 载器。在504,可控制存储器存储用于控制装置的固件数据。在506,可控制处理器以装置操 作模式或以启动加载器模式操作。在508,可控制界面。装置操作模式可以是其中处理器控 制启动加载器载入存储在存储器中的固件数据的模式。启动加载器模式可以是其中处理器 控制启动加载器使用界面发送装置的识别符、使用界面接收固件数据且将固件数据存储在 存储器中的模式。
[0042] 装置可包括或可以是输入装置和/或输出装置。
[0043] 固件数据可包括或可以是用于控制输入装置和/或输出装置的数据。
[0044] 启动加载器模式可以是其中处理器不控制启动加载器载入存储在存储器中的固 件数据的模式。
[0045] 界面可包括或可以是以下至少一个:通用串行总线界面、火线界面、PS/2界面、霹 雳界面、局域网界面、蓝牙界面、红外线界面、无线局域网界面、和无线移动通信界面。
[0046] 启动加载器可使用存储在存储器的固定部分中的数据。
[0047] 该方法可进一步包括控制接收器接收从装置操作模式变换至启动加载器模式的 指令。
[0048]接收器可使用界面接收指令。
[0049] 该方法可进一步包括控制接收器接收从启动加载器模式变换至装置操作模式的 指令。
[0050] 接收器可使用界面接收指令。
[0051] 该方法可进一步包括:控制有效性检验器检验存储在存储器中的固件数据是否有 效;以及控制模式变换器当确定存储在存储器中的固件数据无效时,从装置操作模式变换 至启动加载器模式。
[0052] 装置可确定在启动装置时以何种模式操作。
[0053]图6示出了例示根据实施例的控制更新器的方法的流程图600。在602,可控制接收 器从处于启动加载器模式的装置接收装置的识别符。在604,可控制发送器基于所接收的识 别符将固件数据发送至装置。
[0054]发送器可将用于变换至启动加载器模式的指令发送至不处于启动加载器模式的 装置。
[0055] 发送器可将用于变换至装置操作模式的指令发送至处于启动加载器模式的装置。
[0056] 根据各种实施例,可提供固件启动加载器和更新器。
[0057] 根据各种实施例,可提供确定遭遇固件更新失败的装置的标识并且使该装置自动 复活的机制。
[0058]常用更新器可以是通用的并且可能将错误的固件快闪存储到装置中。此外,固件 更新失败可致使装置不可用。
[0059] 根据各种实施例,可提供启动加载器使得固件失败可以使装置将自身展示为启动 加载器装置。根据各种实施例,目标硬件ID(识别符)可通过启动加载器被暴露。根据各种实 施例,可以构建可包括软件的监视器装置(其可称为更新器)以检测处于启动加载器模式的 装置,并且自动使用匹配固件对该装置快闪存储。
[0060] 一旦启动加载器被设计为暴露自身且宣告何者是目标PID(产品ID),监视器装置 (即更新器)即可能够检测固件更新失败且自动地以适用于该装置的固件(换言之:固件数 据)快闪存储。正常操作时,更新器现在可确定处于启动加载器模式的装置的标识,且因此 可确保仅有匹配的固件被快闪存储到装置中。
[0061] 根据各种实施例,可提供更新器以使匹配的固件自动地快闪存储到装置中。
[0062] 在先前使用的启动加载器中,可能不可以确定处于启动加载器模式的装置的标 识。可以确定存在需要更新的装置,但不可以确定实体上为何种装置。可能必须依赖于用户 为其装置选取正确的固件更新器。一旦发生固件更新失败,即需要用户再次请求人工地运 作固件更新器。
[0063] 根据各种实施例,可不需要这种用户介入,且装置可自动地复活。
[0064] 以下将描述装置与操作系统(0S)间的通讯。
[0065] 根据各种实施例,各种装置可具有若干启动区块和启动加载器需求。术语"启动区 ±夬"可以指受保护固件,其可包括被执行直至启动区块准备将控制移交至不受保护固件的 最首段代码。术语"启动加载器"可以指更新不受保护固件的功能,该启动加载器可完全容 纳于启动区块中。
[0066] 就固件而言,启动加载器的设计可在产品与产品之间变化,例如基于装置MCU(微 控制器单元)而变化,但也支持装置具有的特殊存储需求。启动加载器可在固件更新事件期 间保护制造数据、可变存储、宏数据、和启动区块自身。
[0067] 就软件而言,启动加载器特征、命令和功能可以在产品与产品之间相同。
[0068]以下将参考Freescale和NXP设计描述启动加载器实行方案的细节。
[0069] 例如,根据各种实施例的固件更新可提供以下:
[0070] 从重置向量至装置固件交递的受保护固件执行;
[0071 ]在更新程序中的任何点处从减损功率恢复;
[0072]在无用户介入的情况下进入启动加载器模式;
[0073]验证装置处于启动加载器模式中;
[0074]防止装置用错误的固件程序化;
[0075] 在即使装置用错误的固件程序化时恢复;
[0076] 在更新后自动断开装置的启动加载器;
[0077]验证装置处于正常模式;
[0078]制造数据保护(序列号、校准数据等);
[0079]可变存储保护(配置文件、配置文件Idx、照明、云控制等);以及 [0080]宏信息保护(宏目录和宏数据结构)。
[0081] 以下将描述固件更新事件。
[0082] 以下将描述固件更新器(可以是或可包括专用装置或基于PC的应用程序)和启动 加载器(可以是或可包括受保护固件)如何一起工作以允许装置固件("装置固件"或"固件 数据"可以指执行产品的主要功能的固件;例如鼠标固件可处置所有按钮和移动事件)在字 段中更新。
[0083]根据各种实施例的启动加载器设计的基本前提是确保无论在固件更新时发生何 种情况,都不可能使得装置功能永久损失。所有可能的错误条件和电力中断条件都可以恢 复。
[0084] 图7示出了例示根据实施例的控制装置的方法的流程图700。在启动加载器固件至 装置固件流程图700中,将描述启动加载器固件(其也可称为启动加载器)和装置固件(其也 可称为固件数据)的处理。
[0085] 图7示出了启动加载器和装置固件加电流程。启动加载器固件可受保护且不变化, 且装置固件可在处于启动加载器模式中时是更新的目标。
[0086] 在启动时(例如在加电之后),可在702执行Μ⑶(微控制器单元)重置,且在704启动 加载器可检查用户强制启动启动加载器模式,或检查无效装置固件签名706。若存在这些条 件中的一个,则加电流程可前往在720枚举的启动加载器装置,而替代在714枚举的目标装 置。就系统而言,可存在是附接的启动加载器(无鼠标、键盘、耳机等)的非HID装置。
[0087]更详细地,在704,可检验用户是否正强制启动启动加载器模式。若是,则处理可在 718进行;若否,则处理可在706进行。在706,可检验固件是否有效,例如检验固件签名是否 有效。若否,则处理可在718进行;若是,则处理可在708进行。在708,处理可跳跃至装置固 件。在718,可执行USB初始化。
[0088] 一旦处于启动加载器模式,装置即可以等待来自固件更新器(FWU)应用程序(也可 称为更新器)的快闪存储命令。在732,FWU可擦除、程序化、和验证快闪区块。更详细地,在主 回路722,可在724中检验数据区块是否就绪。若是,则处理可在732进行;若否,则处理可在 726进行。在726,可检验是否退出启动加载器。若是,则处理可在728进行;若否,则处理可在 724进行。启动加载器可保护对固件更新器应用程序透明的所需区域。换言之,FWU应用程序 可请求从地址0开始擦除存储器区块,且启动加载器可根据哪个区域受保护来允许或阻断 此动作。
[0089] 一旦对FWU确保装置固件已被成功地程序化,仅在此后FWU才发出退出启动加载器 命令,由此,在728启动加载器固件最终化目标装置固件更新校验和、以及签名,且随后其可 在730中强制MCU重置,从而可触发加电起动流程图。若固件更新成功,则装置可启动且枚举 为具有相关功能的目标装置。随后,启动加载器配置可被完全禁止。
[0090] 在710,可在装置固件中执行Μ⑶初始化。在712,装置可被初始化。在716,可执行主 回路。
[0091] 图8示出了例示根据实施例的控制更新器的方法的流程图800。在固件更新器流程 图800中,示出了固件更新事件的处理,其可涉及固件更新器应用程序和目标装置的固件二 者。为完成,也可存在用于协议(其可用于传达至装置)和用于启动加载器(可用于传达至启 动加载器)二者的驱动程序。固件更新器可作为独立应用程序或作为"云端"引擎支持的部 分启动。
[0092] 当启动固件更新器时,其始终具有指定的VID/PID(供应商识别符/产品识别符), 因为其具有的固件仅可以与特定装置固件相关联。程序在802初始化后,一旦VID/PID被验 证,即提取固件版本号且在804中检验以查看固件是否已更新至相同程度,或者若装置固件 实际上比欲被程序化的固件更新则对用户预警。
[0093] 经由协议,装置可在808被置于启动加载器模式,从而在812中可强制装置重置且 在814中重新枚举(例如被操作系统,例如被视窗重新枚举)为启动加载器装置。此外,MCU可 在810清除固件签名。在816,可确定是否存在正确的装置PID。若是,则处理可在818中进行; 若否,则处理可在806进行。FWU可在继续之前等待直至启动加载器装置已被检测到。FWU随 后可在818读取新固件文件,且可将装置程序化以进行匹配(例如在820擦除、在822程序化、 和在824验证),且一旦完成,其即可在826发出"退出启动加载器"命令。退出启动加载器命 令可完成固件更新过程,且可强制进行另一次重置并且在828中重新枚举,以允许装置再次 被操作系统(例如视窗)检测为具有相关功能的目标装置。在830,可验证目标装置。若是,可 在832显示成功操作的指示。若否,可在806进行处理。在806,可显示失败的指示。在806或 832之后,可退出FWU。
[0094] 将在下文中描述启动加载器的设计细节。
[0095] 启动区块可以是小的但功能完整的USB装置,其可枚举为具有如表1所示的USB描 述符的"未知装置"。
[0096]
[0097]表1:启动区块USB装置描述符
[0098]此USB描述符可包括目标装置的DEVICE_PID,其可在即使装置已处于启动加载器 模式时允许对装置的验证。
[0099] USB串描述符可重新改换目标以将关于存储器映射的类型或启动加载器意图就如 何继续进行更新而传达的其他特殊变化的一些信息给予固件更新器。
[0100] 表2示出了启动区块USB串描述符。
[0102] 表2:启动区块USB串描述符
[0103] 由于固件空间极为有限,所以仅可存在少量启动加载器装置作出响应的标准USB 命令。可存在另一同样小的命令集以处置固件更新、验证、和切换回正常装置操作模式。
[0104] 以下将描述根据各种实施例的快闪数据存储。
[0105] 装置可被期望管理和保护最少三个不同的快闪区域:制造数据、可变存储、启动区 块、和宏信息(可选)。
[0106] 制造数据可以是仅可在工厂更新、且可期望在装置的寿命期间被维持的区块。制 造数据可包括诸如以下的信息:序列号、键盘布局、三色LED校准值等。在Freescale设计中, 制造数据可以仅是另一快闪页(Flash page),因此,其可以任意放置。
[0107] 图9示出了根据实施例的存储器映射900,例如MC9S08JM60存储器映射。
[0108] 图10示出了根据实施例的数据存储1000,例如NXP制造数据存储。
[0109] 图11示出了根据实施例的存储器映射1100,例如NXP LPC1343存储器映射。
[0110] 在图11所示的示例中,制造数据可已附注于部分页的0xl960-0xlA00中。因为待存 储的制造数据不多,所以以Freescale JM60设计处理制造数据可以是有效的方法。该图还 示例位于0x2A00-0x5A00地址之间的宏存储。存储宏和一个以上的配置文件可以是产品选 项。根据各种实施例的各种装置和方法可依赖于云端服务以在"云端"存储宏和其他配置文 件,且因此可不需要额外的启动加载器快闪保护。
[0111] 然而,对其中所有快闪页均可以是4K大小的NXP设计而言,这可能是实行制造数据 存储的极为浪费的方式。因此,可替代地将制造数据存储在启动区块的未使用部分中,如图 10所示。不同于Freescale方法,该实行方案可仅更新有限的时间集。如上所示,制造数据区 块可写入启动区块的未被程序化后端中,且随后在写入新的版本的数据时予以作废。这可 以持续到直至除最后一个区块外的所有区块已作废,该最后一个区块可允许例如约20次更 新。
[0112] 可变存储可作为一组连续快闪页(至最近页)在两个处理器上实行。在Freescale 设计中,由于快闪效率的原因,可变存储可不存储在存储器映射的顶部,因为存在如中断向 量的无法移动的Freescale结构。如上所示,可见0xl0B0-0xl7FF之间的快闪区块是用于可 变存储的理想空间。同样在NXP设计中,中断向量可在底部,且因此存储器映射的顶部可以 是存储可变存储的效率最高处,可从示出了 NXP存储器映射的图中看到相同情况。
[0113]除了其可以是较大快闪区块之外,宏信息可遵循可变存储思路。只保持80个宏的 目录信息条目就可能需要4K快闪。宏目录条目可包括宏ID、宏数据开始和结束地址、和宏名 称(20个万国码字符,NULL终止):
[0115] 这可以允许宏数据在任何字节上开始和结束而与快闪页边界无关。然而,管理此 类型的宏目录结构可能需要所有宏数据在每次宏删除之后进行碎片整理。这可以将最大的 未使用部分留下用于宏数据存储。所有未使用的宏存储可予以擦除而非被程序化,从而允 许宏数据在来自协议命令时直接写入快闪。
[0116] 以下将描述向启动加载器模式的切换。
[0117] 根据各种实施例的用于NXP处理器和Freescale处理器两者的各种装置和方法可 切换至启动加载器模式和返回,而不涉及制造数据或可变存储。这种隔离可以是所期望的, 因为装置的字段将陷于启动加载器模式中,例如因为在可变存储更新事件期间电力遭移 除。可变存储更新事件可隐密地执行,以使用户可以不知道当下为拔下装置或将系统关机 的不佳时间。
[0118] 启动加载器的基本要求可以仍然是能够在电力中断发生时且在固件更新器程序 期间的任何点恢复。为满足此要求,可存在快闪标志,在每次启动时检验该快闪标志以确定 装置是否应重新进入启动加载器模式。
[0119] 根据各种实施例,装置码的最后字节可以是启动加载器状态标志。两个处理器之 间的实行方案可由于不同的快闪能力而稍有变化。NXP快闪可能够将T位与"0"位进行与 运算(AND)以产生不同变量而不擦除完整页:
[0120] #定义DFU_SIGNATURE 0x12305670//输入DFU模式签名值
[0121] #定义STD_SIGNATURE 0x12345678//标准装置签名值
[0122] NXP装置固件中的最后变量(在可变存储之下-参见如上所述的NXP LPC1343存储 器映射)可设置成STD_SIGNATURE,装置码将STD_SIGNATURE与DFU_SIGNATURE进行与运算以 切换至启动加载器模式。在固件更新过程期间,STD_SIGNATURE可擦除至OxFFFFFFFF,但下 一次启动可直至OxFFFFFFFF重新程序化至STD_SIGNATURE时才可去往装置固件。
[0123] Freescale快闪设计可以仅允许任何快闪位置在一旦擦除快闪页事件之后被重新 程序化。这可由变量可采取的两个值而提出额外的挑战,该两个值中的一个一定是OxFF,其 可以是擦除快闪页事件发生之后的精确相同值:
[0124] #定义DFU_SIGNATURE 0xF8//输入DFU模式签名值
[0125] #定义STD_SIGNATURE OxFF//标准装置签名值
[0126] 因此,STD_SIGNATURE可被STD_SIGNATURE变量的相同快闪页中的另一个变量限 定,该另一变量始终被固件定义为OxAA。标准模式可仅在限定变量是OxAA且STD_SIGNATURE 是OxFF时有效。再次地,这可以保证启动标志设置成BOOTLOADER_MODE直至固件的最后字节 被程序化。
[0127] 以下将描述存储更新。
[0128] 作为此增强过程的部分,不同存储类型中每一个的更新可以逻辑上隔离。这可以 有助于保证在状态偶然变化的情况下,状态可以是正确的,因为更新的意图得以保存。单发 定时器可用于允许多个协议变化在单次快闪更新事件中集中到一起,以替代相继发出的许 多命令中的每一个具有与之相对应的快闪更新事件。此外,可变存储的更新可不发生,除非 正被写入的数据实际上不同于当前存储在快闪区中的数据。可常常要求装置存储与在上一 次启动时要求这些装置存储的数据相同的数据。
[0129] 以下将描述freescale快闪更新注解。当地址从.S19文件转换至要擦除的快闪页 时,通常可以使用开始地址与OxFEOO进行与运算以确定要擦除的快闪页。Freescale JM60 部分可具有两个感兴趣部分快闪页,这些部分快闪页可在指定要擦除的页面时期望管理 (care)。第一部分快闪页可以是页面中的从OxlOBO至OxllFF,其可允许页面以0x1000地址 擦除,从而配合用于确定擦除地址的以上方案。第二部分快闪页可以是页面中的从0x1960 至0xl9FF,其可仅允许0x1960的地址对其擦除(以OxFEOO进行与运算= 0x1800的0x1960的 地址将不可用)。应当注意的是,对Freescale固件而言,装置固件的最后字节可保持未定 义,从而强制中断直接在启动区块之前的.S19输出文件。固件可不支持跨于未受保护和受 保护的快闪区域的区块程序。
[0130] 以下将描述NXP快闪更新注解。因为可存在更多一些的可用于启动区块中的代码 空间以支持NXP处理器上的启动加载器,所以该代码可将Freescale类型的程序化转化成匹 配NXP处理器的需要的支持。例如,NXP可期望一次性最少写入256个字节。也可期望256个字 节写在256-字节边界上。
[0131] Freescale类型的程序化可以认为快闪页为每一 512字节地址,而不是每一4096字 节地址,因此NXP码可检验页面是否已擦除且可跳过后续请求。Freescale类型的程序化可 设法每次程序化8字节。NXP码可将所有写入内容对准至256字节边界,且可缓冲数据直至最 小量的数据可用于写入。
[0132] 若未达成这种仿真增强,则固件更新器将载送用于每个处理器的不同的程序化算 法。
[0133] 以下将描述32位启动加载器支持。
[0134] 各种装置可不再限于64K的地址空间,且因此16位地址可不再足以允许固件被适 当地更新。根据各种实施例,可提供32位格式,其向后与16位启动加载器相容,因此跨于所 有装置仅需要使用一个固件更新器应用程序。
[0135] 第一变换可以是:USB串描述符"bType"值可设置成0x05,指示32位地址空间、连同 4K擦除扇区的大小、256字节程序对准要求、和256个字节的程序化区块大小。当前,0x04的 "bType"值可以是16位地址空间、4K擦除扇区、对准的256字节、和256字节大小的程序化区 块。如以下更详细的描述,命令可变换以在16位和32位启动加载器两者上工作,且该命令实 际上可在先前版本的启动加载器上工作而无需任何变换。然而,仍可存在一个原因使得FWU 应用程序必须读取此USB串描述符"bType"值,且可获知将装置程序化继续至何种程度(在 输入为二进制文件的情况下尤其如此,其中在一些状况下,若码图像被编译/链接过程外部 的一些工具操纵,则一定如此)。
[0136] 32位增强可以能够向后兼容,因为USB设置标头封包可以呈小端读取格式 (Little-Endian format),且结束地址值可以从未使用。
[0137] 表3示出了16位启动加载器USB设置标头。
[0139] 表3:16位启动加载器USB设置标头
[0140] 以下将描述根据各种实施例的启动加载器装置。当装置置于启动加载器模式时, 可重新枚举为启动加载器装置。此启动加载器装置可在其功能上受限制,且可以仅支持最 小命令集以通过USB枚举且随后处理固件更新。此装置可以不再是支持增强协议的装置。
[0141] 一旦已发出进入启动加载器模式的协议命令且已过去适当量的时间以允许装置 经历重置和重新枚举,固件更新器即可使用VID和PID验证装置处于启动加载器模式(例如 0xl532、0xll0D)。因为多个装置可在任一时间附接至系统(且所有装置可以处于启动加载 器模式中,这种情况不见得存在但却有可能),所以固件更新器可读取启动加载器装置描述 符中的原始DEVICE_PID值,并且可以将其与期望目标装置相比较。
[0142] 作为启动加载器装置,可以支持以下最小USB命令集:
[0143] -GET_STATUS(0x00);
[0144] -SET_ADDRESS(0x05);
[0145] -GET_DESCRIPT0R(0x06);
[0146] -GET_C0NFIRURATI0N(0x08);以及
[0147] -SET_C0NFIGURATI0N(0x09)。
[0148] 固件更新器应用程序可使用USB控制转移以发出启动加载器装置命令。
[0149] 表4示出了启动加载器USB设置标头。
[0151]表4:启动加载器USB设置标头
[0152]如表4所示,USB设置标头用法可以已改变为以极为简单的方式发出32位兼容启动 加载器命令(参见以上表3)。受支持的启动加载器命令可如下:
[0153] -PROGRAM (0x81)_开始地址、长度和数据;
[0154] -ERASE_PAGE(0x82)_ 页面地址;
[0155] -EXIT_B00TL0ADER(0x84)_ 执行 USB 和装置重置;
[0156] -VERIFY(0x87)_开始地址、长度和数据;以及
[0157] -GET_RESULT (0x8F) -0x01 =成功,OxFF =错误。
[0158] 如先前注解,NXP启动加载器支持可以更复杂一些,且可仿效更受约束的 Freescale启动加载器支持。Freescale启动加载器支持可以期望:ERASE_PAGE命令始终处 于快闪页边界(快闪大小为0x0200个字节),其中有两个例外。参看以上Freescale MC9S08JM60的存储器映射,可见由于置放寄存器/RAM的Freescale而存在两个部分快闪页。 这些快闪页可在OxlOBO-OxllFF和0xl960-0xl9FF处,并且可能需要通过给予那些页面的开 始地址(OxlOBO和0x1960)来擦除。所有其他擦除可以在快闪边界开始(示例性擦除序列可 以是:0xl0B0、0xl200、0xl400、0xl600、0xl960、0xlA00、0xlC00、......OxFEOO)。
[0159] 擦除序列可以包括:ERASE_PAGE(start_address)、接着GET_RESULT命令、其可返 回成功(0x01)或失败(OxFF)。以下如表5所示的ERASE_PAGE示例可擦除2M字节部分的最后 4K区块(0x001 FR)00)。表6示出了GET_RESULT命令。
[0161]表5: ERASE_PAGE 命令
[0164] 表6:GET_RESULT命令
[0165] 程序化和验证循环可在相同地址处同等地取用相同数据,从而在各个命令之后获 得结果。程序数据可不跨越于未受保护区域和受保护区域(被启动加载器保护且在擦除和 程序化循环期间保存);因此,.S19或.HEX文件可以是经由发送16个字节的线路的剖析线。 因为线路的大小,所以可不利于发送较大数据块。可以构建.S19和.HEX文件以使受保护快 闪页与不受保护快闪页之间始终存在线路中断。
[0166] 程序化序列可包括:16个字节数据的PR0GRAM(start_address)封包、返回成功 (0x01)或失败(OxFF)的GET_RESULT。以下PROGRAM(表7)和VERIFY(表8)的示例可作用于2M 字节部分的最后16个字节(OxOOlFFFFO)。
[0168]表7: PROGRAM 命令
[0170] 表8: VERIFY 命令
[0171] 将要发出的最后命令可以是EXIT_B00TL0ADER命令(例如,如下面表9所示),其可 以使装置再一次重新枚举,以再一次作为处于装置操作模式的装置呈现。
[0173] 表9:EXIT_B00TL0ADER 命令
[0174] 可存在快闪标志,该快闪标志可指示装置处于启动加载器模式。此标志可以仅在 成功程序化之后才清除。可在每一次装置启动时检验此标志,且若设置该标志,则装置可进 入启动加载器模式。此机制可以允许在任何时间移除(包括在擦除循环之后立即移除)电 力,且允许通过辨识出装置处于启动加载器模式且随后检验原始DEVICE_PID而恢复装置。
[0175]也可以存在用户恢复机制。若错误的固件已成功地程序化到装置中且其不再回应 协议命令,则用户可拔下装置,可在将装置插回时保持按下一些键/按钮组合(例如对鼠标 而言:左、中、右按钮;例如对键盘而言=Fn键或其他特定键)。固件更新器应用程序可以如 上所述使用原始DEVICE_PID值检测哪个装置附接且需要固件更新。
[0176]虽然本发明已参考特定实施例被具体地示出和描述,但是本领域技术人员应理 解,可在不脱离所附权利要求所定义的本发明的精神和范畴的情况下进行形式和细节方面 的各种改变。本发明的范畴由所附权利要求指示,且因此落入权利要求的等效物的含义和 范围内的所有改变均被包含。
【主权项】
1. 一种装置,包括: 启动加载器; 存储器,被配置为存储用于控制所述装置的固件数据; 处理器,被配置为以装置操作模式或以启动加载器模式操作;以及 界面; 其中,所述装置操作模式是其中所述处理器控制所述启动加载器载入存储在所述存储 器中的所述固件数据的模式;且 其中,所述启动加载器模式是其中所述处理器控制所述启动加载器使用所述界面发送 所述装置的识别符、使用所述界面接收所述固件数据且将所述固件数据存储在所述存储器 中的模式。2. 根据权利要求1所述的装置,其中,所述装置包括输入装置和输出装置中的至少一 个。3. 根据权利要求2所述的装置,其中,所述固件数据包括用于控制所述输入装置和所述 输出装置中的所述至少一个的数据。4. 根据权利要求1所述的装置,其中,所述启动加载器模式是其中所述处理器不控制所 述启动加载器载入存储在所述存储器中的所述固件数据的模式。5. 根据权利要求1所述的装置,其中,所述界面包括以下至少一个:通用串行总线界面、 火线界面、PS/2界面、霹雳界面、局域网界面、蓝牙界面、红外线界面、无线局域网界面、和无 线移动通信界面。6. 根据权利要求1所述的装置,其中,所述启动加载器使用存储在所述存储器的固定部 分中的数据。7. 根据权利要求1所述的装置,进一步包括: 接收器,被配置为接收从所述装置操作模式变换至所述启动加载器模式的指令。8. 根据权利要求7所述的装置,其中,所述接收器被配置为使用所述界面接收所述指 令。9. 根据权利要求1所述的装置,进一步包括: 接收器,被配置为接收从所述启动加载器模式变换至所述装置操作模式的指令。10. 根据权利要求9所述的装置,其中,所述接收器被配置为使用所述界面接收所述指 令。11. 根据权利要求1所述的装置,进一步包括: 有效性检验器,被配置为检验存储在所述存储器中的所述固件数据是否有效;以及 模式变换器,被配置为当确定存储在所述存储器中的所述固件数据无效时,从所述装 置操作模式变换至所述启动加载器模式。12. 根据权利要求1所述的装置,其中,所述装置进一步被配置为在启动所述装置时确 定以何种模式操作。13. -种更新器,包括: 接收器,被配置为从处于启动加载器模式的装置接收所述装置的识别符;以及 发送器,被配置为基于接收到的所述识别符向所述装置发送固件数据。14. 根据权利要求13所述的更新器,其中,所述发送器进一步被配置为将用于变换至所 述启动加载器模式的指令发送到不处于所述启动加载器模式的装置。15. 根据权利要求13所述的更新器,其中,所述发送器进一步被配置为将用于变换至装 置操作模式的指令发送到处于所述启动加载器模式的所述装置。16. -种控制装置的方法,所述方法包括: 控制启动加载器; 控制存储器存储用于控制所述装置的固件数据; 控制处理器以装置操作模式或以启动加载器模式操作;以及 控制界面; 其中,所述装置操作模式是其中所述处理器控制所述启动加载器载入存储在所述存储 器中的所述固件数据的模式;且 其中,所述启动加载器模式是其中所述处理器控制所述启动加载器使用所述界面发送 所述装置的识别符、使用所述界面接收所述固件数据且将所述固件数据存储在所述存储器 中的模式。17. 根据权利要求16的方法,其中,所述装置包括输入装置和输出装置中的至少一个。18. 根据权利要求2的方法,其中,所述固件数据包括用于控制所述输入装置和所述输 出装置中的所述至少一个的数据。19. 根据权利要求16的方法,其中,所述启动加载器模式是其中所述处理器不控制所述 启动加载器载入存储在所述存储器中的所述固件数据的模式。20. 根据权利要求16的方法,其中,所述界面包括以下至少一个:通用串行总线界面、火 线界面、PS/2界面、霹雳界面、局域网界面、蓝牙界面、红外线界面、无线局域网界面、和无线 移动通信界面。21. 根据权利要求16的方法,其中,所述启动加载器使用存储在所述存储器的固定部分 中的数据。22. 根据权利要求16的方法,进一步包括: 控制接收器接收从所述装置操作模式变换至所述启动加载器模式的指令。23. 根据权利要求22的方法,其中,所述接收器使用所述界面接收所述指令。24. 根据权利要求16的方法,进一步包括: 控制接收器接收从所述启动加载器模式变换至所述装置操作模式的指令。25. 根据权利要求24的方法,其中,所述接收器使用所述界面接收所述指令。26. 根据权利要求16的方法,进一步包括: 控制有效性检验器检验存储在所述存储器中的所述固件数据是否有效;以及 控制模式变换器在确定存储在所述存储器中的所述固件数据无效时,从所述装置操作 模式变换至所述启动加载器模式。27. 根据权利要求16的方法,其中,所述装置确定在启动所述装置时以何种模式操作。28. -种控制更新器的方法,所述方法包括: 控制接收器从处于启动加载器模式的装置接收所述装置的识别符;以及 控制发送器基于所接收的所述识别符将固件数据发送至所述装置。29. 根据权利要求28的方法,其中,所述发送器将用于变换至所述启动加载器模式的指 令发送至不处于所述启动加载器模式的装置。
【文档编号】G06F9/445GK106030526SQ201380082049
【公开日】2016年10月12日
【申请日】2013年12月13日
【发明人】何平, 东尼·卡萨诺, 汉奇·查米科·古纳瓦
【申请人】雷蛇(亚太)私人有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1