當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]【軟件中如何設(shè)置SPI的極性和相位】SPI分主設(shè)備和從設(shè)備,兩者通過(guò)SPI協(xié)議通訊。而設(shè)置SPI的模式,是從設(shè)備的模式,決定了主設(shè)備的模式。所以要先去搞懂從設(shè)備的SPI是何種模式,然后再將主設(shè)備的SPI的模式,設(shè)置和從

【軟件中如何設(shè)置SPI的極性和相位】SPI分主設(shè)備和從設(shè)備,兩者通過(guò)SPI協(xié)議通訊。而設(shè)置SPI的模式,是從設(shè)備的模式,決定了主設(shè)備的模式。所以要先去搞懂從設(shè)備的SPI是何種模式,然后再將主設(shè)備的SPI的模式,設(shè)置和從設(shè)備相同的模式,即可正常通訊。對(duì)于從設(shè)備的SPI是什么模式,有兩種:(1)固定的,有SPI從設(shè)備硬件決定的SPI從設(shè)備,具體是什么模式,相關(guān)的datasheet中會(huì)有描述,需要自己去datasheet中找到相關(guān)的描述,即:關(guān)于SPI從設(shè)備,在空閑的時(shí)候,是高電平還是低電平,即決定了CPOL是0還是1;然后再找到關(guān)于設(shè)備是在上升沿還是下降沿去采樣數(shù)據(jù),這樣就是,在定了CPOL的值的前提下,對(duì)應(yīng)著可以推算出CPHA是0還是1了。舉例1:CC2500-Low-CostLow-Power2.4GHzRFTransceiver的datasheet中SPI的時(shí)序圖是:
從圖中可以看到,最開(kāi)始的SCLK和結(jié)束時(shí)候的SCLK,即空閑時(shí)刻的SCLK,是低電平,推導(dǎo)出CPOL=0,然后可以看到數(shù)據(jù)采樣的時(shí)候,即數(shù)據(jù)最中間的那一點(diǎn),對(duì)應(yīng)的是SCLK的第一個(gè)邊沿,所以CPHA=0(此時(shí)對(duì)應(yīng)的是上升沿)。舉例2:SSD1289-240RGBx320TFTLCDControllerDriver的datasheet中提到:“SDIisshiftedinto8-bitshiftregisteroneveryrisingedgeofSCKintheorderofdatabit7,databit6……databit0.”意思是,數(shù)據(jù)是在上升沿采樣,所以可以斷定是CPOL=0,CPHA=0,或者CPOL=1,CPHA=1的模式,但是至于是哪種模式。按理來(lái)說(shuō),接下來(lái)應(yīng)該再去確定SCLK空閑時(shí)候是高電平還是低電平,用以確定CPOL是0還是1,但是datasheet中沒(méi)有提到這點(diǎn)。所以,此處,目前不太確定,是兩種模式都支持,還是需要額外找證據(jù)卻確定CPOL是0還是1.(2)可配置的,由軟件自己設(shè)定從設(shè)備也是一個(gè)SPI控制器,4種模式都支持,此時(shí)只要自己設(shè)置為某種模式即可。然后知道了從設(shè)備的模式后,再去將SPI主設(shè)備的模式,設(shè)置為和從設(shè)備模式一樣,即可。 對(duì)于如何配置SPI的CPOL和CPHA的話,不多細(xì)說(shuō),多數(shù)都是直接去寫(xiě)對(duì)應(yīng)的SPI控制器中對(duì)應(yīng)寄存器中的CPOL和CPHA那兩位,寫(xiě)0或?qū)?即可。舉例:C8051F347中的SPI就是一個(gè)SPI的controller控制器,即支持軟件配置CPOL和CPHA的值,四種模式都支持,此處C8051F347作為SPI從設(shè)備,設(shè)置了CPOL=1,CPHA=0的模式,因此,此處對(duì)應(yīng)主芯片中的SPI控制器,作為Master主設(shè)備,其SPI的模式也要設(shè)置為CPOL=1,CPHA=0,即可。






