当前位置:文档之家› 基于MPC8548E的PCI总线驱动实现

基于MPC8548E的PCI总线驱动实现

基于MPC8548E的PCI总线驱动实现

缠婵,周利清

北京邮电大学电信工程学院,北京(100876)

E-mail:shirley_chan@https://www.doczj.com/doc/7c7034701.html,

摘要:本文主要介绍了基于MPC8548E芯片的PCI总线驱动程序的设计及实现。MPC8548E是FreeScale公司的一款PowerPC架构的嵌入式处理器芯片,其片上系统SOC (system on chip)提供了两个PCI控制器,用于控制CPU与外部以太网卡等设备的通信。关键词:嵌入式系统;PCI总线;驱动程序

1.引言

MPC8548E是一款PowerPC架构的CPU芯片,带有两个PCI控制器,控制PCI总线以便实现CPU与外部设备,如以太网卡、E1卡、SAE卡、POS卡的互联和访问。PCI总线驱动主要完成的任务是在系统初始化时进行PCI控制器的设置和PCI设备的初始配置,保证设备可以被正常访问。

本文后续内容如下,第二节概括介绍了PCI总线,第三节具体描述了PCI总线驱动的设计及实现过程。

2.PCI总线简介

PCI总线是一种被广泛应用于嵌入式系统的高性能外围设备接口总线,在本文描述的系统中,CPU的PCI控制器是唯一的主设备。PCI设备有3种物理空间:配置空间、memory 空间和I/O空间。我们在总线初始化阶段比较关注的是配置空间。

2.1 PCI 配置空间

配置空间是长度256字节的一段具有特定结构的地址空间,其中前64字节为头标区,如图1所示,其余192字节为设备相关信息。配置空间在系统运行的任何时间都可以访问,不仅限于在系统初始化时配置[3]。

下面介绍一下配置头中的几个重要的区域[2]。

Vendor ID:由PCI-SIG统一分配的,如FreeScale为0x1057。

Device ID:由供应商分配,如MPC8548E为0x0008。

Class Code:分为基本分类码和子类代码。基本分类码如:00h表示网络控制器,06h

表示桥路设备。在本文论述的系统中,主要对于PCI桥设备和普通设备进行配置。

Base Address Register:基地址寄存器,其中,bit0= 1 表示I/O空间映射, bit0= 0表示memory空间映射。所有的PCI设备必须实现存储器空间映射。系统初始化后,该寄存器的值表示PCI设备映射到系统空间的起始物理地址。此外,通过向该寄存器写全1,读出的值表示该设备所需memory空间或I/O空间的大小。

Command:命令寄存器,本系统中主要使用该寄存器控制I/O空间或memory空间是否可以访问。

Status:用于记录PCI总线有关事件的状态信息。

Interrupt Line:PCI设备的数据中断号。

Cache Line:初始化时使用默认值,根据系统性能调整。

图1 PCI配置空间头

2.2访问PCI设备的配置空间

CPU通过PCI总线访问某一设备的配置空间需要通过总线号、设备号、功能号和寄存器号的组合建立唯一标识, 然后通过配置机制进行访问。

MPC8458E提供了两个用于配置访问的寄存器[2]:配置地址寄存器(PCI Configuration Address Register)和配置数据寄存器(PCI Configuration Data Register)。

0 1 78 1516 2021 23 24 29 30 31

图2 配置地址寄存器

总线号:范围0-255;

设备号:在一条给定的总线上区分各设备的标志,由硬件规定,范围0-31;

功能号:标识多功能设备,范围0-7;

寄存器号:目标设备配置空间偏移量,0-255。

配置访问需要将访问设备的总线号、设备号、功能号和寄存器偏移写入配置地址寄存器,如果是读操作,需要把数据从配置数据寄存器中读出来,如果是写操作,需要将值写入配置数据寄存器。

3.驱动程序的设计与实现

3.1系统架构

本文描述的系统如图3所示,PCI控制器是CPU自带的,控制器下一级总线接两个PCI-PCI桥,每个桥片下的二级总线上再连接PCI设备或桥。为二级总线设备预留的总线号为bridge1:bus1-bus31;bridge2:bus32-bus63。二级总线上的PCI设备可以是诸如网络控

制器这样的普通设备,也可以是桥设备。PCI控制器作为系统中的唯一host,发起对其他设备的访问。

