PCI 总线学习笔记

PCI 总线学习笔记

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

转载请注明出处:http://blog.csdn.net/lg2lh/article/details/8042008

PCI的基本协议这里就不介绍了,由于一般的芯片协议都是集成好的,我仅仅须要大体了解即可,不须要做芯片,我感觉就不须要太了解协议。 

这里解说是基于PLX 的9054(9052)芯片为基础的,本人仅仅是入门,望批评指正。

PCI 总线学习笔记

一、地址映射与传输数据

上图中间部分是9054的内部结构图,9054实际上充当了一个“桥”的作用,即所谓的“桥片技术”。9054的作用事实上是把LOCAL总线端管理的一片地址,和PCI总线端管理的一片地址一一相应起来,即所谓的地址映射,而PCI总线与PC机的CPU管理的内存地址又是一一相应的,这样就实现了桥:CPU 地址 <=> PCI 地址 <=> LOCAL 地址。

一般系统PCI地址是CPU地址一部分,关于PCI地址与系统地址关系能够看还有一篇转载博文http://blog.csdn.net/lg2lh/article/details/8041029

上面仅仅是说了LOCAL总线与PCI总线以及CPU总线的相应关系,可是PCI技术的实际作用是进行传输数据。由内部结构图能够看出,9054内部没有什么存储单元,仅仅有几个FIFO。那系统是怎么进行传输数据的呢,大家都知道一段地址相应了一段存储空间,由上面地址映射能够知道,PCI芯片9054实际就是把LOCAL总线地址管理的外部存储空间的数据传输到PCI总线地址相应的内存空间中,及CPU的内存空间。或者是将内存中的传输数据到LOCAL总线管理的外部地址空间中去。Local端地址总线管理的存储空间一般由我们的控制芯片如FPGA或MCU提供。

二、PCI9054的基本知识

PCI9054的引脚主要分为3部分:PCI总线接口,LOCAL总线接口,及串行EEPROM总线接口。

LOCAL总线的数据宽度为32位,时钟可达50Mhz。以下介绍三种总线的作用,接口图例如以下图所看到的。

PCI 总线学习笔记

PCI总线接口:负责与PC机PCI总线通信,要接至PCI板卡的金手指处,对32位系统,金手指一共120跟信号线,A,B两面各60根,1-62,当中50,51处,无金手指引脚,共60根。

LOCAL总线接口:主要负责LOCAL端地址数据管理,与外围CPLD或MCU相连。

串行EEPROM总线接口:主要负责PCI9054的全部的寄存器配置,将寄存器配置烧写至EEPROM,PCI设备上电后载入EEPROM内容,完毕PCI9054的寄存器配置。主要包含:PCI配置寄存器,PCI本地配置寄存器,执行时间寄存器,DMA配置寄存器,I2O信息寄存器(消息队列寄存器?)。

 

PCI9054的PCI总线与LOCAL总线传输数据主要有三种模式:主模式,从模式,DMA模式。

而LOCAL总线的控制也有三种模式,M,C,J模式。当中经常使用C模式:地址数据总线非复用模式。

 

三、PCI9054的寄存器之间的关系

前面第一节讲到了PCI总线与LOCAL地址映射,以及PCI地址与PC机内存空间映射,一般PC机就觉得PCI地址就是内存空间地址,所以9054解决的就是把LOCAL总线管理的地址空间与内存空间地址相应起来,以下讲一下怎样通过9054寄存器配置映射关系。

要明白,是通过PLX_MON这个软件按要求配置好各寄存器内容,然后将数据烧写到EEPROM中,共17字。

首先看一下PCI9054寄存器主要有哪些,前面已说主要有五部分:PCI配置寄存器,PCI本地配置寄存器,执行时间寄存器,DMA配置寄存器,I2O信息寄存器(消息队列寄存器)

 

1、 PCI配置寄存器:主要用来配置与PCI总线相关的寄存器,比如,设备ID,供应商ID,类别代码,版本,系统供应商ID,子系统ID等。PCI设备ID为9054,供应商ID为10B5,类别代码0680。相应寄存器例如以下:

PCI 总线学习笔记

主要介绍一下最后四个寄存器,这四个主要完毕LOCAL端总线相关的寄存器在PCI总线的映射,以及LOCAL总线管理的地址空间在PCI总线上的映射。这四个寄存器都是由系统进行配置的,无法通过EEPROM配置。当中PCIBAR0,PCIBAR1,比較好理解,就是把LOCAL总线配置寄存器,DMA寄存器,执行寄存器映射到相应的内存空间去,配置的值就是他们在内存空间的起始地址

