在沒有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