一文读懂Linux下如何访问I/O端口和I/O内存

2017-12-25 13:58:36 来源:嵌入式ARM
标签:

 

一、I/O端口
端口(port)是接口电路中能被CPU直接访问的寄存器的地址。几乎每一种外设都是通过读写设备上的寄存器来进行的。CPU通过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。

 

二、IO内存
例如,在PC上可以插上一块图形卡,有2MB的存储空间,甚至可能还带有ROM,其中装有可执行代码。

 

 

三、IO端口和IO内存的区分及联系
这两者如何区分就涉及到硬件知识,X86体系中,具有两个地址空间:IO空间和内存空间,而RISC指令系统的CPU(如ARM、PowerPC等)通常只实现一个物理地址空间,即内存空间。

 

内存空间:内存地址寻址范围,32位操作系统内存空间为2的32次幂,即4G。

IO空间:X86特有的一个空间,与内存空间彼此独立的地址空间,32位X86有64K的IO空间。

IO端口:当寄存器或内存位于IO空间时,称为IO端口。一般寄存器也俗称I/O端口,或者说I/O ports,这个I/O端口可以被映射在Memory Space,也可以被映射在I/O Space。

IO内存:当寄存器或内存位于内存空间时,称为IO内存。


四、外设IO端口物理地址的编址方式
CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped),另一种是内存映射方式(Memory-mapped)。而具体采用哪一种则取决于CPU的体系结构。

 

1、统一编址

RISC指令系统的CPU(如,PowerPC、m68k、ARM等)通常只实现一个物理地址空间(RAM)。在这种情况下,外设I/O端口的物理地址就被映射到CPU的单一物理地址空间中,而成为内存的一部分。此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要设立专门的外设I/O指令。


统一编址也称为“I/O内存”方式,外设寄存器位于“内存空间”(很多外设有自己的内存、缓冲区,外设的寄存器和内存统称“I/O空间”)。


2、独立编址

而另外一些体系结构的CPU(典型地如X86)则为外设专门实现了一个单独地地址空间,称为“I/O地址空间”或者“I/O端口空间”。这是一个与CPU地RAM物理地址空间不同的地址空间,所有外设的I/O端口均在这一空间中进行编址。CPU通过设立专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元(也即I/O端口)。与RAM物理地址空间相比,I/O地址空间通常都比较小,如x86 CPU的I/O空间就只有64KB(0-0xffff)。这是“I/O映射方式”的一个主要缺点。


独立编址也称为“I/O端口”方式,外设寄存器位于“I/O(地址)空间”。


3、优缺点

独立编址主要优点是:

1)I/O端口地址不占用存储器空间;使用专门的I/O指令对端口进行操作,I/O指令短,执行速度快。

2)并且由于专门I/O指令与存储器访问指令有明显的区别,使程序中I/O操作和存储器操作层次清晰,程序的可读性强。

3)同时,由于使用专门的I/O指令访问端口,并且I/O端口地址和存储器地址是分开的,故I/O端口地址和存储器地址可以重叠,而不会相互混淆。

4)译码电路比较简单(因为I/0端口的地址空间一般较小,所用地址线也就较少)。


其缺点是:只能用专门的I/0指令,访问端口的方法不如访问存储器的方法多。

 

统一编址优点:

1)由于对I/O设备的访问是使用访问存储器的指令,所以指令类型多,功能齐全,这不仅使访问I/O端口可实现输入/输出操作,而且还可对端口内容进行算术逻辑运算,移位等等;

2)另外,能给端口有较大的编址空间,这对大型控制系统和数据通信系统是很有意义的。


这种方式的缺点是端口占用了存储器的地址空间,使存储器容量减小,另外指令长度比专门I/O指令要长,因而执行速度较慢。


究竟采用哪一种取决于系统的总体设计。在一个系统中也可以同时使用两种方式,前提是首先要支持I/O独立编址。Intel的x86微处理器都支持I/O 独立编址,因为它们的指令系统中都有I/O指令,并设置了可以区分I/O访问和存储器访问的控制信号引脚。而一些微处理器或单片机,为了减少引脚,从而减 少芯片占用面积,不支持I/O独立编址,只能采用存储器统一编址。

 

 
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
 

 

