一、概述
在操作相關flash器件的時候,需要先發指令再讀數據,或者先發指令再發地址再發dummy再讀相關數據。而先楫的SPI控制器中,SPI傳輸包括了命令、地址和數據字段,提供了專用的寄存器來存儲這些字段,不需要開發者自行去填充。本文使用hpm6200evk開發板,flash器件是華邦的W25Q64JV。使用hpm_sdk進行開發。
SPI四線模式,統稱也就QSPI。
本文是作者在使用先楫的SPI調試flash器件的心得,僅僅作為參考。
二、開發流程
(一)外設引腳初始化
需要初始化下SPI時鐘,由于SDK使用的是單線常規模式的SPI,所以引腳上我們還需要初始化IO2和IO3兩個引腳。
(二)SPI模式初始化
華邦的W25Q64JV使用的SPI模式是mode0或者mode3。這里使用mode0。可以使用sdk的api接口spi_format_init進行初始化
(三)SPI頻率
先楫的SPI SCLK可以達到80M,這里由于是杜邦線接的flash模塊,波形會存在失真,使用該flash可以達到50M的QSPI速度。
使用SDK的spi_master_timing_init api接口進行SPI頻率調整。
(四)指令操作(單線模式SPI操作)
1. 華邦相關flash都會有手冊,這里使用了SDK的spi_transfer api接口封裝了一個指令操作的API。下面根據這個api配合flash器件的手冊命令進行說明。
比如使用90命令讀取制造商設備ID的時候,使用單線模式,需要先發指令,再發兩個dummy,之后就是讀取。
那么使用spi_transfer賦值以下結構體
cmd_enable:使能命令段傳輸
addr_enable:使能地址段傳輸
addr_pahase_fmt:選擇是單線模式還是四線模式傳輸地址
trans_mode:選擇的傳輸模式,比如同時讀寫,僅寫,僅讀,寫讀,讀寫,寫填充讀,讀填充寫等
dmmy_cnt:填充的數量
依靠上述說明,可以使用單線模式,傳輸模式為填充再讀。填充數量為2
通過波形查看,是沒什么問題的。
從以下可知,單線模式收發指令是沒什么問題的。
(五)讀寫操作(四線模式QSPI操作)
這里舉例讀操作,讀操作有好幾條指令。這里舉例使用Fast Read Quad I/O指令,也就是EBh指令。這里需要先發指令,再發地址(地址使用四線模式),再發三個填充dummy,之后再讀。
擦除指令,可寫入指令跟以上類似,這里測試sector0的0頁地址。
對0頁的256字節進行1到256賦值,然后再讀取,這時候會是0~255 0變化。查看波形可以知道,讀寫正常。
三、總結
先楫的spi外設支持常規單線single spi,雙線dual spi,四線quad spi。有著專用的操作flash的寄存器。極大方便開發相關flash器件。
-
FlaSh
+關注
關注
10文章
1635瀏覽量
148028 -
SPI
+關注
關注
17文章
1706瀏覽量
91585 -
外設
+關注
關注
0文章
40瀏覽量
11696
發布評論請先 登錄
相關推薦
評論