本設計采用的SO管腳作為忙狀態(tài)信號的方式,整個(gè)操作分為2組狀態(tài)機,第一組位于底層,主要控制flash各命令時(shí)序的產(chǎn)生;第二組位于第一組的上層,控制flash各個(gè)操作對應的命令流。
首先介紹控制flash各命令時(shí)序產(chǎn)生的狀態(tài)機,該狀態(tài)機包括所有命令的所有狀態(tài),如表1所示。
表1
符號
名稱(chēng)
功能
IDLE
空閑
無(wú)任何操作進(jìn)行的狀態(tài)
CMD
命令傳輸
向flash發(fā)送8bits命令的狀態(tài),不同的命令發(fā)送不同的命令字
ADDR_H
高位地址
向flash發(fā)送8bits高位地址的狀態(tài)
ADDR_M
中間地址
向flash發(fā)送8bits中間地址的狀態(tài)
ADDR_L
低位地址
向flash發(fā)送8bits低位地址的狀態(tài)
DUMMY
地址填充位
向flash發(fā)送8bits地址填充位的狀態(tài)
REG_DATA
讀狀態(tài)寄存器數據
從flash讀取狀態(tài)寄存器數據的狀態(tài)
ID_DATA
讀芯片ID數據
從flash讀取芯片ID的狀態(tài)
RX_DATA
接收數據
從flash存儲單元讀取數據的狀態(tài)
TX_DATA
發(fā)送數據
向flash存儲單元寫(xiě)入數據的狀態(tài)
AAI_TX_
DATA_H
AAI word編程高位字節數據
在A(yíng)AI word編程模式下,向flash存儲單元寫(xiě)入高8位數據的狀態(tài)
AAI_TX_
DATA_L
AAI word編程低位字節數據
在A(yíng)AI word編程模式下,向flash存儲單元寫(xiě)入低8位數據的狀態(tài)
AAI_TEMP
AAI word數據傳輸間隔
在A(yíng)AI word編程模式下,數據傳輸的間隔,在此間隔狀態(tài)下,需判斷SO管腳電平,SO為0表示忙,1表示空閑,在空閑狀態(tài)下可進(jìn)行下一次雙字節數據的寫(xiě)入。
AAI_TX_
CMD
AAI word數據傳輸過(guò)程中的命令字
在A(yíng)AI word編程模式下,在進(jìn)行下一個(gè)雙字節數據的傳輸前,需要傳輸8bits的AAI word編程命令。
DONE
傳輸完成
傳輸完成
對應于flash操作的各個(gè)命令(參見(jiàn)第二篇),其狀態(tài)機過(guò)程如表2所示。
表2
命令
命令字
狀態(tài)機跳轉過(guò)程
讀操作(25Mhz)
8'h03
IDLE - CMD - ADDRH/M/L - RX_DATA - DONE
高速讀操作(50MHz)
8'h0b
IDLE - CMD - ADDRH/M/L - DUMMY - RX_DATA - DONE
扇區擦除
8'h20
IDLE - CMD - ADDRH/M/L - DONE
32K字節塊擦除
8'h52
IDLE - CMD - ADDRH/M/L - DONE
64K字節塊擦除
8'hb8
IDLE - CMD - ADDRH/M/L - DONE
芯片擦除
8'h60 或8'hc7
IDLE - CMD - DONE
Byte編程
8'h02
IDLE - CMD - ADDRH/M/L - TX_DATA - DONE
AA word編程
8'had
IDLE - CMD - ADDRH/M/L - AAI_TX_DATA_H - AAI_TX_DATA_L - AAI WAIT - AAI_TEMP - CMD - AAI_TX_DATA_H - AAI_TX_DATA_L - AAI WAIT - AAI_TEMP - CMD - AAI_TX_DATA_H - AAI_TX_DATA_L - AAI WAIT - AAI_TEMP - DONE
讀狀態(tài)寄存器
8'h05
IDLE - CMD - REG_DATA - DONE
使能寫(xiě)狀態(tài)寄存器
8'h50
IDLE - CMD - DONE
寫(xiě)狀態(tài)寄存器
8'h01
IDLE - CMD - TX_DATA - DONE
寫(xiě)使能
8'h06
IDLE - CMD - DONE
寫(xiě)去使能
8'h04
IDLE - CMD - DONE
讀ID
8'h90 或8'hab
IDLE - CMD - ADDRH/M/L - ID_DATA - DONE
JEDEC讀ID
8'h9f
IDLE - CMD - RX_DATA - DONE
使能SO作為忙狀態(tài)信號
8'h70
IDLE - CMD - DONE
去使能SO作為忙狀態(tài)信號
8'h80
IDLE - CMD - DONE
下面介紹控制flash讀寫(xiě)操作對應命令流的狀態(tài)機,該命令流默認前一次命令操作完成,總線(xiàn)空閑。flash命令集請參見(jiàn)第一篇的表3。
執行一次寫(xiě)操作(包括Byte編程和AAI word編程模式)需執行的命令流為:
WREN:寫(xiě)使能;
EWSR:使能寫(xiě)狀態(tài)寄存器;
WRSR:寫(xiě)狀態(tài)寄存器,將BPL位置為0;
WREN:寫(xiě)使能;
Sector/Block/Chip erase:擦除操作,在寫(xiě)入前必須對相應的存儲區域進(jìn)行擦除;
WREN:寫(xiě)使能;
EBSY:使能SO作為忙狀態(tài)信號;
Byte/AAI word program:Byte編程和AAI word編程模式;
DBSY:去使能SO作為忙狀態(tài)信號;
WRDI:寫(xiě)去使能。
執行一次讀操作(包括25MHz和50MHz的讀模式)可直接發(fā)送相應的讀命令和讀地址,無(wú)需配合其他命令。
以上是FPGA控制串行flash的主線(xiàn),歡迎各位高手大牛指正。如果您想了解設計的細節部分,歡迎留言,我會(huì )盡力作答。
另外我手頭上有串行flash和SRAM數據通訊的源代碼,哦,你想要???你想要???你想要說(shuō)清除就行了嘛。你想要的話(huà)我會(huì )給你的,你想要我當然不會(huì )不給你的,不可能你說(shuō)要我不給你,你說(shuō)不要我卻偏要給你,大家講道理嘛?,F在我數三下,你要說(shuō)清楚你到底要不要。
要的話(huà)就留言吧,對了還要留下你的郵箱。
(點(diǎn)擊原文留言)