实验10 硬盘DMA编程

本文详细介绍了如何通过编程访问PCI-IDE控制器的配置空间,枚举PCI设备,以及硬盘DMA传输的过程。实验内容包括获取PCI-IDE配置、硬盘DMA读写操作,并给出了具体的实验步骤和示例代码。通过DMA方式,数据在内存和硬盘之间直接传输,避免了CPU的中转,显著提高了传输速度。
摘要由CSDN通过智能技术生成
 

    采用PIO方式访问硬盘,硬盘扇区数据的读写完全由CPU通过INOUT指令执行,一个扇区占512字节,需要256I/O操作,占用CPU资源。读取硬盘扇区时,每次I/O操作包括一个IN指令和一个内存写操作,CPU先读取16位数据到AX中,再将16位数据写入到内存中。写入硬盘扇区时,每次I/O操作则包括一个内存读操作和一个OUT指令。

使用DMA方式,硬盘读写由DMA控制,数据在内存和I/O端口之间直接传输,而不需要CPU中转,传输速度比PIO方式快,降低了CPU的开销。

10.1 获取PCI-IDE配置

早期的IDE控制器挂接在ISA总线上,而目前主板上的芯片组一般都集成了一个PCI-IDE控制器,支持两个IDE通道。PCI-IDE控制器支持DMA功能,能够在IDE通道和内存之间建立直接的数据传输,而不必通过CPU。也就是说,PCI-IDE控制器可以作为总线主控设备,从IDE接口中读出数据写入到内存中(读扇区),或者从内存中读出数据写入到IDE接口中(写扇区)

1. PCI-IDE控制器

如图10-1PCI-IDE控制器就像一座桥梁一样,一端连接PCI总线,另一端连接IDE设备,能够在控制器中的DMA的指挥下,通过PCI总线在内存和IDE设备之间传输数据。

CPU

PCI总线

内存

北桥、南桥

其它PCI设备

ATA设备

PCI-IDE控制器

IDE接口

2. PCI设备的配置空间

PCI具有即插即用的功能,支持自动的设备检测和配置。在系统启动时,操作系统扫描系统的各条PCI总线,枚举出总线上存在的PCI设备。操作系统读取PCI设备配置空间的寄存器,确定设备所需的地址空间、分配中断以及主设备对总线的访问要求等。

1)总线、设备、功能

系统可以最多连接256PCI 总线,每条PCI总线可以连接32个物理PCI设备。每个PCI设备可以包含一个到八个独立的PCI功能(即逻辑设备)

2)配置空间

对每一个功能,PCI设备都给它提供一个256字节的配置空间,由6432位的配置寄存器组成。

10-2显示了PCI功能配置空间中前面16个双字寄存器。这个区域的格式和用法由PCI规范定义,PCI设备必须按照PCI规范设置配置头区域有关字段。系统启动时,系统软件的配置程序读取配置头中的设备信息并根据设备的要求按照PCI规范配置设备。

31

16

15

0

 

设备ID

供应商ID

00H

状态寄存器

命令寄存器

04H

类代码

版本

08H

内建自测

配置头类型

延迟时间

Cache行大小

0CH

基地址寄存器0

10H

基地址寄存器1

14H

基地址寄存器2

18H

基地址寄存器3

1CH

基地址寄存器4

20H

基地址寄存器5

24H

卡总线指针

28H

子系统版本ID

子系统供应商ID

2CH

扩展ROM基地址寄存器

30H

保留

性能指针

34H

保留

38H

优先级请求

时间片请求

中断引脚

中断线

3CH

10-2  PCI配置空间头部的16个双字寄存器

供应商ID、设备ID、版本、类代码、子系统供应商ID、子系统版本ID,这6个寄存器用于识别设备类型,操作系统根据它们的内容,确定为设备装载哪个驱动程序。

•供应商ID:设备制造商的代码,由PCI SIG组织来分配。例如,值8086h代表Intel公司。

•设备ID16位,由设备制造商分配,表示设备类型。例如,2416h代表Intel 82801AA (ICHAA) AC'97 Modem Controller

•版本:8位,由设备制造商分配,表示设备的版本号。

•类代码:24位内容包含:基类型、子类型和可编程接口,每一项占1个字节。基类型代表设备的基本功能,设备子类型表示了该基类型中的设备的详细分类,可编程接口则表示该设备的寄存器编程接口。

·命令寄存器:提供了对设备响应和执行PCI访问能力的基本控制。

·状态寄存器:把功能的状态记录在PCI设备中。

·配置头类型:第6~0位定义了配置空间头部的格式(00H=普通PCI设备,01H=PCI桥,02H=CardBus)。第7位定义了设备是单功能设备(=0)还是多功能设备(=1)

·内建自测:BISTBuilt-In Self-Test)寄存器,可以由主设备和/或目标设备提供,设置后,设备可以实现内置自检。延迟定时器也叫时间片寄存器,它对于执行猝发交易的主设备是强制性(可读/可写)

·延迟时间:定义了以PCI时钟周期为单位的最小时间量,在这个时间片中,总线主设备只要起动一次新交易,就能保持总线所有权。起动交易后,总线主设备在每个时钟上升沿将延迟定时器减1

·Cache行大小:用于存储器写和使失效命令,指出系统以双字为单位的Cache行大小(例如,一该寄存器的值为08h,表示Cache行容量为8个双字即32字节)

·优先级请求:表示主设备访问总线的频度(多少时间访问总线一次,从仲裁器收到GNT #计算,250ns递增),决定总线仲裁器分配给主设备(假设仲裁器可编程)的优先级(以及仲裁器使用的仲裁方案)

·时间片请求:由总线主设备提供,表示主设备要达到好的性能而希望保持PCI总线所有权的时间,指出设备进行一个猝发周期需要多长时间(以250ns为单位)。

·中脚引脚:指出功能连接了哪一个中断请求引脚。值01h04h对应于PCI中断请求引脚INTA #INTD #

·中脚线:用于识别功能的PCI中断请求引脚(由中断引脚寄存器指定)连接到中断控制器的哪个输入端。

·基地址寄存器:为设备内的存储器和IO空间提供基地址的寄存器。第0位定义了该寄存器描述的是存储器(=0)还是I/O地址(=1)。存储器的基地址可以是64位的(2-1=10b),这时,使用2个基地址寄存器表示64位基地址。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值