【SPI的讀寫(xiě)程序設(shè)計(jì)】文中標(biāo)紅的是特別注意看的地方主要是熟悉flash芯片的指令集,以及存儲(chǔ)芯片扇區(qū)和塊的理解,最重要的是擦除都是以扇區(qū)擦除的方式。


本節(jié)將利用SPI來(lái)實(shí)現(xiàn)對(duì)外部FLASH(W25X16)的讀寫(xiě),并將結(jié)果顯示在TFTLCD模塊上。本節(jié)分為如下幾個(gè)部分:

3.17.1 SPI簡(jiǎn)介

3.17.2硬件設(shè)計(jì)

3.17.3軟件設(shè)計(jì)

3.17.4下載與測(cè)試


1 SPI簡(jiǎn)介

SPI是英語(yǔ)Serial Peripheralinterface的縮寫(xiě),顧名思義就是串行外圍設(shè)備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應(yīng)用在EEPROM,F(xiàn)LASH,實(shí)時(shí)時(shí)鐘,AD轉(zhuǎn)換器,還有數(shù)字信號(hào)處理器和數(shù)字信號(hào)解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡(jiǎn)單易用的特性,現(xiàn)在越來(lái)越多的芯片集成了這種通信協(xié)議,STM32也有SPI接口。

SPI接口一般使用4條線:

MISO主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出。

MOSI主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入。

SCLK時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生。

CS從設(shè)備片選信號(hào),由主設(shè)備控制。

SPI主要特點(diǎn)有:可以同時(shí)發(fā)出和接收串行數(shù)據(jù);可以當(dāng)作主機(jī)或從機(jī)工作;提供頻率可編程時(shí)鐘;發(fā)送結(jié)束中斷標(biāo)志;寫(xiě)沖突保護(hù);總線競(jìng)爭(zhēng)保護(hù)等。

SPI總線四種工作方式SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行配置,時(shí)鐘極性(CPOL)對(duì)傳輸協(xié)議沒(méi)有重大的影響。如果CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)備時(shí)鐘相位和極性應(yīng)該一致。


不同時(shí)鐘相位下的總線數(shù)據(jù)傳輸時(shí)序見(jiàn)下圖:



圖3.17.1.1不同時(shí)鐘相位下的總線傳輸時(shí)序(CPHA=0/1)


STM32的SPI功能很強(qiáng)大,SPI時(shí)鐘最多可以到18Mhz,支持DMA,可以配置為SPI協(xié)議或者I2S協(xié)議。


本節(jié),我們將利用STM32的SPI來(lái)讀取外部SPIFLASH芯片(W25X16),實(shí)現(xiàn)類(lèi)似上節(jié)的功能。這里對(duì)SPI我們只簡(jiǎn)單介紹一下SPI的使用,STM32的SPI詳細(xì)介紹請(qǐng)參考《STM32參考手冊(cè)》第422頁(yè),22節(jié)。然后我們?cè)俳榻B下SPIFLASH芯片。

這節(jié),我們使用STM32的SPI1的主模式,下面就來(lái)看看SPI1部分的設(shè)置步驟吧,STM32的主模式配置步驟如下:

1)配置相關(guān)引腳的復(fù)用功能,使能SPI1時(shí)鐘。

我們要用SPI1,第一步就要是能SPI1的時(shí)鐘,SPI1的時(shí)鐘通過(guò)APB2ENR的第12位來(lái)設(shè)置。其次要設(shè)置SPI1的相關(guān)引腳為復(fù)用輸出,這樣才會(huì)連接到SPI1上否則這些IO口還是默認(rèn)的狀態(tài),也就是標(biāo)準(zhǔn)輸入輸出口。這里我們使用的是PA5、6、7這3個(gè)(SCK.、MISO、MOSI,CS使用軟件管理方式),所以設(shè)置這三個(gè)為復(fù)用IO。

2)設(shè)置SPI1工作模式。

這一步全部是通過(guò)SPI1_CR1來(lái)設(shè)置,我們?cè)O(shè)置SPI1為主機(jī)模式,設(shè)置數(shù)據(jù)格式為8位,然后通過(guò)CPOL和CPHA位來(lái)設(shè)置SCK時(shí)鐘極性及采樣方式。并設(shè)置SPI1的時(shí)鐘頻率(最大18Mhz),以及數(shù)據(jù)的格式(MSB在前還是LSB在前)。

