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

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

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

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

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

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

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

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

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

圖片

圖6-13 寫(xiě)使能時(shí)序

圖片 圖6-14 寫(xiě)失能時(shí)序

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

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

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

圖片

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

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

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

圖片

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

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

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

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

圖片

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

5、寫(xiě)入數(shù)據(jù)(頁(yè)編程

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

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

圖片

圖6-18 頁(yè)編程時(shí)序圖

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

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

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

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

圖片

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

7、全片擦除

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

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

圖片

圖6-20 全片擦除時(shí)序圖

接下來(lái)根據(jù)W25Q128的時(shí)序編寫(xiě)驅(qū)動(dòng)程序,該驅(qū)動(dòng)文件可以驅(qū)動(dòng)W25Qxx系列的Flash存儲(chǔ)芯片,不同型號(hào)的ID不同,W25Qxx初始化時(shí)會(huì)通過(guò)判斷芯片ID來(lái)識(shí)別是否通信成功。

圖片

圖片

圖片

圖片

圖片

圖片

6.9.3 串口控制Flash讀寫(xiě)實(shí)驗(yàn)

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

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

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

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

圖片

圖片

圖片

圖片

106.10 邏輯分析儀測(cè)試SPI信號(hào)

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

圖片

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

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

    關(guān)注

    6037

    文章

    44558

    瀏覽量

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

    關(guān)注

    17

    文章

    1706

    瀏覽量

    91597
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1020

    瀏覽量

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

    關(guān)注

    11

    文章

    300

    瀏覽量

    38339
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1235

    瀏覽量

    101404
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    詳解IIC總線

    IIC(Inter-Integrated Circuit)集成電路總線,它是種兩線式串行通信總線,又叫I2C,使用多主從架構(gòu),由飛利浦公司
    發(fā)表于 06-07 15:38 ?9850次閱讀
    <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)是個(gè)多主從的串行總線,又叫I2C,是由飛利浦公司發(fā)明的通訊總線,屬于半雙工同步傳輸類(lèi)型
    發(fā)表于 09-12 11:15 ?2225次閱讀
    <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)用廣泛,但沒(méi)有個(gè)統(tǒng)
    發(fā)表于 09-20 15:17 ?1088次閱讀
    <b class='flag-5'>SPI</b><b class='flag-5'>總線</b>學(xué)習(xí)筆記

    IIC總線SPI總線的比較

    現(xiàn)今,在低端數(shù)字通信應(yīng)用領(lǐng)域,我們隨處可見(jiàn)IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。原因是這兩種
    發(fā)表于 09-26 09:30 ?2565次閱讀
    <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總線是同步通信種特殊形式,具有接線口少、控制簡(jiǎn)單、器件封裝形式小、
    發(fā)表于 01-24 08:27

    iic總線通信程序

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

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

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

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

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

    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)用上來(lái)講,UART通信多用于板間通信,比如單片機(jī)和計(jì)算機(jī),這個(gè)設(shè)備和另外個(gè)設(shè)備之間的通信。而IIC
    的頭像 發(fā)表于 02-13 10:39 ?2636次閱讀
    <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)用上來(lái)講,UART通信多用于板間通信,比如單片機(jī)和計(jì)算機(jī),這個(gè)設(shè)備和另外個(gè)設(shè)備之間的通信。而IIC
    的頭像 發(fā)表于 02-13 10:40 ?2025次閱讀
    <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)用上來(lái)講,UART通信多用于板間通信,比如單片機(jī)和計(jì)算機(jī),這個(gè)設(shè)備和另外個(gè)設(shè)備之間的通信。而IIC
    的頭像 發(fā)表于 02-13 10:41 ?1564次閱讀
    <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é)議,這篇文章我們介紹另種項(xiàng)目開(kāi)發(fā)中非常常見(jiàn)的通信
    的頭像 發(fā)表于 03-22 16:11 ?1815次閱讀
    淺談<b class='flag-5'>SPI</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>接口及其協(xié)議