一种基于PCIe固态硬盘存储系统的设计和实现

2016-05-23 06:14任华锋高传发孙振华
电子产品世界 2016年4期

任华锋 高传发 孙振华

摘要:介绍了一种在智能继电保护装置中,基于Pcle总线技术实现大容量存储系统设计方法。该方法选用飞思卡尔P2020处理器为硬件平台,88se9170做为Pcle转sATA接口控制器,以固态硬盘为存储介质,采用兼容性好的FAT文件系统管理数据存储。该存储系统具有高速、支持热插拔、可脱机运行等特点。经EMc试验和具体智能变电站工程运行验证,满足智能继电保护装置对数据处理安全可靠的要求。

关键词:Pcle:ssD;sATA控制器:AHcl;FAT

引言

新一代的智能电网继电保护装置软硬件平台研发设计中大都采用了多种类型的组件技术,根据功能可分解为环境建模、推理决策、系统监控、领域学习和领域知识库等各类逻辑实现组件,组件与外部或组件间都有大量的数据传递和处理,这些关键数据不仅需要高速稳定的存储系统来存储,还要存储系统能在恶劣电磁干扰环境下保证数据的正确完整性。针对这些要求,文中着重研究了在飞思卡尔P2020多核处理器下通过PCIe实现的嵌入式固态硬盘存储技术,就存储系统的硬件设计和软件驱动设计等方面进行了详细的阐述,并通过EMC专业测试和具体智能变电站工程进行了可靠性验证。

1.存储系统架构设计

根据存储系统的设计需求,要求该系统具有大容量数据存储、高速总线、热插拔等特点。按照模块化的设计思路,兼顾继电保护装置机箱插件式结构的特点,将存储设备设计为独立的插件模块,通过机箱背板的高速PCIE扩展总线与主控CPU模块插件相连。其组成结构如图1所示。

2.存储系统硬件设计

2.1P2020处理器主控单元CPU模块设计

CPU模块采用飞思卡尔新推出的低功耗P2020多核微处理器,P2020处理器具有双ES00v2内核,最高主频可达到1.2GHz,集成了PCIe、SGMI、SD/MMC等接口。包含P2020处理器的主控CPU主要由复位电路、时钟电路、时序逻辑控制电路、DDR内存电路和接口模块电路组成。为了节省硬件资源和降低功耗,P2020处理器外围接口电路采用了复用Se rDes(串行器解串器)设计,通过处理器上电复位时初始化设备状态寄存器,将P2020的四个Se rDes通道灵活配置成PCIE、SGMII等接口。两个E500内核可根据具体的软件设计非常方便地通过SerDes访问存储设备。PCIe接口的数据收发差分线和时钟线经过CPU插件上的高速连接器扩展到机箱背板。

2.2固态硬盘存储模块设计

固态硬盘(SSD)是一种基于闪存的存储技术,具有能耗低、无机械活动部件、读写速度快、抗震动等优点。该存储模块使用工业级固态硬盘(>=120G)作为存储介质,解决了智能保护装置采用Flash或SD卡存储空间容量小、传输速率慢、不能脱机运行的劣势。

SATA控制器是固态硬盘控制的核心。系统选用Marvell88SE9170作为SATA控制器,该芯片有两个支持SATA 3.0规范的SATA端口,一个lane PCIe2.0接口。6路可设置方向的GPlo,用于操作固态硬盘的数据指示灯闪烁指示等功能。88SE9170是Marvell新推出的一款工业级PCIE转SATA的控制芯片,兼容SATA3.0以下的SATA协议规范,支持SATA端口的FIS和COMMAND交换技术,支持SATA常见的硬盘NCQ(全速命令队列)、AHCI(高级主机控制器接口)接口模式等功能。

88SE9170自带一个支持SPI接口的512KB固件FLASH芯片,芯片上可由写片器写入BlOS和引导码,通过软件运行将FLASH内容映射到内存指定地址来加载或由88SE9170上电时自动加载,完成88SE9170片内寄存器的配置。另外一种方式不需要SPI flash,每次上电时由处理器通过PCIE接口对88SE9170进行寄存器配置,配置参数掉电丢失。缺点是该存储模块不能脱离CPU模块独立运行,通用性不好。

