日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

28335接两个spi设备_SPI浅析

發(fā)布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 28335接两个spi设备_SPI浅析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

01? SPI簡介

SPI,全稱為Serial Peripheral interface,即串行外圍設(shè)備接口。由摩托羅拉率先在產(chǎn)品上使用。SPI是一種高速全雙工,同步(full duplex synchronous)的通信總線協(xié)議,且占用硬件端口只有4個(SO,SI, SCLK 和CSN),所以出于這種簡單易用的特性,越來越多的芯片開始將該總線協(xié)議集成在了芯片中。在工作中如果涉及到底層軟件編寫,大概率會經(jīng)常用到SPI通信。打開英飛凌官網(wǎng),直接搜索一個工作中比較常用到的芯片TLE75080,對應(yīng)著相應(yīng)章節(jié)結(jié)合實際開發(fā)來學(xué)習(xí)。

02? 協(xié)議詳解

? SPI采用主從模式的控制方式

SPI協(xié)議規(guī)定必須由主設(shè)備(Master)控制從設(shè)備(Slave),首先通過CS片選信號選中特定的從設(shè)備,然后通過SCK引腳給Slave設(shè)備提供時鐘。Slave 設(shè)備本身不能產(chǎn)生或控制 Clock, 沒有 Clock 則 Slave 設(shè)備不能正常工作。理論上,主設(shè)備可以控制無限多個從設(shè)備,(實際上,從設(shè)備掛載的個數(shù)也受限于具體的硬件環(huán)境)。如圖:

? SPI采用同步傳輸方式進行通信

當(dāng)通信發(fā)生時,主設(shè)備會生成相應(yīng)的時鐘脈沖信號,在每個時鐘的上升沿或者下降沿,時鐘信號會驅(qū)動設(shè)備內(nèi)部的移位寄存器,使得主設(shè)備的數(shù)據(jù)從移位寄存器中移出后移入從設(shè)備的移位寄存器中,同時從設(shè)備也會有數(shù)據(jù)從SO引腳移出到主設(shè)備中。這樣就保證了數(shù)據(jù)的同步傳輸。一般來說,SPI并沒有讀和寫的說法,本質(zhì)上,數(shù)據(jù)的通信其實也是數(shù)據(jù)交換的過程。

SPI 設(shè)備間的數(shù)據(jù)傳輸之所以又被稱為數(shù)據(jù)交換, 是因為 SPI 協(xié)議規(guī)定一個 SPI 設(shè)備不僅能在數(shù)據(jù)通信過程中充當(dāng)一個 "發(fā)送者(Transmitter)" 或者 "接收者(Receiver)". 在每個 Clock 周期內(nèi), SPI 設(shè)備都會發(fā)送并接收一個 bit 大小的數(shù)據(jù), 相當(dāng)于該設(shè)備有一個 bit 大小的數(shù)據(jù)被交換了。

03? 工作原理

??兩個寄存器SSPBUF , SSPSR

SSPBUF:Synchronous Serial Port Buffer, 泛指 SPI 設(shè)備里面的內(nèi)部緩沖區(qū), 一般在物理上是以 FIFO 的形式, 保存?zhèn)鬏斶^程中的臨時數(shù)據(jù);

SSPSR,:Synchronous Serial Port Register, 泛指 SPI 設(shè)備里面的移位寄存器(Shift Regitser), 它的作用是根據(jù)設(shè)置好的數(shù)據(jù)位寬(bit-width) 把數(shù)據(jù)移入或者移出 SSPBUF;

SPI 設(shè)備在進行通信的過程中, Master 設(shè)備和 Slave 設(shè)備之間會產(chǎn)生一個數(shù)據(jù)鏈路回環(huán)(Data Loop), 就像上圖所畫的那樣, 通過 SDO 和 SDI 管腳, SSPSR 控制數(shù)據(jù)移入移出 SSPBUF, Controller 確定 SPI 總線的通信模式, SCK 傳輸時鐘信號。

? 時序說明

以TLE75080為例,從上圖中可以獲取的信息有:

??16bits SPI

??以MSB模式傳輸數(shù)據(jù)

??數(shù)據(jù)在時鐘的下降沿移入TLE75080芯片中,在時鐘下降沿移出

? 時鐘在空閑時為低電平

? 極性和相位

在SPI中有個很重要的參數(shù)即極性和相位,比較常見的縮寫為CPOL,CPHA。就是在上一節(jié)中TLE75080交換數(shù)據(jù)的方式,數(shù)據(jù)在時鐘的下降沿移入TLE75080芯片中,在時鐘下降沿移出。所以極性和相位都是相對于時鐘來說的。

再此需要插一段邊沿(edge)的概念,在每個脈沖里,都有一個上升沿和一個下降沿,對于Leading edge來說就是第一個邊沿,對于開始電壓是1,那么就是1變成0的時候,對于開始電壓是0,那么就是0變成1的時候;Trailing edge是第二個邊沿,對于開始電壓是1,那么就是0變成1的時候(即在第一次1變成0之后,才可能有后面的0變成1),對于開始電壓是0,那么就是1變成0的時候;

