SPI例項之FLASH芯的使用

2021-07-31 22:11:27 字數 1412 閱讀 9481

本例項旨在梳理w25q128bv基本使用流程,不是涵蓋其全功能,也不針對任何平台,具有通用性!

大家都知道晶元資料手冊太多且太繁瑣,不涉及特殊需求時而我們實際使用的僅僅是其中很小的一部分功能;

現在以w25q128bv為例進行分析,可推廣至其他晶元;

第一步:硬體初始化,即init;

這裡的硬體初始化是指初始化晶元w25q128bv,而不是mcu的gpio初始化,mcu對應w25q128bv  gpio初始化應該在此之前;

w25q128bv中的初始化為reset指令,分別為0x66和0x99指令,通過spi將這兩個指令傳送給w25q128bv  即可;

好的初始化一般含有初始化反饋,通過讀取狀態指令可得到該結果,讀取狀態指令為0x05,通過spi將這個指令傳送給w25q128bv  即可,返回值中s0位進行判斷,若為1即為busy,若為0即為空閒;

第二步:讀裝置號

w25q128bv中的讀裝置號指令,分別為0x90指令,通過spi將這個指令和位址0x000000傳送給w25q128bv ,返回的資料即為id,且大端在前;

第三步:擦除塊

w25q128bv中的擦除扇區的指令為0x20,通過spi將這個指令和需要擦除扇區的24bit位址0******x傳送給w25q128bv即可;

擦除是否成功,擦除過程中可能失敗,失敗的表現為超時,與第一步中相同還是通過狀態指令得到結果,讀取狀態指令為0x05,通過spi將這個指令傳送給w25q128bv  即可,返回值中s0位進行判斷,若為1即為busy,若為0即為空閒,在超時時間內完成擦除返回成功,否則返回超時;

第四步:寫資料

w25q128bv寫資料時必須先開寫使能0x06,再寫指令,然後寫資料;

寫使能指令為0x06,通過spi將這個指令傳送給w25q128bv即可;

使能是否成功,使能過程中可能失敗,失敗的表現為超時,與第一步中相同還是通過狀態指令得到結果,讀取狀態指令為0x05,通過spi將這個指令傳送給w25q128bv  即可,返回值中s0位進行判斷,若為1即為busy,若為0即為空閒,在超時時間內完成擦除返回成功,否則返回超時;

寫扇區指令為0x2,,通過spi將這個指令和需要寫的目標扇區的24bit位址0******x傳送給w25q128bv即可;

寫資料,通過spi將陣列傳送給w25q128bv即可;

spi在資料傳輸時也可能發生錯誤,這個過程中發生錯誤也可選擇性進行上報;

寫資料是否成功?寫資料過程中可能失敗,失敗的表現為超時,與第一步中相同還是通過狀態指令得到結果,讀取狀態指令為0x05,通過spi將這個指令傳送給w25q128bv  即可,返回值中s0位進行判斷,若為1即為busy,若為0即為空閒,在超時時間內完成擦除返回成功,否則返回超時;

第五步讀資料

第六步對比資料

SPI 基於SPI協議的Flash驅動控制

實驗目標 將固化到flash中的程式,通過全擦除程式將其中的固化程式擦除,重新上電後,不再執行固化檔案裡的內容 jic檔案 將該檔案燒錄到flash中,掉電不丟失 flash在spi通訊中充當從裝置 在進行程式固化時,在下圖中選擇主裝置型號 具體操作 檢視flash晶元的資料手冊 寫使能指令 執行完...

裝置樹之I2C和SPI例項

clock frequency i2c匯流排頻率,常用值有100000,400000 i2c具體例項如下圖所示 圖1圖2上圖1描述i2c控制器屬性,比如暫存器屬性,中斷屬性 從中斷屬性可知 i2c控制器使用spi interrupts方式,中斷號為51,高電平觸發 上圖2描述i2c控制器子結點屬性 ...

DSP28335之SPI配置與使用總結

現在簡單介紹一下,spi四種模式,已了解的同學可以跳過這一段 以下分別是spi模式0123 時序解釋 cpol 時鐘極性選擇,為0時spi匯流排空閒為低電平,為1時spi匯流排空閒為高電平 cpha 時鐘相位選擇,為0時在sck第乙個跳變沿取樣,為1時在sck第二個跳變沿取樣 言歸正傳,dsp283...