PCI9054 总结(讲解非常清楚)
转载自:http://blog.csdn.net/lg2lh/article/details/8042008
PCI的基本协议这里就不介绍了,因为一般的芯片协议都是集成好的,我只需要大体了解就行,不需要做芯片,我感觉就不需要太了解协议。
这里讲解是基于PLX 的9054(9052)芯片为基础的,本人只是入门,望批评指正。
一、地址映射与数据传输
上图中间部分是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总线接口:负责与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。对应寄存器如下:
主要介绍一下最后四个寄存器,这四个主要完成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配置寄存器
SPACE0对应的寄存器。
LAS0BA:SPACE0基地址寄存器。这个寄存器与PCI总线的PCIBAR2寄存器相互对应,即LOCAL端的FPGA(MCU)就是通过访问这个地址来访问PCIBAR2所指的PCI内存空间。
若此时LAS0RR设为0x80000001,而PCIBAR2设置值是0XE7000000.则对于PCI空间0XE7000000的访问就会映射到对本地空间0x80000001的访问。映射图如下。
LAS0RR:SPACE0空间的地址范围,在EEPROM的设置值是实际范围的补码。
LAS1BA / LAS1RR 与上面两个相同,只是用来映射SPACE1空间起始地址和范围的,不再赘述。
3、 DMA配置寄存器
4、 寄存器配置方法
最后介绍一下EEPROM配置字,配置字有长加载模式和额外长加载模式,其中长加载模式共17个长字,额外长加载模式则22个长字。其中LAS1RR,LAS1BA这两个寄存器是在额外长加载模式中配置的。对PLX9054最重要的配置就是完成对PCI寄存器和LOCAL寄存器的配置。17长字与22长字具体加载内容如下表。
PCI9054 总结(讲解非常清楚)的更多相关文章
- PCI9054 学习小结
PCI的基本协议这里就不介绍了,因为一般的芯片协议都是集成好的,我只需要大体了解就行,不需要做芯片,我感觉就不需要太了解协议. 这里讲解是基于PLX 的9054(9052)芯片为基础的,本人只是入门, ...
- PHP与API讲解(一)
了解API: 在使用与创建自己的API之前我们需要先了解什么是API! API代表应用程序编程接口,而接口指的是一个特定的服务.一个应用程序或者其他程序的公共模块. 理解SOA(面向服务的架构):SO ...
- 微信小程序(微信应用号)组件讲解
这篇文章主要讲解微信小程序的组件. 首先,讲解新建项目.现在有句话:招聘三天以上微信小程序开发,这个估计只能去挖微信的工程师了.技术新,既然讲解,那我们就从开始建项目讲解. 打开微信web开发者工具, ...
- 免费公开课,讲解强大的文档集成组件Aspose,现在可报名
课程①:Aspose.Total公开课内容:讲解全能型文档管理工具Aspose.Total主要功能及应用领域时间:2016-11-24 14:30 (暂定)报名地址:http://training.e ...
- EventBus总线讲解
在我们公司经常用到总线,具体的总线是什么让我理解我也不清楚,但是在这几个月下来,我已经知道总线如何使用,现在加上示例讲解总线如何使用. 1. 首先我们的新建一个类,这个类其实是用于总线传递的模型 us ...
- FTP的搭建与虚拟目录作用<之简单讲解>
操作系统:win7 VS2010编写WebService与在IIS的发布<之简单讲解>中我已经说了IIS安装与使用,不明白的可以跳过去看. 1.添加FTP站点 2. 3. 4. 5. zq ...
- Restful 介绍及SpringMVC+restful 实例讲解
restful不是一个框架,称为一种编码更烦更贴切吧,其核心类位于spring-web.jar中,即RestTemplate.class restful是rpc通过http协议的一种实现方式,和web ...
- 实例讲解react+react-router+redux
前言 总括: 本文采用react+redux+react-router+less+es6+webpack,以实现一个简易备忘录(todolist)为例尽可能全面的讲述使用react全家桶实现一个完整应 ...
- 【Spring】SpringMVC入门示例讲解
目录结构: // contents structure [-] SpringMVC是什么 Spring MVC的设计原理 SpringMVC入门示例 1,复制Jar包 2,Web.xml文件 3,My ...
随机推荐
- myls
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unist ...
- webpos登录不上
jo=new JSONObject(((java.sql.Clob)s).getSubString(1, (int) ((java.sql.Clob)s).length()));
- Socket通信方面
服务端 Console.WriteLine("Starting "); Socket listener = new Socket(AddressFamily.InterNetwor ...
- CentOS 7 环境下GitLab安装及基本配置
新实验室要求重新建设GitLab,对于我来讲,是第一次有机会当元老参与实验室的建设.下面分享我自己的实测经验: 1. 安装依赖软件并设置开机启动 yum install curlpolicycoreu ...
- 使用VMware Workstation 14 Player或者Oracle VM VirtualBox安装Fedora-Workstation-netinst-x86_64-27-1.6操作系统的相关记录
无论是在使用哪个(VMware或者Oracle VM)都遇到了一个问题:即使在安装完Fedoras操作系统之后,进行Reboot还是会进入之前一摸一样的安装界面,相当于再次安装.然而最最有效的解决办法 ...
- Android方法引用超过65535的解决方式
//在app/build.gradle android { compileSdkVersion buildToolsVersion "24.0.1" defaultConfig { ...
- 【EMV L2】EMV终端数据
Account TypeAcquirer IdentifierAdditional Terminal CapabilitiesAmount, Authorised (Binary)Amount, Au ...
- Visual C++ 6.0中if..else..的简单用法和基本格式
# include <stdio.h> int main (void) { float score; printf("请输入您的考试成绩:"); scanf(" ...
- i3wm 调节音量
i3wm,设置调节音量的快捷键 configure file: ~/.config/i3/config add # for sound control bindsym XF86AudioRaiseVo ...
- 执行shell脚本出错'\r': command not found
在linux中执行脚本时出错 $'\r': command not found 错误原因是在脚本中有空行,如果脚本是在Windows下进行编辑之后上传到linux上去执行的话,就会出现这个问题. 因为 ...