本总结随着DM8168中PCIe的学习,以及PCIe原理的学习而添加,都是一些零碎的知识点,有部分个人理解,将来温故知新用。
《PCI Express 体系结构导读》,《PCI EXpress系统体系结构标准教材》DM8168相关文档,网上搜集资料。
欠奉。
RC的主要功能与PCI总线中的HOST主桥类似,但是在HOST主桥的基础上增加了许多功能,RC可以理解为一个PCIe总线控制器,在X86处理器的体系结构中,RC并不仅仅管理PCIe设备的数据访问,而且还包含访问控制、错误处理和虚拟化技术等一系列内容
PCIe设备需要使用REFCLK+,REFCLK作为本地参考时钟,其时钟频率固定为100Mhz,在DM8168系统中,需要提供两个100Mhz时钟,一个给DM8168用于检测PCIe并且同步PCIe设备,一个给PCIe插槽用于EP的本地参考时钟,两个时钟必须同源,以保证PCIe挂载设备与系统同步。
WAKE#: 当PCIe设备进入休眠需要唤醒时,PCIe设备通过WAKE#信号使处理器重新为PCIe设备供电,达到唤醒目的。
JTAG: 常见调试接口,在PCIe接口中由TRST#,TCK, TDK, TDO和TMS信号组成。
PRSNT1#,PRSNT2#: 与PCIe设备热插拔有关的一组信号。DM816x设备不支持热插拔。
SMCLK#,SMDAT#:P105~106《导读》
P105~106《导读》
PCIe总线采用串行的连接方式,并使用数据包(Packet)进行数据传输,在数据包的接收和发送过程中,需要经过多个层次,包括事务层,数据链路层和物理层三层。类似网络传输的OSI七层模型。
PCIe为互联设备提供高速,高性能,点对点,双—单工,差分信号链路。数据从一组信号线发送,在另一组信号线上接收。
PCIe总线规定了两大类的复位方式,一种是传统的复位方式(Conventional Reset),另一种是FLR(Function-Level Reset)方式。
传统的复位方式有Cord,Warm和Hot Reset三种方式。cordReset方式就是PCIe上电时系统通过PERST#脚进行复位,类似9650外围芯片的阻容复位,我理解是一种硬复位。而warm Reset类似于看门狗,在系统上电运行后,通过看门狗等方式对PCIe进行的复位,应该属于PCIe设备全局复位,复位后PCIe设备重新启动运行。Hot Reset复位,是使用软件对PCIe设备进行复位,如系统软件对Bridge Control Register某位置1,该桥片对PCIe设备进行复位。
FLR方式,即Function-LevelReset方式,这个方式与上述传统复位有什么区别,举个例子:当PCIe网卡的某个功能模块“与网络部分相关”的逻辑需要复位,而传统方式(cold,warm,hot reset)不能做到局部复位,而FLR方式就是一种局部复位。DM8168不支持FLR方式。17.1.3sprugx8b.pdf
北桥芯片 它主要负责CPU与内存之间的数据交换,并控制AGP、PCI数据在其内部的传输,是主板性能的主要决定因素。随着芯片的集成度越来越高,它也集成了不少其它功能。如:由于Althon64内部整合了内存控制器;nVidia在其NF3 250、NF4等芯片组中,去掉了南桥,而在北桥中则加入千兆网络、串口硬盘控制等功能。现在主流的北桥芯征的牌子有VIA、NVIDIA及SIS等。 当然这些芯片的好坏并不是由主板生产厂家所决定的,但是主板生产商采取什么样的芯片生产却是直接决定了主板的性能。如:同样是采用VIA的芯片,性能上则有KT600>KT400A>KT333>KT266A等。目前主流的 AMD平台上,可选的芯片组有:KT600、NF2、K8T800、NF3等;对于INTEL平台,则有915、865PE、PT880、845PE、 848P等。
南桥芯片主要是负责I/O接口等一些外设接口的控制、IDE设备的控制及附加功能等等。常见的有VIA的8235、8237等;INTEL的有CH4、CH5、CH6等;nVIDIA的MCP、MCP-T、MCP RAID等。在这部分上,名牌主板与一般的主板并没有很大的差异,但是名牌主板凭着其出色的做工,还是成为不少人的首选。而不排除一部分质量稍差的主板为了在竞争中取得生存,可能会采用功能更强的南桥以求在功能上取胜。
FSB只指CPU与北桥芯片之间的数据传输总线,又称前端总线。 对于P4来说,FSB频率=CPU外频*4。 这个参数指的就是前端总线的频率,它是处理器与主板交换数据的通道北桥芯片负责联系内存、显卡等数据吞吐量最大的部件,并和南桥芯片连接。CPU就是通过前端总线(FSB)连接到北桥芯片,进而通过北桥芯片和内存、显卡交换数据。前端总线是CPU和外界交换数据的最主要通道,因此前端总线的数据传输能力对计算机整体性能作用很大,如果没足够快的前端总线,再强的CPU也不能明显提高计算机整体速度。数据传输最大带宽取决于所有同时传输的数据的宽度和传输频率,即数据带宽=(总线频率×数据位宽)÷8。目前PC机上所能达到的前端总线频率有266MHz、333MHz、400MHz、533MHz、800MHz几种,前端总线频率越大,代表着CPU与北桥芯片之间的数据传输能力越大,更能充分发挥出CPU的功能。
由于PCIe总线使用端到端的连接方式,一条PCIe链路只能连接一个设备。当一个PCIe链路需要挂接多个EP时,需要使用Switch进行扩展。一个标准的Switch具有一个上游端口和多个下游端口。上游端口与RC或者其他Switch的下游端口相连,而下游端口可以与EP、PCIe-to-PCI桥或者下游Switch的上游端口相连。Switch是一种链路扩展的方式。
PCIe-to-PCI桥片:将PCIe总线转换为PCI总线,以实现PCIe设备与PCI设备的互联,理解为转换器。
同理PCIe-to-PCI-X桥片。
TLP称为事务层数据报文,当处理器或者其他PCIe设备访问PCIe设备时,所传送的数据报文首先通过事务层被封装为一个或者多个TLP,之后才能通过PCIe总线的各个层次发送出去。TLP的概念类似于TCP/IP协议中的UDP包,或者TCP包等。具体结构看(p155~p156《PCI Express体系结构导读》)
TLP的路由是指TLP通过Switch或者PCIe桥片时采用那条路径,最终到达EP或者RC的方法。PCIe总线一共定义了三种路由方法,分别是基于地址(Address)的路由,基于ID的路由和隐式路由(Implicit)方式。
这部分内容在sprugx8b.pdf17.4.8~17.4.11中有关于DM81xx的PCIe相关寄存器配置,其寄存器具体定义参见《PCI Express体系结构导读》4.3节,p123~p133。
Max_Payload_Size参数决定了一个TLP报文可能使用的最大有效负载,PCIe总线规定Max_Payload_Size的最大值为4096B,但是许多PCIe设备不一定能够支持这么大的负载。在实际应用中,一个PCIe设备的支持的Max_Payload_Size参数通常是128B,256B或者512B。
还有一个参数Max_Payload_Size_Supported,表示PCIe设备中允许使用的Max_Payload_size参数。通常是两端的PCIe设备进行协商,确定实际使用值。P128《导读》。
P218《导读》,sprugx8b.pdf17.4.3节也有提到。
区别于使用INTx引脚提交的中断请求,MSI和MSI-X中断机制使用存储器写请求的TLP向处理器提交中断请求,也就是说这种中断的方法是嵌在TLP报文中的。不同的处理器对PCIe设备发出的MSI报文的解释并不相同。但是PCIe设备在提交MSI中断请求时,都是向MSI/MSI-X Capability结构中的Message Address的地址写Message Data数据,从而组成一个存储器写TLP,向处理器提交中断请求。
有些PCIe设备还支持Legacy中断方式,比如DM8168,这种中断方式是通过发送Assert_INTx和Deassert_INTx消息报文进行中断请求,即虚拟中断线(INTx)的方式。在PCIe体系结构中,仍然存在许多PCI设备,而这些设备通过PCIe桥连接到PCIe总线中,这些设备可能并不支持MSI/MSI-X中断机制,因此必须使用INTx信号进行中断请求。
P263《导读》
该信号为全局复位信号,由处理器系统提供,处理器系统需要为PCIe插槽和PCIe设备提供该复位信号。PCIe设备使用该信号复位内部逻辑,当该信号有效时,PCIe设备将进行复位操作。PCIe总线的Cold Reset和Warm Reset这两种复位方式的实现与该信号有关。P103《导读》
这个见于pcie设备和系统内存互访问时,outbound是指CPU到设备方向;inbound指Device--> RC(CPU端)方向。从这个概念上说,设备(device)都是外部的,没有内部设备之说。CPU读写RC 端的寄存器时,还是属于片上系统的范围,所以既不是inbound 也不是outbound。
简单的说,如果CPU读写PCI BAR 的总线地址,就是outbound,如果设备读写CPU端的主存,就是inbound。
http://blog.csdn.net/JuanA1/article/details/6695939
PCIe总线规定,PCIe链路两端的设备所使用的Lane可以错序进行连接,PCIe总线规范该功能为“LaneReversal”。在相同的Lane上,差分信号的极性也可以错序连接,PCIe总线规范将该功能称为“Polarity Inversion”。
所谓枚举,就是从Host/PCI桥开始进行探测和扫描,逐个“枚举”连接在第一条PCI总线上的所有设备并记录在案。如果其中的某个设备是PCI-PCI桥,则又进一步再探测和扫描连在这个桥上的次级PCI总线。就这样递归下去,直到穷尽系统中的所有PCI设备。其结果,是在内存中建立起一棵代表着这些PCI总线和设备的PCI树。每个PCI设备(包括PCI桥设备)都由一个pci_dev结构体来表示,而每条PCI总线则由pci_bus结构来表示。
http://blog.csdn.net/linuxdrivers/article/details/5849698
序号 |
B面 |
功能 |
A面 |
功能 |
01 |
+12v |
+12v电压 |
PRSNT1# |
热拨插存在检测 |
02 |
+12v |
+12v电压 |
+12v |
+12v电压 |
03 |
RSVD |
保留针脚 |
+12v |
+12v电压 |
04 |
GND |
地 |
GND |
地 |
05 |
SMCLK |
系统管理总线时钟 |
JTAG2 |
测试时钟、JTAG接口输出时钟 |
06 |
SMDAT |
系统管理总线数据 |
JTAG3 |
测试数据输出 |
07 |
GND |
地 |
JTAG4 |
测试模式选择 |
08 |
+3.3v |
+3.3.v电压 |
JTAG5 |
测试模式选择 |
09 |
JTAG1 |
测试复位,JTAG接口复位时钟 |
+3.3v |
+3.3.v电压 |
10 |
3.3vaux |
3.3v辅助电源 |
+3.3v |
+3.3.v电压 |
11 |
WAKE# |
链接激活信号 |
PERST# |
PCIe复位信号 |
12 |
RSVD |
保留针脚 |
GND |
地 |
13 |
GND |
地 |
REFCLK+ |
差分信号对的参考时钟 |
14 |
PETp0 |
0号信道发送 |
REFCLK- |
|
15 |
PETn0 |
GND |
地 |
|
16 |
GND |
地 |
PERp0 |
0号信道接收 |
17 |
PRSNT2# |
热拨插存在检测 |
PERn0 |
|
18 |
GND |
地 |
GND |
地 |
参考:http://wenku.baidu.com/view/8252090bbb68a98271fefab5.html