以下介绍PCIBAR2,PCIBAR3寄存器,后面会提到LOCAL总线管理了两部分地址空间,space0和space1。PCIBAR2,PCIBAR3就是把这两部分映射到PCI总线地址上,即把这两个空间映射到PC机的内存空间。PCIBAR2的配置值就是LOCAL总线端space0空间映射到PCI内存空间的起始地址,PCIBAR3的配置值则是LOCAL总线端space1空间映射到PCI内存空间的起始地址。而LOCAL总线端SPACE0和SPACE1在local端的实际地址及范围,则是由LOCAL配置寄存器决定。以下介绍LOCAL端配置寄存器。

 

2、 LOCAL配置寄存器

PCI 总线学习笔记

SPACE0相应的寄存器。

LAS0RRSPACE0基地址寄存器。这个寄存器与PCI总线的PCIBAR2寄存器相互相应,即LOCAL端的FPGA(MCU)就是通过訪问这个地址来訪问PCIBAR2所指的PCI内存空间

若此时LAS0RR设为0x80000001,而PCIBAR2设置值是0XE7000000.则对于PCI空间0XE7000000的訪问就会映射到对本地空间0x80000001的訪问。映射图例如以下。

PCI 总线学习笔记

LAS0BA:SPACE0空间的地址范围,在EEPROM的设置值是实际范围的补码

 

LAS1RR LAS1BA与上面两个同样,仅仅是用来映射SPACE1空间起始地址和范围的,不再赘述。

 

3、 DMA配置寄存器

PCI 总线学习笔记

4、 寄存器配置方法

最后介绍一下EEPROM配置字,配置字有长载入模式和额外长载入模式,当中长载入模式共17个长字,额外长载入模式则22个长字。当中LAS1RR LAS1BA这两个寄存器是在额外长载入模式中配置的。对PLX9054最重要的配置就是完毕对PCI寄存器和LOCAL寄存器的配置。17长字与22长字详细载入内容例如以下表。


PCI 总线学习笔记

PCI 总线学习笔记

PCI 总线学习笔记

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118116.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月10日 下午6:00
下一篇 2021年12月10日 下午6:00


相关推荐

  • 事务隔离级别与锁的对应关系_X1800S

    事务隔离级别与锁的对应关系_X1800S隔离级别org.springframework.transaction.annotation.Isolationpublic enum Isolation { DEFAULT(-1), READ_UNCOMMITTED(1), READ_COMMITTED(2), REPEATABLE_READ(4), SERIALIZABLE(8);}DEFAULT :这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是: READ_CO..

    2022年8月9日
    6
  • Java取整函数的使用

    在开发中,取整操作使用是很普遍的,所以Java在java.lang.Math类中添加了数字取整方法。在java.lang.Math类中主要包括以下几种取整方法。方法 说明 publicstaticdoubleceil(doublea) 返回大于等于参数的最小整数。 publicstaticdoublefloor(doublea) 返回小于等于参…

    2022年4月8日
    49
  • java版本结巴分词算法bug[通俗易懂]

    java版本结巴分词算法bug[通俗易懂]Nevertolate。所以明天再做也不会晚结巴分词的过程是:1、根据dict.txt中的词库构建一棵trie树,这棵树的实例只有一个,采取单例模式。2、每来一次分词构造,就顺着trie树进行分词,这将产生很多种结果,于是就生成了一个DGA,分词的有向无环图,终点是句子的左边或者右边(实际上应该分别以左边和右边为终点来做处理)。3、利用动态规划,从句子的终点开始,到这算回去(这个在动态…

    2022年6月25日
    26
  • leetcode-剑指offer59-I 滑动窗口的最大值

    leetcode-剑指offer59-I 滑动窗口的最大值2020-8-13这道题我实在没想到什么好方法,就暴力求解了。看了题解才知道stl里面还有双端队列这个数据结构,可是还是没看懂大佬们怎么用,只知道大概是维护了一个最小栈。等过几天更新大佬们的解法。https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/暴力解法classSolution{public:intget_Max(queue<int>que){

    2022年7月13日
    19
  • 一致性Hash算法以及java实现「建议收藏」

    一致性Hash算法以及java实现「建议收藏」目前我们很多时候都是在做分布式系统,但是我们需把客户端的请求均匀的分布到N个服务器中,一般我们可以考虑通过Object的HashCodeHash%N,通过取余,将客户端的请求分布到不同的的服务端。但是在分布式集群中我们通常需要添加或删除服务器,所以通过取余是不行的。一致性Hash就是为了解决这个问题。  ConsistentHashing一致性Hash的原理  1、环型Hash空间…

    2022年10月5日
    5
  • 背包九讲详解

    背包九讲详解背包九讲详解0-1背包问题完全背包问题多重背包问题

    2022年6月28日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号