主题:为什么要引入PCI, 为什么要引入PCIE,PCIE和PCI的硬件接口大概如何?理解一下CPU地址和PCI地址空间的概念。
参考资料:
* 《PCI Express Technology》,Mike Jackson, Ravi Budruk; MindShare, Inc.
* 《PCIe扫盲系列博文》,PCIe扫盲系列博文连载目录篇(第一阶段)-Felix-电子技术应用-AET-中国科技核心期刊-最丰富的电子设计资源平台作者Felix,这是对《PCI Express Technology》的理解与翻译
* 《PCI EXPRESS体系结构导读 (王齐)》
* 《PCI Express_ Base Specification Revision 4.0 Version 0.3 ( PDFDrive )》
* 《NCB-PCI_Express_Base_5.0r1.0-2019-05-22》
1、最容易访问的设备是什么
是内存!内存只要知道地址就能直接访问。
volatile unsigned int *p=某个地址;
unsigned int val; *p=val; val=*p;
所有的ram-like接口都能这样操作:
什么叫ram-like接口:
- 要发出地址,有地址线
- 要读写数据,有数据线
- 要分辨读还是写,又有读写信号。
- ram-like的设备很多,共享地址数据总线。此时需要片选信号。如下图所示。
2、地址空间概念
CPU地址 emmc地址 pcie地址他们之间的概念是不一样的。如图所示,内存控制器接收的地址是CPU发出的地址,而PCI控制器发出的是pci_addr。
当CPU需要访问PCI设备时,如何才能直接使用下面这段代码进行访问呢?如果我们能够直接将CPU地址偏移得到pcie_addr,就能直接访问了。
- 此时,就需要pci设备提前做配置,配置需要多大(1M)的地址空间(注意是pci的地址空间)。
- 主机读取声明,然后分配1M地址空间。
- 设置CPU地址空间到pci地址空间的转换。
volatile unsigned int *p=某个地址;
unsigned int val;
*p=val;
val=*p;
对比一下IIC设备的读模式:
- 设置某个状态寄存器为某个值;stat=val,发出start信号
- 设置某个data寄存器,data=val,发出设备地址和读写位
- 写某个寄存器data=val,CPU发出存储器上的地址。
- 再写某个寄存器:data=val;发出存储器上要写的数值。
- 最后发出停止信号。
3、理解PCI和PCIe接口
3.1PCI接口速览
通过PCI的硬件电路图可知,①地址和数据时复用的AD0-31, 通过frame分辨地址和数据。②并行接口 ③并行传输当速率上去之后会有很大的干扰。④于是pcie使用串行接口
3.2 PCIe接口概述
①使用差分信号串行接口。②PCI和pcie对于CPU来说是兼容的。
参考:01_pcie接口引脚电路示例_AX99100.pdf`