设为首页 加入收藏

TOP

AT45DB041D存储驱动设计和页式存储管理算法设计(二)
2014-11-24 00:11:50 来源: 作者: 【 】 浏览:59
Tags:AT45DB041D 存储 驱动 设计 管理 算法
{
break;
}
}
F_CSL;
Spi_Wirte(0xe8);
Spi_Wirte((unsigned char)(PA>>7));
Spi_Wirte((unsigned char)((PA<<1)|(BFA>>8)));
Spi_Wirte((unsigned char)BFA);

for(i=0;i<4;i++)
{
Spi_Wirte(0x00);
}

for(j=0;j {
pHeader[j]=Spi_Read();
}
F_CSH;
}
完成数据flash的buffer的写操作:
[cpp]
/*********************************************************************************
* 函数原型:void DFlash_BufferWrite(uchar buffer,uint BFA,uchar *pHeader,uint len);
* 名 称:DFlash_BufferWrite
* 功 能:将指定数据写入从某个地址(0~263)开始的BUFFER中
* 入口参数:
* buffer - 选择BUFFER,01H选择BUFFER 1,02H选择BUFFER 2
* 在该指令序列中,操作码84H选择BUFFER 1,87H选择BUFFER 2
* BFA - BUFFER中的起始地址,0~263
* pHeader - 待写入数据的首地址(指针)
* len - 待存数据的长度1~264
* 出口参数:无 www.2cto.com
**********************************************************************************/
void DFlash_BufferWrite(uint8_t buffer,uint32_t BFA,uint8_t *pHeader,uint32_t len)
{
uint8_t i=0,j=0;
while(i++<255)
{
if(DFlash_RegisterStatusRead()&0x80)
{
break;
}
}
F_CSL;
switch(buffer)
{
case 1:Spi_Wirte(WRITE_BUFFER1);break;
case 2:Spi_Wirte(WRITE_BUFFER2);break;
}
Spi_Wirte(0x00);
Spi_Wirte((unsigned char)(BFA>>8));
Spi_Wirte((unsigned char)BFA);

for(j=0;j {
Spi_Wirte(pHeader[j]);
}
F_CSH;
delay_ms(40); //延时20MS
}
第四步玩成对flash存储单元的写操作:
[cpp]
/*********************************************************************************
* 函数原型:void DFlash_BufferToMainMemoryPageProgramWithBuilt_inErase;
* 名 称:DFlash_BufferToMainMemoryPageProgramWithBuilt_inErase
* 功 能:将指定数据写入从某个地址(0~263)开始的页中:包含2个动作,首先将指定数据
* 写入到BUFFER 1或者BUFFER 2中,其中可以指定BUFFER中的起始写入地址,此写入
* 动作不影响BUFFER中其它地址中的数据,然后再将BUFFER中的整个数据写入到某指
* 定页中(带预擦除)。
* 入口参数: buffer - 选择BUFFER,01H选择BUFFER 1,02H选择BUFFER 2
* PA - 页地址,0~2047
* BFA - 指定BUFFER中的起始写入地址
* pHeader - 指定数据的首地址
* len - 指定数据的长度
* 出口参数:无
**********************************************************************************/
void DFlash_BufferToMainMemoryPageProgramWithBuilt_inErase
(uint8_t buffer,uint32_t PA,uint32_t BFA,uint8_t *pHeader,uint32_t len)
{
uint32_t i=0;
//将长度为len,首地址为pHeader的数写入以 BFA为首地址的buffer中
DFlash_BufferWrite(buffer,BFA,pHeader,len);
//等待 AT45DB041B 的ready
while(i++<1000)
{
if(DFlash_RegisterStatusRead()&0x80)
{
break;
}
}
F_CSL;
switch(buffer)
{
case 1:Spi_Wirte(0x83);break;
case 2:Spi_Wirte(0x86);break;
}
Spi_Wirte((unsigned char)(PA>>7));
Spi_Wirte((unsigned char)(PA<<1));
Spi_Wirte(0x00);
F_CSH;
delay_ms(40); //延时20MS
}
到此驱动程序设计完成。这个驱动是可以直接拿
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 1047 Integer Inquiry 下一篇Loader简介----2

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: