基于USB2.0的高性能移动存储设备的设计_第1页
免费预览已结束,剩余4页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于usb2.0的高性能移动存储设备的设计:写使能信号。在其升高沿时,指令、地址和数据锁存到相应的寄存器中。该信号与at89c5131芯片的p3.6 信号衔接。:读使能信号。在其下降沿时,输出数据到i/o,同时,它还可以对内部数据地址举行累加。该信号与at89c5131芯片的p3.7 信号衔接。cle:指令锁存使能信号。当cle为高电平常,指令在 升高沿通过i/o端口送入指令寄存器。该信号与at89c5131芯片的p1.0引脚衔接。ale:地址锁存使能信号。当ale为高电平常,地址在 升高沿送入地址寄存器。该信号与at89c5131芯片的p1.1引脚衔接。:片选信号。用于控制设备的挑选。当设备

2、忙时 为高电平而被忽视,当处于编程和擦除操作时设备不能回到备用状态。该信号与at89c5131芯片的p1.2引脚衔接。r/ :预备好/忙输出。当它为低电平常,表示编程、擦除和随机读操作正在举行,在操作完成后返回高电平;当芯片没被选中或输出禁止时,其为高电平常。该信号与 at89c5131芯片的p1.3引脚衔接。3. 固件设计实现本文设计的usb移动存储设备采纳bulk-only传输方式,遵循ufi指令规范。移动存储设备固件的主要功能是响应usb总线的各种标准哀求,向主机返回设备的状态信息;同时,解析接收到的scsi指令,举行相应的指令处理和数据读写操作。固件设计采纳中断驱动,当at89c513

3、1从总线上接收到哀求包时,通过调用相应的中断大事处理函数来实现,后台处理usb传输,从而保证了闪存的迅速读写速率。主要中断大事有:(1)主循环等待usb中断,设置相应标记位。移动存储设备插入主机后,主机向移动闪存的控制断点0发出标准哀求,固件进入标准哀求处理函数,设备回送给主机所要求的相应描述符,调用相关驱动程序。(2)当usb主机通过bulk-in端口读取闪存数据后,产生bulk-in端口中断。(3)当at89c5131通过bulk-out端口接收到主机发送的指令字cbw后,触发bulk-out端口中断。31 响应usb总线标准哀求当usb移动存储设备接入主机后,usb主机控制器对设备举行总

4、线枚举过程,首先向设备发送标准usb哀求get_descriptor来获得最大数据包长度;接着发出set address哀求,为设备分配地址;用法新分配的地址再次发出get_descriptor哀求,读取设备的配置信息4,如设备描述符、配置描述符、接口描述符、端口描述符和字符串描述符等,并挑选合适的驱动程序;最后,发出set configuration哀求配置端口属性。usb设备通过控制端口响应usb标准哀求,实现主机和设备间的通信。除控制端口外,bulk-only传输方式还需支持bulk-in和 bulk-out端口。端口初始化代码如下:void usb_init(void)uepnum=0

5、x00; uepconx=0x80;/端口0,控制端口uepnum=0x01; uepconx=0x86;/端口1,bulk-in端口uepnum=0x02; uepconx=0x82;/端口2,bulk-out端口ueprst=0x07; ueprst= 0x00;/端口复位uepien=0x07; usbien|=eeofint;usbaddr=fen; /功能使能位当控制端口配置胜利后,主机会发出inquiry、mode_sense、read_capacity等哀求,提供闪盘基本信息,如扇区大小、簇大小、闪盘容量等,当哀求结果正确后,便会发出read(10)指令,进入文件系统识别阶段。3

6、2 解析scsi指令并处理ufi 指令规范基于 sff-8070i 和 scsi-2 的规范,总共定义了19个固定12字节长度的操作指令,用于 usb主机和 usb 移动存储设备之间举行指令字cbw (command block wrapper)、一般数据、状态字csw (command status wrapper)的交换。usb移动存储设备接收到来自于usb主机bulk-out端口发给其的cbw指令字后,根据scsi的指令格式举行解析,得到其中的指令信息,如:格式化设备、查询设备信息、读写设备等,对移动存储设备执行相应的指令后,向主机bulk-in端口返回状态字 csw,报告指令执行状况,

7、主机按照反馈的状态字打算是否继续发送指令字或是数据。33 闪存的操作实现k9k2g08u0a芯片以页为单位来举行读写,以块为单位举行擦除。k9k2g08u0a支持的操作主要有几种:读操作(read)、页编程 (page program)、缓存编程(cache program)、块擦除(block erase)、块复制(copy-back program)、随机数据输入(random data input)、随机数据输出(random data output)、复位(reset)、读设备号(readid)、读状态(read status)等操作。在举行写操作之前,必需对写单元所在块举行擦除,因此

8、事先需要对所擦除块内容举行保存。假如闪存存在坏块,则在举行读、页编程、块擦除、块复制等操作时会失败,因此对坏块要举行提前检测并举行标注。芯片在出厂时,在每块的第一页和其次页的2048列的首字节做出好坏标志,假如标记位不是ffh则为坏块,基于此建立坏块列表。基于篇幅的缘由,这里以写操作过程为例描述闪存用法办法。普通闪存的用法挨次是:块擦除-编程-多次读取-块擦除, 对k9k2g08u0a芯片举行数据写的步骤如下:(1)将写入数据扇区地址与坏块列表对比,检查错误扇区。若存在坏区,则继续检查下一扇区;(2)开拓缓冲区域,将写入数据扇区的原始数据利用copy-back program方式保存到缓冲区;

9、(3) 利用block erase擦除要写入的数据扇区;(4) 利用 page program操作将主机传输的数据写到闪存中;(5)利用copy-back program操作将缓冲区的数据写入指定扇区。k9k2g08u0a编程器件以页为单位编程,它允许在单页编程周期中对部分页或一个甚至延续的多达2112个延续字节编程。一个页编程周期由2个阶段组成3:(1)串行数据加载阶段:数据被加载到数据寄存器中,以输入指令80h为标记,紧接着是5个字节的地址输入和串行数据加载;(2)非易失性的编程阶段:指令10h标记着该编程阶段的开头,将已加载的数据写入实际的存储单元,编程典型时光为200s。之后r/ 跳低

10、,进入闪存内部编程,最后进入读状态确认操作,指令70h表示读状态指令,i/o0表示读到的状态。页编程实现代码如下:void pagewrite(void ) /页编程checkblock(startpage); /检测坏块列表if(firstp)/ firstp为1,开头对一页举行写操作,否则为0/片选信号有效f_ce=0; f_re=1; f_ale=0;f_cle=1;f_we=0;outputcommand(0x80); /输入指令0x80f_we=1;f_ale=1;/发送地址开头addrout (addr1); /得到页地址,五个周期addrout (addr2); addrout (addr3); addrout (addr4); addrout (addr5);f_ale=0;firstp =0; writedata(buffblock); /将数据写入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论