
1.5 如何将工程移植到不同的芯片
1.5.1 在SES中将nRF52832的工程移植到nRF52840
在开发过程中,有时需要在不同芯片之间移植工程,例如开发者原本使用的芯片是nRF52832,但由于需要更多的存储空间及资源,后来使用的芯片是nRF52840。移植的方法有两种。
第一种方法是在nRF52840的例程基础上,将nRF52832例程的上层应用移植过来,这样的好处是新工程很少会产生芯片适应性问题,其缺点是如果原来的上层应用结构复杂,底层驱动嵌入得较多,则移植需要很大的人力和时间成本。本节主要介绍第二种方法,即直接通过修改工程的配置,将原来的工程移植到新的平台(芯片)上。这里以SES开发平台为例,介绍将工程从nRF52832移植到nRF52840的方法,该方法的步骤如下。
(1)修改所选用的协议栈型号。由于不同的芯片与应用需要使用不同的协议栈,通常,nRF52832使用的协议栈是S132,nRF52840使用的协议栈是S140。
(2)单击工程右上角的“”(设置)按钮,选择“Options Under Node”选项,如图1-43所示,工程下会出现很多设置选项。

图1-43
(3)双击“Additional Load File[0]”选项,如图1-44所示,选择S140协议栈的hex文件。根据nRF5 SDK的目录可知,该hex文件的存放路径为“…\A_nRF5_SDK_17.1.0\components\softdevice\s140\hex”。

图1-44
(4)修改芯片型号。修改芯片型号的方式有两种:
第一种方式是右键单击工程名“Project‘ble_app_uart_pca10040_s132’”,在弹出的右键菜单中选择“Options”,如图1-45所示。

图1-45
在弹出的对话框中,将原来“Release”的配置改为“Common”。在“Debugger”下的“Target Device”中,将“nRF52832_xxAA”改为“nRF52840_xxAA”,如图1-46所示。

图1-46
第二种方法是选择“Options Under Node”,在弹出的选项中,将“Target Device”右侧的“nRF52832_xxAA”改为“nRF52840_xxAA”,如图1-47所示。

图1-47
(5)修改全局宏定义变量。右键单击工程名“Project‘ble_app_uart_pca10040_s132’”,在弹出的右键菜单中选择“Options”,在弹出的对话框中,双击“Common”中的“Linker”,在“Section Placement Macros”右侧修改对应的存储空间,如图1-48所示。

图1-48
存储空间修改前如图1-49所示,修改后如图1-50所示。

图1-49

图1-50
其中FLASH_PH_START到FLASH_START的空间是协议栈占用的Flash空间,App程序存放在FLASH_START后面的Flash空间中。同样,RAM_PH_START到RAM_STRAT的空间是协议栈使用的RAM空间,RAM_START后面的RAM供App程序使用。协议栈占用的Flash空间是固定的,但占用的RAM空间会随App程序的不同而不同,因此RAM_START的值需要根据实际的App程序进行调整。
(6)修改原本的宏定义。右键单击工程名“Project‘ble_app_uart_pca10040_s132’”,在弹出的右键菜单中选择“Options”,在弹出的对话框的Common配置下,选择“Processor”选项下的“Preprocessor Definitions”,做如下修改(见图1-51)。

图1-51
• 将BOARD_PCA10040改为BOARD_PCA10056;
• 去掉NRF52的宏定义;
• 将NRF52832_XXAA改为NRF52840_XXAA;
• 将S132改为S140。
(7)nRF52832的工程存放在工程目录中的pca10040文件夹下,nRF52840的工程存放在工程目录下的pca10056文件夹下,如图1-52所示,在修改配置时可以参考。

图1-52
(8)修改Softdevice协议栈头文件路径。右键单击工程名“Project‘ble_app_uart_pca10040_s132’”,在弹出的右键菜单中选择“Options”,在弹出的对话框的Common配置下,选择“Processor”选项下的“User Include Directiories”,做如下修改(见图1-53)。将S132的头文件:

改为S140的头文件:


图1-53