DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1234|回复: 1
打印 上一主题 下一主题

[待整理] 基于单片机的MicroDrive接口设计

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-5 10:51:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
基于单片机的MicroDrive接口设计


摘要:介绍了IBM的MicroDrive的基本结构和工作原理,详细说明了MicroDrive接口设计的关键技术;以AT89C52型单片机为基础,设计完成了MicroDrive的接口电路,正确实现了对MicroDriver的读写及数据管理等功能。    关键词:MicroDrive 单片机
近几年,各种大容量的小型存储器不断涌现,在便携式设备中获得了广泛的应用。目前常见的存储卡类型有:1Smart Media Card2MemoryStick3MultiMedia Card4CompactFlash Type I Card5IBM的MicroDrive等。各存储卡在容量、功耗、体积上各有特色,但IBM的MicroDrive尤为出色。
MicroDrive是由IBM日本分公司研发生产出来的产品,其接口符合CFA(CompactFlash Association)协会制定的CF+ Type II 规范,具有容量大(170MB~3GB)、体积小(42.8mm×36.4mm×5.0mm)、性价比高、耗电量小等特点,已在数码相机、笔记本电脑、掌上电脑、便携式音乐播放器等设备的存储中获得了较广泛的应用。
目前市面上已有多家国内外公司生产出操作MicroDrive的接口(如IBM公司),但其价格较高。为降低成本,实现对MicroDrive的数据访问和管理功能,本文给出了一种基于单片机的MicroDrive接口设计。

1 MicroDrive介绍

MicroDrive各性能参数如下:
·容量(MB):1000/512/340;
·缓冲区大小:128字节;
·扇区大小(字节):512;
·盘片数量:1;
·平均寻道时间:12ms;
·平均等待时间:8.33ms;
·最大内部数据传输速率:59.9MB/s;
·最大外部数据传输速率:13.3MB/s;
接口:CF+兼容ATA和PCMCIA
数据密度GB/平方英寸:15.2;
大小:5mm×43mm×35mm;
重量:17克;
磁盘旋转速度:3600RPM。
主要特点有:
·体积小、重量轻、容量大;
·可靠性高,有效的数据保护及数据编码技术,使得其出错率极低;
·读写速度快,连续读写速率最高可达4.2MB/s,抗冲击(1500G),耐震动(5G);
·兼容性好,支持3.3V或5V工作电压,具有广阔的使用范围。
2 MicroDrive硬件接口设计
2.1 MicroDrive接口简介及访问模式的选择
MicroDrive的接口符合CF+ Type II标准,支持3.3V或5V直流工作电压,提供了完整的PCMCIA-ATA功能且通过ATA/ATAPI-4兼容TrueIDE。但与68针接口的PCMCIA卡不同的是,同样遵从ATA协议的MicroDrive 接口只有50针,采用50脚双列0.05英寸间距标准接口(管脚排列如表1所示)。

