
root complex 是一切的根,向下生长的是pcie链路


PCI-Express是继ISA和PCI总线之后的第三代I/O总线,即3GIO。 由Intel在2001年的IDF上提出,由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”。它的主要优势就是数据传输速率高,另外还有抗干扰能力强,传输距离远,功耗低等优点

PCI-E接口根据总线位宽不同而有所差异,一个PCI Express连接可以被配置成x1, x2, x4, x8, x12, x16和x32的数据带宽。
(x2 and x12 link widths are optional) PCI-E 各种位宽Device可以自由搭配使用,比如x1 的卡可以插到x8的插槽中使用, x8 的卡可以插到x16的插槽中使用,升级方便。

从软件角度看待PCI/PCIE
内存是最容易访问的设备
volatile unsigned int *p=addr;
unsigned int val;
*addr=val;//写
val=*p;//读
访问设备 其他设备不被干扰(片选控制器)

当cpu发出的地址,属于某个设备的地址范围的时候,设备就被选中了
cpu发出的地址空间和设备的地址空间不是一回事,就像街道编号和小区房间编号


cpu 不能直接访问emmc flash ,因为两个地址空间是隔离的
但是pcie的做法就是,直接转换cpu的地址 为pcie的地址
这样驱动程序只要读写pcie的地址就可以了

1.配置空间申明需要多大的空间 地址空间
2.主机读出当前申明,分配1m空间(32b 0-4g f分配1m a-b 地址空间 写入地址空间)
3.设置cpu地址空间与pci地址空间的转换
pci 地址和信号是复用的(通过frame区分),但是并行高速传输有干扰


pcie 串行差分信号传输:
PCIe差分信号是计算机硬件中一种用于高速数据传输的电信号。它由两个相反方向的电信号组成,一个叫做“正极性”(p)信号,另一个叫做“负极性”(n)信号。
这两个信号被一起使用来传输数字信号,因为它们可以减少电磁干扰并提高传输距离。PCIe差分信号通常用于将图形卡、网络适配器和其他高速I/O设备连接到计算机主板上。



在第一个时钟 ,frame低电平传输的是地址,后面传输的是数据
1.pcie 地址空间 给每个设备分配地址
2.将地址写入pcie配置寄存器
一开始配置的时候,没有地址空间,是怎么确定设备的?
idselect 初始化设备选择
linux驱动大全开发之pci和pcie_哔哩哔哩_bilibili 36:00~47:16



同时也可以链接pcie桥,作用是转发(分辨 headtype 区别是普通pcie设备还是桥设备)



多次转发:bus0->bus1->2->bus3
1.判断bus信号是否属于自己处理,不是的话就转发到指定的pci设备
2.将type1命令转换为type0命令
iic/uart/spi

IIC 通过从机地址,确定访问哪个器件。





UART 通信协议 起始位一般不会选择刚开始的地方 不稳定