3)使能SPI1。

這一步通過(guò)SPI1_CR1的bit6來(lái)設(shè)置,以啟動(dòng)SPI1,在啟動(dòng)之后,我們就可以開(kāi)始SPI通訊了。

SPI1的使用就介紹到這里,接下來(lái)介紹一下W25X16。W25X16是華邦公司推出的繼W25X10/20/40/80(從1Mb~8Mb)后容量更大的FLASH產(chǎn)品,W25X16的容量為16Mb,還有容量更大的W25X32/64,ALIENTEK所選擇的W25X16容量為16Mb,也就是2M字節(jié),同AT45DB161是一樣大小的。

W25X16將2M的容量分為32個(gè)塊(Block),每個(gè)塊大小為64K字節(jié),每個(gè)塊又分為16個(gè)扇區(qū)(Sector),每個(gè)扇區(qū)4K個(gè)字節(jié)。W25X16的最少擦除單位為一個(gè)扇區(qū),也就是每次必須擦除4K個(gè)字節(jié)。這樣我們需要給W25X16開(kāi)辟一個(gè)至少4K的緩存區(qū),這樣對(duì)SRAM要求比較高(相對(duì)于AT45DB161來(lái)說(shuō)),但是它有價(jià)格及供貨上的優(yōu)勢(shì)。

W25X16的差些周期為10000次,具有20年的數(shù)據(jù)保存期限,支持電壓為2.7~3.6V,W25X16支持標(biāo)準(zhǔn)的SPI,還支持雙輸出的SPI,最大SPI時(shí)鐘可以到75Mhz(雙輸出時(shí)相當(dāng)于150Mhz),更多的W25X16的介紹,請(qǐng)參考W25X16的DATASHEET。


2硬件設(shè)計(jì)

本節(jié)實(shí)驗(yàn)功能簡(jiǎn)介:開(kāi)機(jī)的時(shí)候先檢測(cè)W25X16是否存在,然后在主循環(huán)里面用1個(gè)按鍵用來(lái)執(zhí)行寫(xiě)入W25X16的操作,另外一個(gè)按鍵用來(lái)執(zhí)行讀出操作,在TFTLCD模塊上顯示相關(guān)信息。同時(shí)用DS0提示程序正在運(yùn)行。

所要用到的硬件資源如下:

1)STM32F103RBT6。

2)DS0(外部LED0)。

3)KEY0和KEY2。

4)TFTLCD液晶模塊。

5)W25X16。

前面4部分的資源,我們前面已經(jīng)介紹了,請(qǐng)大家參考相關(guān)章節(jié)。這里只介紹W25X16與STM32的連接,板上的W25X16是直接連在STM32F103RBT6上的,連接關(guān)系如下圖:



圖3.17.2.1STM32F103RBT6與W25X16連接電路圖


3軟件設(shè)計(jì)

打開(kāi)上一節(jié)的工程,首先在HARDWARE文件夾下新建一個(gè)FLASH的文件夾和SPI的文件夾。然后新建一個(gè)flash.c和flash.h的文件保存在FLASH文件夾下,新建spi.c和spi.h的文件,保存在SPI文件夾下,并將這兩個(gè)文件夾加入頭文件包含路徑。

打開(kāi)spi.c文件,輸入如下代碼:

#include"spi.h"

//SPI口初始化

//這里針是對(duì)SPI1的初始化

voidSPIx_Init(void)

{

RCC->APB2ENR"=1<<2; //PORTA時(shí)鐘使能

RCC->APB2ENR|=1<<12; //SPI1時(shí)鐘使能

//這里只針對(duì)SPI口初始化

GPIOA->CRL&=0X000FFFFF;

GPIOA->CRL|=0XBBB00000;//PA5.6.7復(fù)用

GPIOA->ODR|=0X7<<5; //PA5.6.7上拉

SPI1->CR1|=0<<10;//全雙工模式

SPI1->CR1|=1<<9; //軟件nss管理

SPI1->CR1|=1<<8;

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