K9K2G08U0A编程器件以页为单位编程,它允许在单页编程周期中对部分页或一个甚至连续的多达2112个连续字节编程。一个页编程周期由2个阶段组成[3]:(1)串行数据加载阶段:数据被加载到数据寄存器中,以输入命令80h为标志,紧接着是5个字节的地址输入和串行数据加载;(2)非易失性的编程阶段:命令10h标志着该编程阶段的开始,将已加载的数据写入实际的存储单元,编程典型时间为200μs。之后R/ 跳低,进入闪存内部编程,最后进入读状态确认操作,命令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); //输入命令0x80
F_WE=1;
F_ALE=1;//发送地址开始
AddrOut (addr1); //得到页地址,五个周期
AddrOut (addr2); AddrOut (addr3); AddrOut (addr4); AddrOut (addr5);
F_ALE=0;
FirstP =0; }
WriteData(BuffBlock); //将数据写入缓冲区
FlagWrite =0;
Do{
F_WE=0;
WriteFlash(); //将数据写入flash
FlagWrite++;
F_WE=1;
}while(FlagWrite<64); //写满一页数据
OutputCommand (0x10); //输入命令0x10
while(!F_RB); //等待读信号有效
OutputCommand (0x70); //输入命令0x70
Wait();
F_CE=1; //片选结束
startpage++; //继续写下一页
FirstP =1;
}
4.结束语
本文在充分研究USB2.0协议、Bulk-Only传输协议和SCSI指令规范的基础上,设计出USB2.0高性能移动存储设备。本文作者创新点:将FLASH作为数据采集系统中的存储单元,应用在与计算机交互数据的采集过程之中;并采用中断驱动设计固件程序,提高了读写效率。实验证明,其性能稳定可靠,读写数据速度达到了令人满意的效果。移动数据的交换和存储是目前IT行业的热点,可以在此基础上,不断完善现有设计方案,继续研究开发嵌入式USB主机系统,使得在PC机不参与的情况下同样可以进行数据的存储与交换。