禾雨

导航

EFlash控制器

在没有core的bfm平台跑一下用例:

步骤一、选择NVR=0,即main array;

步骤二、配置chip-erase time TERASE,需要大于30ms——这是重点

步骤三、配置chip-erase的recovery timeTRCV,需要大于200us;

步骤四、配置chip-erase使能寄存器ME;

步骤五、等待40ms后,配置program的recovery timeTRCV(与步骤三是同一个寄存器——这是重点),需要大于5us;

步骤六、配置写地址、写数据、写使能寄存器,每次写需要等待46us左右;

步骤七、配置AHB总线读flash

 

还做了以下测试:

1、选择main array进行chip erase,chip erase后读到flash默认值为全1;

2、选择main array进行program,program后读到flash值为写入值;

3、不能一上电就program,因为flash中的值不能从0变为1;在program之前,必须要erase,erase后需要将Trcv值从erase恢复时间修改为program恢复时间,否则program后会发现读出来的值不对,即program不成功;

4、选择NVR区进行5个sector的擦除,sector擦除后NVR默认值为全1;sector擦除后进行program,读出来值正常;再选择非NVR区进行chip erase;再选择NVR区进行读,读出来值正常;

 

EFC连接AHB-I和AHB-S总线。

AHB-I只能读前510KByte,AHB-I不能擦除、编码,AHB-I不能访问EFC寄存器。

AHB-S只能读后2KByte,AHB-S可以擦除、编写flash,或者访问EFC寄存器。

以下介绍8MHz下soc的几种主要操作:

1、读

     步骤一,选择main块或者info块,NVR=0即选择main块,NVR=1即选择info块;

     步骤二,设置读周期,TRC=0(TRC值是基于工作时钟clk的频率决定的,TRC>=30ns)

2、正常的编码:

     步骤一,选择main块或者info块,NVR=0即选择main块,NVR=1即选择info块;

     步骤二,设置写地址寄存器,ADDR(偏移量=0x04)

     步骤三,设置写数据寄存器,WDATA(偏移量=0x1c)

     步骤四,设置编码参数:TNVS、TPGS、TPROG、TRCV(均根据clk频率决定);

     步骤五,使能写操作:写WE寄存器(偏移量0x18)数据0x1

3、页擦除操作:

      步骤一,选择main块或者info块,NVR=0即选择main块,NVR=1即选择info块;

      步骤二,设置擦除开始地址,ADDR(偏移量=0x04)

      步骤三,设置编码参数:TNVS、TRCV、TERASE(均根据clk频率决定);

      步骤四,使能擦除操作:写PE寄存器(偏移量0x10)数据0x1

4、mas擦除操作:

      步骤一,选择main块,即设置NVR=0

      步骤二,设置TNVS、TRCV、TERASE(均根据clk频率决定);

      步骤三,使能mas擦除操作:写ME(偏移量0x14)数据0x1

  

posted on 2019-10-29 17:14  禾雨  阅读(2310)  评论(0编辑  收藏  举报