继续阅读
毕业生嵌入式学习方法大汇总
毕业生嵌入式学习方法大汇总

最近经常有用人单位给我打来电话,问我这有没有嵌入式Linux方面的开发人员,他们说他们单位急需要懂得在嵌入式linux环境下的软件开发人员,我回答说,现在每年毕业的大学生那么多,还招不到合适的软件开发人员吗?他跟我说,毕业大学生虽然多,但大部分都能力不够,不能达到他们的工作的要求。

感测系统是工业物联网重要环节,如何保证安全?
感测系统是工业物联网重要环节,如何保证安全?

物联网系统攻击事件屡屡登上媒体头条,不断揭示网络、边缘节点、以与门道器存在的安全漏洞。 嵌入式感测系统是工业物联网的重要环节,一旦联网安全风险便大幅提升,但节点间的沟通有其必要,因此,节点安全的维护便格外重要。

一文带你走进十大可穿戴技术与功能

总体来说,Gartner预计可穿戴设备在未来二至五年将快速普及,从2015年的2.32亿台将跃升至2020年的4.77亿台,并带来617亿美元的盈利机会。2017年至2018年十大可穿戴技术与功能分列如下。

7个易操作技巧让你搞定嵌入式开发

成为一个正式的嵌入式开发工程师。它是一个艰辛的过程,需要开发人员维护和管理系统的每个比特和字节。从规范完善的开发周期到严格执行和系统检查,开发高可靠性嵌入式系统的技术有许多种。今天给大家介绍7个易操作且可以长久使用的技巧,它们对于确保系统更加可靠地运行并捕获异常行为大有帮助。

华虹有啥特殊工艺,能走在中国晶圆代工前端?

国泰君安分析师认为,受益于8寸晶圆供需持续紧张形势,华虹半导体有望保持中短期强劲增长势头。IoT、汽车电子、智能卡等下游应用猛增势头,同时晶圆尺寸转移导致8寸线产能吃紧

更多资讯
欧盟开除史上最高罚单,谷歌安卓系统依旧垄断

欧盟委员会作出正式裁决,对谷歌实施总额43亿欧元,折合50亿美元的罚款,该金额也创下了欧盟史上开出的单一罚单的最高纪录。

DRAM产业持续乐观,南亚科欲打入服务器存储器市场

存储器大厂南亚科2018年上半展现亮丽成长动能,并看好第3季供需持续稳定,下半年市场需求将稳定成长,南亚科总经理李培瑛表示,DRAM产业市况稳定,每年市场需求成长约15%~20%,但不代表短期内不会出现季节性变化,而美中贸易、国际专利诉讼或中兴事件等尚未看到短期冲击,但长期仍须观察是否过度发展或扩张,导致影响经济景气与终端消费市场。

嵌入式Linux工程师的成长经历,想做大牛应该具备如下素质

从嵌入式研发行业十年,认为学习就是要不断的吸纳知识,在研发过程中,经常会遇到一些问题,这种发现问题并解决问题的过程就是进步。下面是嵌入式Linux开发工程师的成长过程,希望对大家能有所启发。

基于MATLAB/SIMULINK的心电信号仿真方法
基于MATLAB/SIMULINK的心电信号仿真方法

心电信号主要频率范围为0.05"100Hz,幅度约为0"4mV,信号十分微弱。由于心电信号中通常混杂有其它生物信号,加之体外以500Hz工频为主的电磁场干扰,使得心电噪声背景较强,测量条件比较复杂,为医学研究、救治和教学带来一定困难。

合肥长鑫DRAM正式投片,国产存储春天要来了?

知情人士告诉记者,国产存储三大势力之一的合肥长鑫正式投片,产品规格为8Gb LPDDR4,这是国产DRAM产业的一个里程碑,加上早前宣布在3D NAND Flash取得进展的长江存储,国内企业在国际主流存储器上都取得了重大突破,为推动存储国产化掀开了重要一页。

Moore8直播课堂