芯片端子的多路复用

2023-05-16

嵌入式软件的开发,经常要和芯片打交道,和个人电脑的通用平台的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(使用前将#替换为@)

芯片端子的多路复用 的相关文章

随机推荐

  • Error: Could not find or load main class org.apache.hadoop.fs.FsShell

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 错误 xff1a Error Could not find or load main class org apache had
  • centos 6.x安装squid

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 不设置用户认证 安装 安装 yum install squid yum install httpd 查看版本 rpm qa g
  • VMware清理vmdk文件,解决vmdk越来越大的问题

    目录 压缩 vmdk方法在虚拟机上操作在主机上操作 参考链接 问题 xff1a 主机是Windwos xff0c 安装了VMWare 在VMWare中安装了虚拟机Ubuntu操作系统 Ubuntu本身不大 xff0c 但是 vmdk很大 网
  • 安全-认证授权、数据脱敏

    一 认证授权 JWT xff1a JWT xff08 JSON Web Token xff09 是一种身份认证的方式 xff0c JWT 本质上就一段签名的 JSON 格式的数据 由于它是带有签名的 xff0c 因此接收者便可以验证它的真实
  • 树莓派4b 串口通信实现自发自收

    1 树莓派串口映射设置 运行以下命令 xff1a ls dev al 出现串口映射的情况 xff0c 但是此时是在默认状态下 xff0c serial0 就是GPIO14 15 是映射到ttyS0的 xff0c serial1 xff08
  • 按要求编写一个Java应用程序程序: (1)定义一个接口CanFly,描述会飞的方法public void fly(); (2)分别定义类飞机和鸟,实现CanFly接

    代码 第三题 xff1a 按要求编写一个Java应用程序程序 xff1a xff08 1 xff09 定义一个接口CanFly xff0c 描述会飞的方法public void fly xff08 2 xff09 分别定义类飞机和鸟 xff
  • plc热电偶模块模拟量数据波动原因

    要找到模拟数据波动的根本原因 可能是以下原因 您可能使用了自供电或隔离的传感器电源 xff0c 并且两个电源没有相互连接 xff0c 即模拟输入模块的电源接地和传感器的信号接地没有连接 这会产生上下振动的高共模电压 xff0c 从而影响模拟
  • C #Winform窗体自适应

    说明 xff1a Winform让窗体内的控件随着窗体的大小而改变 xff0c 而且能让指定的控件始终处于居中位置 封装成类 xff0c 直接拷贝过去即可 一 类源码如下 xff1a using System using System Co
  • Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)解决方案

    docker service Docker Application Container Engine Loaded loaded usr lib systemd system docker service enabled vendor pr
  • emWin - Movie篇

    STemWin版本 xff1a 544 xff08 ST购买了emWin的license xff0c 可以在ST芯片中使用emWin工具包 xff0c 就叫STemWin xff09 emWin开发工具包可以转换JPG BMP GIF等各种
  • 大规模集群故障处理

    我相信每一个集群管理员 xff0c 在长期管理多个不同体量及应用场景的集群后 xff0c 都会多少产生情绪 其实这在我看来 xff0c 是一个很微妙的事 xff0c 即大家也已经开始人性化的看待每一个集群了 既然是人性化的管理集群 xff0
  • ADRC调试经验(已调通)

    自抗扰控制的组成 有关自抗扰的相关内容 xff0c 韩老师在他的一系列论文中已经描绘的非常清晰了 xff0c 具体资料可以点击这里下载 其中对于TD和ESO这两个部分其实是比较好调节的 xff0c 很容易就能够获得很好的效果 比较难调节的参
  • 浏览器的同源策略

    https developer mozilla org zh CN docs Web Security Same origin policy 这篇翻译不完整 请帮忙从英语翻译这篇文章 同源策略限制了从同一个源加载的文档或脚本如何与来自另一个
  • centos简单解决报错-bash 未找到命令

    centos报错 bash 未找到命令 在使用纯净镜像的时候 经常找不到一些额外的命令 想用但是不知道怎么安装 拿telnet 和netstat 举例 telnet yum provides telnet 这里只需要 yum y span
  • [问题已处理]-docker build出来的镜像没有更新成功

    导语 xff1a 记录一下docker build镜像的坑 如果修改代码文件的话 xff0c docker build 有时候会不替换文件 xff0c 而会使用cache xff0c 导致代码文件没有更新 第一次构建镜像 产生了cache
  • [问题已处理]在docker中使用nohup

    导语 xff1a docker运行容器是否能使用nohup 以下是测试在不同的情况下使用nohup 先启动一个容器 仅看进程的pid号参考 docker run it rm ubuntu 16 04 bash sleep 5 amp amp
  • k8s-集群搭建的三种方式和区别,kubeadm、minikube,二进制包

    k8s 集群搭建的三种方式 xff0c 目前主流的搭建k8s集群的方式有kubeadm minikube xff0c 二进制包 kubeadm 是一个工具 xff0c 用于快速搭建kubernetes集群 xff0c 目前应该是比较方便和推
  • 精确算法、启发式算法、元启发式算法及增长方式浅析

    组合优化问题是通过用数学方法的研究去寻找离散事件的最优编排 分组 次序或筛选等 xff0c 其变量是离散分布的 对于结构化的组合优化问题 xff0c 其解空间的规模能够得到控制 xff0c 对于这样的问题 xff0c 使用精确算法就可以求得
  • 重构一个快不可维护的项目

    历史原因 xff0c 接手了一个一直堆业务逻辑 xff0c 没有重构过的项目 xff0c 简单看了一下代码就感觉麻头皮 xff0c 满目都是一个方法里面大段的代码 xff0c 阅读起来极度困难 可以合并的类没有合并 xff0c 导致一个请求
  • 芯片端子的多路复用

    嵌入式软件的开发 xff0c 经常要和芯片打交道 xff0c 和个人电脑的通用平台的CPU使用X86或X64架构不同 xff0c 嵌入式电子产品使用的主控芯片是各种各样的 xff0c 从8051单片机 xff0c 到ARM Cortex M