Nor Flash 编程
1. 注意Nor Flash的 数据宽度。例如,8-bit,16-bit等。 它们会在program,erase,read id过程中,产生小小的confusing, 比较好的方式,个人以为,可以定义一个Macro,如 Addr(base,cmd)?? (*(data_width *)(base + ( cmd <<(data_width/8 - 1)?) ) ), 其中 base 即为当前Flash 片选的基地址,cmd,就是Nor Flash手册中定义的Address cycle的内容 对于这个宏的引用,比如 Addr(0xFF800000,? CMD_READ_ID_ADDR1) = CMD_READ_ID_DATA1;?? 第一个cycle的 地址 和数据 ? 2. 要注意Nor Flash的 数据宽度,会在 PCB 的 layout 有些体现,也就是DQ线的连接,而这个问题在对Nor Flash进行 非word对齐的 word program中,要多加注意 后来和硬件的同事确认了一下,有时硬件为了PCB 总线的方便,可能会将数据线做些调整。 比如,nor flash 的数据线是 DQ0-DQ15,而从GPCM 连过来的数据线做了一个颠倒 Nor Flash的 DQ0-DQ7 连接 GPCM的DQ8-DQ15 而Nor Flash的DQ8-DQ15 连接 GPCM的 DQ0-DQ7 ? 3. sector erase 中, 注意最后一个 操作cycle中的 addr部分,其用来表示要擦除的 sector 诸如, *(U16 *)(base + sec_num << 11) = CMD_SECTOR_ERASE_DATA6; 其中的sec_num来源于 地址总线上的 11-21 bit,具体应该查阅相关的 nor flash 数据手册的定义,在 command sequence的下脚处通常都会指明的 4. block erase中,要擦出的block 来自于地址线上的A21-A15,利用掩码获取到这些位,右移 15位 就得出block number了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |