加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Nor Flash 编程

发布时间:2020-12-15 06:52:18 所属栏目:百科 来源:网络整理
导读:1. 注意Nor Flash的 数据宽度。例如,8-bit,16-bit等。 它们会在program,erase,read id过程中,产生小小的confusing, 比较好的方式,个人以为,可以定义一个Macro,如 Addr(base,cmd)?? (*(data_width *)(base + ( cmd (data_width/8 - 1)?) ) ), 其中 b

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了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读