所謂極性SPI的CPOL,表示當(dāng)SCLK空閑idle的時候,其電平的值是低電平0還是高電平1:

CPOL=0,時鐘空閑idle時候的電平是低電平,所以當(dāng)SCLK有效的時候,就是高電平,就是所謂的active-high;

CPOL=1,時鐘空閑idle時候的電平是高電平,所以當(dāng)SCLK有效的時候,就是低電平,就是所謂的active-low;

相位CPHA對應(yīng)于數(shù)據(jù)采樣是在時鐘的第幾個邊沿,0為第一個邊沿,1為第二個邊沿。(1)?CPHA=0,表示第一個邊沿:? 對于CPOL=0,idle時候的是低電平,第一個邊沿就是從低變到高,所以是上升沿;? 對于CPOL=1,idle時候的是高電平,第一個邊沿就是從高變到低,所以是下降沿;(2)?CPHA=1,表示第二個邊沿:? 對于CPOL=0,idle時候的是低電平,第二個邊沿就是從高變到低,所以是下降沿;? 對于CPOL=1,idle時候的是高電平,第一個邊沿就是從低變到高,所以是上升沿;

那么相位,極性配合起來,就有4中情況,如圖(圖片來自網(wǎng)絡(luò))。

? 再聊SSPSR

SSPSR 是 SPI 設(shè)備內(nèi)部的移位寄存器(Shift Register). 它的主要作用是根據(jù) SPI 時鐘信號狀態(tài), 往 SSPBUF 里移入或者移出數(shù)據(jù), 每次移動的數(shù)據(jù)大小由 Bus-Width 以及 Channel-Width 所決定。

Bus-Width 的作用是指定地址總線到 Master 設(shè)備之間數(shù)據(jù)傳輸?shù)膯挝?

例如, 我們想要往 TLE75080 設(shè)備里面的 SSPBUF 寫入 16 bits 大小的數(shù)據(jù): 首先, 將mcu相關(guān)寄存器設(shè)置 寬度 為 16bits; 然后配置為MSB傳輸模式。

再在相應(yīng)的寄存器中設(shè)置相位和極性。到此,主設(shè)備mcu的spi主要屬性已經(jīng)配置完畢。

然后往 mcu 設(shè)備的 Tx-Data 移位寄存器在地址總線的入口寫入數(shù)據(jù), 每次寫入 16bits 大小的數(shù)據(jù)(使用 writeb 函數(shù)); 寫完之后, mcu設(shè)備里面的 Tx-Data 移位寄存器會自動把從地址總線傳來的16bits數(shù)據(jù)移入 SSPBUF 里。

Channel-Width 的作用是指定 Master 設(shè)備與 Slave 設(shè)備之間數(shù)據(jù)傳輸?shù)膯挝? 與 Bus-Width 相似, Master 設(shè)備內(nèi)部的移位寄存器會依據(jù) Channel-Width 自動地把數(shù)據(jù)從 Master-SSPBUF 里通過 Master-SDO 管腳搬運到 Slave 設(shè)備里的 Slave-SDI 引腳, Slave-SSPSR 再把每次接收的數(shù)據(jù)移入 Slave-SSPBUF里.通常情況下, Bus-Width 總是會大于或等于 Channel-Width, 這樣能保證不會出現(xiàn)因 Master 與 Slave 之間數(shù)據(jù)交換的頻率比地址總線與 Master 之間的數(shù)據(jù)交換頻率要快, 導(dǎo)致 SSPBUF 里面存放的數(shù)據(jù)為無效數(shù)據(jù)這樣的情況。

04? 調(diào)試結(jié)果

以TLE75080為例,SPI通信是由ss(cs)、sck、sdi、sdo構(gòu)成,總線上掛載了2片TLE75080,其時序其實很簡單,主要是在sck的控制下,兩個雙向移位寄存器進行數(shù)據(jù)交換。根據(jù)上文手冊中的spi屬性配置如圖:

從上圖可以看出,從設(shè)備只有在片選選中的時候,才會對移入移位寄存器的數(shù)據(jù)進行處理并同時返回給主設(shè)備相應(yīng)數(shù)據(jù)。這樣就可以實現(xiàn)兩個芯片交替通信。

然后放大后,可以看到數(shù)據(jù)是在下降沿的時候進行采樣,時鐘會在空閑時置低。極性相位一目了然。

至此SPI的主要原理就暫告一段路了。

編輯:Zhang Jinwei

部分圖片來自網(wǎng)絡(luò)

往期文章:

CMake簡介

走進IP

Linux下Socket通信

聊聊汽車診斷刷新那點事

總結(jié)

以上是生活随笔為你收集整理的28335接两个spi设备_SPI浅析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。