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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM