基于单片机的MicroDrive接口设计
为了达到此目的,首先,将要操作的扇区地址写入偏移地址为003H~006H的逻辑块寻址寄存器中,再将要操作的扇区数目写入偏移地址为002H的扇区数目寄存器中,接着就发送读命令字(20H)到命令寄存器中,当写入命令后,MicroDrive会将BUSY状态置1作为响应。
然后,MicroDrive从存储扇区中读出数据放入其缓存单元中,并将DRQ状态位置1,清BUSY以表示数据已准备好。因此只需检查DRQ状态即可。当DRQ为1时,便可从MicroDrive的缓存中读出数据;当所有数据读完后,DRQ将会清0,MicroDrive又转回准备状态,可进行下一步操作。
(3)数据的写入
与读数据的操作类似,首先,将数据准备在数据缓存区(外部RAM62HC64)中,将要操作的扇区地址写入偏移地址为003H~006H的逻辑块寻址寄存器中,将要操作的扇区数目写入偏移地址为002H的扇区数目寄存器中,接着发送写命令字(30H)到命令寄存器中。
图2 单片机软件流程图
然后,检测DRQ的状态(此时MicroDrive置BUSY状态为1,接着置DRQ为1,清BUSY)。当检测到DRQ为1时,便可将数据缓存区(外部RAM62HC64)中的数据写入MicroDrive的缓存单元。当MicroDrive检测到数据写入其缓存中,置BUSY为1,清DRQ并根据地址将数据写入;当数据写完后,清BUSY状态位,重新回到准备状态,准备执行下一次操作。
在读写操作中,对进程起控制作用的是DRQ这一状态位,其检测程序如下:
void wait_drq?void?
? unsigned int a?
a=XBYTE?0xE007??
//读取状态寄存器的值
if??a&0x01?==1? error???
//若出错位为1?转出错处理
while??a&0xf8??=0x58?
a=XBYTE?0xE007??
//查询DRQ位?不为1则循环等待
?
(4)数据的擦除
为达到此目的,首先将要操作的扇区地址写入偏移地址为003H~006H的逻辑块寻址寄存器中,再将要操作的扇区数目写入偏移地址为002H的扇区数目寄存器中,接着发送擦除命令字(0C0H)到命令寄存器当中,执行完擦除命令后,读出的值全为0。
本文介绍的基于单片机的MicroDrive接口设计,成功地实现了操作MicroDrive的常用命令和对MicroDrive的8位格式的操作。经过测试,此接口也可以对CF Type I卡(如SanDisk公司的CompactFlash卡)进行正确操作,从而提高了应用系统的兼容性,具有较广泛的应用价值,目前已准备在便携式的动态脑电、动态心电上使用,同时可用于MicroDrive或CompactFlash卡作为存储器使用的便携式电子设备中。
《基于单片机的MicroDrive接口设计(第4页)》