表1 MicroDrive管脚排列
管脚号名  称管脚号名  称管脚号名  称
Pin1GNDPin18A02Pin35IOWR
Pin2D03Pin19A01Pin36WE
Pin3D04Pin20A00Pin37RDY/BSY
Pin4D05Pin21D00Pin38VCC
Pin5D06Pin22D01Pin39CSEL
Pin6D07Pin23D02Pin40VS2
Pin7CE1Pin24WPPin41RESET
Pin8A10Pin25CD2Pin42WAIT
Pin9OEPin26CD1Pin43INPACK
Pin10A09Pin27D11Pin44REG
Pin11A08Pin28D12Pin45BVD2
Pin12A07Pin29D13Pin46BVD1
Pin13VCCPin30D14Pin47D08
Pin14A06Pin31D15Pin48D09
Pin15A05Pin32CE2Pin49D10
Pin16A03Pin33VS1Pin50GND
Pin17A04Pin34IORD  
对MicroDrive,数据都是以512字节的扇区单元进行操作,能够通过IDE、Memory等模式对其进行访问。
虽然IDE模式被广泛应用于计算机硬盘的接口中,同时也被经常应用于嵌入式系统中,得到绝大多数的BIOS和工业单板机的支持;但是IDE模式涉及复杂的文件管理,使得控制操作相对复杂,不符合简单可行的设计要求。
本系统由单片机实现嵌入式设计。而Memory模式是MicroDrive的默认模式,可以避免繁琐的寄存器设置,同时支持8位数据带宽,控制操作相对简单,可以极大地简化设计,节省系统的资源。故本系统采用Memory模式。
2.2 硬件接口
本系统电路连接框图如图1所示,主要包含以下五部分:
(1)AT89C52
AT89C52拥有比8051多一倍的数据存储器(256字节的RAM),拥有8K字节内部只读存储器(ROM),操作命令以及各引脚与8051基本一致。在本系统中,AT89C52的作用至关重要,它担负着与外部的通信及实现对MicroDrive的各种操作。
(2)外部数据存储器
外部数据存储器主要用作硬盘数据读写的缓存,因而必须具有非易失性、简便的操作及合适的容量。62HC64容量为8KB具有非易失性、功耗低等特点。
(3)通信电平转换芯片
RS232C是目前异步串行通信中应用最广泛的标准总线,适用于数据中断设备(DTE)和数据通信设备(DCE)之间的接口;而单片机使用TTL电平,两者互不兼容。因而使用了MAX232电平转换芯片对它们的通信电平进行转换,作为对外的通信接口。
(4)CF+适配口
使用了标准50针CF+适配口。
(5)地址锁存器74LS373和地址译码器74LS138
其中Address/Data(0~7)为复用的8位数据或低8位地址总线,Address(8~12)为用于寻址62HC64的高5位地址线,Address(13~15)接至74HC138,用作外部数据存储器62HC64及MicroDrive 的片选信号;Reset(RESET)信号与AT89C52的RESET脚连接,以达到同步复位的目的,上电复位后,MicroDrive自动进入默认的Memory 模式;REG Register信号用于选择访问MicroDrive的Attiribute Memory(低电平)或Common Memory(高电平);对于CE1与CE2(Card Enable),因为只有一块MicroDrive,故将CE2接高电平,CE1接74LS138的Y7脚;OE、为读写有效信号,与AT89C52的P3.7(RD)、P3.6(WR)相连;RDY/BSY(Ready/Busy)MicroDrive 的闲忙状态信号,当MicroDrive忙时,该脚为低电平,不能对MicroDrive做任何操作,与AT89C52的P3.2相连,以便可通过软件检测此位,判定MicroDrive的闲忙状态;WAIT(Wait)信号的有效意味着一个操作进程正在完成过程中,把它与P1.7相连,以便检测;CD1、CD2(Card Detect)用于MicroDrive的存在检测,与AT89C52的P3.2、P3.3相连;AT89C52的P3.0(RXD)用作串行通信输入,接MAX232的12脚(R1OUT),用于接收通过MAX232送来的数据,P3.1(TXD)用作串行通信输出,接MAX232的11脚(T1IN),通过MAX232送出数据。
3 软件设计
3.1 主要寄存器简介
MicroDrive内几个涉及到的操作寄存器,如表2所示。

表2 MicroDrive主要寄存器
偏移地址名  称说  明
000HDATA REG数据寄存器
001HERROR REG出错状态寄存器
002HSECTOR COUNT REG扇区数目寄存器
003HLBA 0~7逻辑块寻址地址0~7位
004HLBA 8~15逻辑块寻址地址8~15位
005HLBA 16~23逻辑块寻址地址16~23位
006HLBA 24~27逻辑块寻址地址24~27位
007HSTATUS REG读取时为状态寄存器
007HCOMMAND REG写入时为命令寄存器
3.2 软件设计简述
硬件设计好后,可以通过软件驱动接口电路读写MicroDrive。软件流程如图2所示。首先进行测试以确定所有端口及信号的极性正确。由于Memory模式是缺省模式,其使用前的检测就变得相当简单。主要把软件分成以下几部分:
(1)检测MicroDrive
首先,确定MicroDrive是否已正确插入插槽。这需要检测Card Detect引脚,即将P3.2、P3.3的状态读入。如果两个都为0,就表示MicroDrive已正确插入适配口;否则表明未正确插入,需要重新插入。
其次,在确定MicroDrive已正确插入后,开始检测其状态。从Common Memory的偏移地址为007H的状态寄存器中读取MicroDrive的状态信号,如果MicroDrive被正确Reset了,读到的数据应该是50H,意味着MicroDrive已能使用并准备接收命令;否则证明有错误,应重新Reset。
最后,当MicroDrive的状态证实无误并处于Memory模式时,就可以发送诊断命令字(Execute Diagnostics:90H)到命令寄存器(偏移地址为007H)中。这一命令将会根据MicroDrive的当前情况重置状态寄存器007H(与命令寄存器的地址相同),当出错时,出错位将会被置1,此时检查错误状态寄存器(偏移地址为001H)将会得到详尽的出错信息;而一旦无错误,便可对MicroDrive进行操作了。
(2)数据的读取
为了达到此目的,首先,将要操作的扇区地址写入偏移地址为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卡作为存储器使用的便携式电子设备中。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-9-26 04:17 , 耗时 0.107056 秒, 20 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表