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

news2024/11/15 8:24:18

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

平台内核
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.coloradmin.cn/o/132210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BeanFactory和Applicationcontext实现

1.容器接口 1.BeanFactory能做哪些事 1.什么是beanFactory 它是spring的核心容器 是ApplicationContext的父接口 ApplicationContext扩展实现都【组合了】beanFactory 2.BeanFactory的功能 明面上只有getBean()方法实际上控制反转、依赖注入、bean生命周期的各种功能都…

tslib-1.4在I.MX6ULL开发板上电容屏不能触摸问题

一、前言 在采用触摸屏的移动终端中,触摸屏性能的调试是个重要问题之一,因为电磁噪声的缘故,触摸屏容易存在点击不准确、有抖动等问题。Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能&#x…

ESP32-S3 >>> MicroPython 编程初探

今天买了一个ESP32-S3,打算试试在这上面进行MicroPython的编程(附资料网址)。 首先为了在ESP32上进行mp的编程,需要对其重新烧录固件。这就需要我们电脑安装好CH343驱动,然后找到适用于ESP32-S3的固件,利用…

Diffusion详解及PyTorch代码

首先附上几个大佬的讲解 lilianweng-diffusion-models 这篇博客借鉴了上述博客和视频,同时加上个人的理解整合了一下,整个推导过程非常详细,希望能使每个人都看懂 结合之前讲过的VAE和GAN模型,Diffusion Model和他们的区别就是…

Apache Struts2远程代码执行漏洞(S2-015)复现及修复方案

Apache Struts2远程代码执行漏洞(S2-015)介绍 Apache Struts 2是用于开发JavaEE Web应用程序的开源Web应用框架。Apache Struts 2.0.0至2.3.14.2版本中存在远程命令执行漏洞。远程攻击者可借助带有‘${}’和‘%{}’序列值(可导致判断OGNL代码两次)的请求…

LabVIEW​​共享​变量生命周期

LabVIEW​​共享​变量生命周期 共享​变量​生命​周期 ​所有​共享​变量​都是​项目​库​的​一部分。​SVE​将会​注册​项目​库​和​库​中​包含​的​共享​变量​(当​LabVIEW​需要​调​用​其中​某​个​变量​时)​。​默认​情况​…

AlphaGo简易版MuGo源码解析

文章目录前言源码实现MuGo的输入数据模型的搭建模型的训练参考链接结语前言 自从AlphaGo横空出世,战胜李世石后,AI围棋如雨后春笋一般遍地开花。阅读DeepMind的论文有时还是隔靴搔痒,只有钻到代码里,才能一探究竟。于是&#xff…

Arthas诊断追踪性能案例

文章目录1、什么是Arthas2、安装启动3、追踪流程背景:本次案例使用Windows操作系统进行本地环境演示(生产环境Linux同理) 案例:查询接口性能特别慢,通过Arthas追踪诊断链路中哪个步骤导致性能如此之慢 注意&#xff1a…

code review的思考和实践

使用方式 1.看名称效果图,有没有和自己想要的效果类似的 2.有的话,复制粘贴代码使用 3.也可以自己修改一下 4.css效果并不是特别难,只是有时候我们可能想不到 5.笔者空闲时间,会继续更新的哦,点赞关注不迷路**^_^** …

EMNLP 22:SetGNER: General Named Entity Recognition as Entity Set Generation

SetGNER: General Named Entity Recognition as Entity Set Generation **任务形式:**识别flat、nest和不连续实体。 **任务建模方式:**采用基于pointer的方式实现任务建模,文本序列中的每个word可以用tag表示,具体为&#xff1…

Java算法_LeetCode122:买卖股票的最佳时机II

LeetCode122:买卖股票的最佳时机II 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 …

有关于huggingface evaluate的使用

老版本Transformer的from datasets import load_metric,在新版本中被替换成了evaluate。 这个包挺难用的,而且不同版本的接口都有点不太一样,本博客以transformers4.18.0, evaluate0.4.0为例,示范一下如何使用evaluate进行常见的…

【LDF】线性判别函数(一)

基于判别函数的判别准则 对于ccc类分类问题:设 gi(x),i1,2,…,cg_i(\mathbf{x}), i1,2, \ldots, cgi​(x),i1,2,…,c, 表示每个类别对应的判别函数,决策规则为:如果 gi(x)>gj(x),∀j≠ig_i(\mathbf{x})>g_j(\mathbf{x}), \forall j \n…

[机器学习-概念新] 什么是欧式距离、标准化欧式距离、马氏距离、余弦距离

1.欧式距离(Euclidean Distance) 欧式距离源自N维欧氏空间中两点间的距离公式: 代码实践 from scipy import spatial vec1 [1, 2, 3, 4] vec2 [5, 6, 7, 8] euclidean spatial.distance.euclidean(vec1, vec2) print(euclidean) 2.标准化欧式距离(S…

狂揽两千星,速度百倍提升,高性能Python编译器Codon开源

这个高性能 Python 编译器具有支持 Python 众多语法、完美互通其他框架等优点。 众所周知,Python 是一门简单易学、具有强大功能的编程语言,在各种用户使用统计榜单中总是名列前茅。相应地,围绕 Python,研究者开发了各种便捷工具&…

G1垃圾回收

目录一、G1垃圾回收器G1垃圾回收阶段(3个)① Young Collection② Young Collection CM③ Mixed CollectionYoung Collection 跨代引用RemarkG1—垃圾回收器优化字符串去重类卸载巨型对象动态调整阈值一、G1垃圾回收器 定义: Garbage First&…

lanmp环境搭建,你需要一次独立安装来深入了解各个软件

一,安装Apache yum install httpd -y,安装apache,版本为2.4.6,最新为2.4.9。 cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak; vim /etc/httpd/conf/httpd.conf (默认唯一) 端口改为8000,不能与Ngin…

File类的使用

java,File类File类静态成员变量构造方法常用方法用于创建、删除文件/文件夹的方法用于遍历文件/文件目录的方法文件过滤器方法File类 Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。 File对象代表磁盘…

数据分析的大体思路

目录标题数据分析企业数据的分析的三个方向:离线分析(Batch Processing)实时分析(Real Time Processing |Streaming):机器学习(Machine Learning)数据分析的流程明确分析的目的和思路…

JVM调优基本概念

1、jvm组成以工作流程 jvm组成 类装载器、运行时数据区(内存模型)、字节码执行引擎 工作大致流程 首先我们的java类编译成class类文件,当我们的class文件开始执行,我们的虚拟机便开始工作。 类加载器将class加载到运行时数据区…