HOST主桥可以作为根,然后可以分出PCI桥,其又可以连接更多的设备;但是在1 棵 PCI 总线树上, 最多只能挂接 256 个 PCI 设备 (包括 PCI 桥)。
(3)动态配置机制
PCI 设备使用的地址可以根据需要由系统软件动态分配。
(4)总线带宽,PCIE更快
(5) 共享总线机制
PCI设备通过仲裁获得总线控制后,都会在总线上进行数据传输。PCI 总线仲裁器不在 PCI 总线规范定义的范围内, 也不一定是 HOST 主桥和 PCI 桥的一部分。这种占用总线的机制不如 PCIe 总线采用的交换结构。
(6)中断机制
PCI 总线上的设备可以通过四根中断请求信号 INTA ~ D#向处理器提交中断请求。
1. 1 PCI 总线的组成结构
理解第一章,从这张图开始看
HOST主桥
主要功能是隔离处理器系统的存储器域与处理器系 统的 PCI 总线域, 管理 PCI 总线域, 并完成处理器与 PCI 设备间的数据交换。PCI 设备通过 HOST 主桥访问主存储器时, 需要与处理器的 Cache 进行一致性操作, 因 此在设计 HOST 主桥时需要重点考虑 Cache 一致性操作。在一个处理器系统中, 每一个 HOST 主桥 都管理了一棵 PCI 总线树, 在同一棵 PCI 总线树上的所有 PCI 设备属于同一个 PCI 总线域。
PCI 总线
在一 棵 PCI 总线树中可能具有多条 PCI 总线, 而具有血缘关系的 PCI 总线组成一棵 PCI 总线树。
PCI 设备
PCI 主设备、 PCI 从设备和桥设备。
其中 PCI 从设备只能被 动地接收来自 HOST 主桥或者其他 PCI 设备的读写请求; 而 PCI 主设备可以通过总线仲裁获 得 PCI 总线的使用权, 主动地向其他 PCI 设备或者主存储器发起存储器读写请求。 而桥设备 的主要作用是管理下游的 PCI 总线, 并转发上下游总线之间的总线事务。
HOST处理器
PCI 总线规定在同一时刻内, 在一棵 PCI 总线树上有且只有一个 HOST 处理器。 这个 HOST 处理器可以通过 HOST 主桥, 发起 PCI 总线的配置请求总线事务, 并对 PCI 总线上的 设备和桥片进行配置。
在 PCI 总线中, HOST 处理器是一个较为模糊的概念。 在 SMP ( symmetric multiprocess⁃ ing) 处理器系统中, 所有 CPU 都可以通过 HOST 主桥访问其下的 PCI 总线树, 这些 CPU 都 可以作为 HOST 处理器。 但是值得注意的是, PCI 总线树的实际管理者是 HOST 主桥, 而不是 HOST 处理器。
PCI总线负载
线频率越高, 能挂接的负载越少。
1.2 PCI总线的信号定义
PCI 总线是一条共享总线, 在一条 PCI 总线上可以挂接多个 PCI 设备。 这些 PCI 设备通 过一系列信号与 PCI 总线相连, 这些信号由地址/ 数据信号、 控制信号、 仲裁信号、 中断信 号等多种信号组成。
PCI 总线可以使用33 MHz 或者66 MHz 的时钟频率, 而 PCI⁃X 总线可以使用 133 MHz、 266 MHz 或者 533 MHz 的时钟频率。
除了 RST#、 INTA ~ D#、 PME#和 CLKRUN#等信号之外, PCI 设备使用的绝大多数信号 都使用这个 CLK 信号进行同步。 其中 RST#是复位信号, 而 PCI 设备使用 INTA ~ D#信号进 行中断请求。 本书并不详细介绍 PME#和 CLKRUN#信号。
1.2.1 地址和数据信号
(1) AD[31∶0]信号
PCI 总线复用地址与数据信号。第一个时钟传送地址,后面传数据,支持突发传送
(2) PAR 信号
PAR 信号是 AD[31∶ 0]和 C / BE[3∶ 0]的奇偶校验信号。
(3) C / BE[3∶0] #信号
1.2.2 接口控制信号
(1) FRAME#信号
该信号指示一个 PCI 总线事务的开始与结束。低电平有效,高电平无效。
(2) IRDY#信号
如果当前 PCI 总线事务为写事务, 表示数据已经在 AD[31∶ 0]上有效; 如果为读事 务, 表示 PCI 目标设备已经准备好接收缓冲, 目标设备可以将数据发送到 AD[31∶ 0]上。
(3) TRDY#信号
如果当前 PCI 总线事务为写事务, 表示目标设备已经准备好接收缓冲, 可以将 AD[31∶ 0]上的数据写 入目标设备; 如果为读事务, 表示 PCI 设备需要的数据已经在 AD[31∶ 0]上有效。
(4) STOP#信号
该信号有效时表示目标设备请求主设备停止当前 PCI 总线事务。
(5) IDSEL 信号
PCI 总线在进行配置读写总线事务时, 使用该信号选择 PCI 目标设备。
(6) DEVSEL#信号
该信号有效时表示 PCI 总线的目标设备准备好, 该信号与 TRDY#信号的不同之处在于 该信号有效仅表示目标设备已经完成了地址译码。 目标设备使用该信号通知 PCI 主设备, 其 访问对象在当前 PCI 总线上, 但是并不表示目标设备可以与主设备进行数据交换。 而 TRDY# 信号表示数据有效, PCI 主设备可以向目标设备写入或者从目标设备读取数据。 11 PCI 总线规范根据设备的译码速度, 将 PCI 设备分为快速、 中速和慢速三种。 在 PCI 总 线上还有一种特殊的设备, 即负向译码设备, 在一条 PCI 总线上当快速、 中速和慢速三种设 备都不能响应 PCI 总线事务的地址时, 负向译码设备将被动地接收这个 PCI 总线事务。 如果 在 PCI 主设备访问的 PCI 总线上, 没有任何设备可以置 DEVSEL#信号为有效, 主设备将使 用 Master Abort 周期结束当前总线事务。
(7) LOCK#信号
PCI 主设备可以使用该信号, 将目标设备的某个存储器或者 I / O 资源锁定, 以禁止其他 PCI 主设备访问此资源, 直到锁定这个资源的主设备将其释放。PCI 总线使用 LOCK#信号实 现 LOCK 总线事务, 只有 HOST 主桥、 PCI 桥或者其他桥片可以使用 LOCK#信号。
1.2.3 仲裁信号
在一棵 PCI 总线树中, 每一条 PCI 总线上都有一个总线仲裁器。 一个处理器系统可以使 用 PCI 桥扩展出一条新的 PCI 总线, 这条新的 PCI 总线也需要一个总线仲裁器, 通常在 PCI 桥中集成了这个总线仲裁器。 多数 HOST 主桥也集成了一个 PCI 总线仲裁器, 但是 PCI 总线 也可以使用独立的 PCI 总线仲裁器。 PCI 主设备使用 PCI 总线进行数据传递时, 需要首先置 REQ#信号有效, 向 PCI 总线仲裁 器发出总线申请, 当 PCI 总线仲裁器允许 PCI 主设备获得 PCI 总线的使用权后, 将置 GNT#信 号为有效, 并将其发送给指定的 PCI 主设备。 而 PCI 主设备在获得总线使用权之后, 将可以置 FRAME#信号有效, 与 PCI 从设备进行数据通信。
1.2.4 中断请求等其他信号
PCI 总线提供了 INTA#、 INTB#、 INTC#和 INTD#四个中断请求信号。信号置低表示向处理器请求中断,处理器执行完毕后,将中断信号置高。
PCI 总线规定单功能设备只能使用 INTA#信号, 而多功能设备才能使用 INTB# / C# / D# 信号。PCI 总线在进行数据传递过程时, 难免会出现各种各样的错误, 因此 PCI 总线提供了一 些错误信号, 如 PERR#和 SERR#信号。 其中当 PERR#信号有效时, 表示数据传送过程中出 现奇偶校验错( Special Cycle 周期除外) ; 而当 SERR#信号有效时, 表示当前处理器系统出 现了三种错误可能, 分别为地址奇偶校验错、 在 Special Cycle 周期中出现数据奇偶校验错、 系统出现其他严重错误。如果 PCI 总线支持 64 位模式, 还需要提供 AD[63∶ 32] 、 C / BE[7∶ 4] 、 REQ64、 ACK64 和 PAR64 这些信号。
1.3 PCI 总线的存储器读写总线事务
总线的基本任务是实现数据传送, 将一组数据从一个设备传送到另一个设备。PCI 总线支持以下几类存储器读写总线事务。
(1) HOST 处理器对 PCI 设备的 BAR 空间进行数据读写, BAR 空间可以使用存储器或 者 I / O 译码方式。 HOST 处理器使用 PCI 总线的存储器读写总线事务和 I / O 读写总线事务访 问 PCI 设备的 BAR 空间。 (2) PCI 设备之间的数据传递。 在 PCI 总线上的两个设备可以直接通信, 如一个 PCI 设 备可以访问另外一个设备的 BAR 空间。 不过这种数据传递在 PC 处理器系统中较少使用。 (3) PCI 设备对主存储器进行读写, 即 DMA 读写操作。 DMA 读写操作在所有处理器系 统中都较为常用, 也是 PCI 总线数据传送的重点。 在多数情况下, DMA 读写操作结束后将 伴随着中断的产生。 PCI 设备可以使用 INTA#、 INTB#、 INTC#和 INTD#信号提交中断请求, 也可以使用 MSI 机制提交中断请求。
1.3.1 PCI 总线事务的时序
与 PCI 总线事务相关的控制信号有 FRAME#、 IRDY#、 TRDY#、 DEVSEL#等其他信号。
当PCI设备需要使用PCI总线的时候,先发送请求REQ#,通过仲裁,返回GNT#信号。PCI设备获得控制权后,FRAME#置为有效,总线事务结束后, FRAME#信号将被置为无效。PCI 主设备将访问的目的地址和总线命令分别驱动到 AD[31∶ 0]和 C / BE#信号上。 如果当前总线命令是配置读写, 那么 IDSEL 信号线也被置为有效。当 IRDY#、 TRDY#和 DEVSEL#信号都有效后, 总线事务将使用数据周期进行数据 传递。 当 IRDY#和 TRDY#信号没有同时有效时, PCI 总线不能进行数据传递, PCI 总线使用 这两个信号进行传送控制。
1.3.2 Posted 和 Non⁃Posted 传送方式
PCI 总线规定了两类数据传送方式, 分别是 Posted 和 Non⁃Posted 数据传送方式。
其中 Posted 总线事务指 PCI 主设备向 PCI 目标设备进行数据传递时, 当数据到达 PCI 桥 后, 即由 PCI 桥接管来自上游总线的总线事务, 并将其转发到下游总线。 采用这种数据传送 方式, 在数据还没有到达最终的目的地之前, PCI 总线就可以结束当前总线事务, 从而在一 定程度上解决了 PCI 总线的拥塞问题。
而 Non⁃Posted 总线事务是指 PCI 主设备向 PCI 目标设备进行数据传递时, 数据必须到达 最终目的地之后, 才能结束当前总线事务的一种数据传递方式。这种事务方式会造成一定的拥塞,因此 PCI 总线使用 Delayed 总线 事务处理 Non⁃Posted 数据请求。
PCI 总线规定只有存储器写请求 (包括存储器写并无效请求) 可以采用 Posted 总线事务;而存储器读请求、 I / O 读写请求、 配置读写请求只能采用 Non⁃Posted 总线事务。
拿图1-1举例说明posted请求
设备11需要进行DMA操作写数据到DDR,那么它会先向PCI桥x1发送请求,桥1接收后会释放x1总线的控制,此时11和12可以正常通信。同理,桥x1会将请求传给HOST主桥x,主桥x会传给控制器。这种逐级释放总线资源,使得PCI 总线的利用率较高。Non⁃ Posted 数据请求在通过 PCI 总线时, 并不会及时释放总线资源, 从而在某种程度上影响 PCI 总线的使用效率和传送带宽。
1.3.3 HOST 处理器访问 PCI 设备
PCI 设备能够直接使用的地址是 PCI 总线域的地址,而处理器能够直接使用的地址是存储器域的地址。
这里说一下处理器与设备11的通信步骤
其实就是处理器将数据写入寄存器中,先访问存储器域地址,经过HOST主桥转换地址 变成PCI地址,发送事务到PCI桥x1,x1释放总线。后面过程同理,最后 PCI 设备 11 通过地址译码方式接收这个写总线事务。
1. 3. 4 PCI 设备读写主存储器
根据1.3.3 同理
1. 3. 5 Delayed 传送方式
主要是优化Non⁃ Posted
PCI⁃X 总线将 PCI 总线使用的 Delayed 总线事务, 升级为 Split 总线事务。 采用 Split 总线事务可以有效解决 HOST / PCI 桥的这些重 试操作。 Split 总线事务的基本思想是发送端首先将 Non⁃Posted 总线请求发送给接收端, 然 后再由接收端主动地将数据传递给发送端。
1. 4 PCI 总线的中断机制
PCI 总线使用 INTA#、 INTB#、 INTC#和 INTD#信号向处理器发出中断请求。
1. 4. 1 中断信号与中断控制器的连接关系
图 1-5 所示的拓扑结构时, PCI 插槽 A、 B、 C 的 INTA#、 INTB#和 INTC#信号将分 散连接到中断控制器的 IRQW#、 IRQX#和 IRQY#信号, 而所有 INTD#信号将共享一个 IRQZ# 信号。 采用这种连接方式时, 整个处理器系统使用的中断请求信号, 其负载较为均衡。 而且 这种连接方式保证了每一个插槽的 INTA#信号都与一根独立的 IRQx#信号对应, 从而提高了 PCI 插槽中断请求的效率。
1. 4. 2 中断信号与 PCI 总线的连接关系
1. 4. 3 中断请求的同步
中断遇到的问题在于,比如DMA最后一个数据向目的地传输,此时中断也产生了,中断直接作用于处理器,但是很有可能数据还没有传到目的地。所以解决方法有,传输完全结束后,给中断信号到处理器,这种占用资源。还有一种是DMA传送结束后,处理器请求存储器的某一种类信号,这个信号代表结束信号,这样就比较方便。
MSI中断机制在第十章提及
1. 5 PCI⁃X 总线简介
PCI⁃X 总线仍采用并行总线技术。 PCI⁃X 总线使用的大多数总线事务基于 PCI 总线, 但 是在实现细节上略有不同。 PCI⁃X 总线将工作频率提高到 533 MHz, 并首先引入了 PME (Power Management Event) 机制。 除此之外, PCI⁃X 总线还提出了许多新的特性。
1. 5. 1 Split 总线事务
代替了delay总线,提高了Non⁃Posted 总线事务的传送效率。
与 Delayed 总线事务相比, Requester 获得的数据是 Completer 将数据完全准备好后, 由 Completer 主动传递的, 而不是通过 Requester 通过多次重试获得的, 因此能够提高 PCI⁃X 总 线的使用效率。 PCI⁃X 总线提出的 Split 总线事务被 PCIe 总线继承。
1. 5. 2 总线传送协议
PCI⁃X 总线改变了 PCI 总线使用的传送协议。 目标设备可以将主设备发送的命令锁存, 然后在下一个时钟周期进行译码操作。 与 PCI 总线事务相比, PCI⁃X 总线采用的这种方式, 虽然在总线时序中多使用了一个时钟周期, 但是可以有效提高 PCI⁃X 总线的运行频率。
因为主设备通过数据线将命令发送到目标设备需要一定的延时。 如果 PCI 总线频率较 高, 目标设备很难在一个时钟周期内接收完毕总线命令, 并同时完成译码工作。 而如果目标 设备能够将主设备发出的命令先进行锁存, 然后在下一个时钟周期进行译码则可以有效解决 这个译码时间 Margin 不足的问题, 从而提高 PCI⁃X 总线的频率。
1. 5. 3 基于数据块的突发传送
在 PCI 总线中, 数据发送端知道究竟需要发送多 少字节的数据, 但是接收端并不清楚到底需要接收多少数据。 这种不确定性, 为接收端的缓 冲管理带来了较大的挑战。 为此 PCI⁃X 总线使用基于数据块的突发传送方式, 发送端以 ADB (Allowable Disconnect Boundary) 为单位, 将数据发送给接收端, 一次突发读写为一个以上的 ADB。 采用这种方 式, 接收端可以事先预知是否有足够的接收缓冲, 接收来自发送端的数据, 从而可以及时断 连当前总线周期, 以节约 PCI⁃X 总线的带宽。
收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!