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