91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

串行外圍設備接口控制方式及數據傳輸

4bDk_HOLTEK_MCU ? 來源:互聯(lián)網 ? 作者:佚名 ? 2018-01-17 08:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、 SPI簡介

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

2、 SPI特點

2.1采用主-從模式(Master-Slave) 的控制方式

SPI 規(guī)定了兩個 SPI 設備之間通信必須由主設備 (Master) 來控制次設備 (Slave). 一個 Master 設備可以通過提供 Clock 以及對 Slave 設備進行片選 (Slave Select) 來控制多個 Slave 設備, SPI 協(xié)議還規(guī)定 Slave 設備的 Clock 由 Master 設備通過 SCK 管腳提供給 Slave 設備, Slave 設備本身不能產生或控制 Clock, 沒有 Clock 則 Slave 設備不能正常工作

2.2采用同步方式(Synchronous)傳輸數據

Master 設備會根據將要交換的數據來產生相應的時鐘脈沖(Clock Pulse), 時鐘脈沖組成了時鐘信號(Clock Signal) , 時鐘信號通過時鐘極性 (CPOL) 和 時鐘相位 (CPHA) 控制著兩個 SPI 設備間何時數據交換以及何時對接收到的數據進行采樣, 來保證數據在兩個設備之間是同步傳輸的.

2.3數據交換(Data Exchanges)

SPI 設備間的數據傳輸之所以又被稱為數據交換, 是因為 SPI 協(xié)議規(guī)定一個 SPI 設備不能在數據通信過程中僅僅只充當一個 "發(fā)送者(Transmitter)" 或者 "接收者(Receiver)". 在每個 Clock 周期內, SPI 設備都會發(fā)送并接收一個 bit 大小的數據, 相當于該設備有一個 bit 大小的數據被交換了. 一個 Slave 設備要想能夠接收到 Master 發(fā)過來的控制信號, 必須在此之前能夠被 Master 設備進行訪問 (Access). 所以, Master 設備必須首先通過 SS/CS pin 對 Slave 設備進行片選, 把想要訪問的 Slave 設備選上. 在數據傳輸的過程中, 每次接收到的數據必須在下一次數據傳輸之前被采樣. 如果之前接收到的數據沒有被讀取, 那么這些已經接收完成的數據將有可能會被丟棄, 導致 SPI 物理模塊最終失效. 因此, 在程序中一般都會在 SPI 傳輸完數據后, 去讀取 SPI 設備里的數據, 即使這些數據(Dummy Data)在我們的程序里是無用的。

2.4 SPI有四種傳輸模式

上升沿、下降沿、前沿、后沿觸發(fā)。當然也有MSB和LSB傳輸方式.

2.5 SPI只有主模式和從模式之分。

沒有讀和寫的說法,因為實質上每次SPI是主從設備在交換數據。也就是說,你發(fā)一個數據必然會收到一個數據;你要收一個數據必須也要先發(fā)一個數據。

3、 工作機制

3.1概述

上圖只是對 SPI 設備間通信的一個簡單的描述, 下面就來解釋一下圖中所示的幾個組件(Module):SSPBUF,Synchronous Serial Port Buffer, 泛指 SPI 設備里面的內部緩沖區(qū), 一般在物理上是以 FIFO 的形式, 保存?zhèn)鬏斶^程中的臨時數據;SSPSR, Synchronous Serial Port Register, 泛指 SPI 設備里面的移位寄存器(Shift Regitser), 它的作用是根據設置好的數據位寬(bit-width) 把數據移入或者移出 SSPBUF;Controller, 泛指 SPI 設備里面的控制寄存器, 可以通過配置它們來設置 SPI 總線的傳輸模式。通常情況下, 我們只需要對上圖所描述的四個管腳(pin) 進行編程即可控制整個 SPI 設備之間的數據通信:SCK, Serial Clock, 主要的作用是 Master 設備往 Slave 設備傳輸時鐘信號, 控制數據交換的時機以及速率;SS/CS, Slave Select/Chip Select, 用于 Master 設備片選 Slave 設備, 使被選中的 Slave 設備能夠被 Master 設備所訪問;SDO/MOSI, Serial Data Output/Master Out Slave In, 在 Master 上面也被稱為 Tx-Channel, 作為數據的出口, 主要用于 SPI 設備發(fā)送數據;SDI/MISO, Serial Data Input/Master In Slave Out, 在 Master 上面也被稱為 Rx-Channel, 作為數據的入口, 主要用于SPI 設備接收數據;SPI 設備在進行通信的過程中, Master 設備和 Slave 設備之間會產生一個數據鏈路回環(huán)(Data Loop), 就像上圖所畫的那樣, 通過 SDO 和 SDI 管腳, SSPSR 控制數據移入移出 SSPBUF, Controller 確定 SPI 總線的通信模式, SCK 傳輸時鐘信號。

