IMX6ULL GPIO PAD引脚配置解析

文章详细介绍了如何解析GPIO中的电器属性配置参数,以MX6UL芯片SD卡CLK引脚为例,涉及二进制转换、寄存器配置以及各项参数如HYS、PUS、PUE、PKE、ODE、SPEED、DSE和SRE的功能解释。作者还分享了一个简单的解析程序来帮助理解这些配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近发现分析设备树中GPIO 中的电器属性配置参数比较麻烦

例如 :SD卡的CLK引脚电器属性配置:

MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x10071

一、需要先用计算器转成二进制

        00010000000001110001

二、然后对比芯片手册

HYS(bit16):使能迟滞比较器,当IO作为输入功能的时候有效,开启迟滞比较器可以滤掉一些干扰。这一位为0时禁止迟滞比较器,为1时使能迟滞比较器。

PUS(bit15:14): 设置上下拉电阻,一共有四种选项可以选择:

img

PUE(bit13): 当IO作为输入的时候,这一位用来设置IO使用上下拉还是状态保持器。当为0的时候使用状态保持器,当为1的时候使用上下拉。状态保持器在IO作为输入的时候才有用,顾名思义,就是当外部电路断电以后此IO口可以保持住以前的状态。

PKE(bit12):此位用来使能或者禁止上下拉/状态保持器功能,这一位为0时禁止上下拉/状态保持器,为1时使能上下拉和状态保持器。

ODE(bit11):开漏使能,当IO作为输出的时候,用来禁止或者使能开漏输出,这一位为0的时候禁止开漏输出,为1的时候就使能开漏输出功能。

SPEED(bit7:6):当IO用作输出的时候,此位用来设置IO速度。

img

DSE(bit5:3):当IO用作输出的时候用来设置IO的驱动能力,可以简单理解为IO口上串联的电阻大小,电阻越小驱动能力越强,总共有8个可选项:

img

SRE(bit0):IO翻转速度,为1时IO电平跳变时间更快,对应波形更陡;为0时IO电平跳变时间要慢一些,波形也更平缓。

自己随便写了个解析程序,现将输入的参数转出二进制输出,然后比对应寄存器的值,然后打印出电器属性:需要的可以自己下载;

./imx6ull_reg_parser 0x17049
argc == [2]
argv 0  == [./imx6ull_reg_parser]
argv 1  == [0x17049]
reg_val = 94281 [0x17049]
>>>>>>>>>. binary >>>>>>>> 
10111000001001001

binary_tmp = [10010010000011101000000000000000]
1001 0010 0000 1110 1000 0000 0000 0000 
Bit 0 = [1]:	IO翻转速度 配置:	@[IO电平跳变时间要慢一些,波形也更平缓]
Bit 1-2  RESERVER = [00]
Bit 3-5 = [100] 	驱动能力配置:电阻越小,驱动能力越强:	@[输出能力:R0/4;]
Bit 6-7 = [10]	当IO用作输出的时候,此位用来设置IO速度	@[中速 100M hz]
Bit 8-10 = RESERVER [000]
Bit 11 = [0]	开漏使能,作为输出口时,用来禁止或者使能开漏输出	@[禁止开漏输出]
Bit 12 = [1]	使能或者禁止上下拉/状态保持器功能	@[为1时使能上下拉和状态保持器]
Bit 13 = [1]	设置外部电路断电以后此IO口可以保持住以前的状态	@[使用上下拉
Bit 14 -15 = [10]: 	设置上下拉电阻,一共有四种选项可以选择:	@[100K 上拉]
Bit 16 = [1]	使能迟滞比较器,当IO作为输入功能的时候有效,开启迟滞比较器可以滤掉一些干扰	@[1: 使能迟滞比较器]
Bit 17 - 31 = RESEVER [00000000000000]

### IMX6ULL GPIO 配置及使用教程 #### 设备树配置 对于IMX6ULL,在`/linux-imx6ull-4.9.88`目录下,通过执行`build-dtb.sh`脚本能够生成设备树二进制文件(DTB)。该过程完成后,所得到的DTB文件需被烧录至开发板上以便使IO端口按照预设的方式工作于GPIO模式[^3]。 ```bash cd /path/to/linux-imx6ull-4.9.88 ./build-dtb.sh ``` #### GPIO初始化与操作 针对IMX6ULL平台上的GPIO操作主要包括但不限于读取和写入特定寄存器来改变引脚状态或是获取当前状态。例如,要访问某个GPIO端口的数据寄存器(GPIOx_DR),实际上是从对应的GPIOx_PSR寄存器获得数据,因为两者映射相同地址空间内的同一位置[^2]。 #### 上下拉电阻设置 当把IO定义成输入用途时,可以通过修改PAD配置中的PUE位(bit13)决定是否启用内部弱上拉/下拉电阻。如果希望激活此特性,则应将bit13设为高电平(即'1');反之则保持低电平('0')[^5]。 #### 实际应用案例——LED控制 下面给出一段简单的C语言代码片段用于点亮连接到指定GPIO管脚上的LED灯: ```c #include <fcntl.h> #include <unistd.h> int main() { int fd; // 打开并导出目标GPIO编号, 假定此处为7号针脚 system("echo 7 > /sys/class/gpio/export"); // 设置方向为输出 fd = open("/sys/class/gpio/gpio7/direction", O_WRONLY); write(fd, "out", sizeof("out")); close(fd); // 将逻辑高电平赋给GPIO7从而打开LED fd = open("/sys/class/gpio/gpio7/value", O_WRONLY); write(fd, "1", sizeof("1")); sleep(1); // 持续一秒 // 关闭LED lseek(fd, 0, SEEK_SET); write(fd, "0", sizeof("0")); close(fd); return 0; } ``` 上述程序展示了如何利用Linux下的/sys接口完成基本的GPIO编程任务,包括导出未使用的GPIO、设定其方向以及发送高低电平信号等动作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值