基于X 86单芯片计算机的BIOS软件设计

2011-03-15 14:30解光军
关键词:单芯片开发板扇区

果 鹏, 解光军

(合肥工业大学电子科学与应用物理学院,安徽合肥 230009)

1 总体设计思想

所谓单芯片计算机(Computer On a Chip,简称CoC)即是将传统PC机主板上集成于芯片组的板卡控制器、CPU、内存等最大限度地集成在单个芯片中[1-3]。本设计基于单芯片计算机,并以SD卡存储器代替传统机械式磁性存储器,完成FreeDOS操作系统的启动。SD卡是一种基于Flash的存储器,它着重数据存储的安全,而且价格低廉,性能优异,存储容量大[4-6]。SD卡(Secure DigitalM emory Card)相比于磁性介质来说不仅减少了空间,而且降低了功耗,是许多便携式电子产品如数码相机、手提电话、PDA等移动便携式设备理想的外部存储介质,并且在存储市场占有极大份额,目前在各个领域运用广泛。基于SD卡的以上优点,本设计采用SD卡作为存储器,实现单芯片计算机的全硅化。

由于X 86单芯片计算机的结构由PC而来,其功能复杂,初始化硬件和引导操作系统仍然由BIOS(Basic InOut System,基本输入输出系统)来完成。BIOS软件的主要作用是初始化硬件和引导操作系统。基于SD卡的诸多优点,本设计将SD卡存储器代替传统的磁性介质存储器作为主存储设备,连接到X 86单芯片计算机的APB (Advanced Peripheral Bus)总线上,并通过FPGA开发板的硬件资源和SD卡接口实现硬件部分。本设计BIOS的主要意义就在于不仅对X86单芯片计算机特定的硬件进行配置,而且依据SD卡的协议,为单芯片计算机定制的设计引导程序。

本设计利用Cygw in、W inhex和W in Image软件建立了一整套的BIOS软件编译开发平台,对比了传统的Cygw in与NASM和MASM等BIOS开发工具,由于NASM和MASM的操作复杂,每次编译都要设置编译路径和目标文件等重复性操作,消耗大量研发时间,不利于本设计的开发调试,因此本设计采用Cygw in编译器,通过编写m akefile脚本来设定编译对象和目标文件及路径,而且操作简单,大大减少了重复性的操作,节省了研发实验的调试时间。

2 软件设计

BIOS是固化在计算机中的核心软件系统,它直接对计算机系统中的输入输出设备进行设备级、硬件级的底层控制,是连接操作系统和硬件设备之间的枢纽[2,7]。本设计BIOS的主要作用有初始化SD卡、对SD卡进行读写操作以及boot加载操作系统。

2.1 BIOS对SD卡的初始化

BIOS对SD卡初始化有2个目的:使SD卡工作于SPI接口模式,设置读写单模块数据的长度。SD卡的SPI模式通信由BIOS控制,SPI通信由指令、响应和数据组成。每一个指令或数据块由8位的字节和CS标志构成。SD卡指令格式见表1所列。

表1 SD卡指令格式

SD卡上电复位后处于SD总线模式,主机先将SD卡的片选CS置低,激活SD卡进入工作状态[8]。要使SD卡进入SPI接口模式,BIOS需要在片选信号CS为低电平时发送命令CMD0,使SD卡处于IDLE状态。根据SD卡的标准,CMD0命令为:40H 00H 00H 00H 00H 95H。BIOS向SD卡发送完CMD0命令后,接收RESPONSE响应信号,判断SD卡是否正确接收命令。RESPONSE响应信号方式内容见表2所列。

CMD0命令使SD卡进入休眠状态,需要发送CMD1(SEND_OP_COND)激活SD卡的初始化过程,随后接收RESPONSE响应信号,判断SD卡是否正确脱离休眠状态。为了实现对SD卡的模块读写操作,BIOS必须设置读写模块的大小。BIOS向SD卡发送CMD16(SET_BLOCK_ LEN)命令,之后设置读写操作的数据模块大小。本设计设定BIOS对SD卡进行单模块读写操作,每次读写512字节,即每次对一个扇区进行操作。SD初始化流程如图1所示。

表2 SD卡SPI模式RESPONSE响应信号

图1 SD卡初始化流程

2.2 BIOS对SD卡读操作

SD卡与标准硬盘的寻址方式类似,都使用LBA(Logical Block Add ressing)寻址方式。在LBA地址中,地址不再表示硬盘的实际物理地址(柱面、磁头和扇区)。LBA编址方式将CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了烦琐的磁头/柱面/扇区的寻址方式。因此BIOS需要将int19传递到int13的CHS寻址的参数转换成SD卡的逻辑地址。

本设计在PC机上使用Winhex软件以物理磁盘的方式查看SD卡的隐藏扇区、扇区的分配和偏移量,以及BIOS参数表,进而确定CHS的值。再利用(1)式计算SD卡的逻辑扇区(log_sector)。根据SD卡的不同,引导扇区在SD卡中的偏移量也是不同的。在PC机上可以使用Winhex软件以物理磁盘的方式查看SD卡的隐藏扇区、扇区的分配和偏移量。

logic_sector的地址是32位的,最后9位是Block地址,前面的是Sector地址。当Block!= 0时,读写指令的相应信号RESPONSE会报错。对SD卡的logic_sector的调整见(2)式:

BIOS向 SD卡发送读单模块数据指令CMD17(READ_SINGLE_BLOCK)。SD卡接收到CMD17之后,主机首先从SD卡地址端口读取一个字节长度的RESPONSE响应信号。信号的值为0表示SD卡成功响应指令;不为0,表示出错,主机重新读取响应信号,一直到信号为0。之后SD卡向主机发送一个起始数据令牌(START _BLOCK_TOKEN),其值为0xFE,表示接下来发送的是一个512字节的数据模块,最后是2个字节的CRC校验码。BIOS读SD卡单模块数据的流程如图2所示。