3.2 Timing

上圖通過 Master 設備與 Slave 設備之間交換1 Byte 數據來說明 SPI 協(xié)議的工作機制.首先, 在這里解釋一下相位和極性的概念

3.2.1 SPI相關的縮寫或說法

SPI的極性Polarity和相位Phase,最常見的寫法是CPOL和CPHA,不過也有一些其他寫法,簡單總結如下:(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (時鐘)極性(2) CKPHA (Clock Phase) = CPHA = PHA = Phase = (時鐘)相位(3) SCK=SCLK=SPI的時鐘(4) Edge=邊沿,即時鐘電平變化的時刻,即上升沿(rising edge)或者下降沿(falling edge)對于一個時鐘周期內,有兩個edge,分別稱為:Leading edge=前一個邊沿=第一個邊沿,對于開始電壓是1,那么就是1變成0的時候,對于開始電壓是0,那么就是0變成1的時候;Trailing edge=后一個邊沿=第二個邊沿,對于開始電壓是1,那么就是0變成1的時候(即在第一次1變成0之后,才可能有后面的0變成1),對于開始電壓是0,那么就是1變成0的時候;

3.2.2 SPI的相位和極性

CPOL和CPHA,分別都可以是0或時1,對應的四種組合就是:Mode 0 CPOL=0, CPHA=0Mode 1 CPOL=0, CPHA=1Mode 2 CPOL=1, CPHA=0Mode 3 CPOL=1, CPHA=1

3.2.3 CPOL極性

先說什么是SCLK時鐘的空閑時刻,其就是當SCLK在數發(fā)送8個bit比特數據之前和之后的狀態(tài),于此對應的,SCLK在發(fā)送數據的時候,就是正常的工作的時候,有效active的時刻了。先說英文,其精簡解釋為:Clock Polarity = IDLE state of SCK。再用中文詳解:SPI的CPOL,表示當SCLK空閑idle的時候,其電平的值是低電平0還是高電平1:CPOL=0,時鐘空閑idle時候的電平是低電平,所以當SCLK有效的時候,就是高電平,就是所謂的active-high;CPOL=1,時鐘空閑idle時候的電平是高電平,所以當SCLK有效的時候,就是低電平,就是所謂的active-low;

3.2.4 CPHA相位

首先說明一點,capture strobe = latch = read = sample,都是表示數據采樣,數據有效的時刻。相位,對應著數據采樣是在第幾個邊沿(edge),是第一個邊沿還是第二個邊沿,0對應著第一個邊沿,1對應著第二個邊沿。對于:CPHA=0,表示第一個邊沿:對于CPOL=0,idle時候的是低電平,第一個邊沿就是從低變到高,所以是上升沿;對于CPOL=1,idle時候的是高電平,第一個邊沿就是從高變到低,所以是下降沿;CPHA=1,表示第二個邊沿:對于CPOL=0,idle時候的是低電平,第二個邊沿就是從高變到低,所以是下降沿;對于CPOL=1,idle時候的是高電平,第一個邊沿就是從低變到高,所以是上升沿;還是上圖大家更容易看懂

3.2.5 軟件中如何設置SPI的極性和相位

SPI分主設備和從設備,兩者通過SPI協(xié)議通訊。而設置SPI的模式,是從設備的模式,決定了主設備的模式。所以要先去搞懂從設備的SPI是何種模式,然后再將主設備的SPI的模式,設置和從設備相同的模式,即可正常通訊。對于從設備的SPI是什么模式,有兩種:

3.2.5.1固定的,有SPI從設備硬件決定的

SPI從設備,具體是什么模式,相關的datasheet中會有描述,需要自己去datasheet中找到相關的描述,即:關于SPI從設備,在空閑的時候,是高電平還是低電平,即決定了CPOL是0還是1;然后再找到關于設備是在上升沿還是下降沿去采樣數據,這樣就是,在定了CPOL的值的前提下,對應著可以推算出CPHA是0還是1了。

3.2.5.2 可配置的,由軟件自己設定

從設備也是一個SPI控制器,4種模式都支持,此時只要自己設置為某種模式即可。然后知道了從設備的模式后,再去將SPI主設備的模式,設置為和從設備模式一樣,即可。對于如何配置SPI的CPOL和CPHA的話,不多細說,多數都是直接去寫對應的SPI控制器中對應寄存器中的CPOL和CPHA那兩位,寫0或寫1即可。

3.3 SSPSR

SSPSR 是 SPI 設備內部的移位寄存器(Shift Register). 它的主要作用是根據 SPI 時鐘信號狀態(tài), 往 SSPBUF 里移入或者移出數據, 每次移動的數據大小由 Bus-Width 以及 Channel-Width 所決定。Bus-Width 的作用是指定地址總線到 Master 設備之間數據傳輸的單位.例如, 我們想要往 Master 設備里面的 SSPBUF 寫入 16 Byte 大小的數據: 首先, 給 Master 設備的配置寄存器設置 Bus-Width 為 Byte; 然后往 Master 設備的 Tx-Data 移位寄存器在地址總線的入口寫入數據, 每次寫入 1 Byte 大小的數據(使用 writeb 函數); 寫完 1 Byte 數據之后, Master 設備里面的 Tx-Data 移位寄存器會自動把從地址總線傳來的1 Byte 數據移入 SSPBUF 里; 上述動作一共需要重復執(zhí)行 16 次.Channel-Width 的作用是指定 Master 設備與 Slave 設備之間數據傳輸的單位. 與 Bus-Width 相似, Master 設備內部的移位寄存器會依據 Channel-Width 自動地把數據從 Master-SSPBUF 里通過 Master-SDO 管腳搬運到 Slave 設備里的 Slave-SDI 引腳, Slave-SSPSR 再把每次接收的數據移入 Slave-SSPBUF里.通常情況下, Bus-Width 總是會大于或等于 Channel-Width, 這樣能保證不會出現(xiàn)因 Master 與 Slave 之間數據交換的頻率比地址總線與 Master 之間的數據交換頻率要快, 導致 SSPBUF 里面存放的數據為無效數據這樣的情況.

3.4 SSPBUF

我們知道, 在每個時鐘周期內, Master 與 Slave 之間交換的數據其實都是 SPI 內部移位寄存器從 SSPBUF 里面拷貝的. 我們可以通過往 SSPBUF 對應的寄存器 (Tx-Data / Rx-Data register) 里讀寫數據, 間接地操控 SPI 設備內部的 SSPBUF.例如, 在發(fā)送數據之前, 我們應該先往 Master 的 Tx-Data 寄存器寫入將要發(fā)送出去的數據, 這些數據會被 Master-SSPSR 移位寄存器根據 Bus-Width 自動移入 Master-SSPBUF 里, 然后這些數據又會被 Master-SSPSR 根據 Channel-Width 從 Master-SSPBUF 中移出, 通過 Master-SDO 管腳傳給 Slave-SDI 管腳, Slave-SSPSR 則把從 Slave-SDI 接收到的數據移入 Slave-SSPBUF 里. 與此同時, Slave-SSPBUF 里面的數據根據每次接收數據的大小(Channel-Width), 通過 Slave-SDO 發(fā)往 Master-SDI, Master-SSPSR 再把從 Master-SDI 接收的數據移入 Master-SSPBUF.在單次數據傳輸完成之后, 用戶程序可以通過從 Master 設備的 Rx-Data 寄存器讀取 Master 設備數據交換得到的數據.

3.5 Controller

Master 設備里面的 Controller 主要通過時鐘信號(Clock Signal)以及片選信號(Slave Select Signal)來控制 Slave 設備. Slave 設備會一直等待, 直到接收到 Master 設備發(fā)過來的片選信號, 然后根據時鐘信號來工作.Master 設備的片選操作必須由程序所實現(xiàn). 例如: 由程序把 SS/CS 管腳的時鐘信號拉低電平, 完成 SPI 設備數據通信的前期工作; 當程序想讓 SPI 設備結束數據通信時, 再把 SS/CS 管腳上的時鐘信號拉高電平.

4. SPI舉例

上面說了那么多,在這里我來舉一個例子幫助大家理解。SPI是一個環(huán)形總線結構,由ss(cs)、sck、sdi、sdo構成,其時序其實很簡單,主要是在sck的控制下,兩個雙向移位寄存器進行數據交換。假設下面的8位寄存器裝的是待發(fā)送的數據10101010,上升沿發(fā)送、下降沿接收、高位先發(fā)送。那么第一個上升沿來的時候 數據將會是sdo=1;寄存器=0101010x。下降沿到來的時候,sdi上的電平將所存到寄存器中去,那么這時寄存器=0101010sdi,這樣在 8個時鐘脈沖以后,兩個寄存器的內容互相交換一次。這樣就完成里一個spi時序。舉例:假設主機和從機初始化就緒:并且主機的sbuff=0xaa,從機的sbuff=0x55,下面將分步對spi的8個時鐘周期的數據情況演示一遍:假設上升沿發(fā)送數據

這樣就完成了兩個寄存器8位的交換,上面的上表示上升沿、下表示下降沿,sdi、sdo相對于主機而言的。已經很接近理解了,下一步就是把 上面的過程轉為動畫

5、 STM32驅動

STM32的spi較為簡單,因為STM32的內部集成有SPI。

5.1 SPI的初始化

[cpp]view plaincopy

  1. voidSPIInit(void)

  2. {

  3. SPI_InitTypeDefSPI_InitStructure;

  4. //初始化SPI與GPIO口的連接

  5. FLASH_GPIO_Init();

  6. /*!

  7. CE_High();

  8. /*!

  9. SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;

  10. SPI_InitStructure.SPI_Mode=SPI_Mode_Master;

  11. SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;

  12. SPI_InitStructure.SPI_CPOL=SPI_CPOL_High;

  13. SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;

  14. SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;

  15. SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_8;

  16. SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;

  17. SPI_InitStructure.SPI_CRCPolynomial=7;

  18. SPI_Init(SPI1,&SPI_InitStructure);

  19. /*!

  20. SPI_Cmd(SPI1,ENABLE);

  21. }

5.2 SPI寫1個字節(jié)

[cpp]view plaincopy

  1. uint8Send_Byte(uint8data)

  2. {

  3. //發(fā)送不為空

  4. while(!(SPI1->SR&SPI_I2S_FLAG_TXE));

  5. SPI1->DR=data;

  6. //讀取收到的數據

  7. while(!(SPI1->SR&SPI_I2S_FLAG_RXNE));

  8. returnSPI1->DR;

  9. }

5.3 SPI讀一個字節(jié)

[cpp]view plaincopy

  1. uint8Get_Byte(void)

  2. {

  3. //發(fā)送不為空

  4. while(!(SPI1->SR&SPI_I2S_FLAG_TXE));//發(fā)送緩沖為空,跳出循環(huán)

  5. SPI1->DR=0xFF;//

  6. //讀取收到的數據

  7. while(!(SPI1->SR&SPI_I2S_FLAG_RXNE));//接受緩沖非空,跳出循環(huán)

  8. returnSPI1->DR;

  9. }

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

    關注

    9

    文章

    2212

    瀏覽量

    67625
  • 信號處理
    +關注

    關注

    49

    文章

    1147

    瀏覽量

    105155
  • 時鐘信號
    +關注

    關注

    4

    文章

    508

    瀏覽量

    30030

原文標題:SPI詳解

文章出處:【微信號:HOLTEK_MCU,微信公眾號:至秦單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    DS92LV241x:高速數據傳輸的理想選擇

    DS92LV241x:高速數據傳輸的理想選擇 在當今的電子設備設計中,高速、可靠的數據傳輸至關重要。DS92LV2411(Serializer)和DS92LV2412(Deserializer
    的頭像 發(fā)表于 12-25 14:30 ?484次閱讀

    探索DS92LV242x:高速數據傳輸的理想之選

    DS92LV2421 serializer(串行器)和DS92LV2422 deserializer(解串器)組成,在高速數據傳輸方面表現(xiàn)卓越,適用于多種應用場景。 文件下載: ds92lv2422.pdf 芯片特性
    的頭像 發(fā)表于 12-24 13:55 ?337次閱讀

    探索DS100KR401:高速數據傳輸的理想中繼器

    探索DS100KR401:高速數據傳輸的理想中繼器 在高速數據傳輸的領域中,信號的完整性和低功耗是至關重要的設計指標。今天,我們將深入探討德州儀器(TI)的DS100KR401,一款專為高速數據傳輸
    的頭像 發(fā)表于 12-24 11:30 ?368次閱讀

    投入式水位計數據傳輸方式解析:支持遠程監(jiān)控嗎?

    在現(xiàn)代巖土工程與水利工程的安全監(jiān)測中,數據的實時性與傳輸的可靠性至關重要。投入式水位計作為核心監(jiān)測設備,其數據傳輸方式直接決定了整個監(jiān)測系統(tǒng)
    的頭像 發(fā)表于 12-18 14:10 ?304次閱讀
    投入式水位計<b class='flag-5'>數據傳輸</b><b class='flag-5'>方式</b>解析:支持遠程監(jiān)控嗎?

    高速數據傳輸新利器:TSER9615串行器解析

    高速數據傳輸新利器:TSER9615串行器解析 在電子設備飛速發(fā)展的今天,高速、高分辨率的數據傳輸需求日益增長。攝像頭、雷達和各類傳感器的數據傳輸
    的頭像 發(fā)表于 12-16 10:35 ?429次閱讀

    單片機之間可以進行無線數據傳輸

    ) 1. 使用其他無線通信技術:如果單片機之間的距離較近,可以考慮使用如Wi-Fi、藍牙、ZigBee等短距離無線通信技術進行數據傳輸。這些技術通常支持設備間的直接通信,但傳輸距離和速率可能有
    發(fā)表于 11-28 08:15

    基于FPGA的高效內存到串行數據傳輸模塊設計

    本文介紹了一個基于FPGA的內存到串行數據傳輸模塊,該模塊設計用來高效地處理存儲器中的數據傳輸串行接口。項目中自定義的“datamove
    的頭像 發(fā)表于 11-12 14:31 ?4382次閱讀
    基于FPGA的高效內存到<b class='flag-5'>串行數據傳輸</b>模塊設計

    多通道數據傳輸終端 LoRa/LTE雙模通信終端

    數據傳輸
    穩(wěn)控自動化
    發(fā)布于 :2025年10月24日 13:57:21

    基于FPGA的USB數據傳輸

    你也許會有疑問,明明有這么多通信方式數據傳輸(SPI、I2C、UART、以太網)為什么偏偏使用USB呢?
    的頭像 發(fā)表于 08-06 14:47 ?4938次閱讀
    基于FPGA的USB<b class='flag-5'>數據傳輸</b>

    應變計的數據傳輸方式有哪些,是否支持無線傳輸?

    在結構物安全監(jiān)測領域,振弦式應變計的數據傳輸方式直接影響監(jiān)測效率與系統(tǒng)可靠性。針對工程用戶的常見疑問——“是否支持無線傳輸?”南京峟思將為大家解析其有線、無線傳輸方案及應用場景,助力科
    的頭像 發(fā)表于 07-15 14:03 ?523次閱讀
    應變計的<b class='flag-5'>數據傳輸</b><b class='flag-5'>方式</b>有哪些,是否支持無線<b class='flag-5'>傳輸</b>?

    振弦式應變計兩種數據傳輸方式介紹

    在巖土工程及結構健康監(jiān)測領域,振弦式應變計憑借其高精度、抗干擾能力強的特性,成為橋梁、隧道、大壩等基礎設施安全監(jiān)測的核心設備數據傳輸方式作為連接傳感器與監(jiān)測系統(tǒng)的“神經通路”,直接影響著數據
    的頭像 發(fā)表于 07-15 13:38 ?639次閱讀
    振弦式應變計兩種<b class='flag-5'>數據傳輸</b><b class='flag-5'>方式</b>介紹

    像這樣一款體積小巧的DTU數據傳輸終端你見過嗎?

    數據傳輸
    才茂通信
    發(fā)布于 :2025年06月04日 14:33:29

    SPI數據傳輸緩慢問題求解

    我遇到了 SPI 數據傳輸速率問題。 盡管將 SPI 時鐘頻率設置為 20 MHz,但我只獲得了 2 Kbps 的數據傳輸速率。 我正在以 115200 的波特率通過 UART 監(jiān)控數據。 我正在 cyfxusbspidmamo
    發(fā)表于 05-15 08:29

    捷多邦的IoT PCB:數據傳輸的未來

    在物聯(lián)網(IoT)技術迅猛發(fā)展的背景下,數據傳輸的穩(wěn)定性成為智能設備運行的關鍵。專用PCB(印制電路板)的設計和制造對于確保這一穩(wěn)定性至關重要。以下探討的是,一家領先的PCB制造商如何通過其產品提升
    的頭像 發(fā)表于 04-07 10:23 ?789次閱讀

    LCR測試儀數據傳輸接口類型選型指南

    將深入探討LCR測試儀的主流數據傳輸接口類型,并提供詳細的選型指南和實際應用案例。 一、數據傳輸接口的核心作用 LCR測試儀通過測量元件的電感(L)、電容(C)、電阻(R)及衍生參數(
    的頭像 發(fā)表于 04-01 15:16 ?977次閱讀
    LCR測試儀<b class='flag-5'>數據傳輸</b><b class='flag-5'>接口</b>類型選型指南