引言
网络打印机是一种将网络服务器功能与打印功能合二为一的新型网络设备,其控制器设计要求处理器速度快,功能强大,能够满足网络处理、打印数据交换以及嵌入式操作系统开发等对硬件的各种资源要求。PowerPC405EP是IBM公司推出的一种高性能的32位RISC嵌入式处理器,片上集成了PowerPC405内核以及各种丰富的外围设备接口资源,最高速度可达333MHz。本文针对该处理器的特点,提出了一种网络打印机控制器的系统设计方案,并对此方案中较为关键的软硬件技术进行了讨论。
系统设计方案
该网络打印机控制器以PowerPC405EP为核心,系统结构框图如图1所示。
该系统包含PowerPC405EP处理器芯片及其上电复位电路、电源电路、系统时钟电路、SDRAM内存及扩展电路、程序存储及启动调试Flash电路、1片连接在IIC总线上提供启动配置选择的EEPROM、用于ICE调试的JTAG口以及以太网口、串口等通信接口,与打印机引擎的数据通信协议由1块FPGA实现。当系统工作时,控制器从以太网口接收打印数据,经过运算处理后,通过外部设备总线控制器访问FPGA,把打印控制信号和数据输出给引擎,实现网络打印功能。
图1 网络打印机控制器系统结构框图
CPU时钟电路
用一33.33MHz的外部晶振连接到CPU的Sysclk管脚作为外部输入的低频时钟源, 然后通过初始化配置片内PLL将外部输入的低频时钟源倍频,为系统产生一个高频系统时钟。
SDRAM内存电路
由于405EP的SDRAM接口是32位数据总线,因此选用2片HY57V281620HCT芯片作为板上内存模块。该芯片片内结构组织模式为8M×16位,这2块内存芯片共用一个bankSel0片选空间,构成数据总线宽为32位的数据存储区,内存容量32MB。另外可增加一条168针的DIMM扩展槽,使内存空间扩大到512MB。
内存模块各芯片以及DIMM的时钟由405EP的Memclkout0引脚提供(频率等于PLB总线时钟,一般为100MHz或133MHz)。为了保证各芯片时钟同步,引入CY2309时钟匹配芯片,该芯片拥有内部时钟锁相环,可以将CPU输出的时钟信号匹配成若干条相位频率完全相同的时钟信号,并且可以避免任一时钟信号反射对其他时钟造成的影响。由于内存模块工作频率较高,布板时应注意各芯片时钟走线严格要求等长,相同性质的信号线应尽量使用相同的拓扑结构,另外需结合控制器内部时序寄存器的配置来对这部分电路进行板级仿真。
程序存储电路
由于405EP的EBC总线具有16位数据线和29位地址线,选择2片MX29LV160BTC的Flash芯片用以存放BSP、实时操作系统VxWorks和用户应用程序。将Flash的BYTE#管脚设置为低电平,使Flash工作于x8模式。这样2片Flash共用一个CS0片选空间,构成EBC数据总线同步访问的高8位和低8位,容量为4MB。由于405EP采用PowerPc内核,即405EP的A31是LSB,A3是MSB,数据总线亦然,而Flash芯片的A0和D0皆是LSB,连线时要注意管脚次序。另外,由于Flash是2字节同步读取操作,连线时应将CPU的地址线左移1位,即不使用最低位A0。
为了便于系统调试,可增加一片512KB的SST39SF040用于bootrom启动,通过跳线与2片Flash互选CS0片选,这样系统启动时会自动从CS0的设备上读取启动代码。程序存储模块如图2所示:
图2 Flash程序存储电路
以太网接口电路
RTL8201BL网口芯片用来实现PowerPC405EP与100M以太网的接口,使用外部25MHz晶振,通过16PT8515网络滤波器连接到以太网上。由于PowerPC405EP带有100M以太网MAC,所以能够实现和RTL8201BL的无缝连接。RTL8201BL有两种接口:SNI和MII。本系统采用MII。接口的选择可以通过设置MII/SNIB引脚为高电平和正确地设置ANE、SPEED和DUPLEX引脚来实现。MII能够运行在两个频率上,即25MHz和2.5MHz,分别支持100M以太网和10M以太网。当数据传输时,MAC将首先判定TXEN信号并改变8位数据为4位数据,再通过TXD[0:3]传到物理层上,在TXEN信号有效期间,PHY将通过传输时钟信号TXCLK对TXD[0:3]上的数据进行同步采样;当接收数据时,PHY将判定接收使能信号,来接收RXD[0:3]上的数据。
打印机引擎控制
作为网络打印机控制器的数据输出端,在一块FPGA中由硬件逻辑来实现处理器通过EBC总线对引擎的控制如图1所示。此FPGA占用一个EBC总线的片选空间CS3并享有外部中断。在打印时,FPGA中的逻辑FIFO数据不满时将触发外部中断,处理器调用相应的中断服务程序继续向引擎发送打印数据。
系统启动配置
PowerPC405EP提供了一个IIC串行EEPROM控制器用以实现启动配置。当配置引脚UART0-Tx被置于高电平时则使能该控制器。选用一片按照固定字节格式保存有启动配置信息的AT24C32连接到该控制器作为从设备。当系统上电或者复位时,该控制器能够从AT24C32中连续读取32个字节,用以实现PLL、各总线时钟频率、PCI总线配置、引导信息等相关寄存器的初始化配置。如果引脚UART0-Tx被置于低电平,则该控制器失效,这些寄存器初始化配置将使用默认值,其中PLL被旁路且被复位,必须在复位后用软件来初始化相关PLL寄存器。
嵌入式操作系统VxWorks
的开发与移植
本文选用WindRiver公司推出的嵌入式实时操作系统VxWorks及其集成开发工具Tornado来开发该控制器。系统开发调试工具采用WindRiver公司生产的VisionIce仿真器。仿真器一端连接PC机网口,另一端连接PowerPC405EP的JTAG接口。开发时首先调试PowerPC内核和SDRAM内存,一旦它们工作正常,就可以通过仿真器下载RTOS到内存来辅助硬件调试。然后调试网口,如果网口工作正常,就可以脱离仿真器,利用Tornado提供的工具软件,如WDB,通过网口线建立电路板与PC的通信机制,来调试其他模块和开发应用程序。开发完毕后,将正确的启动代码烧制到bootrom中,由bootrom引导程序通过ftp将VxWorks内核与应用程序下载烧写到Flash中。
VxWorks得以广泛流行的一个重要原因在于它的可移植性,通过板级支持包BSP, VxWorks操作系统的应用代码可独立于硬件。在系统移植时,只需根据硬件平台修改BSP,而不需要改变操作系统和应用程序。
VxWorks BSP 的
文件结构与开发流程
在VxWorks中,BSP由一组与特定目标系统相关的文件组成。这些文件包括编译文件makefile、ROM初始化文件romInit.s、系统初始化文件sysAlib.s、配置文件config.h、目标板定义文件bspname.h、网络配置文件configNet.h、系统库文件syslib.c、用户配置文件usrConfig.c、引导配置文件bootConfig.c、引导初始化文件bootInit.c、串口文件sysSerial.c、以太网接口文件ibmEmacEnd.c等。BSP启动流程如图3所示。
针对以上文件结构,系统BSP的开发流程分为3个步骤。
图3 VxWorks BSP启动流程
建立开发环境
主要是以开发板CPU的BSP文件为模板,在\tornado\target\config目录下创建用户的BSP目录bspname,把\tornado\target\ config\all下的文件和BSP模板文件拷贝到该目录下。
修改模板文件
(1) makefile:该文件通过命令行方式对创建映像文件进行控制,必须定义下列宏:
CPU:PPC405
TOOL:GNU
TGT_DIR:目标板目录的路径,使用默认
TARGET_DIR:BSP目录名,自定义
VENDOR:目标生产商名,IBM
BOARD:目标板名,自定义
ROM_TEXT_ADRS:启动ROM的入口地址,本系统设为0xfff80100
ROM_SIZE:ROM大小,本系统为512KB
RAM_LOW_ADRS:加载VxWorks的目标地址,本系统设为0x00010000
RAM_HIGH_ADRS:将引导ROM映像复制到RAM中的目标地址,本系统设为0x00c00000
(2) bspname.h:该文件根据405EP设置串行接口,时钟及I/O设备等,必须包含以下内容: 中断向量/优先级别、I/O设备地址、设备寄存器各位的含义、系统和附加时钟参数(最大最小速率)。
(3) config.h:该文件包含定义所有与405EP目标板相关的组件。
设置缺省启动行:用网络启动
RAM地址和大小:地址从0开始,大小为32MB
设置ECC:失效
设置是否支持MMU和Cache:支持Cache
定时器是否使用外部时钟:否
串口时钟定义:使用外部时钟
串口默认通道:使用通道1
包含网口:支持以太网接口
WDB默认通信方式:网口
另外注意ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS必须与makefile中的定义保持一致。
(4) romInit.s:该文件是一段汇编语言的初始化代码,其中的romInit( )函数是bootrom和基于ROM的VxWorks映像的入口。需要做的工作有:
将相关寄存器清零和置位;
屏蔽中断:通过设置MSR寄存器中的CE位与EE位;
关闭数据、指令Cache;
初始化EBC总线寄存器:通过对bank寄存器的设置为EBC总线上的各种设备分配片选信号与地址空间;
初始化内存:对SDRAM接口各寄存器进行配置,为板载内存与DIMM分配片选信号与地址空间;
初始化堆栈指针;
计算romStart( )函数地址,然后跳转到该函数执行C语言代码,并不再返回。
(5) 用户配置文件usrConfig.c中的代码是VxWorks映像的主要初始化代码,而引导配置文件bootConfig.c中的代码是bootrom映像的主要初始化代码。bootInit.c是ROM初始化的第2阶段,RomInit( )完成后跳转到此文件中的romStart( ),该函数完成ROM映像所需要的解压缩和重定位工作。以上3个文件一般无须用户直接修改。
(6) 系统库文件syslib.c:该文件包含了与特定目标系统相关的库函数,这些函数为操作系统和应用程序提供板级接口,使得这些程序与硬件系统无关。该文件至少包含下列函数:sysModel、sysBspRev、sysHwInit、sysHwInit2和sysMemTop等。其中sysHwInit是本文件的核心,大部分硬件初始化工作都在这部分完成。本系统也可选择将包括串口、网口等硬件设备的初始化入口程序添加到该函数中,相关设备的驱动程序可作为子文件引入syslib.c。
创建VxWorks镜像
根据具体需要在命令行环境下利用makefile创建各种镜像,也可以在Tornado集成环境下在Build菜单里选择Build Boot Rom来创建各种类型的bootrom。
结语
本文向读者推出了一种新型的高性能RISC处理器,并对以这种处理器为核心构建的网络打印机控制器的硬件设计方案和软件开发流程做了详细的介绍。鉴于不同类型的网络产品设计具有一定的共性,希望本文能对其他基于RISC处理器的嵌入式网络产品开发提供一定的参考价值。