IO接口基础知识

一、基本概念

IO接口:CPU与IO设备之间的桥梁

1.IO接口分类

  • 专业接口:连接专用设备,常用附加卡的形式来实现
  • 通用接口:基本的输入输出接口,如并行口,串行口(外设和接口一侧)

2.IO接口组成

为了实现下图功能,IO接口通常由下面几部分组成

  • 数据缓冲单元:暂存CPU和外设交换的数据
  • 读写控制电路:接受CPU发出的命令,完成对接口内部寄存器的读写
  • 命令/状态单元:命令单元存放CPU发给接口的命令信息,状态单元存放接口的工作状态信息供CPU查询

3.IO接口功能

  1. 数据缓冲:实现高速CPU与慢速IO设备之间数据传送的同步
  2. 转换数据格式:如串行和并行数据格式之间的转换
  3. 信号量转换:如数字量与模拟量之间的转换
  4. 定时/计时功能:满足总线对数据传送的时序要求
  5. 进行地址译码和设备选择
  6. 传送控制命令和状态信息

4.IO接口编址方式

实际上是对IO接口中的IO端口进行编址

有了端口地址,CPU对外设的输入输出操作归结为对接口芯片各端口的读写操作

  • 统一编址:IO地址占用存储器的地址空间,无需专用的IO指令
  • 独立编址:IO地址独立,不占用存储器空间,需要专业的IO指令来访问IO端口

5.IO数据传送的控制方式

  1. 程序控制方式:输入输出操作完全在程序控制下执行,用IN和OUT指令直接访问IO端口,不管IO设备准没准备好,无条件传送数据
  2. 查询方式:CPU使用指令查询IO接口状态,当IO接口准备好接受或发送数据时,数据传送才进行,否则CPU等待
  3. 中断控制方式:各忙各的,当外设需要进行输入输出时,向CPU发中断信号,CPU处理
  4. DMA控制方式(Direct Memory Access):DMA控制器控制存储器与高速IO设备之间直接进行数据传送

6.为什么要用IO接口

外部设备为什么一定要通过接口和主机总线相连?能不能将外设和CPU的数据总线、地址总线、控制总线直接相连?

原因①:模拟量和数字量的转换

外设功能多种多样,输入输出检测控制等等,所使用的信息可能是数字量(大多数),也可能是模拟量,如果是模拟量,需要通过A/D,D/A转换接口完成。

原因②:串行数据和并行数据的转换

外设的信息有串行有并行。串行设备只能收发串行信息,而CPU只能收发并行信息。这种双向转换需要串行接口来完成。

那并行外设是否可以不用接口呢?也不是。CPU要和多个外设打交道,而在同一时刻CPU通常只和一个外设交换信息,就是说,一个外设不能长期和CPU相连,只有被CPU选中的外设,才去收发数据总线。所以,即使是并行设备,也同样需要通过接口与总线相连。这种接口就是并行接口。

原因③:速度不匹配

接口可以对输入输出过程起一个缓冲和联络的作用

原因④:信号电平的大小不匹配

设置信号电平转换电路

原因⑤:时序不匹配

设置时序控制电路,来同步CPU与外设的工作

原因⑥:信号的驱动能力不够

二、CPU与外设交换的三种信息

三种信息都是通过数据总线传送。但在接口中,这三种信息进入不同的寄存器。

1.数据信息

①数字量

从键盘、磁盘驱动器等读入的信息或主机送给打印机、磁盘驱动器、显示器的信息。它们是二进制数据。

②模拟量

湿度、温度、压力、流量等等通过传感器先变成电压或电流,再经过放大,再经过A/D转换为数字量,送给计算器处理

③开关量

1位二进制数。电机的运转和停止,阀门的打开和关闭。

2.状态信息

反映外设的工作状态。READY或BUSY

3.控制信息

控制外设的启动和停止,工作方式等等。

三、接口与端口

  • 接口中,不同的寄存器就叫IO端口,每个端口有一个地址
  • 一般,接口中会有4个主要寄存器,即:数据输入寄存器,数据输出寄存器,控制寄存器,状态寄存器(数据端口、控制端口、状态端口)
  • 从原则上说,对这4个寄存器可通过不同的地址来访问。不过,因为控制寄存器和数据输出寄存器是只写的,状态寄存器和数据输入寄存器是只读的,所以,可用读信号和写信号(1位)来区分这两组寄存器,再用1位地址来区分2个只读寄存器或两个只写寄存器。因此,4个寄存器只用两个端口地址
相关推荐
QZ1665609515918 小时前
政务泛监测体系能力排行:AI 重塑监测边界,治理的颗粒度革命
网络·人工智能·安全·网络安全·政务
百度Geek说18 小时前
QCon上海2026:百度 SRE Agent 规模化落地实践解读
运维·自动化运维
叼烟扛炮18 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮18 小时前
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局
linux·网络·网络协议·php·tcpdump
星恒随风19 小时前
Linux网络编程:彻底理解IO多路复用select!从fd_set位图、读写就绪到手写TCP多客户端字典服务器
linux·服务器·网络
陈布衣20 小时前
MySQL(1)_MySQL 5.7.21 Linux 安装笔记
linux·笔记·mysql
xyzzklk21 小时前
在Open-WebUI中提升向量化速度
网络·人工智能·爬虫·ai·语言模型·自然语言处理·安卓
分布式存储与RustFS21 小时前
给 RustFS 桶加一层内存缓存:用 Alluxio 让热数据少跑一遍网络
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
Oiiouui21 小时前
linux服务器部署Logto后端与对应前端的实现
linux·服务器·前端·后端
ITKEY_1 天前
用 Emacs Dired 实现 em:退出文件管理器后,让终端自动切换目录
linux·服务器·emacs