i.MX8MP平台开发分享(IOMUX篇)- 硬件原理

news/2024/11/20 17:26:36/

专栏目录:专栏目录传送门

平台内核
i.MX8MP5.15.71

文章目录

    • 1.前言
    • 2.IOMUX原理
    • 3. 寄存器实例:UART1_RX
      • 3.1 PAD: UART1_RXD
      • 3.2 PAD: SD1_CMD
      • 3.3 PAD: SAI2_RXC
      • 3.4 Input select
      • 3.5 功能实现
    • 4.SION

1.前言

我们都知道,芯片包含数量有限的引脚,其中大部分有多种信号选择。这些信号到引脚和引脚到信号的选择是由输入输出多路复用器称为IOMUX。IOMUX也被用来配置其他引脚的特性,比如说电压水平和驱动强度等等。

2.IOMUX原理

以下面的MUX选项为例,Instance为芯片内部设备IP,Port为这个设备IP的引脚(在内部),Pad是芯片上我们能看到的引脚;Mode是指复用模式,最多支持8种复用模式。

image-20221227105756296

IOMUX有四类寄存器,它们分别是mux控制寄存器、pad控制寄存器,input选择寄存器和GPR通用控制寄存器。

对于模块的引脚输出功能,参考红色的路径。对于一个MUX单元来说,有6个模块的引脚连接到这个MUX单元,它们可能是模块1,2,3…6这6个模块中的某一根引脚。这个MUX单元连接到唯一的PAD,这个PAD就是我们在芯片外部能看到的引脚。现在我们想要让模块1的引脚输出信号,会遇到哪些问题?下面我们按照信号流动方向往前推,从红色路径可以看到,首先是会遇到MUX单元,这里有6个信号混合,需要设置这个MUX寄存器让其选中输出我们想要的信号。现在这个PAD已经链接到了模块1的引脚,然后我们也许还需要配置这个输出引脚的上下拉和电压值,这个时候就需要配置PAD控制寄存器。最后我们想要的信号就从芯片内部走出来了。

iomux.drawio

对于模块的引脚输入功能,参考蓝色的路径。现在模块1想从上面相同的外部引脚获取输入信号,那么这个信号又该如何从芯片外部流入内部的模块1呢?首先会经过PAD,然后又会经过MUX单元(这里的MUX单元和上面是反向的),这里我们也还需要设置MUX寄存器,经过MUX单元后,会来到INPUT SELECT输入选择单元。对于这个输入选择单元来说,链接有多个模块引脚。我们则需要配置这个输入选择寄存器,选择数据输入的MUX单元。

上面的引脚输入功能,我们称之为菊花链。对于模块X的引脚输入,由INPUT SELECT输入选择寄存器控制输入源,这个输入源来自多个IOMUX单元,比如cell1,cell2和cell3都能将外部信号输入到模块X的输入引脚。

image-20221227125627485

使用不同的PAD,对应不同的MUX控制寄存器。

PAD命名规则:IOMUXC_SW_PAD_CTL_PAD_,

MUX命名规则:IOMUXC_SW_MUX_CTL_PAD_

Input select寄存器命名规则比较复杂,一般是IOMUX___SELECT_INPUT ,例如RX引脚的输入选择寄存器就是IOMUXC_UART1_UART_RXD_MUX_SELECT_INPUT。

3. 寄存器实例:UART1_RX

下面以串口1的TX和RX引脚为例,对于TX引脚,可以选择三个PAD,UART1_RXD,SD1_CMD和SAI2_RXC;对于RX,可以选择UART1_TXD,SD1_CLK和SAI2_RXFS。

image-20221227131732714

3.1 PAD: UART1_RXD

PAD电气属性控制寄存器:IOMUXC_SW_PAD_CTL_PAD_UART1_RXD,MUX控制寄存器:IOMUXC_SW_MUX_CTL_PAD_UART1_RXD。

