01-i.MX Pins Tool 的介绍
!i.MX Pins Tool 是 NXP 提供的一款用于配置 i.MX 系列处理器引脚复用和功能的工具。它可以极大地简化引脚复用的配置,尤其适用于像 i.MX6ULL 这样多功能引脚复杂的处理器。
i.MX Pins Tool 的主要功能
-
引脚复用配置:
- 允许用户直观地查看和配置每个引脚的功能。
- 支持引脚的复用选择(GPIO、I2C、UART、PWM、NAND 等)。
- 提供引脚冲突检测,防止多个功能分配到同一个引脚。
-
电气特性配置:
- 可以设置引脚的电气参数(如上下拉电阻、驱动能力、电平)。
- 配置 IOMUXC 控制寄存器(例如 SION 标志,用于强制输入)。
-
自动生成代码:
- 根据配置生成设备树文件(用于 Linux 内核)或 C 代码(适用于裸机/RTOS 开发)。
- 自动生成 IOMUX 配置函数,方便移植到项目中。
-
图形化用户界面:
- 提供直观的引脚分配界面,显示处理器引脚封装和功能布局。
- 易于导航,能够快速找到目标引脚。
-
芯片兼容性:
- 支持 NXP 的全系列 i.MX 处理器,包括 i.MX6、i.MX7、i.MX8 系列。
- 定期更新以支持新发布的处理器型号。
参考使用步骤
注意:下面的步骤只是参考使用步骤,看一看即可,并不是我的使用步骤,我主要是用这个生成设备树节点描述语句。
-
下载和安装 Pins Tool:
- 前往 NXP 官网下载最新版本的 i.MX Pins Tool。
- 支持 Windows 和 Linux 系统。
-
创建项目:
- 在工具中选择对应的处理器型号(如 i.MX6ULL)。
- 选择目标引脚封装(如 BGA196、BGA256)。
-
配置引脚:
- 浏览或搜索引脚,查看每个引脚的复用功能。
- 分配目标功能到对应引脚(如分配 GPIO、I2C、UART 等)。
- 配置电气特性(如上拉/下拉、驱动强度)。
-
检测冲突:
- 使用冲突检测功能,确保没有多个功能分配到同一个引脚。
- 根据提示解决冲突。
-
生成代码:
- 根据配置导出设备树文件或 IOMUX 初始化代码。
- 在项目中直接使用生成的文件。
-
验证和调试:
- 将生成的代码集成到固件或内核中。
- 验证引脚是否按预期工作。
i.MX Pins Tool 的优点
-
易用性高:
- 图形化界面直观,降低了手动配置寄存器的复杂度。
-
减少错误:
- 自动检查引脚冲突,避免人为配置错误。
-
节省时间:
- 自动生成代码和设备树,省去手动编写的繁琐步骤。
-
适应性强:
- 支持不同开发平台(Linux、RTOS、裸机)。
推荐场景
- 开发基于 i.MX 处理器的嵌入式系统时需要配置引脚。
- 多功能复用引脚的项目,尤其是需要使用 GPIO、I2C、UART、SPI 等外设时。
- 减少手动调试设备树和寄存器的时间。
02-安装并配置i.MX Pins Tool v6
百度网盘下载链接:
https://pan.baidu.com/s/1KZV8jAZ9YmmAleHFjoKzdQ?pwd=in75
安装完成后启动它,选择“打开一个现有的配置”:

IMX6ULL的配置文件的百度网盘下载链接:
https://pan.baidu.com/s/1CdhZvcKZiwhFCMTedOUmNw?pwd=79sy

选择好配置文件后点击右下角的“完成”。
载入之后的截图如下:

03-使用示例(配置某个引脚为GPIO口功能)
什么叫外设,什么叫信号,什么叫将外设信号路由至某个引脚
这里利用"i.MX Pins Tool"将GPIO5_IO03所在的引脚配置为GPIO功能,其实准确的说法叫做把某个引脚路由至外设GPIO5的信号gpio_io, 3上。
在左边导航栏的“外设信号”里找到GPIO5_IO03:

找到后选中它:

然后看工具下面的界面显示的信息:

注意:这里GPIO5被称为是芯片的外设,gpio_io, 3(即GPIO5的第3个GPIO口)被称为叫外设的信号,之所以这里的标题叫路由引脚,是指我们把<引脚编号为P10,引脚名称为SNVS_TAMPER3>的引脚路由至外设GPIO5的信号gpio_io, 3上,即GPIO5的信号gpio_io, 3由<引脚编号为P10,引脚名称为SNVS_TAMPER3>的引脚来承载。
上面这句话对不对,看下面这幅图中就知道了:

我们尝试下可不可以将GPIO5的信号gpio_io, 3由别的引脚来承载:

从截图中来看,是不可以的,也就是说GPIO5的信号gpio_io, 3只能由<引脚编号为P10,引脚名称为SNVS_TAMPER3>的引脚进行承载。
此时在工具的中间区域还显示了编号为P10的引脚在封装上的位置,如下图所示:

然后在工具右边的界面显示了将<引脚编号为P10,引脚名称为SNVS_TAMPER3>的引脚路由至外设GPIO5的信号gpio_io, 3上的相关代码:

可见,该工具提供了三种形式,分别为设备树描述文件的形式(对应的文件为“imx6ull-board.dtsi”)、C语句的形式(对应的文件为“iomux_config.c”)、头文件的形式(对应的文件为"iomux_config.h")。
生成的设备树节点描述语句解读
在这里,我们重点关注,也经常使用的是设备树描述语句,完整的内容如下:
要读懂下面的设备树描述语句,请看下我之前的博文:
https://blog.youkuaiyun.com/wenhao_ir/article/details/145060032
下面这段设备树描述语句的详细解读请参考我的另一篇博文:
https://blog.youkuaiyun.com/wenhao_ir/article/details/145119224
/***********************************************************************************************************************
* This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
* will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
**********************************************************************************************************************/
/*
* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
!!GlobalInfo
product: Pins v6.0
processor: MCIMX6Y2xxx08
package_id: MCIMX6Y2CVM08
mcu_data: i_mx_2_0
processor_version: 6.0.1
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
*/
/*
* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
BOARD_InitPins:
- options: {callFromInitBoot: 'false', coreID: ca7}
- pin_list:
- {pin_num: P10, peripheral: GPIO5, signal: 'gpio_io, 3', pin_signal: SNVS_TAMPER3}
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
*/
/dts-v1/;
#include "skeleton.dtsi"
#include "imx6ull-pinfunc.h"
#include "imx6ull-pinfunc-snvs.h"
/ {
model = "NXP i.MX 6ULL User Board";
compatible = "fsl,imx6ull-board", "fsl,imx6ull";
soc {
#address-cells = <1>;
#size-cells = <1>;
iomuxc: iomuxc@020e0000 {
compatible = "fsl,imx6ull-iomuxc";
reg = <0x020e0000 0x4000>;
};
iomuxc_snvs: iomuxc-snvs@02290000 {
compatible = "fsl,imx6ull-iomuxc_snvs";
reg = <0x02290000 0x4000>;
};
};
};
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&BOARD_InitPins>;
imx6ull-board {
BOARD_InitPins: BOARD_InitPinsGrp { /*!< Function assigned for the core: Cortex-A7[ca7] */
fsl,pins = <
>;
};
};
};
&iomuxc_snvs {
pinctrl-names = "default_snvs";
imx6ull-board {
pinctrl-0 = <&BOARD_InitPinsSnvs>;
BOARD_InitPinsSnvs: BOARD_InitPinsSnvsGrp { /*!< Function assigned for the core: Cortex-A7[ca7] */
fsl,pins = <
MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03 0x000110A0
>;
};
};
};
要读懂上面的设备树描述语句,请看下我之前的博文:
https://blog.youkuaiyun.com/wenhao_ir/article/details/145060032
上面这段设备树描述语句的详细解读请参考我的另一篇博文:
https://blog.youkuaiyun.com/wenhao_ir/article/details/145119224
代码预览窗口还以绿标显示了重点语句:

这个语句表示,将寄存器MX6ULL_PAD_SNVS_TAMPER3的值配置为0x000110A0就可以实现将<引脚编号为P10,引脚名称为SNVS_TAMPER3>的引脚路由至外设GPIO5的信号gpio_io, 3上了。即这样配置后,引脚编号为P10,引脚名为SNVS_TAMPER3的引脚就当成GPIO5_IO3来使用了。
还可设置引脚的上拉电阻值

一般情况下就用100K的默认值就可以。
3876

被折叠的 条评论
为什么被折叠?



