最近发现分析设备树中GPIO 中的电器属性配置参数比较麻烦
例如 :SD卡的CLK引脚电器属性配置:
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x10071
一、需要先用计算器转成二进制
00010000000001110001
二、然后对比芯片手册
HYS(bit16):使能迟滞比较器,当IO作为输入功能的时候有效,开启迟滞比较器可以滤掉一些干扰。这一位为0时禁止迟滞比较器,为1时使能迟滞比较器。
PUS(bit15:14): 设置上下拉电阻,一共有四种选项可以选择:
PUE(bit13): 当IO作为输入的时候,这一位用来设置IO使用上下拉还是状态保持器。当为0的时候使用状态保持器,当为1的时候使用上下拉。状态保持器在IO作为输入的时候才有用,顾名思义,就是当外部电路断电以后此IO口可以保持住以前的状态。
PKE(bit12):此位用来使能或者禁止上下拉/状态保持器功能,这一位为0时禁止上下拉/状态保持器,为1时使能上下拉和状态保持器。
ODE(bit11):开漏使能,当IO作为输出的时候,用来禁止或者使能开漏输出,这一位为0的时候禁止开漏输出,为1的时候就使能开漏输出功能。
SPEED(bit7:6):当IO用作输出的时候,此位用来设置IO速度。
DSE(bit5:3):当IO用作输出的时候用来设置IO的驱动能力,可以简单理解为IO口上串联的电阻大小,电阻越小驱动能力越强,总共有8个可选项:
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]