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应用总结相关推荐

  1. 对象检测目标小用什么模型好_小目标检测技术分析

    小目标检测技术分析 小目标检测及跟踪系统分为四个模块: · 硬件模块 该模块基于标准PCI总线,并配以超大规模可编程芯片(DSP.FPGA),具有极强的运算.处理能力. · DSP 程序模块 其功能主 ...

  2. PXI/CPCI板卡 PCI协议 9054 原理图PCB 可直接打板

    PXI/CPCI板卡 PCI协议 9054 原理图&PCB 可直接打板. ID:179999662690921642浪里个浪里个浪001

  3. Windows驱动——利用WinDriver开发PCI设备驱动程序

    摘要 WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发.作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运行效果.从 ...

  4. pcie总线与cpci总线_基于通用PCI接口功能芯片和热插拔控制器实现CPCI总线控制的设计...

    CPCI总线简介 CPCI总线是一个开放式.国际性技术标准,由PCI总线工业计算机制造商组织PICMG(PCI Industrial Computer Manufacturer Group)负责制定和 ...

  5. pci串口驱动安装失败_TSC TTP-243E Pluse装LTP并口驱动无法安装

    一.前言描述 接到客户报修说,电脑无法开机,即到哥上门维修立即安排人员到现场查看原因,到现场后,查看的确是电脑系统问题,重新安装系统,安装完成系统后,发现打印机无法使用.这个打印机型号是TSC TTP ...

  6. ni visa pci_CHINACOAT 2019“推荐品牌”赫普菲乐|PCI可名文化出品

    编辑整理@PCIChina1 信息来源:赫普菲乐 企业名片 天津赫普菲乐新材料有限公司是一家精细化学品研发.生产.销售企业.现主要从事功能添加剂研发.生产.销售业务,产品包括:炔二醇表面活性剂及其衍生 ...

  7. pci 中断冲突_Linux 内核PCI 中断

    对于中断, PCI 是容易处理的. 在 Linux 启动时, 计算机的固件已经分配一个唯一的中 断号给设备, 并且驱动只需要使用它. 中断号被存储于配置寄存器 60 (PCI_INTERRUPT_LI ...

  8. Kernel PCI总线框架

    2019独角兽企业重金招聘Python工程师标准>>>     1,PCI总线介绍 在PC时代的早期,外部设备通过ISA总线接入计算机.ISA总线只有24根地址线,因此其上的外部设备 ...

  9. Linux2.6内核PCI驱动程序开发

    一,PCI相关数据结构说明 1.1struct pci_driver 这个数据结构在文件/linux/pci.h里,这是Linux内核版本2.4之后为新型的PCI设备驱动程序所添加的,其中最主要的是用 ...

最新文章

  1. 相爱相杀:程序员的数学
  2. SSH远程访问及控制
  3. NB-IOT环境监测项目需求分析
  4. 为什么都说猫有九条命呢
  5. 8.11模拟:数据结构
  6. @Autowired注解实现原理
  7. 【Python实战】使用python计算多种类型到期还款日
  8. 报错, liquibase.exception.ValidationFailedException: Validation Failed
  9. Sharepoint 弹出消息提示框
  10. 同是4G标准,TD和FDD怎么区分?谁更快?
  11. 单代号网络图计算例题_如何把横道图转化成双代号网络图?
  12. ubuntu系统鼠标右键没有新建文档的解决方案
  13. DOS命令学习(从入门到精通)
  14. java实验三 敏捷开发与XP实践
  15. 奥运五环的绘制-进阶
  16. 扛住100亿次请求——如何做一个“有把握”的春晚红包系统?
  17. 和成熟男人谈恋爱是什么感觉
  18. Python 比较不错的社区
  19. 机器人关节角qq评估关节角速度qv---高增益观测器
  20. 大数据重点技术----数据丢失还原

热门文章

  1. C语言学习之字符串,字符,字节,结构和联合
  2. 视频下载神器,支持 80+ 网站,比迅雷还快!
  3. C语言:结构体和共用体
  4. HyperMesh 使用指南
  5. 单片机红外线c语言,自己写的51单片机的红外线遥控接收程序(C语言)
  6. iamsujie的简要自我介绍 Early2022
  7. Unity制作扫雷游戏
  8. WPF 基础控件之 ToggleButton 样式
  9. 【项目实战】环境搭建
  10. 字节跳动2021笔试题目