PCI 9054应用总结
1 PCI配置空间
1.1 BAR大小的确定
Linux kernel读取PCI BARn表示的内存长度时,先直接读取BARn的值,这个就是地址,然后再向BARn写入0xffff,ffff,再读取BARn的值就是需要的内存长度(忽略bit3到bit0的处理),但是此时由于BARn的值已经变成长度了,所以还需要将第一步读取出来的地址再写回BARn。
- 如果可操作的最低位为bit12,那么BAR可申请的最小地址空间大小为4KB(2^12)
- 如果可操作的最低位为bit20,则该BAR可申请的最小地址空间大小为1MB(2^20)
1.2 Linux pcibios_init
x86 BIOS专门提供了针对PCI总线的操作,这些操作里就包括了总线枚举的整个过程,Linux kernel中的宏CONFIG_PCI_BIOS。在系统加电以后自检时,就会完成对PCI总线的枚举,之后Linux对PCI配置空间的访问都是通过BIOS调用的形式进行,提供有这些功能和服务的BIOS就称之为PCI BIOS 。需要注意的是Linux x86_64是不采用PCI BIOS访问PCI配置空间的,而是内核实现了直接访问PCI配置空间的函数(CONFIG_PCI_DIRECT)。
pcibios_init()的第一个功能是在内存中找到BIOS程序的代码(参考函数pci_find_bios),然后将调用BIOS例程的读写PCI配置空间的代码封装成函数赋值给pci_ops。
pci_ops里面的函数指针都是用来读写PCI配置空间的,把要读写的值和设备号告诉这些函数,在这些函数中调用了BIOS例程,并把这些值当作参数传给BIOS例程,BIOS再根据设备号和要读写的值来进行操作。所以Linux x86驱动程序中pci_read_config_byte()最终调用的是pci_bios_read_config_byte()。
zcat /proc/config.gz | grep PCI
2 PCI9054三种工作模式
M模式:直接为Motorola公司的MPC850和MPC860准备的非复用接口
C模式:地址、数据线不复用
J模式:地址数据线复用
Figure 2-1 PCI 9054 Internal Block Diagram
3 PCIBAR地址解析
BAR0:Memory映射;存放PCI9054中的Local Configuration Registers、Runtime Registers和DMA Registers在PCI总线中的地址映射
BAR1:IO映射;存放PCI9054中的Local Configuration Registers、Runtime Registers和DMA Registers在PCI总线中的地址映射
BAR2:BAR2 + offset = LAS0BA + offset;其中LAS0BA为Local Address Space 0/1 Base Address的缩写
BAR3:BAR3 + offset = LAS1BA + offset
如果主机要访问BAR2和BAR3,需要设置位于BAR0空间的LAS0BA和LAS1BA的bit0为1
4 Local寄存器访问
MCU拉低CCS#片选,MCU访问的地址符合:片选BASE + offset
5 DMA
5.1 DMA
DMA模式传输外接FIFO的数据:FIFO本身没有地址,在调用P9054DMAReadWriteBlock()等函数时Local地址的设置,利用PCI9054 的Local地址线的高位通过组合逻辑电路产生一个信号去控制FIFO上的允许信号,而低位地址线可以不接,这样只有在设定的地址范围内才会选中FIFO进行操作,这就等于产生了一个“片选”信号。
5.2 showcase
PLX9056 for Fulcrum Microsystems switch FM2112.
6 开发工具
Juno WinDriver:可以自动生成inf文件和驱动框架
PlxMon
7 Abbreviations
FM2112: Fulcrum Microsystems switch IC, was acquired by Intel in July, 2011
PCI 9054应用总结相关推荐
- 对象检测目标小用什么模型好_小目标检测技术分析
小目标检测技术分析 小目标检测及跟踪系统分为四个模块: · 硬件模块 该模块基于标准PCI总线,并配以超大规模可编程芯片(DSP.FPGA),具有极强的运算.处理能力. · DSP 程序模块 其功能主 ...
- PXI/CPCI板卡 PCI协议 9054 原理图PCB 可直接打板
PXI/CPCI板卡 PCI协议 9054 原理图&PCB 可直接打板. ID:179999662690921642浪里个浪里个浪001
- Windows驱动——利用WinDriver开发PCI设备驱动程序
摘要 WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发.作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运行效果.从 ...
- pcie总线与cpci总线_基于通用PCI接口功能芯片和热插拔控制器实现CPCI总线控制的设计...
CPCI总线简介 CPCI总线是一个开放式.国际性技术标准,由PCI总线工业计算机制造商组织PICMG(PCI Industrial Computer Manufacturer Group)负责制定和 ...
- pci串口驱动安装失败_TSC TTP-243E Pluse装LTP并口驱动无法安装
一.前言描述 接到客户报修说,电脑无法开机,即到哥上门维修立即安排人员到现场查看原因,到现场后,查看的确是电脑系统问题,重新安装系统,安装完成系统后,发现打印机无法使用.这个打印机型号是TSC TTP ...
- ni visa pci_CHINACOAT 2019“推荐品牌”赫普菲乐|PCI可名文化出品
编辑整理@PCIChina1 信息来源:赫普菲乐 企业名片 天津赫普菲乐新材料有限公司是一家精细化学品研发.生产.销售企业.现主要从事功能添加剂研发.生产.销售业务,产品包括:炔二醇表面活性剂及其衍生 ...
- pci 中断冲突_Linux 内核PCI 中断
对于中断, PCI 是容易处理的. 在 Linux 启动时, 计算机的固件已经分配一个唯一的中 断号给设备, 并且驱动只需要使用它. 中断号被存储于配置寄存器 60 (PCI_INTERRUPT_LI ...
- Kernel PCI总线框架
2019独角兽企业重金招聘Python工程师标准>>> 1,PCI总线介绍 在PC时代的早期,外部设备通过ISA总线接入计算机.ISA总线只有24根地址线,因此其上的外部设备 ...
- Linux2.6内核PCI驱动程序开发
一,PCI相关数据结构说明 1.1struct pci_driver 这个数据结构在文件/linux/pci.h里,这是Linux内核版本2.4之后为新型的PCI设备驱动程序所添加的,其中最主要的是用 ...
最新文章
- 相爱相杀:程序员的数学
- SSH远程访问及控制
- NB-IOT环境监测项目需求分析
- 为什么都说猫有九条命呢
- 8.11模拟:数据结构
- @Autowired注解实现原理
- 【Python实战】使用python计算多种类型到期还款日
- 报错, liquibase.exception.ValidationFailedException: Validation Failed
- Sharepoint 弹出消息提示框
- 同是4G标准,TD和FDD怎么区分?谁更快?
- 单代号网络图计算例题_如何把横道图转化成双代号网络图?
- ubuntu系统鼠标右键没有新建文档的解决方案
- DOS命令学习(从入门到精通)
- java实验三 敏捷开发与XP实践
- 奥运五环的绘制-进阶
- 扛住100亿次请求——如何做一个“有把握”的春晚红包系统?
- 和成熟男人谈恋爱是什么感觉
- Python 比较不错的社区
- 机器人关节角qq评估关节角速度qv---高增益观测器
- 大数据重点技术----数据丢失还原