为了让广大开发者更好、更方便地使用 BSP 进行开发,RT-Thread 开发团队重新整理了现有的 LPC55Sxx系列的 BSP,推出了新的 BSP 框架。新的 BSP 框架在易用性、移植便利性、驱动完整性、代码规范性等方面都有较大提升,在新的 BSP 框架下进行开发,可以大大提高应用的开发效率。
和 RT-Thread 以往提供的 BSP 不同,在新的 BSP 文件夹中将不会包含固件库、外设驱动等可以被多个 BSP 引用的代码文件。而是将这些通用的文件统一存放在 Libraries 文件夹中,通过在特定 BSP 中引用这些文件的方式,来包含 BSP 中所需的库文件或者驱动文件。这种方式不仅大大提高了代码复用率,降低了 BSP 的维护成本,而且可以更方便地给开发者提供更丰富的驱动文件,让开发者可以更容易地找到自己需要的资源。
新的 BSP 框架还引入了 MCUXpresso Config Tools 工具,可以使用该工具来对引脚和时钟进行配置。MCUXpresso 工具提供了图形化的配置界面,这种图形化的配置方式对开发者来说更加直观,不仅可以让开发者灵活地配置 BSP 中使用的资源,并且可以让开发者对资源的使用情况一目了然。
新 BSP 框架的主要特性如下:
BSP 框架结构如下图所示:
LPC55Sxx 系列的 BSP 由三部分组成,分别是官方 SDK、通用驱动和特定开发板 BSP,下面的表格以 LPC55S6x 系列 BSP 为例介绍这三个部分:
| 项目 | 文件夹 | 说明 | | - | - | :-- | | 官方 SDK | lpc55sxx/libraries/LPC55S69 | LPC55S69系列官方 SDK | | drivers | lpc55sxx/libraries/drivers | LPC55Sxx 系列通用 RTT 驱动 | | 特定开发板 BSP | lpc55sxx/lpc55s69_evk | NXP 官方 LPCXpressp55S69 EVK 开发板 BSP |
制作一个 BSP 的过程就是构建一个新系统的过程,因此想要制作出好用的 BSP,要对 RT-Thread 系统的构建过程有一定了解,需要的知识准备如下所示:
了解 BSP 的使用方法,可以阅读 BSP 说明文档 中使用教程表格内的文档。了解外设驱动的添加方法可以参考《外设驱动添加指南》。
RT-Thread 使用 scons 作为系统的构建工具,因此了解 scons 的常用命令对制作新 BSP 是基本要求。
在 RT-Thread 系统中,应用程序通过设备驱动框架来操作硬件,因此了解设备驱动框架,对添加 BSP 驱动是很重要的。
RT-Thread 系统通过 menuconfig 的方式进行配置,而 menuconfig 中的选项是由 kconfig 文件决定的,因此想要对 RT-Thread 系统进行配置,需要对 kconfig 语法有一定了解。
在新的 lpc 系列 BSP 中利用了 MCUXpresso 工具对底层硬件进行配置,因此需要了解 MCUXpresso 工具的使用方法。
本节以制作官方 LPCXpresso55S69-EVK
开发板的 BSP 为例,讲解如何为一个新的开发板添加 BSP。
BSP 的制作过程分为如下五个步骤:
在接下来的章节中将会详细介绍这五个步骤,帮助开发者快速创建所需要的 BSP。
制作新 BSP 的第一步是复制一份同系列的 BSP 模板作为基础,通过对 BSP 模板的修改来获得新 BSP。目前提供的 BSP 模板系列如下表所示:
工程模板 | 说明 |
---|---|
libraries/templates/lpc55s6xxxx | LPC55S6x系列 BSP 模板 |
本次示例所用的 LPC55S6x 系列 BSP 模板文件夹结构如下所示:
本次制作的 BSP 为 LPC55S6x 系列,因此拷贝模板文件夹下的 lpc55s6xxxx
文件夹,并将该文件夹的名称改为 lpc55s69-nxp-evk
,注意文件夹命名规则为:芯片型号 + 厂家名 + 板子名称。如下图所示:
在接下来的 BSP 的制作过程中,将会修改 board 文件夹内的配置文件,将 LPC55S6x 系列的 BSP 模板变成一个适用于野火lpc55s69-nxp-evk
开发板的 BSP ,下表总结了 board 文件夹中需要修改的内容:
项目 | 需要修改的内容说明 |
---|---|
MCUX_Config (文件夹) | MCUX_Config 工程 |
linker_scripts (文件夹) | 链接脚本 |
Kconfig | 芯片型号、系列、外设资源 |
SConscript | 芯片启动文件、目标芯片型号 |
没有安装 MCUXpresso 软件可以访问 NXP 官网下载 MCUXpresso 软件。
在制作 BSP 的第二步,需要创建一个基于目标芯片的 MCUXpresso 工程。默认的 MCUXpresso 工程在 MCUX_Config 文件夹中,双击打开 MCUX_Config.mex
工程,如下图所示:
使用 MCUXpresso 工具的一个好处就是可以图形化的配置引脚,不同子系列的芯片外设之间的区别一般是使用的引脚不一样,使用 RT-Thread 外设驱动的第一步就是需要配置外设对应的引脚,而外设的初始化不需要使用工具配置,这个过程在 RT-Thread 外设驱动中完成。
pin_mux.c
和 pin_mux.h
,时钟配置对应源文件为 clock_config.c
和 clock_config.h
。最终 MCUXpresso 生成的工程目录结构如下图所示:
最终导出的pin_mux.c/pin_mux.h/clock_config.c/clock_config.h需要手动复制到BSP对应的board文件夹下(即上一级目录里),当然用户也可以手动修改Kconfig文件,修改pin_mux/clock_config的文件路径。
在本小节中修改 board/Kconfig
文件的内容有如下两点:
芯片型号和系列的修改如下表所示:
宏定义 | 意义 | 格式 |
---|---|---|
SOC_LPC55S6X | BSP 芯片型号 | SOC_LPC55S6x |
SOC_LPC55S6X_SERIES | BSP 芯片系列 | SOC_LPC55S6X_SERIES,LPC55S6x目前包括LPC55S66和LPC55S69系列 |
关于 BSP 上的外设支持选项,一个初次提交的 BSP 仅仅需要支持 GPIO 驱动和串口驱动即可,因此在配置选项中只需保留这两个驱动配置项,如下图所示:
接下来需要修改用于构建工程相关的文件。
linker_scripts 链接文件如下图所示:
下面以 MDK 使用的链接脚本 link.sct 为例,演示如何修改链接脚本:
本次制作 BSP 使用的芯片为LPC55S69JBD100,片上FLASH 大小为 608kB,因为双核的关系,需要预留一部分空间给第二个内核,所以这里分给Core0的Flash大小为456KB,因此修 m_text_size 为 0x71E00。m_text_size、m_interrupts_size 和 m_core1_image_size 的大小合计为 608kB。
其他两个链接脚本的文件分别为 IAR 使用的 link.icf 和 GCC 编译器使用的 link.lds,修改的方式也是类似的,如下图所示:
在这一步中需要修改芯片型号,具体可以参考 SDK 下面的 fsl_device_registers.h
文件来确定芯片型号,修改内容如下图所示:
template 文件是生成 MDK/IAR 工程的模板文件,通过修改该文件可以设置工程中使用的芯片型号以及下载方式。MDK5/IAR 的工程模板文件,如下图所示:
下面以 MDK5 模板的修改为例,介绍如何修改模板配置:
修改程序的默认下载方式:
重新生成工程需要使用 Env 工具。
在 Env 界面输入命令 menuconfig 对工程进行配置,并生成新的 rtconfig.h 文件。如下图所示:
下面以重新生成 MDK 工程为例,介绍如何重新生成 BSP 工程。
使用 env 工具输入命令 scons --target=mdk5
重新生成工程,如下图所示:
重新生成工程成功:
到这一步为止,新的 BSP 就可以使用了。
接下来我们可以分别使用命令 scons --target=mdk5
和 scons --target=iar
,来更新 mdk5 和 IAR 的工程,使得该 BSP 变成一个完整的,可以提交到 GitHub 的 BSP。
感谢每一位贡献代码的开发者,RT-Thread 将与你一同成长。
本章节介绍 RT-Thread LPC 系列 BSP 制作与提交时应当遵守的规范 。开发人员在 BSP 制作完成后,可以根据本规范提出的检查点对制作的 BSP 进行检查,确保 BSP 在提交前有较高的质量 。
LPC BSP 的制作规范主要分为 3 个方面:工程配置,ENV 配置和 IDE 配置。在已有的 LPC 系列 BSP 的模板中,已经根据下列规范对模板进行配置。在制作新 BSP 的过程中,拷贝模板进行修改时,需要注意的是不要修改这些默认的配置。BSP 制作完成后,需要对新制作的 BSP 进行功能测试,功能正常后再进行代码提交。
下面将详细介绍 BSP 的制作规范。
rt_hw_board_init
中需要完成堆的初始化:调用 rt_system_heap_init