SPI總線系統(tǒng)是一種同步串行外設接口,,它可以使MCU與各種外圍設備以串行方式進行通信以交換信息。正是由于有了通信方式,,我們才能夠通過芯片控制各種各樣的外圍器件,,實現(xiàn)很多“不可思議”的現(xiàn)代科技。這里將以SPI為題,,從編程角度來介紹SPI總線,。
1、SPI協(xié)議簡介
圖 1 SPI接口
SPI 是英語 Serial Peripheral interface 的縮寫,,顧名思義就是串行外圍設備接口,。是 Motorola首先在其 MC68HCXX 系列處理器上定義的。SPI是一種高速的,,全雙工,,同步的通信總線,由于其簡單易用的特性,,現(xiàn)在很多的nor flash和nandflash芯片集成了這種通信協(xié)議,,也就是我們說的SPI flash。
2,、應用及現(xiàn)狀
圖 2 SPI應用
SPI flash 芯片應用十分廣泛,,在很多電子產品上面或多或少都有它的蹤影,如手機,、數(shù)碼,、液晶顯示器、機頂盒,、電腦主板等,。最近,有消息透露,,蘋果新手機iPhone 8將導入采用編碼型快閃存儲(NOR Flash),,讓已經(jīng)處于缺貨狀態(tài)的NOR芯片更為惱火,另外據(jù)存儲業(yè)者透露,,今年NOR芯片供給缺口將可能擴大至20%,。
3、解剖SPI總線
SPI 接口一般使用 4 條線通信,,MISO 主設備數(shù)據(jù)輸入,,從設備數(shù)據(jù)輸出,。MOSI 主設備數(shù)據(jù)輸出,從設備數(shù)據(jù)輸入,。SCLK 時鐘信號,,由主設備產生。CS 從設備片選信號,,由主設備控制,。
圖 3 SPI總線
SPI接口在Master控制下產生的從器件使能信號和時鐘信號,兩個雙向移位寄存器按位傳輸進行數(shù)據(jù)交換,,傳輸數(shù)據(jù)高位在前,,低位在后(MSB)。在SCK的下降沿上數(shù)據(jù)改變,,上升沿一位數(shù)據(jù)被存入移位寄存器,。
圖 4 使能信號和時鐘信號
4、解剖SPI flash
搞懂了SPI協(xié)議之后,,下面就讓小編來帶你輕松操作SPI flash芯片,。對flash芯片的操作,一般包括對flash芯片的擦除,,編程和讀取,,各大廠商的SPI flash芯片都大同小異,操作命令基本是沒什么變化的,,當我們拿到一款芯片,,要特別注意芯片的容量,操作分區(qū),,下面以旺宏的芯片為例為大家講解。
其實,,無論是對芯片的擦除,,編程還是讀取操作,我們大致可以按照以下的套路來:寫命令---寫地址---寫(讀)數(shù)據(jù),。正如以下的時序圖一樣清晰明了,,我們先把片選信號拉低,再發(fā)個0x02頁編程命令,,再發(fā)個地址,,就可以輕松寫數(shù)據(jù)了。
依樣畫葫蘆,,擦除操作也是一樣,,甚至更簡單,但是我們要注意循環(huán)判斷狀態(tài)寄存器的WIP位直至為0為擦除完成,,具體循環(huán)時間視芯片而定,。
另外,,我們要特別注意SPI flash的 OTP區(qū),即(ONE TIME PROGRAMMABLE),,也就是說這個區(qū)域只能編程一次,,編程之后不能再修改及擦除,因此我們操作的時候要特別注意,。對OTP區(qū)域的讀寫之前,,我們首先要發(fā)送進入OTP區(qū)域的命令,其他的操作和以上普通flash區(qū)域的操作是一樣的,。
掌握以上方法,,我們就可以輕松操作SPI flash芯片了,當然,,對時序這種底層的操作,,還需要不斷學習和積累。