一設計功能
對SPI_flash進行扇區擦除,分為寫指令和扇區擦除兩個時序部分。
二設計知識點
我簡單理解flash,第一它是掉電不丟失數據的存儲器,第二它每次寫入新數據前首先得擦除數據,分為扇區擦除和全擦擦。
下面講講我自己親自動手設計的原創代碼過程:
自己設計過程:
第一步:就先看了SPI FLASH文檔,了解SPI FLAHS的原理:先有寫使能信號及其時序波形,然后是扇區擦除指令和地址及時序波形,再是延時3秒回到初始狀態。
第二步:自己畫出所有的狀態及其轉移圖,還是就是用線性序列機表達寫使能指令的時序和扇區擦除的時序,並且把他們用EXCEL表弄出相應的時間點和信號的變化(對輸出信號賦值)。做完后再弄出模塊框圖。
第三步:根據自己的模塊框圖和狀態轉移圖,還有線性序列機的EXCEL表格,描述對應的代碼。
第四步:仿真驗證是否出錯。
我的設計思想如下圖所示,三部分。
一是計數器(寫使能時序的計數器,扇區擦除的計數器,延時三秒的計數器).
二是,狀態機。(初始狀態,寫使能指令狀態,擦除扇區的狀態,延時三秒的狀態)
三是,線性序列機。(由寫指令和擦除扇區的時序圖弄好計數值及信號變化)
計數器:
一是WF計數器,計到41,位寬為6。
二是SE計數器,計到128.,位寬為9
三是延時3秒的計數器, 計到150M,位寬為28
針對眾多時序邏輯的編碼方法:第一步在excel中,分成兩列,一列是計數值(使用序列填充,等差),一列是對應的信號變化。第二步,直接在notepad++里使用列編輯加上分號,歐克勒。
線性序列機:
WE的時序邏輯:下圖為WREN時序波形圖。
時間ns |
計數值 |
信號的操作 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 |
0 |
Begin sck<=0;cs_n<=1;sdi<=0;end |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20 |
1 |
Begin sck<=0; cs_n<=0;end |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
80 |
4 |
sck<=1; |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
120 |
6 |
sck<=0;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
160 |
8 |
sck<=1;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
200 |
10 |
sck<=0;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
240 |
12 |
sck<=1;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
280 |
14 |
sck<=0;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
320 |
16 |
sck<=1;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
360 |
18 |
sck<=0;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
400 |
20 |
sck<=1;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
440 |
22 |
Begin sck<=0; sdi<=1;end |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
480 |
24 |
sck<=1; |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
520 |
26 |
Begin sck<=0; sdi<=1;end |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
560 |
28 |
sck<=1;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
600 |
30 |
Begin sck<=0; sdi<=0;end |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
640 |
32 |
sck<=1;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
680 |
34 |
sck<=0;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
700 |
35 |
cs_n<=1; |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
800 |
40 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SE的時序邏輯:下圖為SE時序波形圖。
下面為線性序列機的EXCEL描述SE時序:
二設計輸入 Flash扇區擦除的功能模塊
Flash扇區擦除的測試模塊
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
三FLASH的扇區擦除的仿真波形如下
我的收獲是:
首先是第一次遇到陌生有難度的東西,不要慫,要靜下心來親自動手做和思考,一步步的。
其次是,弄懂設計原理和設計思路,這可能占了整個設計的40%,調試代碼占了40%,敲代碼只占了10%,還有10%就是記錄整理勒。畫好圖紙比敲代碼重要得多,代碼只不過是思路的描述。