关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 用SD卡设计8086全硅计算机的硬盘

用SD卡设计8086全硅计算机的硬盘

作者:时间:2010-05-04来源:网络收藏
2.1 的初始化
本文设计了APB总线的硬件转换接口,通过BIOS软件编程实现访问软件。用软件控制的方式给SD卡发送命令,使SD卡完成初始化。SD卡初始化有2个目的:使SD卡工作于SPI接口模式、设置单块读写的数据长度。SD卡上电复位后处于SD总线模式,要使SD卡进入SPI接口模式,需要在片选信号CS为低电平时发送命令CMD0。由于SD卡在收到CMD0前处于SD总线模式,因此CMD0是唯一需要正确冗余校验的命令。发送CMD0命令后,接收Rl回应,判断SD卡是否正确接收命令。
CMD0命令使SD卡进入休眠状态,需要发送CMDl激活SD卡的初始化过程,随后接收Rl回应,判断SD卡是否正确脱离休眠状态。
为了实现对SD卡的读写操作,必须设定读写块的大小。SD卡内部结构是按照每块512字节组成的,可以对1块或者是多块进行读写,为了和CoC的硬盘结构一致,设定为单块读写。给出内嵌在BIOS当中初始化的(基于Emu)汇编程序。
……
// Initialize the SD card controller
mov al, 0ffh
mov dx, 0100h ;选中SD卡接口
mov cx, 0ah ;计数10次
hd_post_init80: ;循环10次给SD卡80个sclk, SD卡上电的过程至少要74个时钟周期
out dx, al
loop hd_post_init80
// CMD0: reset the SD card
mov ax,40h ;命令CMD0,ax寄存器高位为0,所以CS=0,SD卡片选有效
out dx, ax
xor al, al ;寄存器清0
out dx, al ;发送CMD0其他位
out dx, al
out dx, al
out dx, al
mov al, 95h ;
out dx, al ; CRC fixed value
mov al, 0ffh
out dx, al ; wait
in al, dx ; status
mov cl, al
mov ax, 0ffffh
out dx, ax ; CS=1
cmp cl, 01h ;判断响应是否为01h
je hd_post_cmd1 ;响应正确则发送CMD1,激活SD卡。
……
当SD卡初始化完成以后,就可以对SD卡进行读写操作。读SD卡的命令是CMD17;写SD卡的命令是CMD24。这2个命令都带有参数,参数是第8~39,共32位,参数表示的必须是SD卡扇区的首地址,读写SD卡以1个扇区512字节为数据单位(与硬盘相同)。
2.2 SD卡的调试
采用SD卡作为 CoC的硬盘,而没有采用固态硬盘,就是为简化设计,避开设计复杂固态硬盘控制器。但用SD卡作为8086 CoC系统的硬盘,调试是实验难点。因为SD卡是复杂存储器,有自己的命令集,要找到SD卡的仿真模型几乎不可能,而通过Verilog HDL硬件描述语言对SD卡的功能建立模型进行SD卡功能仿真,其复杂性将会更大。为了简化设计,不采用通过SD卡模型在Modelsim中进行仿真,而是把设计直接综合到FPGA板上进行板级仿真。根据实验已有的条件,AlteraDE2开发板核心器件是Cyclone II系列的EP2C35F672C6[5]FPGA。用Quartus II将综合8086 CoC生成的SOF文件通过JTAG电缆下载到DE2开发板上,把SD卡插入DE2开发板的SD卡插槽,进行SD卡的调试。
为了测试SD卡能否接收到主机的数据,有效办法是检测SD卡对每条命令是否响应,达到命令响应将SD卡接口信号输出到逻辑分析仪进行观察的目的。但逻辑分析仪在使用观察响应波形需要一些触发条件(其观察数据深度是有限的),而SD卡接收和发送的数据是串行数据,因此要看到所有信号完整的波形是不可能的。为了解决这个问题,可采用软硬件相结合的调试方法,即SD卡每条命令的响应可在软件编程设计程序断点办法,如初始化程序中在CMD0命令的后面加上如下断点程序。
mov ax,0h
mov ds,ax ;目标基地址为0
mov bx,0500h ;偏移地址
mov al,00h ; al寄存器写入0,可根据需要给al不同的值
mov ds:[bx],al ; 把al的值写入地址为500h内存单元
这样就可以通过主机的地址(等于500h)作为逻辑分析仪的触发条件。在每条命令中设置这样的断点,通过这些设置的断点作为逻辑分析仪的触发条件可以观测每条命令发送情况。
即使没有逻辑分析仪,也可以通过断点程序法在某一确定内存写入一些特殊的值,然后同样用Altera DE2开发板提供(DE2_contorl_panel)软件把内存值读出来与写入的值进行比较。如果内存写入的值与断点程序写入的值相同,则证明命令得到了正确响应。
验证完成SD卡初始化以后,就可以对SD卡进行读写。在写SD卡调试中:设定写命令的地址参数,在参数对应的地址单元向SD卡写入一些特殊的值,然后通过WINHEX软件去查看SD卡在该地址的数据是否与写入的数据相同。在读SD卡调试中:设定读命令的地址参数,把SD卡的某一确定地址存储单元的数据读取到确定内存单元中,通过Altera DE2开发板提供软件把该内存的数据读出来与SD卡的原来存储的数据进行比较。
此调试法并不是一定要执行,当只有SD卡不能正常读写时,可以用此方法进行调试,分析每条命令的执行情况。实验证明该方法非常有效,通过本设计提出的SD卡作为8086 CoC的硬盘设计取得了成功。图3所示为SD卡转换接口信号初始化过程中发送CMD0命令波形图。

本文引用地址:http://www.eepw.com.cn/article/202544.htm

3 FPGA的验证结果
采用Quartus II对所设计的SD卡转换接口在Cyclone II系列的EP2C35F672C6 FPGA进行综合,综合报告显示总逻辑单元46个,总寄存器数30个,时钟频率高达420 MHz,综合报告表明设计占用的逻辑资源非常少。FPGA验证显示把8086 CoC的BIOS软件存入SD卡硬盘,通过SD卡作为引导区可启动8086 CoC的DOS操作系统。
本文以SD卡作为8086CoC的硬盘设计为例,介绍了SD卡作为大容量存储器的设计方法。采用SD卡作为大容量存储器可以减少设计的复杂性、缩短设计周期。并且由于SD卡的许多优点可使得系统工作稳定、提高数据存储的安全性。虽然SD卡本身的数据传输速率有上限,数据的读写速度受到一定的限制,但这些可以通过更高读写速度的SD卡来解决。同时,本设计具有高可移植性,可以方便地移植到其他需要大容量存储器的嵌入式系统中,只需在软件操作系统嵌入关于访问SD卡的软件程序,无需修改已设计好的硬件电路,减少了电路设计的成本。


上一页 1 2 下一页

关键词: 8086 SD卡 计算机

评论


相关推荐

技术专区

关闭