全新Linux教程-驱动大全-PCI和PCIe子系统-P1-从软件角度看PCI和PCIE

主题:为什么要引入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`

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LuckyDog0623

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值