在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > spi協(xié)議時(shí)序圖和四種模式實(shí)際應(yīng)用詳解

            spi協(xié)議時(shí)序圖和四種模式實(shí)際應(yīng)用詳解

            作者: 時(shí)間:2023-12-19 來(lái)源:無(wú)際單片機(jī)編程 收藏

            大家好,我是無(wú)際。

            本文引用地址:http://www.biyoush.com/article/202312/454033.htm

            上個(gè)章節(jié)我們講解了定義,今天我們更加深入講解下spi協(xié)議和spi四種模式的用法。

            剛開(kāi)始接觸單片機(jī)開(kāi)發(fā)時(shí),最怕就是看,對(duì)于我來(lái)說(shuō)就是奇怪的知識(shí)。

            特別是SPI和IIC的,以前寫(xiě)程序都直接復(fù)制別人程序,功能實(shí)現(xiàn)就行了也沒(méi)去研究過(guò)數(shù)據(jù)傳輸?shù)臅r(shí)候時(shí)序具體是怎么樣的。

            那個(gè)時(shí)候經(jīng)驗(yàn)也不足,網(wǎng)上搜的資料說(shuō)的都太學(xué)術(shù)化了,也看不懂。

            后面項(xiàng)目做多了,發(fā)現(xiàn)最常用到的通信總線(xiàn)無(wú)非就是SPI、IIC、USART、CAN、單口通信。

            理解也慢慢深刻了,現(xiàn)在去分析也更加清晰了。

            所以,我經(jīng)常和無(wú)際單片機(jī)編程的學(xué)員灌輸一種理念,先學(xué)會(huì)用,用多了經(jīng)驗(yàn)豐富了再深入就輕松了。

            不要在你沒(méi)經(jīng)驗(yàn)的時(shí)候去死磕,否則會(huì)付出很多不必要的時(shí)間成本。

            下面,我們進(jìn)入主題。

            一、spi四種模式詳解

            在講時(shí)序圖之前,我們先要了解spi的四種模式,不同的模式采集數(shù)據(jù)的方式不一樣。

            一般內(nèi)置SPI功能的單片機(jī)上,都有兩個(gè)寄存器配置位CPOL和CPHA。

            我們拿STM32單片機(jī)來(lái)舉例,可以通過(guò)結(jié)構(gòu)體成員配置。


            這是通過(guò)固件庫(kù)直接配置,固件庫(kù)底層代碼也是去配置相應(yīng)寄存器的。




            下面來(lái)介紹下CPOL和CPHA到底有什么用。

            CPOL就是決定SCLK這個(gè)時(shí)鐘信號(hào)線(xiàn),在沒(méi)有數(shù)據(jù)傳輸?shù)臅r(shí)候的電平狀態(tài)。

            CPOL=0:空閑狀態(tài)時(shí),SCLK保持低電平

            CPOL=1:空閑狀態(tài)時(shí),SCLK保持高電平


            CPHA就是決定數(shù)據(jù)位傳輸是從第一個(gè)時(shí)鐘(SCLK)邊沿開(kāi)始,還是第二個(gè)從二個(gè)時(shí)鐘(SCLK)邊沿開(kāi)始。

            CPHA=0:數(shù)據(jù)從第一個(gè)時(shí)鐘(SLCK)邊沿開(kāi)始采集

            CPHA=1:數(shù)據(jù)從第二個(gè)時(shí)鐘(SLCK)邊沿開(kāi)始采集


            Ok,理解CPOL和CPHA基本概念以后,下面這兩個(gè)要開(kāi)始”合體”了。

            CPOL和CPHA合體就形成了SPI四種模式。


            聲明:部分圖片源自網(wǎng)絡(luò),并非原創(chuàng)哈。

            下面再分析下4種模式的區(qū)別,比較重要。

            因?yàn)閺臋C(jī),從機(jī)指的是使用SPI協(xié)議通信的芯片,比如說(shuō)w25q64(Flash)芯片,OLED屏等等。

            很多從機(jī)沒(méi)有CPOL和CPHA寄存器設(shè)置位,如果你看它們數(shù)據(jù)手冊(cè)會(huì)一臉懵逼,根本找不到這兩個(gè)東西。

            這些都是需要看他們時(shí)序圖去分析是用什么模式,如果模式不對(duì),數(shù)據(jù)傳輸會(huì)有問(wèn)題。

            這也是為什么明明自己寫(xiě)了時(shí)序用在這個(gè)芯片可以,換到別的spi通信的芯片就不行。

            1.模式0(CPOL=0,CPHA=0)

            模式0特性:

            CPOL = 0:空閑時(shí)是低電平,第1個(gè)跳變沿是上升沿,第2個(gè)跳變沿是下降沿

            CPHA = 0:數(shù)據(jù)在第1個(gè)跳變沿(上升沿)采樣


            2.模式1(CPOL=0,CPHA=1)

            模式1特性:

            CPOL = 0:空閑時(shí)是低電平,第1個(gè)跳變沿是上升沿,第2個(gè)跳變沿是下降沿

            CPHA = 1:數(shù)據(jù)在第2個(gè)跳變沿(下降沿)采樣


            3.模式2(CPOL=1,CPHA=0)

            CPOL = 1:空閑時(shí)是高電平,第1個(gè)跳變沿是下降沿,第2個(gè)跳變沿是上升沿

            CPHA = 0:數(shù)據(jù)在第1個(gè)跳變沿(下降沿)采樣


            4.模式3(CPOL=1,CPHA=1)

            CPOL = 1:空閑時(shí)是高電平,第1個(gè)跳變沿是下降沿,第2個(gè)跳變沿是上升沿

            CPHA = 1:數(shù)據(jù)在第2個(gè)跳變沿(上升沿)采樣


            不知道你有沒(méi)有發(fā)現(xiàn),不同的模式,其實(shí)就是SCLK空閑時(shí)間電平狀態(tài)和數(shù)據(jù)采樣起點(diǎn)不同

            你學(xué)廢了嗎?當(dāng)初我就是這幾種模式看得一臉懵逼。

            如果不懂,先從開(kāi)頭繼續(xù)看,這4種模式是后面分析整體時(shí)序圖的前提。


            二、spi時(shí)序圖詳解

            看到這里恭喜你,你馬上就能徹底攻破SPI協(xié)議了。

            Spi時(shí)序圖,最好的方式就是通過(guò)實(shí)際應(yīng)用去學(xué)習(xí)。

            我們拿W25Q64這個(gè)Flash芯片舉例,這種芯片在SPI通信里都是作為從機(jī)的角色,也就SPI Slave。

            一般由單片機(jī)或者其它處理器作為主控和它通信,SLCK時(shí)鐘也是由主控發(fā)出。

            下面是W25Q64讀數(shù)據(jù)指令的時(shí)序圖,我們以這個(gè)例子來(lái)講解下時(shí)序圖要怎么看。


            1.先確定芯片支持什么SPI哪種模式讀寫(xiě)數(shù)據(jù)

            確定了用哪種模式,主控,也就是單片機(jī)這邊才能確定數(shù)據(jù)采集的方式,主控和從機(jī)要保持一致。

            從時(shí)序圖中,不難發(fā)現(xiàn),W25Q64的數(shù)據(jù)手冊(cè)直接告訴你支持用SPI模式0和模式3來(lái)通信。

            有些芯片的數(shù)據(jù)手冊(cè),是沒(méi)有告訴你的,那怎么知道用芯片哪種模式?


            第一步:通過(guò)時(shí)序圖分析CLK空閑時(shí)的電平狀態(tài),通過(guò)上面那個(gè)時(shí)序圖,我們可以得知,高低電平都可以對(duì)吧?那我們現(xiàn)在先用CLK空閑時(shí)是低電平這種狀態(tài)繼續(xù)往下分析。

            第二步:分析DI和DO是在CLK的上升沿還是下降沿采集數(shù)據(jù),注意DI代表從機(jī)(W25Q64)的MISO引腳,DO代表從機(jī)(W25Q64)MOSI引腳。

            我們主要通過(guò)DI和DO在數(shù)據(jù)有效區(qū)時(shí)CLK是上升沿還是下降沿,來(lái)判斷

            什么是數(shù)據(jù)有效區(qū)?


            大家看上面這張圖,我用紅色框起來(lái)的區(qū)域就是數(shù)據(jù)有效區(qū)。

            一般數(shù)據(jù)是通過(guò)DI和DO兩個(gè)引腳傳輸?shù)?,所以?shù)據(jù)有效區(qū)就是,這一時(shí)刻,這兩個(gè)引腳的只能是穩(wěn)定高電平或者低電平。

            相當(dāng)于數(shù)據(jù)有效區(qū)的電平就是最終要傳輸?shù)臄?shù)據(jù)位,低電平代表0,高電平代表1。

            傳輸8個(gè)位,代表1個(gè)字節(jié)的數(shù)據(jù)。

            什么是無(wú)效數(shù)據(jù)區(qū)?


            例如上圖藍(lán)色框的區(qū)域就是無(wú)效數(shù)據(jù)區(qū),就是這個(gè)時(shí)刻CLK數(shù)據(jù)采集時(shí)鐘還沒(méi)來(lái),所以DI和DO引腳的電平都可以任意變化。

            理解了這兩個(gè)概念以后,我們重點(diǎn)需要關(guān)心是的DI和DO在數(shù)據(jù)有效區(qū)的時(shí)候,CLK是上升沿還是下降沿。


            從上圖可以看出,DI和DO在數(shù)據(jù)有效區(qū)時(shí),CLK是上升沿,下降沿的時(shí)候,DI和DO處于電平可任意變化的無(wú)效數(shù)據(jù)區(qū)。

            這樣,就可以分析出模式了。

            首先上升沿采集數(shù)據(jù),通過(guò)排除法,這樣只有模式0和模式3符合條件。

            然后就是CLK空閑時(shí)間要為低電平,這樣就只有模式0符合了。

            所以,知道用模式0以后,單片機(jī)那邊寫(xiě)程序就知道數(shù)據(jù)是從CLK上升沿讀取,或者發(fā)送,還是從下降沿了。


            2.分析整體時(shí)序

            分析時(shí)序,我們一定要先熟悉這個(gè)時(shí)序要實(shí)現(xiàn)什么功能,不同的功能雖然時(shí)序不一樣,但是發(fā)送數(shù)據(jù)的順序和定義不同。

            我們現(xiàn)在分析的這個(gè)時(shí)序是從W25Q64這個(gè)Flash芯片讀取存儲(chǔ)的數(shù)據(jù)。


            我把整個(gè)時(shí)序按CLK脈沖順序拆分成3個(gè)部分:

            ①讀指令

            這里要注意的是,讀指令數(shù)據(jù)是在W25Q64的DI引腳產(chǎn)生的,DI相當(dāng)于W25Q64的MISO,就是接收主控(一般是單片機(jī))發(fā)送過(guò)來(lái)的數(shù)據(jù)。

            所以,這個(gè)讀指令(0x03)是單片機(jī)發(fā)給W25Q64的。

            0x03被拆分成8個(gè)Bit在DI線(xiàn)上傳輸,每個(gè)CLK上升沿傳輸1個(gè)Bit。


            ②24位地址

            發(fā)完讀指令以后,單片機(jī)繼續(xù)發(fā)24位的內(nèi)存地址,相當(dāng)于要讀W25Q64哪個(gè)內(nèi)存地址的數(shù)據(jù)。

            這個(gè)數(shù)據(jù)是由單片機(jī)程序定的,所以不是固定的,大家可以看到數(shù)據(jù)位都是可以高電平,也可以是低電平。

            ③單片機(jī)接收數(shù)據(jù)

            這個(gè)時(shí)候通信雙方的角色就變了,單片機(jī)變成了數(shù)據(jù)接收方,W25Q64變成了數(shù)據(jù)發(fā)送方。

            因?yàn)閿?shù)據(jù)從W25Q64的DO發(fā)出了,也就是W25Q64的MOSI引腳。

            通過(guò)這個(gè)時(shí)序,單片機(jī)就可以讀到存儲(chǔ)在W25Q64指定地址的數(shù)據(jù)了。

            如果你是我們無(wú)際單片機(jī)編程學(xué)員,看文章還不是很理解的話(huà),可以跟我反饋,反饋的人多就直播講解,如果少就針對(duì)性一對(duì)一遠(yuǎn)程電話(huà)講解。

            三、單片機(jī)程序注意

            51單片機(jī)一般沒(méi)有內(nèi)置SPI模塊,所以整個(gè)時(shí)序需要自己寫(xiě)程序去模擬,簡(jiǎn)稱(chēng)模擬SPI。

            而STM32單片機(jī)一般有內(nèi)置SPI,就不用自己寫(xiě)程序去模擬時(shí)序,直接應(yīng)用。

            但是如果用內(nèi)置SPI有一個(gè)細(xì)節(jié),特別容易被忽略,就是你讀數(shù)據(jù)的時(shí)候,讀一個(gè)字節(jié)之前要先發(fā)一個(gè)字節(jié)任意值數(shù)據(jù)。

            發(fā)一個(gè)字節(jié)任意值數(shù)據(jù)是為了在CLK總線(xiàn)上產(chǎn)生時(shí)鐘,給從機(jī)的SPI信號(hào)提供時(shí)鐘用的,從機(jī)SPI不會(huì)自己產(chǎn)生CLK信號(hào)的。

            比如我下面這個(gè)讀數(shù)據(jù)函數(shù):


            能理解到這一步,你基本上就已經(jīng)吃透SPI協(xié)議了。

            不管從機(jī)怎么換,比如說(shuō)不是W25Q24了,換成OLED屏了,時(shí)序原理也是一樣的,只是相關(guān)的指令和寄存器不同。




            關(guān)鍵詞: spi接口 MCU 時(shí)序圖

            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