S3C6410与1G nandflash k9k8g08u0e

这个nandflash搞了好久好久,就是因为在做中断的时候必须要把代码放到nandflash的0addr上,而手上也找不到能烧录进去的(硬件资源)方法,于是就打算使用软件的办法来进行烧录。

目前还有很多的nandflash的只是还没搞懂,但是可以进行简单的开发。

在编程时候遇到了一个问题就是在read id的时候read出了奇奇怪怪的id,数值上是存在的但是顺序不同。为此做了很多的尝试。终于在好久好久次尝试之后想到了问题所在。问题就在于我复制代码的时候 原代码用的是返回一个int数值的变量。
这里的问题涉及到了 nandflash controller nfcdata寄存器的三种使用方法
byte--> 1 io周期
half word--> 2 io周期
word--> 4 io周期
当使用了unsigned long变量类型的指针时就使用了第三种使用方法。这个时候你用了一个unsigned char类型的变量来接收自然就导致问题了。在你接受的四个字节中只有一个被保存下来了。这就是发生了错误的原因: 变量类型的不匹配导致的溢出。

对该flash寻址的问题。在read id之后就能够确定这款nandflash 的页大小和块大小
1页=2k+64bytes
1块=64页=64*(2k+64)btyes
再看地址发送周期图
column address 为A0-A11 总共12位。这里困扰了我很久
row address为A12-the last

为什么困扰呢。因为2k只需要11跟地址线。为什么这么浪费。没错就是这么浪费。
在经过了许多的实验后。才知道。。 在2048字节(2KB)后跟着的就是64字节的ECC校验码。总共是2112字节,12跟地址线寻址到2112后面的内容在读取之后都发现为00h,而循环到4096后面的内容又开始了循环。所以。。。。。。 实际2112-4096这部分的地址是并没有使用的。
然后就能够继续愉快的编程啦。

在了解上面的问题之后就完成了使用软件来进行程序的烧写。(目前还有一点困扰,如何使用串口来传输二进制文件的编码,尝试过xmodem协议,总感觉好麻烦,接下来再看看ftp协议吧。)

尚不理解的ECC原理,与尚不理解的plane size。
read id 后发现这款flash是有2个internal chip 支持interleave 以及4个2G的plane,我只想说 这是什么鬼。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值