三星NANDFLASH K9F2G08U0B
时间:2011-03-30
来源:互联网
如果有朋友写三星NANDFLASH K9F2G08U0B的驱动,以此帖为讨论,大家一同分享一下。
目前,正在研究这个,很多地方的理解不正确,大家一同探讨,答疑!
for(i = (start_addr >> 12); size > 0; ) //右移12位,获取到列地址
{
rLB_ReadPage(i, to);
size -= 2048;
to += 2048;
i ++;
}
void rLB_ReadPage(U32 addr, unsigned char * to) //该处的addr就是以上右移12位后的行地址信息
{
U32 i;
rNF_Reset();
// Enable the chip
NF_nFCE_L();
NF_CLEAR_RB();
// Issue Read command
NF_CMD(CMD_READ);
// Set up address 设置读取的地址
NF_ADDR(0x00);
NF_ADDR(0x00);
NF_ADDR((addr) & 0xff); //以下三个地址是行地址
NF_ADDR((addr >> 8) & 0xff);
NF_ADDR((addr >> 16) & 0xff);
NF_CMD(CMD_READ3);
NF_DETECT_RB(); // wait tR(max 12us)
for (i = 0; i < 2048; i++) //该指令执行以后,实际可获取的是2112 bytes,但2048 bytes 以后的数据是属于附加的一些信息,所以这里没有获取
{
to[i] = NF_RDDATA8();
}
NF_nFCE_H();
}
其它的相关指令还在研究中,如果有朋友已经有结果,有兴趣的话分享一下。
目前,正在研究这个,很多地方的理解不正确,大家一同探讨,答疑!
for(i = (start_addr >> 12); size > 0; ) //右移12位,获取到列地址
{
rLB_ReadPage(i, to);
size -= 2048;
to += 2048;
i ++;
}
void rLB_ReadPage(U32 addr, unsigned char * to) //该处的addr就是以上右移12位后的行地址信息
{
U32 i;
rNF_Reset();
// Enable the chip
NF_nFCE_L();
NF_CLEAR_RB();
// Issue Read command
NF_CMD(CMD_READ);
// Set up address 设置读取的地址
NF_ADDR(0x00);
NF_ADDR(0x00);
NF_ADDR((addr) & 0xff); //以下三个地址是行地址
NF_ADDR((addr >> 8) & 0xff);
NF_ADDR((addr >> 16) & 0xff);
NF_CMD(CMD_READ3);
NF_DETECT_RB(); // wait tR(max 12us)
for (i = 0; i < 2048; i++) //该指令执行以后,实际可获取的是2112 bytes,但2048 bytes 以后的数据是属于附加的一些信息,所以这里没有获取
{
to[i] = NF_RDDATA8();
}
NF_nFCE_H();
}
其它的相关指令还在研究中,如果有朋友已经有结果,有兴趣的话分享一下。
作者: txgc_wm 发布时间: 2011-03-30
一楼很强
作者: Junyi 发布时间: 2011-03-30
本帖最后由 txgc_wm 于 2011-3-30 23:13 编辑
擦除已验证通过,但不是很完善。
int Nandflash_Erase_Block(int addr)
{
//U8 stat;
//char data;
addr &= ~0xfff;
NF_nFCE_L();
NF_CLEAR_RB();
NF_CMD(CMD_ERASE1);
NF_ADDR((addr>>12) & 0xff);
NF_ADDR((addr >> 20) & 0xff);
NF_ADDR((addr >> 28) & 0xff);
NF_CMD(CMD_ERASE2);
//NF_DETECT_RB();
//NF_CMD(CMD_STATUS);
NF_WAITRB();
Uart0_SendString("erase the block success!");
NF_nFCE_H();
return 0;
}
如果大家有什么好的修改意见,请帮忙修改!
擦除已验证通过,但不是很完善。
int Nandflash_Erase_Block(int addr)
{
//U8 stat;
//char data;
addr &= ~0xfff;
NF_nFCE_L();
NF_CLEAR_RB();
NF_CMD(CMD_ERASE1);
NF_ADDR((addr>>12) & 0xff);
NF_ADDR((addr >> 20) & 0xff);
NF_ADDR((addr >> 28) & 0xff);
NF_CMD(CMD_ERASE2);
//NF_DETECT_RB();
//NF_CMD(CMD_STATUS);
NF_WAITRB();
Uart0_SendString("erase the block success!");
NF_nFCE_H();
return 0;
}
如果大家有什么好的修改意见,请帮忙修改!
作者: txgc_wm 发布时间: 2011-03-30
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28