bus 0 .

.

. bus 31

bus 32

.

.

.

bus 63图3 PCI总线结构

3.2总线驱动的实现

PCI总线驱动的代码结构如图4所示。包括保存PCI设备信息的软表初始化,PCI控制器初始化以及搜索设备的过程。

图4 PCI总线初始化过程

3.2.1 软表初始化

为了能方便地对PCI设备进行操作,我们把PCI设备的一些常用的变量保存在一个结构体中,并在PCI设备初始化时给它赋值。这个全局变量的成员包括:PCI控制器的基址,设备所属的PCI控制器号,总线号,设备号,中断号,内存基址,内存地址大小,I/O基址,I/O地址大小。

3.2.2 PCI控制器初始化

首先需要在CPU和PCI控制器之间建立地址映射,MPC8548E通过本地访问窗(Local Access Window)把分配给PCI设备的地址通知CPU。本文描述的系统中,我们把空间为0x8000,0000-0x8fff,ffff共256M空间给PCI1控制的设备,0x9000,0000-0x9fff,ffff共256M 空间给PCI2的设备。

MPC8548E的PCI模块除了支持配置寄存器外,还提供了一套内存映射寄存器,用于在PCI控制器和设备之间建立地址映射和转换。这些用于内存映射的寄存器叫做ATMU

(Address Translation and Mapping Unit)。其中,ATMU Outbound寄存器说明CPU到外部设备的映射,ATMU Inbound说明外部设备到CPU的映射。我们将分配给设备的基址和内存空间属性(包括大小、转换类型)写到该寄存器中。

最后还需要对PCI控制器的配置空间做相应设置,主要是对基址寄存器的设置。0x10寄存器需要与ATMU Outbound 0一致。

3.2.3 搜索设备

在PCI控制器初始化后,就可以在总线上搜索并配置设备了。在一级总线上从设备1一直搜索到设备31(因为设备0是PCI控制器,不需要搜索)。读配置空间Vendor ID,如果是有效值(不是0xffffffff),再去读设备类型class,如果是普通设备就用PCI_Device()完成设备配置空间初始化,如果是桥设备就继续搜索。在本文描述的系统中,一级总线上连接的是两个桥设备。

对桥设备的搜索由函数PCI_Bridge()完成,该函数在二级总线上从设备0一直搜索至设备31,同样读配置空间的Vendor ID,如果是有效值再根据设备类型处理,普通设备采用函数PCI_Device()配置,桥设备则递归调用PCI_Bridge()继续搜索。具体实现参考一下伪码。

其中配置读写函数PCI_ConfigRead,PCI_ConfigWrite,是在PCI配置地址寄存器中写入要访问的PCI设备的总线号、设备号、功能号及要访问的配置寄存器偏移量,读出或写入配置数据寄存器。注意字节序的转换,PCI是小字节序而PowerPC是大字节序。

4.结论

本文描述了嵌入式系统中PCI总线初始化驱动过程,这里没有采用linux内核和VxWorks BSP中用链表来实现,而是采用全局结构体保存设备信息,使代码结构更为简化和明朗。这种方式还有便于移植的特点,若更换一款CPU,只需要改变PCI控制器初始化过程和设备信息结构体参数即可。

参考文献

[1]李贵山,戚德虎.《PCI局部总线开发者指南》[M],西安:西安电子科技大学出版社,1997.

[2]任秀丽.《VxWorks操作系统中对PCI总线驱动程序的设计与实现》[D].吉林:四平师范学院计算机系,2001.

[3]PCI Local Bus Specification Revision2.3[Z] PCI Special Interest Group.Porland:2001.10

[4]MPC8548E PowerQUICC III Integrated Host Processor Reference Manual Rev.1[Z] FreeScale Semiconductor

The Implementation of PCI Local Bus Driver Based on

MPC8548E

Chan Chan,Zhou Liqing

Telecommunication Engineering School of Beijing University of Posts and Telecommunications,

Beijing (100876)

Abstract

In this paper, we introduce the implementation of PCI local bus driver program based on the CPU of MPC8548E, which is an embedded CPU of PowerPC. The SOC of MPC8548E supports two PCI controllers, which control the communication with PCI devices, such as Ethernet Card.

Keywords:Embeded System,PCI Local Bus,Driver Program

相关主题
文本预览
相关文档 最新文档