PCI开发
来源:互联网 发布:ucm指标源码 编辑:程序博客网 时间:2024/05/22 01:51
Linux 启动时,首先会枚举PCI设备,然后才能访问PCI设备的配置空间。要枚举PCI设备,首先要知道PCI设备的地址,枚举的方式跟平台本身的有关系。根据 PCI接口规范,IDSEL引脚被用来做为PCI设备的片选。使能该设备的IDSEL管脚,才可以读写该设备的配置寄存器组。但PCI规范并没有定义 IDSEL管脚的连接方法,所以根据各开发板PCI设备的IDSEL管脚硬件连线方法的不同,访问PCI设备配置空间的方法也不同。
有PCI设备的IDSEL管脚是通过一电阻串联到PCI总线的地址线AD中某一根,这样可通过在访问PCI总线的地址期内往AD这些地址线一个个的置高电平,如果读回来的配置寄存器数据有效,主要是看从配置空间读出的设备号和厂商号,说明该地址线连了某设备的 IDSEL,若无效,说明未连接。如图(a)
还有的把PCI设备的IDSEL管脚与CPU的一个GPIO端口相连,这样就可以通过控制GPIO来灵活的控制PCI总线上某设备的使能或者失效。在这种硬件连接下,访问PCI设备配置空间时,需要先置该设备IDSEL管脚所连接的GPIO为高,再读写配置寄存器组。如图(b)此种连接方式我目前没看见过。
Header Type:bit[6:0] 值为0: 普通PCI设备
值为1: PCI桥
值为2: Cardbus
Bit[7] 是否为单功能设备。通常确定一个PCI设备需要bus(8位,256) ,dev(5位,32个), func(3位,8个)。
Command:
pci_enable_device(struct pci_dev *dev)
此函数在PCI驱动程序的探测函数中(XXX_probe),激活设备。代码在/driver/pci/pci.c中。主要是设置command的bit[0]和bit[1],这两位的作用是开启内存映射还是IO映射。
PCI Bar寄存器
PCI设备都有一个配置空间,其中有六个基址寄存器,0x10~0x24(bar0~bar5)。
OS初始化时会往这基址寄存器中写基址。每一个PCI设备使用的基址寄存器数目不一定相同。下面以DSP设备为例。Dsp做从设备,通过PCI接口与主设备相连。
首先OS会往bar1寄存器中写0xFFFF FFFF,读取得到0xFF80 0000,bit[22:0]为只读,地址范围为8M,访问地址为bit[31:23]<< 22 | bit[22:0]。所以bit[31:23]是OS写入写入的值。这个值是跟平台相关的。
下图中bit[3]:表示是预取还是非预取空间,如果是预取空间,CPU可缓存其内容,并可进行各种优化。I/0寄存器不应该由CPU缓存,否则可能造成值不一致。所以当为I/O寄存器映射时,应为非预取类型。
Bit[0]:为是映射到IO空间,还是内存空间。
其他PCI设备应该类似。
- PCI开发
- PCI设备驱动开发
- PCI设备驱动开发
- PCI设备驱动开发
- PCI设备驱动开发
- PCI设备驱动开发
- PCI设备驱动开发
- PCI设备驱动开发
- PCI驱动开发
- Linux Pci 驱动开发
- Linux Pci 驱动开发
- Linux Pci 驱动开发
- PCI接口开发笔记
- PCI开发备忘录
- PCI 设备驱动开发 书籍
- Linux PCI设备驱动程序开发 --- PCI 体系结构(一)
- RTX系统下PCI PCI-E外设的驱动开发
- PCI
- 开篇语
- asterisk 移植到 嵌入式linux ppc_6xx 环境下
- VC++ 6.0 建立类向导(class wizard)错误提示Parsing error: Expected =.Input Line:
- [SQL]对于“无法用TCP/IP协议和远端SQL Server数据库连接”问题 收藏
- Java中的数组学习
- PCI开发
- Windows让我们养成了什么臭毛病 本篇文章来源于 黑基网-中国最大的网络安全站点 原文链接:http://www.hackbase.com/news/2010-05-10/35154.html
- 杭州杰科网络设备有限公司
- EAD端点准入防御解决方案
- getResource 路径
- 看论文,写论文,请用NoteExpress
- 嵌入式操作系统开发
- STAF Customize Service ---打Jar包
- [5.8] 时间