LV005-NXP的SDK
一、I.MX6ULL 官方 SDK 包简介
1. SDK 简介
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 半导体,找到这个页面:

我们在 windows 下安装库的话,就选下边的 WIN 版进行安装就行。Linux 下的话就选第一个。他们只是安装程序不同罢了,安装后得到的 SDK 库文件是一样的。例如,在 windows 环境下,我们选择的第二个,下完后会得到这样一个可执行文件:
如果是选 linux,会得到一个.run 文件:
3. Windows 下的 SDK 安装
我们双击上边的 exe 可执行文件,就会进入 SDK 的安装流程,一直 next 下一步就好啦,然后在这里我们要选择一下安装的位置:

然后继续一直下一步就可以啦,安装完成后,我们来看一下安装目录下的文件:

我们就不重点学习这个 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 包我们就需要上面这三个文件,把这三个文件准备好,我们后面移植要用。
4. Linux 下的 SDK 安装
我们拷贝到 ubuntu 中后,直接./xxx.run 即可执行:
![]() | ![]() |
这里我们选择同意,然后就会看到右图的界面,右图这里是选择安装目录,前两个都是默认路径,想安装到哪里的话可以选择,不过我安装到这个路径下:
/home/sumu/7Linux/SDK_2.2_MCIM6ULL/这里我们选择创建即可,然后就是一直按照提示进行就行了。安装完毕会退出这个图形界面,并且给出提示:

然后我们来看一下都有哪些文件:

其实文件跟 windows 下是一样的。
二、SDK 目录、文件简介
主要后面还是在 linux 中开发,所以这里就以 linux 下的 SDK 为例。关于这个目录和文件的介绍可以看这个文件:

这个会有很多的说明。
sumu@sumu-virtual-machine:~/7Linux/SDK_2.2_MCIM6ULL$ tree -L 1
.
├── boards # 示例程序
├── CMSIS # CMSIS 标准文件
├── CORTEXA # 内核头文件
├── devices # 固件库
├── docs # 文档
├── EVK-MCIMX6ULL_manifest.xml #
├── LA_OPT_Base_License.htm
├── middleware # 中间件
├── rtos # 实时操作系统
├── SW-Content-Register.txt
└── tools # 烧写工具等
8 directories, 3 files2
3
4
5
6
7
8
9
10
11
12
13
14
15
1. boards:示例程序
SDK 的 boards 目录包含了 NXP 官方评估版 MCIMX6ULL-EVK 的各种示例程序。例如,下图是“boards/evkmcimx6ull”目录。

这些文件夹的说明如下:
- demo_apps:包含了一些应用范例,如串口打印“hello world”、使用 lwip 协议栈进行网络通讯等内容
- driver_examples 包含了 i.mx6 主要片上外设的使用范例。
- project_template 包含了官方示例使用的一些必备文件,这些文件主要是针对官方评估板做了一些引脚定义、时钟配置等功能。
- rtos_examples 包含了使用 FreeRTOS 实时操作系统的应用范例。
- usb_examples 包含了各种 USB 程序示例。USB 设备种类繁多且驱动复杂, 参考官方的这些示例能快速建立自己需要的 USB 应用。
2. CMSIS:包含 CMSIS 标准相关的文件
在 2.2 版本的 SDK 中,CMSIS 只有一个 GCC 相关头文件,使用到时我们将会详细学习。
3. CORTEXA:Cortex 相关头文件
SDK 目录下的 CORTEXA 文件夹包含了 cortexa 核适配 iar、gcc 的头文件。我们暂时不需要研究它们的作用。

4. devices:i.mx 固件库
SDK 中的 devices 目录包含的内容就是外设驱动固件库,该目录下的 MCIMX6Y2 文件夹即是针对开发板板载芯片对应的固件库:

4.1 MCIMX6Y2 目录下的全局文件
在 MCIMX6Y2 根目录下,可发现它直接包含一些文件,这些文件非常重要,是使用固件库编程最基础的部分。