图2 SD卡单模块读操作流程

BIOS读SD卡单模块数据的核心代码如下:

2.3 BIOS对SD卡写操作

BIOS向SD卡中写入数据块和读取数据块相似。

BIOS首先设置写数据块的源地址和目的地址,再向SD卡端口发送CMD24(WRITE_SINGLE_BLOCK)指令启动写操作过程。

SD卡接收到CMD24后,向主机发送RESPONSE响应信号。信号的值为0表示SD卡成功响应指令;不为0,表示出错,主机重新读取响应信号,一直到信号为0,表示SD卡已经准备好接受数据块。

BIOS向SD卡发送数据起始令牌(START_ BLOCK_TOKEN),其值为0xFE,表示接下来发送的是一个512字节的数据模块。

SD卡接收到数据后,发送数据相应信号DA TA_RESPONSE,表征需要写入的数据是否完成,最后发送2个字节的CRC校验码。BIOS向SD卡写入数据块流程如图3所示。

图3 SD卡单模块写操作流程

对写入数据的响应信号 DATA_RESPONSE,SD卡标准定义见表3所列。

表3 SD卡SPI接口对写入数据的响应信号

表中状态的含义如下:

*010:接收数据;

*101:数据校验错;

*110:写入数据错。

当SD卡正确接收数据模块时,状态的值为010,即数据响应信号DATA_RESPONSE的值为0x05。

2.4 BIOS引导操作系统

首先,通过软件开发编译平台将BIOS编译成机器码,将编译好的机器码烧写进FPGA开发板片上Flash存储器的E000:0000处;其次,利用QuartusⅡ软件调用开发板的资源实现单芯片计算机的硬件电路(已由前期研究设计完成)[1]。

开发板上电之后,首先执行片上Flash存储器的E000:0000处的BIOS机器码,对SD卡进行初始化操作的程序,主要是对SD卡进行SPI模式设置和读写数据长度的设置。BIOS对SD卡的初始化设置执行完毕之后,程序执行int19中断[9],通过ax、cx和dx通用寄存器从int19号中断向int13号中断传递CHS(Cy linder/Head/ Sector)参数。程序通过传递过来的ah的值确定调用int13号中断的02号子功能读取SD卡的引导扇区。BIOS利用(1)式和(2)式计算出引导扇区的位置,再通过对SD卡的读操作,把SD卡的引导扇区读入到片上存储器上指定的位置0000: 7c00处。再通过把段地址和偏移地址压栈和弹栈操作,使指针指向0000:7c00处,并把指挥权交给引导扇区,执行引导扇区的指令。

引导扇区的指令继续重复地调用int13中断的2号子功能读取SD卡扇区,将存储在SD卡上的FreeDOS操作系统的 Kernel文件和 Command.com系统文件加载到片上存储器的指定位置,最终完成启动FreeDOS操作系统。

3 结束语

本文提出了从SD卡启动单芯片计算机的设想,并基于单芯片计算机SD卡设计了BIOS软件,同时阐述了BIOS软件主要的开发设计步骤。本设计BIOS利用SD卡作为主存储设备,基于SD卡SPI接口的基本协议,完成初始化和单模块读写等命令。为了实现BIOS的研发和调试工作的方便,本设计使用ALTERA DE2 FPGA开发板作为硬件开发平台。由于FPGA开发板上带有Flash存储器,Flash存储器的非易失性和可重复烧写的特性正适合存储BIOS程序;而且在硬件电路部分可以调用FPGA开发板的资源实现X86硬件电路;另外该开发板自带一个SD卡接口,是本实验与设计的理想开发平台。

最后本设计实现了总体方案设计,从SD卡成功地启动FreeDOS操作系统。所设计的BIOS软件在 Bochs模拟器上也成功地启动了FreeDOS操作系统,增加了所设计的BIOS软件的通用性和可移植性,促进了便携式产品的开发。

[1] 孙 璐,陶 晶,舒 展,等.基于8086 CPU的单芯片计算机系统的设计[J].中国集成电路,2008,17(9):32-37.

[2] 沈美明,温冬婵.80X 86汇编语言程序设计[M].北京:清华大学出版社,2001:45-164.

[3] 汪明亮,解光军.用于W LED驱动的电流检测放大器的设计[J].合肥工业大学学报:自然科学版,2008,31(8): 1330-1333,1342.

[4] UPDATE:mem ory breakfast through drivesm iniaturization [Z].1990.

[5] W eber S.Look Out EPROMs,Here Comes Flash[J].E lectronics,Nov,1990:44-50.

[6] 王 清,刘新宁.SD卡硬件启动和数据存储的控制逻辑的设计实现[J].计算机工程应用技术,2008,4(4):990-991.

[7] 陈文钦.BIOS研发技术剖析[M].北京:清华大学出版社,2001:70-164.

[8] SD M emory Card Specifications,Part 1:Physical Layer Specification,Version 1.01[S].2001.

[9] AM IBIOS 98 Technical Reference[M].American M egatrends Inc,1998.

猜你喜欢
单芯片开发板扇区
分阶段调整增加扇区通行能力策略
U盘故障排除经验谈
RDA宣布推出高性能蓝牙音频系统单芯片RDA5836
浅析单片机开发板的设计与制作
基于贝叶斯估计的短时空域扇区交通流量预测
重建分区表与FAT32_DBR研究与实现
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证
Mouser为您呈上开发关键之STMicroelectronics Nucleo开发板
Arduino和Atmel发布Arduino Zero开发板
Marvell发布64位单芯片移动通信处理器