PCI总线协议比较复杂,用户可以根据具体实际需求选择相应的开发方式。一般,PCI总线开发采用两种方式:一是采用CPLD来设计控制接口。它的最大好处是比较灵活,用户可以根据自己的需要开发出适合于特定功能的芯片,而不必实现PCI的全部功能。现在有许多生产可编程逻辑器件的厂商,如Xilinx的LogiCore和Altera的AMPP都提供经过严格测试的PCI接口功能模块,用户只要进行组合设计即可。由于PCI总线协议复杂,设计PCI控制接口难度较大,对于产品不大又有时限的工程项目来说,成本巨大。
二是采用通用PCI接口芯片,例如南京沁恒公司的CH365、AMCC公司的AMCCS5920和AMCCS5933,PLX公司的PLX9054和PLX9080等。通过专用芯片可以实现完整的PCI主控模块和目标模块的功能,将复杂的PCI总线接口转换为相对简单的用户接口,用户只要设计转换后的总线接口即可,它能实现PCI规范所要求的所有硬件接口信号和配置空间寄存器,专用接口芯片具有较低的成本和通用性,能够有效降低接口设计的难度,缩短开发时间,并能获得较好的数据传输性能。
第二种方法适合于小规模的情况,能够有效缩短开发时间以及成本投入,因此在设计财税安全卡上选择CH365 PCI接口芯片。CH365是一个连接PCI总线的通用接口芯片,支持I/O端口映射、存储器映射、扩展ROM以及中断。实现将基于32位PCI总线的从设备接口转换为主动并行接口:8位数据、16位地址、I/O读和写、存储器读和写。支持低电平有效的本地中断请求,支持中断共享。支持长度达240字节的I/O端口。支持本地硬件定址功能,自由选择I/O地址,并在指定地址实现I/O端口。基于CH365的财税安全卡硬件电路图如图1。
在本设计中,所使用的存储器是华邦公司的W27C512,64K容量。存储器容量根据安全卡扩展程序的大小选择更大的存储器,如128K等。EEPROM是Atmel公司的AT24C02,支持写保护功能,能够有效防止信息被篡改。图1的财税安全卡的硬件电路核心器件是PCI接口芯片CH365、W27C512和AT24C02,CH365的部分引脚连线直接与金手指(电路板和插槽之间的连接点)相连。
CH365通过MEM_RD与ROM芯片U2(27C512)连接。CH365支持EPROM和闪存,容量为32KB或者64KB,如果将SYS_EX用于A16地址线,则最大容量可达128KB。一般情况下CH365直接支持32KB容量的扩展ROM(即27C256芯片的容量),但可以在扩展ROM的程序中通过控制A15地址线支持64KB容量的ROM芯片。可选的下拉电阻R1用于CH365的工作模式设定,图中的数据线D0被连接了下拉电阻,所以系统复位后,地址线A15为低电平,从而选择U2的低32KB(偏移地址为0000H~7FFFH),而在需要读取U2的高32KB时(偏移地址为8000H~0FFFFH),可以通过写芯片控制寄存器的位0重新设定A15地址线来访问ROM的高字节。
图2:CH365的读写时序。
另外,PCI扩展ROM的内容通常被BIOS复制到RAM内存中,所以需要设置CH365的扩展ROM基址以重新映射U2到存储器空间。
CH365通过SYS_EX与EPPROM芯片U3(型号是AT24C02)连接,CH365的SCL信号线可以选用SYS_EX或者A15,系统复位后的默认选择是A15,通常在A15用作地址线时选用SYS_EX,否则选用A15。因为SDA信号线同时是数据线D7,为了防止在SCL高电平期间由于SDA变化而产生不必要的误操作,通常借助于工作模式设定使SCL信号线(SYS_EX或A15)在系统复位后保持低电平。CH365的两线串行接口使用7位设备地址,可以同时连接多个设备。设备地址和命令寄存器的位7至位1为7位设备地址位,用以选择从设备;位0为命令位,置0代表写操作,置1代表读操作。本设计中连接一个设备,通过数据线D7保存相关的硬盘引导分区的信息,同时通过“LOCK”信号可以对设备进行写保护,防止信息篡改等。CH365的读写时序如图2。
财税安全卡的扩展程序设计
PC机中的扩展ROM相当于一个电子盘,如果在其中写入引导程序和应用程序,即使计算机没有硬盘和操作系统,扩展ROM中的引导程序和应用程序也能够控制计算机实现某些特定的功能。例如,无硬盘PC机用于工业控制,控制外部设备及作业流程等。
财税安全卡就是应用到PCI总线的扩展ROM,通过特定的扩展引导应用程序,在计算机启动进入硬盘时有效地接管和控制硬盘引导,以达到动态分隔硬盘空间将一个硬盘分成相互隔离,互不干扰的多个硬盘空间,可以根据用户需求引导进入相应的系统和使用相应的空间。
扩展引导应用程序主要包括PC引导控制权接管模块、动态隔离硬盘空间模块,多系统引导模块(其中包含I2C读写模块)。通过丰富扩展引导引用程序,可以实现基于BIOS级的系统分区备份、系统数据备份、系统拷贝等功能。
1. PC引导控制权接管的实现
在PC的BIOS自检中,硬件设备检测正常通过后,就开始把系统引导控制权即根据用户指定的启动顺序递交给软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责读取并执行IO.SYS,这是DOS和Windows9x最基本的系统文件。
扩展ROM程序首次获得CPU控制权,修改系统自举中断INT19以便在引导操作系统前被初始化,重新编写新INT19中断服务程序,使用INT7B中断向量作为返回地址。
BOOT_ROM_INIT: PUSH DX;保存寄存器
PUSH BX
MOV DH, 80H;位7置1则自动检测主板的BIOS
MOV DL, 0FFH;指定初始化方式,为0FFH则自动检测
MOV BX, OFFSET ROM_INT19;指定新INT19程序的偏移地址_ROM_INT19,
CALL INIT_ROM;ROM初始化程序,返回DL为实际使用的初始化方式
POP BX
POP DX
RETF;ROM初始化完成后返回,必须是远程返回
2. 动态隔离硬盘空间的实现
可以利用硬盘特性“AddressOffsetMode”和“SetMax”来有效地缩小硬盘空间,使得动态隔离硬盘空间,其中通过获取硬盘I/O端口的基址来设置硬盘最大逻辑块寻址(LBA)地址。传统的缩小硬盘空间采用的是隐藏分区,通过修改系统分区表的系统标志位达到隐藏分区效果,此方法安全性低,不能有效地隔离硬盘,在财税安全方面达不到安全性能要求。
3. 多系统引导模块的实现
多系统引导根据用户选择启动相应的系统,去选择相应的引导程序,这里有别于计算机多重引导启动(逻辑隔离)原有的系统引导程序,它是简单的单分区单系统启动模式,即固定读入硬盘活动分区引导记录以实现对系统的引导,而活动分区是相对固定的。重写的系统引导程序实现了多分区多系统启动模式,可以将硬盘任一分区视作活动分区,读入该分区引导记录以引导系统,本设计中采用的是通过加载多重引导信息扇区,检验数据的有效性,在加载过程中动态设置硬盘分区信息。