嵌入式软件的开发,经常要和芯片打交道,和个人电脑的通用平台的CPU使用X86或X64架构不同,嵌入式电子产品使用的主控芯片是各种各样的,从8051单片机,到ARM Cortex-M系列,再到ARM Cortex-A系列加Linux系统等。
PC的CPU架构比较统一,型号少,差异自然也小,而电子产品上用的芯片差异就很大,根据使用场景不同,需要不同的引脚或端子数目,同时集成了不同的片上资源,比如I2C、SPI、UART、USB等,并通过端子来将信号传递给外部或捕捉外部信号。
芯片上包含的端子或管脚(pin)是有限的,所以大部分的端子会有多个信号选项,比如可以作为I2C的clock信号,或者作为SPI的CS信号,或者作为AD转换的输入信号,或者作为普通GPIO等。就是让我们的IC可以将一个引脚(PAD)share给多个功能块(function block)。这种共享的实现方式,是将引脚的输入输出信号进行多路复用。
这些信号和端子的对应关系,是由IOMUX(input-output multiplexer)控制的,IO复用控制器。
IOMUX也用来配置端子的其他属性,比如电压档(3.3V / 1.8V)、驱动电流大小等。
这些芯片所接收或产生的信号,都属于外部信号,可以将它们按照模组(module instance)来分类,比如UART1, UART2,i2c1等。
下面以IMX6ULL芯片的某部分Muxing(等于multiplexing) Options为例:
在Chapter 4: External Signals and Pin Multiplexing。
Instance | Port | Pad | Mode |
I2C2 | SCL | CSI_HSYNC | ALT3 |
| | GPIO1_IO00 | ALT0 |
| | UART5_TX_DATA | ALT2 |
| SDA | CSI_VSYNC | ALT3 |
| | GPIO1_IO01 | ALT0 |
| | UART5_RX_DATA | ALT2 |
I2C2, 是芯片上4个I2C bus中的第二个,这个放在instance一列。
有两个信号,clock和data,这个是port,是指片上外设使用的信号。即对于I2C总线,使用SCL和SDA两个信号,这里的是芯片里集成的第二个I2C控制器。
这两个信号,可以分配到芯片的不同的端子上,比如SCL就有3个选择,可以选择分配三个引脚的某一个。
Pad指的是引脚或端子名字,是唯一的,命名方式可能是和module有关,也可能是GPIO编号命名,这个根据芯片的Datasheet的定义。
Mode表示的是这个Pad所选择的工作模式,具体支持多少种要以芯片手册为准,比如ALT0 ~ ALT7(Alternative),就是一个Pad最多可以选择对应8种不同的信号。这个ALT数值可以在寄存器里设定,来配置端子对应于不同的信号。
我们注意到,一个PAD加上一个Mode唯一确定了一个引脚的工作状态,表明当前要用于某个信号。
以上面的例子,I2C2的SCL信号,可以选择UART5_TX_DATA这个引脚的ALT2模式,表示这个引脚用于I2C2控制器的SCL信号,这就是一个完整的IOMUX配置项。
我们再看一下以GPIO功能为分组的IOMUX配置:
Instance | Port | Pad | Mode |
GPIO1 | IO0 | GPIO1_IO00 | ALT5 |
| IO1 | GPIO1_IO01 | ALT5 |
| IO2 | GPIO1_IO02 | ALT5 |
| IO3 | GPIO1_IO03 | ALT5 |
| ... | ... | ... |
| IO27 | UART3_RTS_B | ALT5 |
| IO28 | UART4_TX_DATA | ALT5 |
| IO29 | UART4_RX_DATA | ALT5 |
| IO30 | UART5_TX_DATA | ALT5 |
| IO31 | UART5_RX_DATA | ALT5 |
这里就看到,PAD名字有的是以GPIO号命名,有的是以Module信号命名。
上面提到的UART5_TX_DATA这个PAD,对应的是GPIO1的第30号Pin,而作为GPIO的功能来使用,选择的就是ALT5模式。
关于多路复用功能,在硬件上包含IOMUX(实现多路复用的逻辑组合,a basic IOMUX cell)和IOMUX_CTL(多路复用控制器,控制信号选择、端子设置等)。
下面的图显示了一个简单的Soc框图,两种端子复用的情况:
第一个是通常的端子复用例子:
Module A, Module B,和Module GPIO 通过IOMUX共享同一个端子,复用配置通过IOMUX_CTL来控制。
第二个是没有使用复用的例子:
端子由Module C专用,信号在Module C和端子之间直接联通,没有IOMUX cell参与。
如图显示的这款芯片的多路复用功能,每个IOMUX cell最多支持8个模式(muxing modes (ALT0–ALT7)),表示每个pin最终可以由8个信号共享。
还可以看到IOMUX_CTL分为控制Input select的,PAD control的,还有MUX control的。
(完)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)