Skip to content

Commit e2fedce

Browse files
author
shiguanghu
authored
Update Freescales_imx6配置IOMUX
1 parent 1f73662 commit e2fedce

File tree

1 file changed

+111
-8
lines changed

1 file changed

+111
-8
lines changed

pinctrl/Freescales_imx6配置IOMUX

Lines changed: 111 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
Freescales_imx6配置IOMUX
22

3-
i.mx6的Soc芯片提供IOMUX机制,就是用来解决引脚复用的问题。
4-
5-
需要的概念:
6-
1. Pad 对应的是Soc芯片上的引脚
7-
2. Signal 对应的是控制电机的功能
3+
imx6的Soc芯片提供IOMUX机制, 用来解决引脚复用的问题。
84

95
需要配置的寄存器:
106
1. Pad控制寄存器
117
2. Mux控制寄存器
128
3. Select Input寄存器
139

1410
配置IOMUX的必备工具:
15-
芯片原理图
16-
芯片软件手册
11+
原理图
12+
芯片手册
1713
内核源代码
14+
1815
--------------------------------
1916
配置步骤
2017
--------------------------------
@@ -42,7 +39,7 @@ i.mx6的Soc芯片提供IOMUX机制,就是用来解决引脚复用的问题。
4239
3. 查找软件手册(IOMUX功能配置)
4340
软件手册第36章, 介绍了IOMUX需要配置寄存器的所有信息。
4441

45-
根据三个寄存器的名称进行查找:
42+
根据三个寄存器的名称,进行查找:
4643
Pad的控制寄存器名称: SW_PAD_CTL_PAD_CSI0_DATA11
4744
Mux的控制寄存器名称: IOMUX_SW_MUX_CTL_PAD_CSI0_DATA11
4845
Select Input的寄存器名称: IOMUXC_UART1_UART_RX_DATA_SELECT_INPUT
@@ -132,3 +129,109 @@ IOMUX_PAD 定义:
132129

133130

134131
总结: 描述了从原理图查找指定引脚,到软件手册找到Mux,Pad,Sel_Input的寄存器配置信息,再到内核代码如何进行配置的全部--太复杂.
132+
133+
134+
135+
------------------------------------------------------------------------------------------------------------------------
136+
寄存器命名规则
137+
138+
在\arch\arm\plat-mxc\include\mach\iomux-v3.h中的第43行,说明了iMX6引脚配置的寄存器的一般命名规则
139+
140+
/*
141+
* buildIOMUX_PAD structure
142+
*
143+
* This iomux scheme is based around pads,which are the physical balls
144+
* on the processor.
145+
*
146+
* - Each pad has a pad control register(IOMUXC_SW_PAD_CTRL_x) which controls
147+
* things like driving strength and pullup/pulldown.
148+
* - Each pad can have but not necessarily doeshave an output routing register
149+
* (IOMUXC_SW_MUX_CTL_PAD_x).
150+
* - Each pad can have but not necessarily doeshave an input routing register
151+
* (IOMUXC_x_SELECT_INPUT)
152+
*
153+
* The three register sets do not have a fixedoffset to each other,
154+
* hence we order this table by pad controlregisters (which all pads
155+
* have) and put the optional i/o routingregisters into additional
156+
* fields.
157+
*
158+
* The naming convention for the pad modes is MX35_PAD_<padname>__<padmode>
159+
* If <padname> or <padmode> refersto a GPIO, it is named
160+
* GPIO_<unit>_<num>
161+
*
162+
* IOMUX/PAD Bit field definitions
163+
*
164+
* MUX_CTRL_OFS: 0..11 (12)
165+
* PAD_CTRL_OFS: 12..23 (12)
166+
* SEL_INPUT_OFS: 24..35 (12)
167+
* MUX_MODE + SION: 36..40 (5)
168+
* PAD_CTRL + NO_PAD_CTRL: 41..58 (18)
169+
* SEL_INP: 59..62(4)
170+
* reserved: 63 (1)
171+
*/
172+
173+
这个头文件中提到,每个复用管脚,最多有三个寄存器:
174+
175+
管脚控制寄存器:IOMUXC_SW_PAD_CTL_x, x代表某某管脚名称
176+
输出路由寄存器:IOMUXC_SW_MUX_CTL_PAD_x
177+
输入路由寄存器:IOMUXC_x_SELECT_INPUT
178+
179+
Datasheet中使用
180+
181+
182+
183+
管脚模式的命名规则为:MX6Q_PAD_<padname>__<padmode>
184+
185+
padname为管脚名,padmode为管脚模式。
186+
187+
如表1中,CSI0_DAT4为padname,取Signal为GPIO5_IO22是,padmode即为ALT5,则其复用管脚名称为MX6Q_PAD_CSI0_DAT4__GPIO5_IO22
188+
189+
Linux内核中使用
190+
191+
192+
2. 在内核中定义复用管脚的寄存器
193+
194+
\arch\arm\plat-mxc\include\mach\iomux-mx6q.h中
195+
196+
MX6Q_PAD_SD3_DAT6__GPIO_6_18的定义为
197+
198+
#define MX6Q_PAD_SD3_DAT6__GPIO_6_18 \
199+
(_MX6Q_PAD_SD3_DAT6__GPIO_6_18 |MUX_PAD_CTRL(NO_PAD_CTRL))
200+
其中
201+
#define MUX_PAD_CTRL(x) ((iomux_v3_cfg_t)(x)<< MUX_PAD_CTRL_SHIFT)
202+
typedef u64 iomux_v3_cfg_t;
203+
204+
#define MUX_PAD_CTRL_SHIFT 41
205+
#defineNO_PAD_CTRL (1 << 17)
206+
其中_MX6Q_PAD_SD3_DAT6__GPIO_6_18定义为:
207+
208+
#define_MX6Q_PAD_SD3_DAT6__GPIO_6_18 \
209+
IOMUX_PAD(0x0694, 0x02AC, 5,0x0000, 0, 0)
210+
211+
这个 IOMUX_PAD 宏是定义GPIO的关键宏,其原型为:
212+
213+
#defineIOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _sel_input_ofs, \
214+
_sel_input, _pad_ctrl)
215+
216+
IOMUX_PAD宏有6个参数,每个参数的意思是:
217+
218+
参数
219+
含义
220+
_pad_ctrl_ofs //控制寄存器的偏移地址(16进制)
221+
_mux_ctrl_ofs //MUX控制寄存器的偏移地址(16进制),用于选择引脚的功能
222+
_mux_mode //MUX模式,bit0~3,范围0~7
223+
_select_input_ofs //SELECT_INPUT寄存器偏移地址(16进制)
224+
_select_input //Daisy Chain模式,bit0~1,范围0~3
225+
_pad_ctrl: bits to be set in register
226+
_pad_ctrl_ofs for configuration selection
227+
228+
因此对应关系如下:
229+
0x0694 | 0x02AC | 0x5 | 0x0000 | 0x0 | 0x0
230+
----------------------------------------------------------------------------------------------------
231+
mux_ctrl_ofs | pad_ctrl_ofs |sel_input_ofs | mux_mode | sel_input | pad_ctrl
232+
233+
234+
映射关系:
235+
MX6Q_PAD_SD3_DAT6__GPIO_6_18 -> IOMUX_PAD(0x0694, 0x02AC, 5, 0x0000, 0, 0)
236+
237+
例如:MX6Q_PAD_SD3_DAT6__GPIO_6_18,管脚名(padname)为SD3_DAT6。

0 commit comments

Comments
 (0)