3.2 PAD: SD1_CMD

PAD电气属性控制寄存器:IOMUXC_SW_PAD_CTL_PAD_SD1_CMD,MUX控制寄存器:IOMUXC_SW_MUX_CTL_PAD_SD1_CMD。

3.3 PAD: SAI2_RXC

PAD电气属性控制寄存器:IOMUXC_SW_PAD_CTL_PAD_SAI2_RXC,MUX控制寄存器:IOMUXC_SW_MUX_CTL_PAD_SAI2_RXC。

3.4 Input select

RX引脚的输入选择寄存器:IOMUXC_UART1_UART_RXD_MUX_SELECT_INPUT。

3.5 功能实现

以PAD SD1_CMD为例分析RX功能的实现过程,电气属性寄存器就不分析了,对于MUX控制寄存器来说,MUX_MODE应该选择100,

image-20221227134615566

对于输入选择寄存器,DAISY应该选择001。

image-20221227134712195

4.SION

IOMUX有一个有限的选项可以覆盖默认的焊盘功能,并强制输入路径激活(ipp_ibe==1’b1),而不考虑相应模块驱动的值。这可以通过设置SION(软件输入开)位来实现。IOMUXC_SW_MUX_CTL寄存器中的SION(软件输入开启)位(如果有的话)设置为 “1”。

使用场景:

  1. LoopBack - 模块x驱动PAD,同时接收PAD的值作为输入。
  2. GPIO捕获 - 模块x驱动垫子,值由GPIO捕获。

http://www.ppmy.cn/news/8664.html

相关文章

ceph集群搭建

一、环境准备 1.1、服务器准备 操作系统服务器IP服务器规格centos7.6192.168.161.114C/8Gcentos7.6192.168.161.124C/8Gcentos7.6192.168.161.134C/8G 1.2、服务器环境准备 1.2.1 更改主机名并添加映射 更改主机名 [rootlocalhost ~]# hostnamectl set-hostname ceph01 ##或…

Allegro如果通过CNS Show命令查看走线的阻抗操作指导

Allegro如果通过CNS Show命令查看走线的阻抗操作指导 Allegro可以通过CNS show的命令快速查看走线的阻抗,省去通过规则管理器查看的时间,如下图 具体操作如下 选择Display命令选择Constraint

【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.13 抗锯齿

本节对应的视频讲解:B_站_视_频 https://www.bilibili.com/video/BV1YP4y1B7Ex 本节讲解抗锯齿效果 前面实现的效果中,仔细观看能看到明显的锯齿的效果,如下: 此时,可以增加抗锯齿的效果。 1. 关联信号槽 首先&…

[JavaEE]线程的状态与安全

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1. 线程状态 1.1 观察线程的所有状态 1.2 线程的…

linux常用命令(六)- 文件属性查看

查看文件类型 - file file命令用于辨识文件类型。 语法 file [-bcvz] [文件或目录...]b:列出辨识结果时,不显示文件名称。c:详细显示指令执行过程,便于排错或分析程序执行的情形。v:显示版本信息。z:尝试…

c++构造和析构

1.构造函数 1.构造函数特性 构造函数名字和类名相同构造函数没有返回值(void有返回值,返回值为空)不写构造函数,每一个类中都存在默认的构造函数,默认的构造函数是没有参数的default显示使用默认的构造函数delete删掉默认函数当我们自己写了…

C++类继承

1、简单的基类 从一个类派生出令一个类时,原始类称为基类,继承类称为派生类。 class TableTennisPlayer { private:string firstname;string lastname;bool hasTable;public:TableTennisPlayer(const string &fn "none", const string …

2023.01/1801. 积压订单中的订单总数

1801. 积压订单中的订单总数 题意: 给你一个二维整数数组 orders ,其中每个 orders[i] [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。 订单类型 orderTypei 可以分为两种: 0 表示这是一批采购订单 buy …