1.26k likes | 1.51k Views
第1 0 章 微型计算机总线. 10.1 总线技术概述 10.2 ISA 总线 10.3 PCI 总线与 PCI-Express 总线 10.4 USB 总线. 10.1 总线技术概述. 10.1.1 总线的标准 总线标准主要包括以下几个部分 : 机械结构规范 : 模块尺寸、总线插头、边沿联接器插座等规格及位置。 性能规范 : 总线每根线(引脚)信号名称与功能,它们相互作用的协议(例如定时关系)。 电气规范 : 每根信号线工作时的有效电平、动态转换时间、负载能力、各电气性能的额定值及最大值。. 10.1.2 总线的指标
E N D
第10章 微型计算机总线 10.1 总线技术概述 10.2 ISA总线 10.3 PCI总线与PCI-Express总线 10.4 USB总线
10.1 总线技术概述 10.1.1 总线的标准 总线标准主要包括以下几个部分: • 机械结构规范:模块尺寸、总线插头、边沿联接器插座等规格及位置。 • 性能规范:总线每根线(引脚)信号名称与功能,它们相互作用的协议(例如定时关系)。 • 电气规范:每根信号线工作时的有效电平、动态转换时间、负载能力、各电气性能的额定值及最大值。
10.1.2总线的指标 1. 总线宽度 • 同时传输的数据位数 • 位数越多,一次传输的信息就越多 • ISA总线宽度16位,EISA:16位,PCI:32位,PCI-2:64位。 2. 总线频率 • 总线通常都有一个基本时钟,总线上其他信号都以这个时钟为基准 • 这个时钟的频率也是总线工作的最高频率。时钟的频率越高,单位时间内传输的数据量就越大。 • ISA总线、EISA总线的时钟频率为8MHz,PCI总线为33.3MHz,PCI-总线2可达66MHz。
总线带宽与总线数据传输速率 带宽:总线上单位时间内传输信息的总量,等于总线宽度乘上总线频率。 B(ISA)= 2(字节数据宽)×8(MHz)= 16MB/s B(PCI)=4(字节数据宽)×33.3(MHz) = 133MB/s 数据传输速率:总线上单位时间内传输数据信号的总量,等于带宽除以每个数据传输使用的总线周期数。 数据传输速率(ISA)= 16MB/s ÷2= 8MB/s 数据传输速率(PCI)= 133MB/s ÷ 1= 133MB/s
10.1.3总线的分类 1. 系统总线 • 初期微型计算机的结构比较简单,它的总线连接了微处理器、存储器、接口电路和输入/输出设备,构成了完整的“计算机系统”,这样的总线称为“系统总线”。 • 这种系统总线实际上就是微处理器芯片总线(片内总线)的延伸。
2. 局部总线 • 大量设备连接到系统总线上时: • “争用”总线的可能性增加,容易产生数据传输“瓶颈效应”,总线性能下降 • 总线连接设备多,负载重,也会增加传输延迟 • 为了解决这个矛盾,在CPU高速外设之间增加了一条直接通路,该通路称为“局部总线” • 使用局部总线后,系统内有多条不同级别的总线,形成了“分级总线结构”。 • 不同传输要求的设备“分类”连接在不同性能的总线上,合理地分配系统资源,满足不同设备的不同需要。 • 局部总线信号独立于CPU, 处理器的更换不会影响系统结构。
3. 通信总线(外总线) • 通信总线又称为外总线,用于微机系统与微机系统,微机与外部设备(如打印机、硬盘设备)、仪器仪表之间的通信通道。 • 这种总线的数据传输可以是并行的(如打印机),也可以是串行的,数据传输速率低于系统内部的总线。 • 有多种不同的通信总线标准,例如,串行通信的RS232C、USB总线,用于硬磁盘接口的IDE、SCSI总线,用于连接仪器仪表的IEE-488、VXI,用于并行打印机的Centronics等。
10.1.4 总线的数据传输 • 信息是在两个或两个以上模块(或称为设备)之间传送的 • 传送信息的主动方称为主模块,传送信息的被动方称为从模块。 • 除了特殊情况外,信息的传送都是在主模块与一个从模块之间进行。 • 总线上同一时刻仅有一个主模块占用着总线。
1. 总线数据传输的过程 一次总线传输过程划分为若干阶段: ⑴ 总线申请与总线裁决:主模块申请总线,以便取得总线的控制权。 多个主模块同时申请总线使用权时,根据某种算法作出裁定,把总线的控制权赋予某个设备,这一任务由总线控制器完成。 ⑵ 寻址:主模块取得总线控制权后,由该模块进行寻址(目的地址),通知被访问的从模块进行信息传输。 ⑶ 传送数据:根据读写方式确定信息流向,一次传输可以传送一个数据,也可以传送多个数据。 ⑷ 错误检测
2. 总线传输的定时方式 • 在总线上进行信息传送必须使得信息传送双方(主与从)相互同步。 • 每一位的信息从什么时间开始 • 每一个数据从哪一位开始 • 每一个数据块从哪一个数据开始 • 有三种定时方法: • 同步传输 • 异步传输 • 半同步传输
(1)同步传输 • 信息传送在一个公共时钟的控制下进行 • 总线所有事件都在时钟周期的开始时发生,而不是由发送方或接收方决定。 • 同步方式要求总线上的所有设备都能按照严格的时间关系实施数据传输。
(2)异步传输 • 为了能用不同速度的模块组成系统,有时也采用异步方式控制数据传输。 • 异步传输没有统一的时钟信号,它通过一对握手(Handshaking)信号线(请求Request,响应Acknowledge)在发送方和接收方之间进行联络。 • 主设备发出传输请求,从设备准备就绪后发出应答信号,此后传输开始。 • 异步方式的数据传输时间随着设备响应速度的不同而变化。 • CPU对存储器传统的读写是一种异步传输方式。CPU(主模块)将存储器地址放到地址总线上,发出读信号。存储器从模块识别地址,在延迟若干时间后,将数据和应答信号放到总线上。
异步传输下的读传输时序 图10-2
(3)半同步传输 • 进行半同步传输时,各信号仍以公共时钟为基准,数据的开始时间由时钟信号和握手信号共同确定。 • 总线上各操作之间的时间间隔可以变化,但仅允许为公共时钟周期的整数倍。 • 半同步方式在同步的前提下,允许设备的某些不一致性,具有较大的灵活性,因此得到了广泛的使用。ISA总线属于这种类型。
3. 数据传输类型 总线上的数据传输有单周期方式和突发数据传输(Burst)两种方式。 • 单周期方式在获得一次总线使用权后只能传送一个数据,如果需要传输多个数据,就要多次申请使用总线。 • 突发方式下,获得一次总线使用权可以连续进行多个数据的传输: • 寻址阶段主设备发送数据块的首地址, • 后续的数据在首地址的基础上按一定的规则(如自动加1)寻址。 • 这种传输方式总线的利用率高 • PCI总线支持突发数据传输方式。
4. 错误检测 • 由于外界或者自身存在着各种随机出现的干扰因素,总线上传输的信息可能产生错误。 • 需要错误检测电路发现或纠正出现的错误,由专用的总线信号来报告出现的错误。 • 最常用也是最简单的错误检测方法是奇偶校验。 • 总线进行高速和大批量信息传输时,常采用循环冗余校验(Cycle Redundancy Checking, CRC)的错误校验方式。
10.2 ISA总线 • ISA(Industrial Standard Architecture, 工业标准体系结构)总线起源于IBM-PC微型计算机的出现。 • ISA 插槽由基本的62线8位插槽和扩展的36线插槽两部分组成。 • ISA总线主要的性能指标: • 24位地址线,可直接寻址的内存容量为16MB,I/O地址空间0100H~03FFH; • 8/16位数据线,62+36引脚; • 工作频率8MHz,带宽16MB/s,数据传输速率8MB/s; • 中断功能及DMA功能;
10.2.2 ISA总线扩展卡 • 由于ISA总线的开放特性,许多厂商设计制造了各种ISA总线的I/O接口,比如AD数据采集卡。 • 为了避免地址发生冲突,ISA卡设计时采用跳线开关(switch),允许对卡的I/O起始地址(BASE)进行选择。 • 图10-4为ISA PCL818接口卡的部分地址设定。用户必须自己调整好switch,使BASE位于所使用计算机I/O的空闲位置,然后根据BASE地址访问该ISA卡各种资源。
10.3 PCI总线与PCI-Express总线 • PCI总线的英文全称是 Peripheral Component Interconnect,即外部设备互连。 • 1991年下半年首先由Intel公司提出。 • 对高速率数据传输的需求推动了PCI的产生。 • PCI总线支持64位数据传输、多总线主控和线性突发方式(Burst),数据传输率为133MB/s。
10.3.1 PCI的特点 1. 突发总线传输 • PCI支持突发的数据传输模式,满足新型处理器高速缓冲存储器(Cache)与内存之间的读写。 • 线性突发传输能够更有效地运用总线的带宽去传输数据,以减少无谓的寻址操作。 2. 支持总线主控方式和同步操作 • 挂接在PCI总线上的设备有“主控”和“从控”二类。 • PCI总线允许多处理器系统中任何一个处理器或其他有总线主控能力的设备成为总线主控设备。 • PCI允许微处理器和总线主控制器同时操作,微处理器内部的操作和总线操作可以同时进行。
3. 独立于处理器 • PCI是一种独立于处理器的总线标准,支持多种处理器,适用于多种不同的系统。 • 在PCI总线构成的系统中,接口和外围设备的设计是针对PCI而不是CPU的,当CPU因为过时而更换时,接口和外围设备仍然可以正常使用。 4. 即插即用 • PCI具有即插即用(Plug and Play) 、自动配置的功能。 • 总线的接口卡上都设有“配置寄存器”,系统加电时用程序给这些设备分配端口地址等系统资源,可以避免它们使用时发生冲突。 • 新推出的PCI 2.2版支持热插拔(Hot Plug)。
5. 适合于各种机型 • PCI局部总线不仅为桌面(台式)电脑提供合理的局部总线设计,同时也适用于便携式电脑和服务器。 • 支持3.3V的电源环境,延长电池寿命,为电脑小型化创造了良好的实现条件。 6. 多总线共存 • PCI总线通过“桥”芯片进行不同标准信号之间的转换。 • 使用“Host-PCI”桥连接处理器和PCI总线 • 使用“PCI-ISA/EISA”桥连接PCI和ISA/EISA。 • 这一特点使得多种总线可以共存于一个系统中。
10.3.2 PCI总线系统结构 • “Host-PCI”桥实现了PCI总线的全部驱动控制,主要解决I/O设备同CPU的连接问题。 • 另一类“桥”用于生成“多级总线”结构,例如“PCI-ISA/EISA”、“PCI-USB”、“PCI-PCI”等。 • 多级总线把不同传输速度,不同传输方式的设备分门别类地连接到各自“适合”的总线上,使得不同类型的设备共存于一个系统,合理地分配资源,协调地运转。
10.3.3 PCI总线信号 • PCI信号线分为必备的和可选的两大类 • 主设备至少需要49条必备信号 • 从设备需要47条必备信号 • 信号类型定义: • IN 输入,是一标准的只作输入的信号。 • OUT 输出,是一标准的输出驱动信号。 • T/S 双向的三态输入/输出信号。 • S/T/S 持续的并且低电平有效的三态信号。在某一时刻只能属于一个主设备并被其驱动。 • OD 漏极开路,以线或形式允许多个设备共同驱动。
1. 系统信号 • CLK IN:时钟信号,最高33MHz/66MHz,为所有PCI传输提供时序基准; • RTS# IN:复位信号。 2. 地址和数据信号 • AD [31:: 0],T/S,地址和数据分时复用信号。 • 地址期:FRAME#有效,发送32位物理地址; • 数据期:IRDY#和TRDY#同时有效,32位数据信号; • C/BE [3:: 0] #,T/S,总线命令和字节有效复用信号线,传输命令或字节选择信号。 • PAR,T/S, 对AD [31:: 0] 和C/BE [3:: 0] # 的奇偶校验位。
3. 接口控制 • FRAME #,S/T/S,FRAME #有效预示总线传输的开始,由当前主设备驱动 • IRDY #,S/T/S,主设备准备好信号 • TRDY#,S/T/S,从设备准备好信号 • STOP#,S/T/S, STOP#有效表示当前从设备要求主设备停止数据传送 • LOCK #,S/T/S,LOCK#有效时,当前的主、从设备将独占总线资源 • IDSEL ,IN,初始化设备选择,参数配置读写时,用作片选信号 • DEVSEL # ,S/T/S,设备选择,它有效表示总线上某一从设备已被选中
4. 仲裁信号 • REQ#,T/S,请求信号,任何主设备请求占有总线必须发出该请求,由PCI主控制器仲裁。每个PCI总线主设备都有一根独用的REQ#信号。 • GNT#,T/S,允许信号,PCI主控制器批准主设备请求后,发回给主设备。与REQ#信号一样,每个PCI总线主设备都有一根独用的GNT#信号。 5. 出错报告信号 • PERR#,S/T/S,奇偶校验错信号,由数据接收设备发出。 • SERR#,O/D,系统错误信号,报告地址奇偶错等可能引起灾难性后果的系统错误。
6. 中断信号 • INTA#,O/D,中断请求信号,该信号允许与时钟信号不同步。 • INTB#, INTC#, INTD#,O/D,多功能设备的中断请求信号。
10.3.4 PCI总线周期和地址空间 1. PCI总线周期 • PCI上基本的总线传输机制是突发成组传输 • 一个突发分组传输由一个地址期和多个数据期组成
一次典型的读操作过程: (1)主设备获得总线使用权后: • 将FRAME#置为有效,在C/BE#上发送PCI总线命令 • 在AD0~31上发送地址信号,PCI总线进入“地址期” • 将IRDY#信号置为有效,表示主设备已经就绪 • 在BE#0~3上发送字节选择命令 (2)从设备: • 从C/BE#获知主设备的读命令 • 在地址期中从AD上得到存储器或IO地址 • 被选中的设备发出DESEL#有效信号表示响应 • 同时,从设备内部的读操作开始进行 • 要求的数据读出后,将TRDY#置为有效,将读出的数据送往AD信号线,PCI总线进入“数据期”。 主设备在主时钟信号的控制下,从AD上读入需要的数据。
(3)如果主设备需要执行突发总线周期(默认方式),则将FRAME#和IRDY#信号保持有效。从设备在这二个信号的控制下,将下一组数据送往AD信号线,进入下一个数据期。如果从设备不能在下一个时钟周期如期送出数据,则将TRDY#信号置为无效,数据传输将产生停顿。(3)如果主设备需要执行突发总线周期(默认方式),则将FRAME#和IRDY#信号保持有效。从设备在这二个信号的控制下,将下一组数据送往AD信号线,进入下一个数据期。如果从设备不能在下一个时钟周期如期送出数据,则将TRDY#信号置为无效,数据传输将产生停顿。 (4)主设备在发出最后一组数据的读命令之后: • 将FRAME#信号置为无效,表示数据传输即将结束。 • 在最后一项数据传输后,主设备撤销IRDY信号 • 从设备撤销TRDY#和DEVSEL#信号,一次PCI突发总线传输结束。 • 总线控制器发现FRAME#信号结束后,开始下一次总线仲裁。 • 总线的仲裁和总线上的数据传输是同时进行的。
2. PCI的地址空间 • PCI总线定义了三个物理地址空间:内存地址空间、I/O地址空间和配置地址空间。 • PCI总线的每个设备都有自己的地址译码电路,不需要进行统一译码。 • PCI支持正向和负向两种类型的地址译码: • 正向译码:每个设备都监听地址总线,判断访问地址是否落在它的地址范围,如果是,使DELSEL#有效以示应答,响应速度较快。 • 负向译码:没有一个设备作出响应时,由一个指定的设备(负向译码设备)作出响应。它要等到总线上其他所有设备都拒绝之后才能行动,速度较慢。
10.3.5 PCI配置空间 1. PCI头标区信息
1. PCI头标区信息 PCI配置空间是长度为256字节的一段内存空间,前64个字节包含PCI接口的信息,64~255的地址空间存放设备特定的一些信息。 (1)制造商标识(vendor ID):由PCI 组织给PCI设备制造厂家的惟一编码,子系统制造商标识(subsystem vendor ID)也由该组织给出。 (2)设备标识(device ID):生产厂对这个产品的编号,类似的还有子系统标识(subsystem ID)。操作系统根据子系统制造商标识和子系统标识识别设备类型,装载对应的驱动程序。
(3)分类码(class code):代表该卡上设备的功能,如网卡、硬盘卡、扩展桥、多媒体卡等,它们都对应一个惟一的编码。 (4)基地址寄存器0~5(base address registers): • 第0位是只读位,为0表示申请存储器空间,用1~2位表示存储空间的类型。第0位为1时表示申请IO空间。 • 第4~31位用来表示申请地址空间的大小,用其中可读写的位数表示。 • 存储空间的大小由基地址寄存器的可读写位数指定,分配的位置则由系统统一安排。 • 由于有6个基地址寄存器,PCI设备最多可以申请6段地址空间。
图10-9 [例]:申请32位地址空间内1MB存储空间: 位31~20为可读写寄存器(写入分配到存储空间地址高位) 位19~4为只读寄存器,内容固定为零 位2~1为00(只读),表示申请32位地址空间内的存储空间 位0为0 (只读) ,表示申请存储器空间
当一块PCI卡上具备一个以上功能时,应指定为多功能卡,每个功能都要有一个自己的配置空间。每个功能可以是不同的设备标识(device ID)、功能类型、存储器和I/O地址空间及中断资源。 • 配置空间的头类型(header type)用于指明是单功能卡或多功能卡。头类型的第七位为1时代表多功能卡。 • 访问配置空间时,3位地址用于指定功能号,因此每块卡最多可支持8个功能部件。 • 由于PCI总线上只有4条中断请求线,因而多功能卡最多只能有4个中断源。
2. 访问配置空间 通过BIOS调用“INT 1AH”可以获取PCI的配置信息,AH置为功能号0B1H,AL中为子功能号: (1) PCI _BIOS_PRESENT 功能:查看PCI BIOS是否存在,若存在,版本号为多少。 入口:[AL]=01H 出口:[EDX]=“PCI”ASCII字符串 [AH]=存在状态 00= 存在 01=不存在 [BX]=版本号
(2) FIND_PCIDEVICE 查找指定厂商和设备号的PCI板卡的位置。调用该函数后,用户可以利用该函数返回的总线号去调用READ _CONFIG和WRITE_CONFIG函数访问设备配置空间。 入口:[AL]=02H [CX]=设备ID值(0……65535) [DX]=厂商ID值(0……65534) [SI]=索引号(0……n) 出口:[AH]=返回代码:SUCCESSFUL(=0) , DEVICE_NOT_FOUND, BAD_VENDOR_ID [BH]=总线号(0……255) [BL]=设备号(高5位),功能号(低3位) [CF]=完成状态,1=错误, 0=成功。
(3) FIND_PCI_CLASS_CODE 入口:[AL]=03H • 查找指定类代码和索引的PCI设备的位置。在其后可调用READ_CONFIG和WRITE_CONFIG函数去访问设备配置空间。 (4)GENERATE_SPECIAL_CYCLE • 在PCI总线上产生特殊的周期 入口: [AL]=06H [BH]=总线号(0……255) [EDX]=特殊周期的数据 出口: [AH]=返回代码:SUCCESSFUL(=0), FUNCTION_NOT_SUPPORTED [CF]=完成状态,1=错误, 0=成功。
(5) READ_CONFIG_BYTE • 按字节读取配置空间数据。 入口:[AL]=08H [BH]=总线号(0……255) [BL]=设备号(高5位),功能号(低3位) [DI]=寄存器号(0……255) 出口:[AH]=返回代码(SUCCESSFUL=0) [CX]=读到的字节 [CF]=完成状态,1=错误, 0=成功。
(6) READ_CONFIG_WORD/READ_CONFIG_DWORD • 按字/双字读取配置空间 入口: [AL]=09H / 0AH [BH]=总线号(0……255) [BL]=设备号(高5位),功能号(低3位) [DI]=寄存器号(0, 2, 4, …… 254)/(0, 4, 8, …… 252) 出口:[AH]=返回代码:SUCCESSFUL(=0), BAD_REGISTER_NUMBER [CX]/[ECX]=读取的字/双字 [CF]=完成状态,1=错误, 0=成功。
(7)WRITE_CONFIG_BYTE/ WRITE_CONFIG_WORD/WRITE_CONFIG_DWORD • 对设备的配置空间按字节/字/双字进行写 入口: [AL]=0BH/0CH/0DH [BH]=总线号(0……255) [BL]=设备号(高5位),功能号(低3位) [DI]=寄存器号 (0……255) [CL/[CX]/[ECX]=要写字的字节/字/双字 出口:[AH]=返回代码:SUCCESSFUL, BAD_REGISTER_NUMBER [CF]=完成状态,1=错误, 0=成功。
希望自己编程访问本机PCI接口卡数据时,可以首先用如下程序得到该卡的I/O地址:希望自己编程访问本机PCI接口卡数据时,可以首先用如下程序得到该卡的I/O地址: (假设设备标识为0440H,生产厂标识为5333H ) MOV AH, 0B1H ; MOV AL, 02H ; MOV CX, 0440H ; DEVICE ID,显卡设备标识 MOV DX , 5333H ; VENDOR ID,生产厂商标识MOV SI, 0 ; INT 1AH ; 得到总线号,设备号,功能号 JC ERROR ; 错误时转ERROR