打印

大页面nandflash读写问题

[复制链接]
1374|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zgt0|  楼主 | 2010-7-24 21:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我根据flash数据手册 用下面这种方法发地址,为什么无**常读取呢?页面的大小是2K。

static void s3c2440_write_addr(unsigned int addr)
{
   
    volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand->NFADDR;
//这是我改后 无**常读取的程序
  
    *p = addr & 0xff;                      /* Column Address A0~A7 */
    for(i=0; i<10; i++);
    *p = (addr >> 8) & 0x0f;        /* Column Address A8~A11 */
    for(i=0; i<10; i++);
    *p = (addr >> 12) & 0xff;        /* Row Address A12~A19 */
    for(i=0; i<10; i++);
    *p = (addr >> 20) & 0xff;        /* Row Address A20~A27 */
    for(i=0; i<10; i++);
   


//改成下面程序的程序可以

        int col, page;

        col = addr & NAND_BLOCK_MASK; /*NAND_BLOCK_MASK=NAND_SECTOR_SIZE-1*/
        page = addr / NAND_SECTOR_SIZE;/*NAND_SECTOR_SIZE=2048*/

        *p = col & 0xff;                        /* Column Address A0~A7 */
        for(i=0; i<10; i++);
        *p = (col >> 8) & 0x0f;        /* Column Address A8~A11 */
        for(i=0; i<10; i++);
        *p = page & 0xff;                      /* Row Address A12~A19 */
        for(i=0; i<10; i++);
        *p = (page >> 8) & 0xff;        /* Row Address A20~A27 */
        for(i=0; i<10; i++);
      
}
把程序修改成如下则能正常运行。

    *p = addr & 0xff;                      /* Column Address A0~A7 */
    for(i=0; i<10; i++);
    *p = (addr >> 8) & 0x0f;        /* Column Address A8~A11 */
    for(i=0; i<10; i++);
    *p = (addr >> 11) & 0xff;        /* Row Address A12~A19 */ 为什是11,而不是12????
    for(i=0; i<10; i++);
    *p = (addr >> 19) & 0xff;        /* Row Address A20~A27 */为什是19,而不是20????
    for(i=0; i<10; i++);
   
下面的表格是nandflash 数据手册中的地址分配,前面两个周期是Column Address,后面的是Row Address

I/O 0I/O 1I/O 2I/O 3I/O 4I/O 5I/O 6I/O 7
1st Cycle
A0A1A2A3A4A5A6A7
2nd CycleA8A9A10A11*L *L *L *L
3rd CycleA12A13A14A15A16A17A18A19
4th CycleA20A21A22A23A24A25A26A27

相关帖子

沙发
a121597302| | 2011-5-13 13:49 | 只看该作者
我也遇到了和你一样的困惑,我认为是因为我们定义的页大小是2048而不是真正的2112的缘故,因此我们计算的字节地址是以11位对齐(最小单位是2048),而Datasheet中地址分配可是按12位(最小单位2112)对齐的。不知道我说的对不对,希望对你有点帮助!:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

1

粉丝