(1)fsl_device_registers.h 文件:根据 CPU 型号包含相应的头文件(在开发环境的全局宏定义中应根据 CPU 指定芯片型号)。固件库通常可以兼容很多型号的芯片,不同的芯片部分寄存器定义、芯片特性等内容可能会有差异。通过这样的条件编译代码,就可以根据宏来包含不同的头文件,达到兼容不同芯片的目的了。当前仅支持一种芯片。
(2)MCIMX6Y2.h 文件:它主要是包含 i.MX6 芯片的各种寄存器定义和中断编号定义,是非常重要,非常基础的一个头文件。 会在前面 fsl_device_registers.h 文件中就根据 CPU 型号添加这个文件。
(3)MCIMX6Y2_features.h:此文件主要定义了一些关于 i.MX6 芯片特性的内容,例如我们想知道本芯片有多少个 IIS 外设或 UART 外设,可以在这个文件中找到。在前面的 fsl_device_registers.h 的内容中也包含了这个文件。
(4)system_MCIMX6Y2.c/h 文件:system_MCIMX6Y2 包含一个源文件和头文件。其中头文件 system_MCIMX6Y2.h 中主要包含时钟定义以及源文件相应函数的声明。而源文件 system_MCIMX6Y2.c 中则主要包含系统初始化和配置系统时钟的函数。
(5)MCIMX6Y2.xml 文件:MCIMX6Y2.xml 文件是 NXP 的开发环境需要的一些记录信息。
4.2 gcc 目录
Windows 版本的 SDK 还会有一个 iar 目录,在不同的编译平台下,使用汇编语言编写的启动文件、各种版本的分散加载文件的语法稍有区别,所以固件库把这些内容放在独立的文件夹。gcc 和 iar 文件夹分别对应 ARM-GCC 和 IAR 开发环境,这些文件夹内的文件功能是一样的。这里 linux 版本的 SDK 只有 gcc 目录,我们看一下:

这里都是一些链接文件。
4.3 drivers 目录
drivers 目录是固件库的主体,有时我们把这些文件称为外设驱动库,具体如下所示:

- 这些文件都使用 fsl_xxx.c/h 的命名格式,其中 xxx 是对应的片上 外设名字,如 ADC、GPIO、UART、I2C 等外设,大部分外设包含一个 C 源文件和头文件。
- 当使用到某个外设时,我们会把此处对应的外设驱动源文 件添加到工程中,加入编译,对于没有源文件的 IOMUXC 外设,则直接使用“#include”包含其头文件 fsl_iomuxc.h。
- 特别地,其中的 fsl_common.c 和 fsl_common.h 中的 common 不是 i.MX6 芯片 的某个外设名字,它表示绝大多数工程都会需要这些“共同”的内容,所以一般工程都 会添加这个 fsl_common.c 文件,并且可以通过 fsl_common.h 文件包含前面介绍的 fsl_device_regi sters.h 头文件,达到最终包含具有大量寄存器定义的 MCIMX6Y2.h 核心头文件的目的。
4.4 utilities 目录
utilities 是实用工具集的意思,此目录下包含了开发常用的一些调试工具,如串口输出、运行日志,通常我们都会把这些文件加到工程以方便开发。

5. docs:部分说明文档
回到 SDK 的根目录,打开它的 docs 文件夹,可见到文件夹中包含如下图中的内容:

这目录下有个《Getting Started with MCUXpresso SDK for i.MX 6ULL Derivatives》文件,它介绍了使用官方评估板时的基础使用步骤。文件夹 lwip、rtos、usb、分别保存对应的说明文档。文件夹 MCUXpresso SDK API Reference Manual_MCIMX6Y2 保存有.html 格式的 SDK API 接口函数说明文档。
6. middleware:中间件
SDK 中的 middleware 文件夹主要包含一些中间层软件,即这些软件常为应用层提供一些协议、架构上的支撑,它的主要部分又与芯片底层的硬件外设驱动(前面 drivers 目录中的文件)联系不甚紧密,是不同芯片之间通用的一些构件:

- fatfs :这是一个嵌入式常用的文件系统,有了文件系统后能更好地管理存储器以及使用通用的文件形式来访问存储器。
- lwip :这是嵌入式常用网络 TCP/IP 协议栈,使用协议栈可以方便地接入网络。
- sdmmc :它是遵照 SDIO 协议编写的集成识别、读写 SD 存储卡功能的驱动。
- usb :包含了遵照 USB 协议编写的基本驱动,在它之上可方便地编写 USB 应用程序。
7. rtos:实时操作系统
SDK 目录下的 rtos 文件夹包含了 FreeRTOS 实时操作系统的源代码,位于“boards/evkmcimx6ull/rtos_examples”目录的 FreeRTOS 例程会使用到这里的源码,我们只需要知道源码再这里就可以了。

8. tools:开发工具
各个文件中间件的简要说明如下:

- cmake_toolchain_files :提供 cmake 工具,用于生成 arm gcc 编译器需要的 makefile 文件。
- imgutil :提供图片压缩工具。
- mfgtools 与 mfgtools-with-rootfs (Windows SDK 中会有这个):提供 MFG 批量下载工具,
9. 其它文件
在 SDK 的根目录下还包含了几个.xml、.txt、.htm 以及.bat 文件:

.xml 和 txt 文件它们主要是包含 SDK 第三方构件的一些版权、出处说明以及 EVK-MCIMX6UL 生成的一些说明信息,Windows 版本 SDK 中还会有 keilkill.bat 批处理文件用于清理编译程序生成的中间文件。

