Gaming Headset 浅谈之 OTA 篇上——代码整合

一、概述

一个完整的耳机功能的程序是会有 OTA 的功能,以便用于在客户的使用过程中代码的更新迭代。在 NXH3670 + LPC54114 的 Gaming Headset 方案中就有专门用于 OTA 升级代码以及区分功能并跳转的 SSB 例程,下面就来进一步解析说明各部分的功能,并且如何将这几部分的代码整合成一个完整的程序。

二、各部分功能分析

在该 Headset 的方案中,OTA 与 Gaming Headset 的代码是独立分开的,即两份 Bin 文件是分别放在 Flash 的不同位置,需要通过 SSB 来跳转运行不同的代码来实现相应的功能。所以一个具有 OTA 功能的 Headset需要有如下几部分组成:

1. SSB:主要功能为用于跳转。在代码开始运行时会先运行这部分的代码,该代码会先读取 Partition Table 数据,根据 Partition Table 里面标志位,跳转到 OTA 的执行代码中或者 Gaming Headset 的执行代码中。
2. OTA:主要功能为用于 OTA。该部分由两部分组成:NXH3670 OTA Firmware,LPC54114 OTA code。
3. Application: 主要功能为用于 Gaming Headset。该部分主要由 NXH3670 Gaming Firmware。
4. Partition Table:主要用于存储 OTA 与 Application 的代码地址,当前运行的程序序号。


三、整合步骤

1. 在程序的开头需要运行的是 SSB 程序,所以 SSB 的代码需要放在 Flash 的开头。为了SSB 是放在0x00的位置上,需要打开 SSB 的例程SSB_Debug_20190626 进行修改一些参数。

需要在 option 选项中,添加 NO_CRP 的设置,因为如果有设置 CRP 时,会在 Flash 的开头位置存储 配置字(CRP Key) 用于加密,所以代码会有0x02FC 的偏移量。修改完之后进行编译生成 SSB 的bin 文件。

2. 在编译完 SSB 的 Bin 文件之后,就可以修改 OTA 的相对应的配置了
2.1 首先由于整个 LPC54114 Flash 中 0x00 开头位置放置了 SSB 的代码,在 OTA 例程中需要将例程的开始位置往后偏移一定的位置。打开 OTA 例程


在 option 中点开 LPC54114J256_cm4.scf 修改里面的参数, 由于 SSB 的大小为 14KB,设置的偏移量为 0x4000
m_interrupts_start:需要添加上偏移量 0x4000 即如下图所示,
m_interrupts_size:大小不用修改,维持原来的值。
m_text_start:由于 m_interrupts_start 增加了偏移量,所以也需要添加 0x4000 的偏移量。
m_text_size:由于 m_text_size + m_text_start 为常量,所以需要减少数值的大小。即需要减去 0x4000
2.2 在修改了运行位置后,需要打开 NXHTxEEP.h 文件,将里面的内容全部注释掉,在例程中 NXH3670 的 Firmware 以及 partition table 是通过 NXHTxEEP.h 文件固定在 Flash 的特定位置中,这样编译出来的 bin文件过大,并不适合后续整合。
2.3 按照上述步骤修改完之后,点击编译,等待编译完成后,将 bin 文件复制到原厂的 SDK 包中的 tools 文件夹中,……\SDK-Gaming-Rev6.0_public\tools。
2.4 调用 CMD 命令运行 tools 文件夹中的 to_eep.cmd ,输入下面的命令:to_eep.cmd -i XXX.bin -o XXX.eep
其中 XXX.bin 为按照上述步骤编译出来的 OTA bin文件,XXX.eep 为需要包装生成的 eep 文件。


可以在文件夹中,看到生成的 eep 文件。

3. 如同修改 OTA 例程一样,我们也需要修改 Gaming Application 的相应配置。
3.1 确认添加 NO_CRP 设置。
3.2 修改代码开始的偏移量,注意:此处的偏移量是 SSB + OTA total firmware(LPC54114 code & NXH3670 firmware) 的总偏移量。
SSB:14KB,偏移量为 0x4000
LPC54114 OTA code:52KB,偏移量为 0xD000
NXH3670 OTA Firmware:58KB,偏移量为 0xE800
总偏移量为 0x1F800。

3.3 注释掉 NxHEEP.h 中定义的 Firmware & Partition table 等文件。
3.4 将编译生成的 bin 文件,并使用 to_eep.cmd 制作成相对应的 eep 文件
4. 修改完 OTA 与 Gaming Application 的bin 文件并生成相应的 eep 文件后,就可以对文件进行合并。这里关于 eep 文件的合并工具,可以使用 Winhex 工具进行合并。
以下为部分对应的开始地址,以供参考:
0x0000~~0x3FFF: SSB code
0x4000~~0x10FFF: LPC54114 code for OTA
0x11000~~0x1F7FF: NXH3670 OTA Firmware
0x1F800~312FF: LPC54114 code for Gaming Headset
0x3F400~0x3F5BB: Partition Table
0x3FC00~0x3FFFF: Persisten data
(NXH3670 的 Gaming Headset Firmware 需要占用 110 KB 空间,需要放置到外部存储中)
注意:

由于之前需要用 to_eep.cmd 将 bin 文件包装成 eep 文件,eep 文件会在 bin file 中添加一段用于识别以及统计的包头,长度为 0x10,所以由于之前在代码中设置的偏移量是 bin file 的开始位置,所以在移植 eep 文件时要放在(偏移量 - 0x10)的位置上,例如:OTA 中代码设置的偏移量为 0x4000,在转换成 eep 文件后,eep 文件需要放在 0x3FF0 (0x4000-0x10)的位置上,为了让bin file 能够放在 0x4000 的位置上。

5. 在合并好的 bin 文件之后,需要做的就是修改 Partition Table 中关于各个部分的开始地址,让 SSB 能够正确跳转到对应的执行代码中。
5.1 首先新建一个用于整合代码的 bin 文件,使用 Winhex 工具打开。
5.2 将上述的文件整合在一个 bin 文件中。
5.3 打开 bin 文件中 0x3F400 的位置中,将 OTA 的开始位置,NXH3670 Firmware 的偏移位置进行修改。
5.4 修改完成后,将合成的 bin 文件烧录到芯片上,观察运行情况。



四、结语

       在完成了上面一大堆操作之后,我们已经可以得到一个拥有 OTA 功能的 Headset 了,是不是很有成就感?那么我们要怎么使用这一个 OTA 功能咧?在下一篇中,我们会对大家一步一步的来使用电脑的上位跟 Dongle 来对这个 Headset 进行 OTA 升级

参考资料:

  1. NXH3670 Datasheet      — NXH3670UK; 2019, NXP Semiconductors
  2. AN12360 application note — NXH3670 Gaming; 2019, NXP Semiconductors
  3. AN11953 application note — Boot loader; 2019, NXP Semiconductors
  4. AN12361 application note — Over-the-air firmware update; 2019, NXP Semiconductors

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论