LV04-03-BSP工程管理-01-NXP官方SDK

本文主要是使用官方提供的SDK来驱动LED的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows版本 windows11
Ubuntu版本 Ubuntu16.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
Linux开发板 正点原子 i.MX6ULL Linux 阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
Win32DiskImager Win32DiskImager v1.0
点击查看本文参考资料
分类 网址 说明
官方网站 https://www.arm.com/ ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档
https://www.nxp.com.cn/ NXP官方网站
https://www.nxpic.org.cn/NXP 官方社区
https://u-boot.readthedocs.io/en/latest/u-boot官网
https://www.kernel.org/linux内核官网
点击查看相关文件下载
分类 网址 说明
NXP https://github.com/nxp-imx NXP imx开发资源GitHub组织,里边会有u-boot和linux内核的仓库
https://elixir.bootlin.com/linux/latest/source 在线阅读linux kernel源码
nxp-imx/linux-imx/releases/tag/rel_imx_4.1.15_2.1.0_ga NXP linux内核仓库tags中的rel_imx_4.1.15_2.1.0_ga
nxp-imx/uboot-imx/releases/tag/rel_imx_4.1.15_2.1.0_ga NXP u-boot仓库tags中的rel_imx_4.1.15_2.1.0_ga
I.MX6ULL i.MX 6ULL Applications Processors for Industrial Products I.MX6ULL 芯片手册(datasheet,可以在线查看)
i.MX 6ULL Applications ProcessorReference Manual I.MX6ULL 参考手册(下载后才能查看,需要登录NXP官网)

一、I.MX6ULL 官方 SDK 包简介

1. 简介

NXP 针对 I.MX6ULL 编写了一个 SDK 包,这个 SDK 包就类似于 STM32 的 STD 库或者HAL 库,对于这个 SDK 包的安装方式,NXP提供了 Windows 和 Linux 两种版本,分别针对主机系统是 Windows 和Linux(意思就是SDK的安装就跟软件安装一样,后边就会看到啦)。因为我们是在 Windows 下使用 Source Insight 来编写代码的,因此我们使用的是 Windows版本的。

Windows 版本 SDK 里面的例程提供了 IAR 版本,肯定有人会问既然 NXP 提供了 IAR版本的 SDK,那我们为什么不用 IAR 来完成裸机试验,偏偏要用复杂的 GCC?因为我们要从简单的裸机开始掌握 Linux 下的 GCC 开发方法,包括 Ubuntu 操作系统的使用、 Makefile 的编写、 shell 等等。如果为了偷懒而使用 IAR 开发裸机的话,那么后续学习 Uboot 移植、 Linux 移植和 Linux 驱动开发就会很难上手,因为开发环境都不熟悉!再者,不是所有的半导体厂商都会为 Cortex-A 架构的芯片编写裸机 SDK 包,我使用过那么多的 Cotex-A 系列芯片,也就发现了 NXP 给 I.MX6ULL 编写了裸机 SDK 包。而且去 NXP 官网看一下,会发现只有 I.MX6ULL这一款 Cotex-A 内核的芯片有裸机 SDK 包, NXP 的其它 Cotex-A 芯片都没有。说明在 NXP 的定位里面, I.MX6ULL 就是一个 Cotex-A 内核的高端单片机,定位类似 ST 的 STM32H7。

总的来说就是,使用 Cortex-A 内核芯片的时候不要想着有类似 STM32 库一样的东西, I.MX6ULL 是一个特例,基本所有的 Cortex-A 内核的芯片都不会提供裸机 SDK 包。因此在使用 STM32 的时候那些用起来很顺手的库文件,在 Cotex-A 芯片下基本都需要我们自行编写,比如.s 启动文件、寄存器定义等等。

2. 在哪下载?

我们来到官网:i.MX 6ULL应用处理器_Arm® Cortex®-A7单核,频率为900 MHz | NXP 半导体,找到这个页面:

image-20230725222943300

我们在windows下安装库的话,就选下边的WIN版进行安装就行。Linux下的话就选第一个。他们只是安装程序不同罢了,安装后得到的SDK库文件是一样的。例如,在windows环境下,我们选择的第二个,下完后会得到这样一个可执行文件:

image-20230725223210684

3. windows下的SDK安装

我们双击上边的可执行文件,就会进入SDK的安装流程,一直 next 下一步就好啦,然后在这里我们要选择一下安装的位置:

image-20230725223311549

然后继续一直下一步就可以啦,安装完成如下所示:

image-20230725223424185

然后我们来看一下安装目录下的文件:

image-20230725223511101

我们就不重点学习这个 SDK 包了,所有的例程都在 boards 这个文件夹里面。我们重点是需要 SDK 包里面与寄存器定义相关的文件,一共需要如下三个文件:

fsl_common.h:位置为 SDK_2.2_MCIM6ULL/devices/MCIMX6Y2/driver/fsl_common.h

fsl_iomuxc.h:位置为 SDK_2.2_MCIM6ULL/devices/MCIMX6Y2/drivers/fsl_iomuxc.h

MCIMX6Y2.h:位置为 SDK_2.2_MCIM6ULL/devices/MCIMX6Y2/MCIMX6YH2.h

整个 SDK 包我们就需要上面这三个文件,把这三个文件准备好,我们后面移植要用。

二、使用SDK点灯

1. SDK移植

我们需要的的三个文件如下,前边已经说明了这三个文件的位置。

image-20230728194306338

这三个文件直接编译的话肯定会出错的!需要对其做删减,因为这三个文件里面的代码都比较大 我们可以看这里:01_GPIO_LED/05_led_c_nxp_sdk——C语言点亮LED实验(NXP官方SDK移植) · 1e13542 · sumumm/imx6ull-bare-demo - Gitee.com,这一次的提交我同时修改了编译脚本和Makefile文件,可以直接看上边这三个文件的更改就会知道文件发生了哪些变化了。

2. cc.h

新建一个名为 cc.h 的头文件, cc.h 里面存放一些 SDK 库文件需要使用到的数据类型,可以看工程里边的01_GPIO_LED/05_led_c_nxp_sdk/cc.h · sumumm/imx6ull-bare-demo - 码云 - 开源中国 (gitee.com)

3. 其他文件

像led的GPIO配置,延时函数、时钟配置等与前边都是一样的,只是我们可以使用SDK中已经定义好的一些函数和结构体来实现,就不需要自己再定义了,这里就不详细说明了,大概了解就可以了。

4. 编译和下载

这里就跟前边一样了,这里就不再多说。