1. CPU如何访问外部设备
cpu发出地址,先到达内存控制器,内存控制器根据地址判断这个地址数据哪个设备,然后向该设备发出片选信号(cs)选中这个设备。在同一时间,只有一个片选信号有效。
其中flash与GPIO都不是内存,但是使用的接口与内存一样,都是RAM-Like接口。只要是这种接口,就可以使用这种方法访问。
在芯片手册中会有各种片上设备的地址范围。
当CPU访问EMMC FLASH时,CPU发出的地址是属于CPU空间的地址,而EMMC控制器向EMMC FLASH发出的地址是属于EMMC控制器地址空间。两个地址空间是隔离的。
如果cpu空间的地址能够转换为PCI空间的地址,当CPU发出地址时经过转换就能够访问PCI设备,访问PCI设备时就会像访问内存一样简单。问题的关键在于如何进行这个转换,如何确定这个地址。
“地址转换”这个活是由PCI控制器干的。
①PCI设备都有一个配置空间。在配置空间里会声明需要多大的空间(PCI地址空间)。
②CPU读出这个声明后,会分配给他所需的空间。并把这段空间的起始地址和长度写入配置空间
③应该使用CPU空间的哪一个地址来访问PCI空间的地址?设置PCI或者PCIE控制器,进行CPU地址空间与PCI地址空间的转换。去写PCI控制器里面的某个寄存器就可以,设置这两个地址空间之间的偏移值。
综上:使用PCI或者PCIE时,可以像访问内存一样访问外部设备。
2. PCI接口与PCIE接口
无论PCI接口与PCIE接口是什么样子,他们都能够传输地址,传输数据。
2.1 PCI接口
地址和数据是复用的。属于并行接口(并行接口传输速率高,但是当速率高到一定程度时,相互之间会产生较大的干扰)。
2.2 PCIE接口
属于串行接口。使用查分信号传输。