0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文講透SPI總線和IIC總線通信4

jf_78858299 ? 來源:金沙灘工作室 ? 作者:宋雪松 ? 2023-02-13 10:41 ? 次閱讀

下面將對W25Q128的常用操作方式進(jìn)行介紹。

1、只發(fā)送指令——寫使能、寫失能

寫使能是指狀態(tài)寄存器中的WEL位置1(發(fā)送寫使能指令后硬件自動設(shè)置),失能就是清零操作。在發(fā)送頁寫,扇區(qū)擦除,塊擦除,片擦除,寫狀態(tài)寄存器,擦寫安全寄存器指令之前,必須先等待WEL 位置1 ,這些操作完成后,WEL會自動硬件清零。寫失能是將狀態(tài)寄存器中的WEL軟件清零,寫失能這個操作很少用到,大多數(shù)情況都是硬件自動完成。

根據(jù)SPI的操作時序,將指令(06h或04h)通過DI(MOSI)發(fā)送給W25Q128,期間DO(MISO)處于高阻狀態(tài),時序圖如圖6-11和圖6-12所示。

圖片

圖6-13 寫使能時序

圖片 圖6-14 寫失能時序

2、發(fā)送指令,返回數(shù)據(jù)——讀狀態(tài)寄存器

讀狀態(tài)寄存器指令允許讀8位狀態(tài)寄存器位。讀狀態(tài)寄存指令在任何時間都可使用,可以用05H/35H/15H分別讀取W25Q128的三個狀態(tài)寄存器。實際上用的最多的只有05H讀取狀態(tài)寄存器1的第0位(BUSY位),用來查看相應(yīng)指令周期是否結(jié)束,芯片是否可以接收新的指令。

根據(jù)SPI的操作時序,將指令05H通過DI發(fā)送,而后通過DO讀回狀態(tài)寄存器的值,時序圖如圖6-15所示。注意通常我們只讀一個字節(jié),時序圖后續(xù)字節(jié)為芯片備用擴展的。

圖片

圖6-15 讀狀態(tài)寄存器時序圖

3、發(fā)送指令+數(shù)據(jù)——寫狀態(tài)寄存器

寫狀態(tài)寄存器的作用主要實現(xiàn)對Flash某些區(qū)域的數(shù)據(jù)或者狀態(tài)保護(hù),一旦寫入保護(hù)狀態(tài),在狀態(tài)解除之前,這塊區(qū)域是禁止寫入和擦除的。這部分在本教程中沒有應(yīng)用,有興趣的讀者可以根據(jù)時序圖和手冊資料了解一下,時序圖如圖6-16所示。

圖片

圖6-16 寫狀態(tài)寄存器時序圖

4、讀數(shù)據(jù)

讀數(shù)據(jù)指令允許從存儲器讀一個字節(jié)和連續(xù)多個字節(jié)。

首先要確認(rèn)BUSY位為0,然后根據(jù)SPI的操作時序,首先寫入指令代碼03H,而后緊跟3個字節(jié)的地址。當(dāng)W25Q128收到地址后,會將相應(yīng)地址處的數(shù)據(jù)根據(jù)SPI時序輸出來;如果連續(xù)讀多個字節(jié),那每經(jīng)過8個時鐘周期地址自動加1,并且輸出相應(yīng)數(shù)據(jù),一直到CS拉高,時序圖如圖6-17所示。

圖片

圖6-17 讀數(shù)據(jù)時序圖