由88SE9170 SATA控制器通过SATA协议实现处理器和固态硬盘之间的数据传输和管理。数据传输速率可达2.5Gbps或5Gbps。模块示意图如图2所示。

3.软件和驱动设计

嵌入式操作系统采用国外引进的嵌入式实时操作系统Nucleus Plus。Nucleus Plus具有实时的、抢先的、多任务的内核。95%的内核代码由C语言编写,开放性好,一些开源的驱动代码和应用代码能很容易地添加到操作系统中。在嵌入式操作系统下运行驱动软件可以分为三部分:P2020处理器PCIe设备初始化、88SE9170 SATA控制器驱动初始化和文件系统实现。存储系统的驱动软件框架结构如图3所示。

3.1PCIe设备初始化

PCIe总线采用点对点的串行连接方式,每个PCIe设备都有独立的数据传输通道,该通道对其他设备来说是封闭的,可避免其他设备的干扰。能有效提高智能继电保护装置的产品可靠性。P2020处理器可提供3个工作在2.5/5 GHz频率下的串行PCIe控制器接口。本设计中P2020处理器的PCIe控制器初始化参考了UBOOT开源代码的相关部分。在Nucleus嵌入式操作系统启动时,根据硬件设计,对应设置P2020处理器复用Serdes的配置。划分PCIe控制器地址空间。初始化PCIe控制器的配置寄存器和中断设置寄存器。PCIe控制器的初始化流程见图4。

3.288SE9170 SATA控制器驱动初始化

3.2.1SATA控制器的PCIe设备注册

P2020处理器通过设置为RC模式的PCIe控制器扫描PCIe总线上的设备,通过配置空间读取88SE9170的设备ID和厂商ID等属性,向PCIe控制器硬件驱动层注册。注册完成后,处理器即可通过PCIE总线,对88SE9170的SATA控制器进行初始化配置和固态硬盘访问。

3.2.2SATA控制器的工作模式选择

88se9170 SATA控制器支持PCI-IDE模式和AHCI模式。lDE模式是为了兼容lDE硬盘。AHCI为SSD固态硬盘的首选模式。AHCI是由Inter指导下多家公司联合研发的接口标准。AHCI在PCIe和串行SATA设备内部逻辑间扮演标准接口的角色,通过PCI BAR5,实现原生的SATA功能,为设备制造商省去了单独开发接口的工作。C语言编写的开源AHCI接口驱动能非常容易添加进嵌入式Nucleus操作系统中。

3.2.3SATA控制器AHCI接口初始化

在PCIE总线初始化完成后,可将AHCI的配置空间映射到BAR5寄存器指定的一段非缓存的内存空间,通过内存操作直接对AHCI的配置寄存器进行初始化操作。AHCI标准指定了寄存器的偏移地址,偏移地址小于100h的为通用控制寄存器空间,大于100h的为SATA端口寄存器空间。88se9170的HBACapability支持64位寻址、NCQ、端口复用等常见SATA控制器特性。SATA控制器初始化完成后,扫描SATA端口,建立物理连接,通过AHCI驱动的读写函数完成对SATA接口固态硬盘的操作。AHCI初始化流程见图5。

3.3文件系统实现

现有智能继电保护装置为节省硬件资源,大都采用嵌入式环境下对FLASH存储器支持较好的小巧精简的YAFFS或JFFS文件系统。这两种文件系统在目前主流的桌面系统中都不能直接兼容,不利于移动存储设备的脱机运行。为保证不同桌面系统下工具软件对存储设备能够直接操作和读写,进行数据分析,本设计选用了兼容性好的FAT文件系统,来有效管理写入固态硬盘内的数据。

FAT文件系统整体上可以划分为四个部分:保留区、FAT表区、数据区和剩余扇区,这四部分在存储设备格式化时被创建,并且在数据存储期间不可被更改。FAT文件系统是完全免费开源的,具有高效和代码小的优点。在P2020处理器上移植时,根据处理器定义改动FAT文件系统的数据类型和文件系统的配置头文件ff.h,重新编写DISK I/O层的驱动函数。I/O函数主要有disk_jnitialize(),disk_read(),disk_status(),disk_write(),disk_ioctl(),get_fattime(),通过调用AHCI驱动函数,分别实现固态硬盘初始化、状态获取、读写、命令控制等功能。具体流程见图6。