首页
学习
活动
专区
圈层
工具
发布

【Linux 内核 内存管理】内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )

文章目录 一、物理地址空间 二、外围设备寄存器 三、外围设备寄存器物理地址 映射到 虚拟地址空间 一、物理地址空间 ---- " 物理地址空间 “ 是 CPU 处理器 在 ” 总线 " 上 访问内存的地址...---- CPU 处理器 访问 " 外围设备 “ 是通过 ” 外围设备控制器 " 的 " 寄存器 " 实现的 ; 处理器芯片 中的 寄存器 分为 3 大类 : 控制寄存器 状态寄存器 数据寄存器...外围设备寄存器 有 2 种 编址方式 : ① I/O 映射方式 , I/O-Mapped ② 内存映射方式 , Memory-Mapped 外围设备寄存器 一般是 连续编址 的 , 三、外围设备寄存器物理地址...映射到 虚拟地址空间 用户空间 的 应用进程 , 访问 " 外围设备寄存器 " 只能通过 " 虚拟地址 " 实现 , Linux 内核 提供了 相关 API 函数 , 将 " 外围设备寄存器 “ 对应的...” 物理地址 “ 映射到了 ” 虚拟地址空间 " 中 ;

3.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    HDMI发送器学习——SII7170

    在I2C模式下,该芯片作为从机方,支持400kHz的通信速率;I2C寄存器配置能够覆盖外部管脚配置,同时能够提供额外的控制能力。...模式该管脚才有效,处于I2C模式时该管脚的功能被PD寄存器位取代,在I2C模式时需要被拉低。...添加图片注释,不超过 140 字(可选)当Sil7170处于I2C模式时:RST/ISEL管脚应该接低PD寄存器位(I2C寄存器地址0x8的位0)应该写1I2C寄存器配置默认24-bit模式和LCM关闭...仅使用SCL时钟就可以对I2C地址从0x00到0x0F的寄存器进行读写操作。该I2C的7位地址是0x70,对I2C进行读写操作时需要先向I2C地址的bit0写入0使能写操作,写入1使能读操作。...添加图片注释,不超过 140 字(可选)寄存器位域说明,这里就不具体的翻译解释了,大家用到时候再自己研究一下,我大概率不会使用I2C模式对这块HDMI的发送器进行配置了,应该会使用strap-controlled

    29000

    SoC系统物理地址空间布局的决定性因素

    这些地址往往是硬编码在硬件中的,例如某些外设的寄存器地址是固定的。 板级设计决定了如何将物理地址空间分配给板上的外设、扩展存储器等硬件资源。这里涉及到PCB上的内存、外设连接方式。...设备树文件用于描述嵌入式系统中硬件资源的具体分布,包括外设的地址映射。 这些信息最终由操作系统的设备驱动程序解释,并显示在类似/proc/iomem这样的文件中。...设计时需要为各种外设(如UART、I2C、SPI控制器等)预留地址空间,通常这些是硬件预先定义的。 SoC的数据手册或参考手册会指定不同外设的地址范围。...例如,DDR的起始地址、外设控制器的寄存器地址等都由处理器的数据手册规定,这些通常在硬件设计阶段就确定了。 3 添加外设时的地址布局如何确定? 在嵌入式系统中,设备树描述了硬件的物理地址布局。...新添加的外设可以通过设备树文件配置,将外设的寄存器地址映射到物理地址空间的某个空闲区域。 设备树中的地址映射配置会被内核读取,并展示在/proc/iomem中。

    18900

    Linux 设备和驱动的相遇

    2.展开 i2c 设备 有经验的小伙伴知道在写 i2c 控制器的时候肯定会调用 i2c_register_adapter() 函数,该函数的实现如下(kernel/drivers/i2c/i2c-core.c...这样就完成了 spi 设备的注册。 各级设备的展开 学到这里相信应该了解设备的硬件信息是从设备树里获取的,如寄存器地址、中断号、时钟等等。...接下来我们一起看下这些信息在设备树里是怎么记录的,为下一节动手定制开发板做好准备。 1.reg 寄存器 ?...我们先看设备树里的 soc 描述信息,红色标注的代表着寄存器地址用几个数据量来表述,绿色标注的代表着寄存器空间大小用几个数据量来表述。...ranges 代表了 local 地址向 parent 地址的转换,如果 ranges 为空的话代表着与 cpu 是 1:1 的映射关系,如果没有 range 的话表示不是内存区域。

    2.6K40

    SoC接口技术之低速接口

    4、I2C 1.名词解释 I2C总线全称Integrated Circuit,中文名I方C总线。 2. 历史由来 I2C 总线是由 Philips 公司开发的一种简单、双向二线制同步串行总线。...3.应用场景 I2C总线大量用于Host与外部设备的连接,简化了系统布线。I2C是双向二线制同步串行总线,每次可传输NByte数据,支持100kbps/400kbps/3.4Mbps/5Mbps速率。...I2C总线包含两条信号线,串行数据SDA和串行时钟SCL。I2C的一个总线上可以挂在多个主机和多个设备,每次数据传输都是由主机发起,且由主机提供时钟。 4....读和写数据 除了基本的读写,I2C 通讯更常用的是复合格式,即第三幅图的情况,该传输过程有两次起始信号(S)。...5、CAN 1.名词解释 CAN总线全称Controller Area Network,中文名控制器局域网络。

    1.5K21

    STM32的I2C框图详解及通讯过程

    配置I2C 的CCR 寄存器可修改通讯速率相关的参数:   可选择I2C 通讯的“标准/快速”模式,这两个模式分别I2C 对应100/400Kbit/s 的通讯速率。   ...数据控制逻辑   I2C 的SDA 信号主要连接到数据移位寄存器上,数据移位寄存器的数据来源及目标是数据寄存器(DR)、地址寄存器(OAR)、PEC 寄存器以及SDA 数据线。...当STM32 的I2C 工作在从机模式的时候,接收到设备地址信号时,数据移位寄存器会把接收到的地址与STM32 的自身的“I2C 地址寄存器”的值作比较,以便响应主机的寻址。...在外设工作时,控制逻辑会根据外设的工作状态修改“状态寄存器(SR1 和SR2)”,我们只要读取这些寄存器相关的寄存器位,就可以了解I2C的工作状态。...表示数据寄存器为空;   (3) 以上步骤正常执行并对ADDR 位清零后,我们往I2C 的“数据寄存器DR”写入要发送的数据,这时TXE 位会被重置0,表示数据寄存器非空,I2C 外设通过SDA 信号线一位位把数据发送出去后

    2.1K10

    STM32之GPIO输出与输出

    我们还可以使用GPIO来模拟通信协议,比如I2C,SPI或者某个芯片特定的协议,我们都可以使用GPIO的输出模式来模拟其中中输出时序部分」 1.2GPIO基本结构 在STM32中,所有的GPIO都是挂载在...第③种方式就是读写STM32中的位带区域,这个位带的作用就和STM32中的位寻址的作用差不多,在STM32中,有一段区域映射了RAM和外设寄存器所有的位,读写这段地址中的区域,就相当于读写所映射位置的某一位一样...这个开漏模式可以作为通信协议的驱动方式,比如I2C通信的引脚,就是使用的是开漏没事,在多机通信的模式下,这种模式可以避免多个设备之间互相干扰,开漏模式还可以用于输出5V的电平信号,用于兼容一些5V的通信设备...5 复用推挽 (Alternate Function Push-Pull) 将引脚配置为复用功能,如UART、I2C等,并以推挽方式输出。...对于像I2C这样的通信协议,通常会使用输出开漏或复用开漏模式,因为这些协议通常需要外部上拉电阻来确保总线处于正确的电平。

    67310

    手把手教你使用 i2c-tools

    i2c-tools 工具是一个专门调试 i2c 的,开源,可获取挂载的设备及设备地址,还可以读写 I2C 设备寄存器。 调试新的设备驱动时,难免要反复修改寄存器,然后看结果现象。...i2cdetect:用于扫描 i2c 总线上的设备,并显示地址 i2cset:设置i2c设备某个寄存器的值 i2cget:读取i2c设备某个寄存器的值 i2cdump:读取某个i2c设备所有寄存器的值...[Y/n] Y,不加参数y会有很多执行提示,可以帮助判断 r:写入后立即回读寄存器的值,并将结果与写入的值进行比较 i2cbus:总线编号 chip-address:i2c设备地址...data-address:i2c寄存器地址 value 要写入的值 mode:指定读取的大小,b字节,w字,s是SMBus块,i是i2c块 设置i2c-1上0x20器件的0x77...设备地址 data-address:i2c寄存器地址 mode:指定读取的大小,b字节,w字,s是SMBus块,i是i2c块 读取i2c-1上0x20器件的0x77寄存器值 .

    3K11

    Linux Regmap 子系统

    学习 I2C 和 SPI 驱动的时候,针对 I2C 和 SPI 设备寄存器的操作都是通过相关的 API 函数进行操作的。...这样 Linux 内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问 I2C/SPI 设备的时候,为此引入了 Regmap 子系统。...1、什么是 Regmap Linux 下大部分设备的驱动开发都是操作其内部寄存器,比如 I2C/SPI 设备的本质都是一样的,通过 I2C/SPI 接口读写芯片内部寄存器。...什么情况下会使用 regmap: ①、硬件寄存器操作,比如选用通过 I2C/SPI 接口来读写设备的内部寄存器,或者需要读写 SOC 内部的硬件寄存器。...2、regmap 设备访问 API 函数 不管是 I2C 还是 SPI 等接口,还是 SOC 内部的寄存器,对于寄存器的操作就两种:读和写。

    3.3K40

    第019课 I2C协议详解及裸机程序分析

    :: e.老师说下课(停止) 我们就使用这个简单的例子,来解释一下IIC的传输协议。...第002节_S3C2440的I2C控制器 在嵌入式系统里面的主控芯片一般都会有I2C控制器,要是没有可以根据I2C协议用GPIO管脚模拟,但是非常麻烦,我们要发送数据时,可以把数据放到某个寄存器,它就会自动的发出时钟...当我们想发送一个数据的时候,要设置某个寄存器启动传输,它也一样会产生时钟,然后从设备就会把数据通过SDA传到I2C控制器里面,组装进某个寄存器里面,最终寄存器会把接收到的8位数据返回给我们的程序,从这里可以看到...I2C控制器简化了I2C的操作。...(l)IICCON寄存器(Multi-masterIIC-buscontrol) IICCON寄存器用于控制是否发出ACK信号、设置发送器的时钟、开启,i2c中断,并标识中断是否发生。

    1.7K20

    树莓派学习-I2c通信

    前言 由于之前参加了学校的飞兆杯的比赛,题目是循迹小车,由于缺乏对于ldc1314芯片使用知识以及个人的能力原因,项目并没有做出来,但是还是学习了很多东西的。 其中以树莓派的I2C通信为最。...i2cdetect -y -a 1 其中2a就是我们的ldc1314模块的i2c通信地址 三、对i2c设备寄存器的读写 1、设备所有数据的读出 sudo i2cdump -y 1 0x2a -y 代表取消用户交互过程...0x1a 0x55 即可向设备地址为0x2a的0x1a寄存器地址写入0x55 -y 代表取消用户交互过程,直接执行命令 1 代表I2C设备号 0x2a 代表I2C设备地址 0x1a 代表寄存器地址...0x55 代表向寄存器写入的数据 3、寄存器数据读出 sudo i2cget -y 1 0x2a 0x1a 即可读出总线地址为0x2a设备的0x1a寄存器地址的数据 -y 代表取消用户交互过程,直接执行命令...1 代表I2C设备号 0x2a 代表I2C设备地址 0x1a 代表寄存器地址 4、对16位数据的读 在基本的命令后加上 w 即可实现 四、I2C编程 因为使用树莓派我一直使用的语言是Python,故i2c

    1.6K10

    MIPI CSI2学习(一):说一说MIPI CSI2

    表 2-1协议结构名词解释 名称 解释 应用层 即是处理原始图像数据的各种算法模块 组包/解包层 负责将数据按照一定的次序,切割成 8 比特数据。...图中涉及到的名词如表3-1所示: 表3-1 CSI2涉及到的各个引脚解释 名称 解释 DATA 1+ / DATA 1- MIPI 协议组包生成的差分模拟数据信号第二组 DATA 2+ / DATA 2...- MIPI 协议组包生成的差分模拟数据信号第一组 CLOCK+ / CLOCK- MIPI 协议组包生成的差分模拟时钟信号 SDA I2C 数据信号线 SCL I2C 时钟信号线 在典型的应用中发送端在完成对图像的各种处理后...与外部进行控制信号交互时,采用的是 I2C 接口,在 MIPI 的发送端使用的是 I2C 从端的 IP,MIPI CSI-2 接口的控制寄存器连接 I2C 的从端,这样外部接收装置可以通过 I2C 去配置...MIPI 发送端的内部寄存器,以此改变 MIPI CSI-2 接口内部状态机的持续时间和最后输出数据时的通道数,又或者在调试过程中读出这些寄存器,去做相应的检查,以判断发送端的工作状态,再通过接收端的现象来分析发送端是否工作在正常的状态

    2.9K40

    ESP32 DEVKILTv1(devkitv1)开发板全解析!!!(搭载芯片为ESP32D0WDQ6)

    这是它的功能框图,剩下的内容看了看又是知识盲区 ---- 重点说说I2C的功能,现在传感器拿出来不是I2C的就是SPI的。 I2C 是一个两线总线,由 SDA 线和 SCL 线构成。...ESP32 I2C 控制器可以处理 I2C 协议,腾出处理器核用于其它任务。 ---- ? 主机架构 ?...从机架构 I2C 控制器可以工作于 Master 模式或者 Slave 模式, I2C_MS_MODE 寄存器用于模式选择。 ?...总线时序图 ---- 可以的控制单元: • RAM:大小为 32 x 8 bit,直接映射到 CPU 内核的地址上,首地址为 (REG_I2C_BASE+0x100),I2C 数据 的每一个字节占据一个...用户需要置位 I2C_NONFIFO_EN 寄存器。 • 16 个命令寄存器 (cmd0 ~ cmd15) 以及一个 CMD_Controller:用于 I2C Master 控制数据传输过程。

    17.4K101

    张高兴的 .NET IoT 入门指南:(三)使用 I2C 进行通信

    (); // 向从设备中写入一段数据,通常 Span 中的第一个数据为要写入数据的寄存器的地址 public abstract void Write(ReadOnlySpan<byte...读取 向从设备写入要读取的寄存器的地址 这类似于数组的指针,需要先定位到相应的位置才能读取。...因为你不可能只向从设备写入寄存器的地址吧,所以通常会调用 Write() 方法。...比如 I2C 总线,你需要关注元件的地址、各个寄存器的地址、最大传输速率等等。 3. 关注该元件的通信的细节。有些设备的通信很简单,并不需要拐弯抹角,但还有一些设备需要发送一些额外的命令。...比如你在发送完寄存器地址后还需要紧接着发送一段命令,用于决定是读还是写该寄存器,返回数据时是按字节(byte)返回还是按字(word)返回等。 4. 关注各个寄存器的作用和配置。

    25610

    M41T11-RTC(实时时钟)

    提供SCL、SDA线,用于发送和读取数据,这里需要熟悉I2C协议;   从设备:M41T11时钟IC。内部有56Byte的NVRAM,前8个Byte寄存储找我们想要得到的数据。...(一)、M41T11引脚示意图及解释如下: ? ? 问题简单化了,我们只需要找到访问该时钟IC的方法,读取它的前8Byte即可解决问题。 ?...IC时,从地址为0xD0;当要读时钟IC中的数据时,从地址为0xD1; 值得注意的是,我的代码中没有体现,因为我的I2C内部实现了函数I2C_Send7bitAddress(SLAVE_ADDRESS,...Read mode: (1)发送slave address 0xD0; (2)发送时钟IC的寄存器地址; (3)想要得到的数据已经被传送后存到I2C的数据寄存器中,因此直接拿I2C->DR中的内容即可;...]为待写入的数据,RxBuffer[ ]为待读取的数据(即为I2C->DR的返回值);   I2C_Send()为发送数据函数,I2C_Read()为读取数据函数,详细实现见STM8单片机的I2C(TwoBoards

    1.1K10
    领券