5、寫入數(shù)據(jù)(頁編程

W25Q128一次寫入的數(shù)據(jù)只能小于等于256字節(jié),并且不能一次性跨頁寫入。當(dāng)遇到跨頁時,應(yīng)先寫滿一頁,等待BUSY位為0,再次往下一頁寫。(如果寫滿一頁繼續(xù)往下寫則會跳到緩存區(qū)的頁首位置開始寫,之前數(shù)據(jù)會被覆蓋)

在寫入數(shù)據(jù)之前,該頁必須被擦除過,然后根據(jù)寫入地址和寫入的字節(jié)數(shù)計算是否跨頁以及頁數(shù)。根據(jù)SPI的操作時序,首先通過寫使能將WEL置1,然后寫入指令代碼02H,而后緊跟著3個字節(jié)的地址,而后接著發(fā)送要存儲的數(shù)據(jù),時序圖如圖6-18所示。

圖片

圖6-18 頁編程時序圖

寫入數(shù)據(jù)完畢后,W25Q128將數(shù)據(jù)從緩存搬移到非易失區(qū)所消耗的時間要了解一下,在手冊的84頁有介紹,大概是(30+(x-1)*2.5)us ~ (50+(x-1)*12) us之間(x為寫入的字節(jié)),搬移完成后,WEL位會自動清零,BUSY自動清零。

6、扇區(qū)擦除、塊擦除

可以使用20H、52H和D8H分別對扇區(qū)擦除、32K塊擦除和64K塊擦除。根據(jù)SPI的操作時序,在寫入擦除指令之前首先通過寫使能將WEL置1,然后寫入指令代碼20H/52H/D8H中的一個,而后緊跟著3個字節(jié)的擦除首地址。

地址發(fā)送完畢后,必須將CS拉高,擦除指令才開始執(zhí)行,并且需要一定的擦除時間,在這個時間內(nèi),只能讀狀態(tài)寄存器,其他操作均不能進(jìn)行。扇區(qū)、32K塊和64K的擦除典型時間分別是100ms、120ms和150ms,最大時間分別是400ms、1.6s、2s。當(dāng)擦除完成,WEL和BUSY位自動清零,就可以再次接收新的操作指令,時序圖如圖6-19所示。

圖片

圖6-19 扇區(qū)和塊擦除時序圖

7、全片擦除

可以使用C7H/60H指令對整片進(jìn)行擦除操作。根據(jù)SPI的操作時序,在寫入擦除指令之前首先通過寫使能將WEL置1,然后寫入指令代碼C7H或者60H,發(fā)送完畢拉高CS后,擦除指令開始執(zhí)行。

整片擦除過程中,只能讀狀態(tài)寄存器,其他操作均不能進(jìn)行。整片擦除的典型時間是40秒,最大時間是200秒。當(dāng)擦除完成后,WEL和BUSY位自動清零,就可以再次接收新的操作指令,時序圖如圖6-20所示。

圖片

圖6-20 全片擦除時序圖

接下來根據(jù)W25Q128的時序編寫驅(qū)動程序,該驅(qū)動文件可以驅(qū)動W25Qxx系列的Flash存儲芯片,不同型號的ID不同,W25Qxx初始化時會通過判斷芯片ID來識別是否通信成功。

圖片

圖片

圖片

圖片

圖片

圖片

6.9.3 串口控制Flash讀寫實驗

由于Flash與EEPROM實現(xiàn)的功能類似,本節(jié)通過改寫串口發(fā)送指令控制EEPROM讀寫數(shù)據(jù)的例程,設(shè)計了串口發(fā)送指令控制Flash讀寫。幫助大家更好的體會串口實用例程以及Flash讀寫流程。

Flash讀數(shù)據(jù)指令格式:“f-read 地址 字節(jié)長度”,其中地址范圍為0~1610241024,e2read、地址、字節(jié)長度之間由空格隔開,比如從地址1開始讀取5字節(jié)數(shù)據(jù):f-read 1 5。單片機收到指令后執(zhí)行多字節(jié)讀操作,通過串口助手返回讀出的數(shù)據(jù)。

Flash寫數(shù)據(jù)指令格式:“f-write 地址 數(shù)據(jù)”,地址范圍為0~1610241024,f-write、地址、數(shù)據(jù)之間同樣由空格隔開,比如從地址1開始寫入hello:f-write 1 hello。單片機收到指令后執(zhí)行多字節(jié)寫操作,寫入成功后通過串口助手返回“f-write done.”

如果發(fā)送指令格式錯誤,返回“bad parameter.”,如果發(fā)送指令錯誤,將返回發(fā)送的數(shù)據(jù)。由于程序中設(shè)定的串口接收和發(fā)送緩沖區(qū)最大為256字節(jié),因此該實驗單次讀取或者寫入的字節(jié)數(shù)應(yīng)小于256字節(jié)。

圖片

圖片

圖片

圖片

106.10 邏輯分析儀測試SPI信號

當(dāng)進(jìn)行SPI通信出現(xiàn)異常時,可以通過邏輯分析儀進(jìn)行通信時序上的問題查找,如圖6-18所示。從圖上可以看出SCK空閑時是高電平,即CPOL=1;從CLK的跳沿箭頭上可以看出,是后沿讀取數(shù)據(jù),即CPHA=1。數(shù)據(jù)分析可以通過MISO和MOSI解析后的數(shù)據(jù)判斷出。通過分析儀的數(shù)據(jù)解析功能,可以直觀看到STM32與Flash之間的通信數(shù)據(jù),從而進(jìn)一步確定問題所在。

圖片

圖6-21 Kingst LA5016邏輯分析儀解析SPI數(shù)據(jù)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628296
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1666

    瀏覽量

    90715
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1002

    瀏覽量

    81054
  • IIC
    IIC
    +關(guān)注

    關(guān)注

    11

    文章

    292

    瀏覽量

    38139
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1199

    瀏覽量

    100823
收藏 人收藏

    評論

    相關(guān)推薦

    詳解IIC總線

    IIC(Inter-Integrated Circuit)集成電路總線,它是種兩線式串行通信總線,又叫I2C,使用多主從架構(gòu),由飛利浦公司
    發(fā)表于 06-07 15:38 ?8811次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>詳解<b class='flag-5'>IIC</b><b class='flag-5'>總線</b>

    詳解IIC總線

    IIC(Inter-Integrated Circuit)是個多主從的串行總線,又叫I2C,是由飛利浦公司發(fā)明的通訊總線,屬于半雙工同步傳輸類型
    發(fā)表于 09-12 11:15 ?1738次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>詳解<b class='flag-5'>IIC</b><b class='flag-5'>總線</b>

    SPI總線學(xué)習(xí)筆記

    SPI種全雙工的串行通信總線,最早由Motorola提出,雖然應(yīng)用廣泛,但沒有個統(tǒng)
    發(fā)表于 09-20 15:17 ?865次閱讀
    <b class='flag-5'>SPI</b><b class='flag-5'>總線</b>學(xué)習(xí)筆記

    IIC總線SPI總線的比較

    現(xiàn)今,在低端數(shù)字通信應(yīng)用領(lǐng)域,我們隨處可見IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。原因是這兩種
    發(fā)表于 09-26 09:30 ?1808次閱讀
    <b class='flag-5'>IIC</b><b class='flag-5'>總線</b>和<b class='flag-5'>SPI</b><b class='flag-5'>總線</b>的比較

    IIC總線SPI總線通信詳解

    IIC總線SPI總線通信介紹
    發(fā)表于 12-23 07:02

    串行通信中的IIC總線工作原理是什么

    串行通信中的IIC總線工作原理51本身不帶IIC總線 ,使用程序模擬IIC
    發(fā)表于 12-08 07:52

    什么是IIC總線

    - 什么是IIC總線IIC總線是同步通信種特殊形式,具有接線口少、控制簡單、器件封裝形式小、
    發(fā)表于 01-24 08:27

    iic總線通信程序

    iic總線通信,要的人速度下載看看哦。
    發(fā)表于 03-21 13:50 ?30次下載

    深度解析IICSPI總線協(xié)議的區(qū)別與應(yīng)用場景

    IIC vs SPI: 哪位是贏家?我們來對比IICSPI些關(guān)鍵點: 第
    的頭像 發(fā)表于 12-22 16:48 ?1.8w次閱讀
    深度解析<b class='flag-5'>IIC</b>和<b class='flag-5'>SPI</b><b class='flag-5'>總線</b>協(xié)議的區(qū)別與應(yīng)用場景

    解讀IIC總線的FPGA實現(xiàn)原理及過程

    本文首先介紹了IIC總線概念和IIC總線硬件結(jié)構(gòu),其次介紹了IIC總線典型應(yīng)用,最后詳細(xì)介紹了
    發(fā)表于 05-31 10:56 ?6587次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>解讀<b class='flag-5'>IIC</b><b class='flag-5'>總線</b>的FPGA實現(xiàn)原理及過程

    IIC通信總線尋址

    連接到總線都是SCL連到起,SDA連到4、任何器件都可以拉低總線的電平IIC
    發(fā)表于 12-04 16:06 ?14次下載
    <b class='flag-5'>IIC</b><b class='flag-5'>通信</b><b class='flag-5'>總線</b>尋址

    SPI總線IIC總線通信1

    從應(yīng)用上來講,UART通信多用于板間通信,比如單片機和計算機,這個設(shè)備和另外個設(shè)備之間的通信。而IIC
    的頭像 發(fā)表于 02-13 10:39 ?2398次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>講</b><b class='flag-5'>透</b><b class='flag-5'>SPI</b><b class='flag-5'>總線</b>和<b class='flag-5'>IIC</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>1

    SPI總線IIC總線通信2

    從應(yīng)用上來講,UART通信多用于板間通信,比如單片機和計算機,這個設(shè)備和另外個設(shè)備之間的通信。而IIC
    的頭像 發(fā)表于 02-13 10:40 ?1606次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>講</b><b class='flag-5'>透</b><b class='flag-5'>SPI</b><b class='flag-5'>總線</b>和<b class='flag-5'>IIC</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>2

    SPI總線IIC總線通信3

    從應(yīng)用上來講,UART通信多用于板間通信,比如單片機和計算機,這個設(shè)備和另外個設(shè)備之間的通信。而IIC
    的頭像 發(fā)表于 02-13 10:41 ?1380次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>講</b><b class='flag-5'>透</b><b class='flag-5'>SPI</b><b class='flag-5'>總線</b>和<b class='flag-5'>IIC</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>3

    淺談SPI總線通信接口及其協(xié)議

    上篇內(nèi)容我們介紹了IIC總線通信接口及其協(xié)議,這篇文章我們介紹另種項目開發(fā)中非常常見的通信
    的頭像 發(fā)表于 03-22 16:11 ?1583次閱讀
    淺談<b class='flag-5'>SPI</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>接口及其協(xié)議