MPC8314常用总线控制器原理及软件实现.docx
- 文档编号:27024752
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:35
- 大小:920.39KB
MPC8314常用总线控制器原理及软件实现.docx
《MPC8314常用总线控制器原理及软件实现.docx》由会员分享,可在线阅读,更多相关《MPC8314常用总线控制器原理及软件实现.docx(35页珍藏版)》请在冰豆网上搜索。
MPC8314常用总线控制器原理及软件实现
MPC8314常用总线控制器原理及软件实现
个人认为,CPU和操作系统是嵌入式设备的基础,扎实掌握这两方面的内容,对于产品开发而言会很有帮助。
本文档总结了个人在学习MPC8314参考手册过程中,对公司交换产品常用总线的认识和理解。
后续会基于MPC8314e300核操作手册、vxWorks操作系统介绍及源码,继续补充学习总结。
1.名词解释
Ø总线:
在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。
Ø总线标准:
总线标准是系统与各模块、模块与模块之间的一个互连的标准界面。
常见的总线标准有PCIE、I2C、SPI、LocalBus、UART、SMI等。
Ø外设:
外部设备简称“外设”,是指连在计算机主机以外的硬件设备。
对数据和信息起着传输、转送和存储的作用,是计算机系统中的重要组成部分。
我公司交换产品中常用的外设有CPLD、FPGA、FLASH、交换芯片、时钟芯片、PHY、SFP、温度电压传感器等。
2.MPC8314结构
MPC8314功能结构如下图所示。
图1MPC8314功能结构
图1中,e300c3为MPC8314的处理核心,我们写的代码经过工具链处理后生成的指令,就是由e300c3核执行的。
e300c3核前向兼容MPC603e核。
e300核是一个低功耗的嵌入式微处理器,基于Power(指令集)架构实现。
e300核实现32-bit指令架构,提供32-bit位宽的有效地址(4Gb),支持的整数类型为8,16,32比特,并且支持32和64比特的浮点类型数据。
e300核每个时钟周期可以处理两条指令。
e300核内部的功能结构如下图所示。
图2e300c3功能结构
这里需要注意的是,通常情况下,我们使用C语言进行嵌入式系统开发,CPU的硬件实现(例如e300核的功能架构),对于使用C语言编写应用程序(例如各种协议、适配、BCMSDK等)的程序员来说是透明的,不需要特别关注。
如何利用好CPU核的各种功能,是工具链(例如GCC,GNUCompilerCollection)及操作系统(例如vxWorks、Linux)开发人员需要关心的事情。
我们这里只是对e300c3核的功能结构做简单的介绍,有兴趣可以深入学习一下《e300PowerArchitecture™CoreFamilyReferenceManual》。
由图1可知,除了e300c3核,MPC8314还包括丰富的总线控制器,如PCIE、I2C、SPI、GMII等。
本文档后续重点介绍这些总线控制器,及现有的软件实现。
3.MPC8314内部存储映射
在介绍MPC8314各种总线控制器之前,首先应该弄清楚,MPC8314是如何提供总线控制器的配置接口给程序员的?
答案是IMMR(InternalMemoryMappedRegisters,内部存储映射寄存器)。
IMMR是一组寄存器,包含在以IMMRBAR为基址(IMMRBAR初始值为0xFF400000)的1Mbyte地址范围中。
IMMR是MPC8314提供的各个总线控制器、外围设备的配置接口。
Localaccesswindow是IMMR中的一系列寄存器,用于配置分配给各个外设的地址空间。
MPC8314中需要分配地址空间的外设有通过eLBC总线连接的外设(在我们的产品中,通常是CPLD、FPGA、FLASH)、通过PCI总线连接的外设、通过PCIE总线连接的外设(在我们的产品中,通常是业务芯片,例如博通的交换芯片BCM56334)和通过DDR总线连接的存储器。
IMMR中各寄存器的位置如图3所示。
图3IMMR内存映射
LocalAccessRegister位置如图4所示。
图4LocalAccessRegister
4.PCIE
我们首先介绍MPC8314的PCIE控制器。
之所以先总结PCIE,是因为技术组方向为基于交换芯片功能的MPLS/L3。
目前产品项目中使用的博通芯片,通过PCIE总线与CPU通信。
4.1.PCIE总线标准简述
PCIE总线标准在设备间定义了一个请求/完成关系,也就是一个设备请求,目标设备执行一个动作,并完成任务给予回复。
通常,这种请求和响应出现在一个链路组成的网络中,但是对于请求设备和完成设备来说,链路网络中间的组成为透明的。
这里我们先将中间网络看成一条链路,方便理解原理。
图5PCIE通信模型
每一个PCIE设备分为两个部分,传输(Tx)和接收(Rx),并且每部分分为三层—传输层、数据链路层、物理层层。
图6PCIE协议栈架构
PCIE事物报文在传输层(TL)和数据链路层(DLL)形成,后面的每一层在报文中增加必要的编码和填充。
当报文被接收时,他们被解码并且在同一层进行反向操作,以便这一层或设备应用层软件处理这些报文。
图7PCIE报文封装
4.2.MPC8314PCIE控制器简介
上面简单介绍了PCIE总线标准定义的架构,下面具体描述一下MPC8314PCIE控制器的实现。
如下图,MPC8314PCIE控制器由三部分组成:
PCIE核—管理传输,数据链路和MAC层,并且包括配置头(PCIE设备基本信息)和控制寄存器。
CSB桥—控制PCIE传输层和CSB(Coherentsystembus)之间的事物交互,包括读写DMA引擎,一个消息管理器和一组配置寄存器。
SerDes—控制PCIEMAC层和物理链路层之间的交互,包括一组配置寄存器。
图8MPC8314PCIE控制器功能架构
PCIE控制器将CSB连接到PCIE总线,PCIE总线是一个2.5-GHz的串行接口,支持一个通道(x1lane)。
作为主设备或目标设备时,PCIE接口可以实现高带宽数据传输。
当复位完成后,PCIE接口与对端执行链路位宽自协商,并且交换流控信息。
当链路自协商结束,控制器就可以执行操作了。
MPC8314内部实现时,支持队列机制跟踪输入、输出事物。
控制逻辑完成缓存管理,总线协议,事物交换和TAG生成。
同时,内存模块储存输入、输出数据。
MPC8314PCIE控制器可以工作在RC(rootcomplex)或EP(endpoint)模式。
RC设备连接CPU/内存子系统到I/O设备,而典型的EP设备为一个外设或I/O设备。
在RC模式,使用类型1配置头。
在EP模式,使用类型0配置头。
作为请求发起方,设备支持以最大128字节进行内存读写操作类型的事物。
另外,在RC模式,支持事物配置和I/O传输。
作为目标接口,设备接收对本地内存空间的读写操作。
除此之外,作为EP设备,接收对内部PCIE配置寄存器的配置。
4.2.1.MPC8314作为PCIE主设备
首先,CSB到PCIE的输出事物被映射到一个事物窗口,用于决定被发送PCIE事物的类型为输出。
来自CSB的事物可以是PCIE总线上的一个内存、I/O或配置事物,这依赖于窗口的属性。
一个事物报文可以被分成更小的报文,依赖于原始的请求大小,事物类型,PCIE设备控制寄存器中的MAX_PAYLOAD_SIZE(对于写操作)和PCIE设备控制寄存器中的MAX_READ_REQUEST_SIZE(对于读操作)。
设备执行PCIE顺寻规则检查来决定下一个将被发送到PCIE总线上的事物。
通常,事物依照从CSB接收到的顺序被服务。
只有当出现延误时,设备允许对事物进行重新排序,即跳过低优先级的事物,服务高优先级的事物。
对于发送写事物,当全部数据在CSB上被接收后,被转发到PCIE总线上时,认为事物结束。
对于非发送的写事物,当设备收到一个从对端返回的完成消息时,认为事物结束。
对于非发送的读事物,当设备收到从对端返回的所有的完成消息,并且将这些消息都转发给CSB后,认为事物结束。
有两种方法产生PCIE输出事物:
ØCSB上连接的主设备,例如e300核,直接初始化一个事物。
这被称作“PIO”,以我们的产品为例,博通交换芯片CMIC寄存器的读写,都是以PIO的方式执行的。
Ø读写DMA引擎,DMA引擎是PCIE控制器CSB桥的一部分,用于与DMA控制器通信,以我们的产品为例,博通交换芯片的一些寄存器表(L2、统计等)的读写、收发包,都是以DMA的方式执行的。
DMA机制对于传输大块的数据效率更高。
输出窗口被上面两种方式共用。
4.2.2.MPC8314特性
Ø遵循PCIExpressBaseSpecification,Version1.0a。
Ø支持RC、EP模式。
Ø32bit和64-bit支持。
Ø两个PCIE链路,每条链路一个通道。
Ø访问所有PCIE内存。
ØRC模式下作为请求者访问I/O地址空间。
Ø发送processor-to-PCIE和PCIE-to-memory写事物。
Ø存储和管理事物顺序规则。
ØPCIE配置寄存器。
Ø基础和增强的错误通告。
Ø每个控制器由一个虚拟通道。
Ø对于内存读写操作,支持128字节最大静荷大小。
Ø每个控制器4个输入通用目的事物窗口。
Ø每个控制器4个输出事物窗口。
Ø从每个控制器最多发出4个PCIE输出事物。
Ø支持流控。
ØPCIE消息和中断。
Ø来自CSB的事物最大32字节静荷。
Ø从消息或错误发现产生中断。
Ø每个控制器支持读写DMA引擎。
4.2.3.外部信号描述
PCIE定义两个设备之间的连接为链路,链路可以有单个通道或多个通道组成。
每个通道由内含数据时钟的差分发送、差分接收组成。
下图描述了外部PCIE接口信号。
(iTN2100-NTU-4GF板卡使用的BCM56334交换芯片,PCIE接口需要有一个参考时钟输入,结合硬件原理图,应该来自557G-05ALF)。
图9MPC8314PCIE控制器外部信号
4.2.4.PCIE配置头
PCIE标准中定义了每个PCIE设备配置空间的前64字节为预先定义的配置头,其中前16字节按统一方式编码。
下面两图分别为MPC8314PCIE控制器和BCM56334配置空间前16字节的编码。
由图也可以看出,这部分不同设备以相同格式编码。
图10PCIE配置空间前16字节编码
上面两图中,VendorID标识厂商,只读;DeviceID标识设备型号,只读;COMMAND决定设备是否支持PCIE内存空间访问等;STATUS表明检测到的状态;ClassCode标识设备类型和工作模式;CacheLineSize、LatencyTimer为兼容PCI2.3,在PCIE设备功能中不使用;HeaderType决定工作模式,RC或EP;BIST为可选的保留寄存器。
剩余的48字节由设备功能决定,不同设备会有不同,可参考相应手册中的描述。
RC模式下,MPC8314PCIE控制器前64字节的配置头为类型1,格式如下。
图11MPC8314RC模式下PCIE配置空间前64字节编码
4.2.5.MPC8314PCIE控制器架构
4.2.5.1.地址转换窗口(AddressTranslationWindows:
ATMUs)
设备(这里指MPC8314的PCIE控制器,下同)包括四个通用的输入和输出地址转换窗口,用来在PCIE域和CSB域(这里指本地地址空间)之间进行映射。
对于RC和EP模式,输出窗口是等同的,并且他们的配置寄存器驻留在CSB桥空间。
对于输入窗口,RC模式和EP模式的配置寄存器是不同的。
EP模式下的输入基地址寄存器(BARs)驻留在PCIE核的标准配置头空间中,RC模式下输入基地址寄存器(BARs)驻留在CSB桥空间。
由于CSB域只支持32bit地址空间,输出基地址寄存器和输入转换寄存器都是32bit的。
下图说明了基地址寄存器和转换地址寄存器之间的有效组合。
图12MPC8314PCIE控制器地址转换窗口
输出窗口的属性由PEX_OWARn寄存器控制,RC输入窗口的属性由驻留在CSB桥地址空间的PEX_RCIWAR寄存器控制。
EP输入窗口的属性由CSB桥空间中的转换寄存器PEX_EPIWTARn和PCIE核地址空间中的配置空间寄存器PCIEBAR控制寄存器控制。
4.2.5.2.字节交换
字节交换在执行到CSB的输入事物(写入或回复)或者到PCIE的输出事物(写)时执行。
Ø输出字节交换
当向PCIE执行包含数据的输出事物时(写),字节交换将被执行,下图说明了输出数据转换。
图13MPC8314PCIE控制器字节交换
Ø输入字节交换
当一个到CSB的包含数据的输入事物被执行时(写或响应),字节交换将被执行。
4.2.5.3.事物顺序规则
通常情况下,事物按照他们被接收到的顺序执行。
然而,当产生延迟时,例如内部缓冲区满了,事物能够被重新排序。
下面是发送下一个输出请求的顺序规则。
一个posted请求能够并且将绕过所有其他的请求,除了另一个posted请求。
只有当PCIE报文头中的宽松bit(relaxedorderingbit)被置位时,completion能够并且将绕过no-posted和posted请求。
一个non-posted请求不能绕过一个posted或non-posted请求,但是能够绕过completion,当宽松bit被置位时。
4.2.5.4.内存空间地址
一个PCIE内存事物能够处理一个32或64bit的地址空间。
对于32bit地址报文,PCIE头中的Fmt[0]域为0,对于64bit地址报文为1。
一个内存读事物设置PCIE头中的Type[4:
0]域为00000并且Fmt[1]为0。
一个内存写事物设置PCIE头中的Type[4:
0]域为0000并且Fmt[1]为1。
作为一个发起者,控制器支持依照窗口转换地址发送32或64bit内存报文。
任何来自CSB的事物,当经过转换窗口处理后,如果被转换的地址大于4G,将被以64bit内存报文发送。
否则,发送32bit内存报文。
作为目标设备,控制器能够解码32或64bit内存报文,使用两个32bit的输入窗口和两个64bit的输出窗口。
所有输入地址被转换到32bit宽度的CSB地址。
对于我们的产品,博通交换芯片的CMIC寄存器,被映射到内存空间地址。
4.2.5.5.I/O空间地址
PCIE控制器作为目标设备不支持I/O事物。
作为发起端,控制器能够在RC模式下通过配置输出事物窗口属性中的一个来发送I/O事物。
所有I/O事物只能访问32bit地址I/O空间。
一个I/O读事物需要将PCIE头中的Type[4:
0]配置为00010并且Fmt[1]为0。
一个I/O写事物需要将PCIE头中的Type[4:
0]配置为00010并且Fmt[1]为1。
对于我们的产品,和博通交换芯片通信时,没有用到I/O地址空间。
4.2.5.6.配置空间地址
作为一个发起者,当被配置为RC模式时,控制器支持类型0和类型1配置头。
生成一个配置事物的唯一方法是使用设置为配置类型的输出ATMU窗口。
一个配置事物能够命中控制器内部的配置空间,或被发送到PCIE总线上:
一个类型0的配置读事物将PCIE头中的Type[4:
0]设置为00100并且Fmt[1]为0。
一个类型0的配置写事物将PCIE头中的Type[4:
0]设置为00100并且Fmt[1]为1。
一个类型1的配置读事物将PCIE头中的Type[4:
0]设置为00101并且Fmt[1]为0。
一个类型1的配置写事物将PCIE头中的Type[4:
0]设置为00101并且Fmt[1]为1。
需要注意的是所有发送到PCIE的配置事物都需要一个回复,无论他们是读或写。
EP模式下,控制器不产生配置事物。
然而,输入配置事物在EP模式下是支持的。
对于我们的产品,博通交换芯片的PCIE控制头,被映射到配置空间地址。
作为RC的PCIE控制器配置访问机制,利用内存映射地址空间访问设备配置寄存器。
这是通过设置输出窗口PEX_OWARn寄存器实现的。
基地址寄存器,PEX_OWBARn,为配置事物设置CSB地址窗口,被低12bit有效定义,最小为4Kbytes或更大的窗口大小。
除此之外,事物寄存器,PEX_OWTARLn,定义剩下的bit。
这种方式下,CSB内存地址决定了配置寄存器访问和返回地址寄存器内容的内存数据。
从CSB本地空间到PCIE配置空间地址的映射定义在下图中。
图14内存空间地址映射
4.2.5.7.消息
下图列出了RC支持的消息。
图15MPC8314PCIE控制器支持的消息类型
4.2.6.中断
INTx和消息信号中断(MSI:
MessageSignaledInterrupt)的产生和管理都是支持的;然而对于RC或EP模式的支持情况是不同的。
RC管理INTx消息和MSI中断
4.2.6.1.INTx消息管理
对于PCIE来说,MSI是首选的中断信号机制。
然而,在RC模式下,PCIE控制器支持INTx虚拟线路中断信号机制(在PCIE基础说明中有描述,有兴趣可以查一下)。
当一个控制器接收到一个输入INTx消息,它在CSB系统中断状态寄存器(PEX_CSMISR)中设置适当的INTA、INTB、INTC或INTDbit。
如果这个中断在CSB的系统中断使能寄存器(PEX_CSMIER)和IPIC中被使能,将产生一个到e300核的中断。
4.2.6.2.MSI管理
一个MSI中断流程包含的地址偏移必须命中IMMRBAR窗口(窗口0),指向IPICMISR寄存器中的一个。
注意主机软件必须配置EP的MSI能力寄存器,以便一个产生自设备的MSI循环被正确的路由到IPIC中的MISR寄存器,从而产生对应的中断到内核。
4.2.7.DMA
软件使用DMA引擎来发起CSB子系统和PCIE系统之间的内存传输,来代替PIO。
DMA引擎提供控制寄存器来使能传输。
PCIECSB桥支持两个独立的引擎,分别用于DMA读、写操作,分别叫做RDMA和WDMA。
DMA引擎使用基于描述符的编程模型。
4.2.7.1.DMA描述符格式
如下图所示,DMA描述符为5个双字宽度,由控制和状态字段组成。
软件负责在本地内存空间准备描述符,并设置相关的DMA控制寄存器。
硬件在DMA数据传输完成后为一个或一串描述符更新状态寄存器,并通报错误。
图16MPC8314DMA描述符
4.2.7.2.写DMA
PCIE或CSB软件能够通过对写DMA引擎寄存器编程,来实现从CSB发送数据到PCIE。
当控制寄存器被编程完后,写DMA引擎通过DMA读master发送一个CSB读请求。
为了提高系统性能,将根据CSB地址限制对DMA请求进行分片。
如果所有的数据都能够在一次CSB请求中被获取到,不会执行分片。
否则,第一个分片起始于PCIE开始地址,结束于第一个CSB地址界限。
除了最后一个以外的所有其他分片从CSB地址界限开始到下一个地址界限结束;剩下的数据,为最后一个分片。
当收到一个CSB读请求的回应时,所有分片根据PCIEMPS被打包进PCIE内存写请求中。
所有从DMA控制器请求到的数据,属于同一个数据流。
例如,当一个从地址0开始的256bit读请求被分片为4个64bitCSB读请求时,它将被分片成两个128bitPCIE写请求,而不是64比特写请求。
如果所有的数据都被打包到写请求中,不会发生分片。
否则,以MPS为限制进行分片。
当所有分片获得OKAY的CSB回应后,DMA数据传输完成。
4.2.7.3.读DMA
读DMA引擎能够被PCIE或CSB软件编程来发送数据从PCIE系统到CSB系统。
当控制寄存器被配置好后,读DMA引擎发送一个PCIE读请求。
DMA读请求和其回复根据MRRS进行分片。
为了提高系统性能,当收到一个PCIE读请求完成消息,读请求回复中的数据根据CSB地址限制进行分片。
DMA引擎向CSB发送写请求。
当所有分片获得一个PCIE成功完成的回复,DMA数据传输完成。
4.2.7.4.基于描述符的DMA
基于描述符的DMA操作有一个特殊的格式,host可以存储关于数据传输的信息,例如源地址、目的地址、数据传输大小、下一个描述符的位置等。
host可以构造一系列描述符,并在本地内存中存储它们。
host要配置DMA控制寄存器来说明第一个描述符的位置。
DMA控制寄存器是CSB桥设备相关寄存器的一部分。
配置完控制寄存器和描述符后,host可以继续其他操作。
DMA引擎负责从host内存中获取描述符,从host内存中移出数据,或将数据移入host内存中。
4.2.7.5.描述符的类型
Ø链型描述符
Ø块型描述符
图17描述符类型
4.2.7.6.DMA中的软硬件关系
硬件和软件通过描述符、控制寄存器和中断进行通信。
软件配置控制寄存器来通知硬件第一个描述符的位置。
软件通过在host内存或直接在描述符寄存器中构造描述符,提供数据传输的信息给硬件。
当完成描述符构造和配置DMA控制寄存器后,软件设置开始bit,触发DMA控制器来开始操作。
当检测到开始bit置位,DMA控制器通过DMA寄存器中配置的参数来开始描述符获取和数据传输,然后清除开始bit。
DMA控制器执行符合描述符内容的传输,然后更新描述符和DMA状态寄存器来指示传输操作的状态。
描述符状态在host内存中被更新。
如果使能,产生一个中断到host。
在任何时间,软件能够解析本地host内存中描述符链的完成bit,来决定哪一个节点是DMA控制器已经操作过的,已经成功完成的。
状态寄存器给出传输状态的细节。
在n个描述符的数组中,如果DMA遇到一个没有配置的描述符(ready==0),它首先执行其他合法描述符的操作,然后如果使能,发送一个中断给host,传输能够通过下面两种方式恢复:
当重传计时器到时后,DMA控制器自动的获取相同的一组描述符。
如果描述符就绪,继续执行,否则在后面继续检查。
软件能够强制立即恢复,通过禁止、重新使能DMA。
当DMA控制器完成最后一个描述符的数据传输,更新描述符和状态寄存器。
如果使能,将产生一个中断。
DMA引擎转移到IDLE状态,直到软件重新出发DMA传输。
4.2.8.软件实现
我们目前的实现中,通过MPC8314PCIE控制器读、写博通交换芯片的操作,软件实现很简单,基本上就是读、写一个地址。
比较复杂的软件操作,是MPC8314PCIE控制器驱动初始化部分,由于该驱动基于vxWorks6.7提供的vxBus开发,牵扯到vxBus的软件架构,这里先做遗留问题记录,后面在介绍vxWorks驱动时,解决这个问题。
5.I2C
在计算机系统中,I2C也是一种常用的总线标准。
公司交换产品中,EEPROM、SFP、温度电压传感器就是通过I2C总线与CPU实现通信的。
5.1.I2C总线标准简述
I2C(Inter-IntegratedCircuit)总线是由PHILIPS公司开发的两线式串行总线(串行数据(SDA)和串行时钟(SCL)),用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。
它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。
通过I2C总线连接的设备分为主、从两个角色,主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。
此时,任何被寻址的器件都被认为是从机。
标准的I2C传输由下面几个过程组成:
ØSTART;
Ø从设备地址传输;
Ø数据传输;
ØSTOP。
下图说明了这个过程。
图18I2C时序图
5.1.1.START
当I2C总线没有被占用(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MPC8314 常用 总线 控制器 原理 软件 实现