色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

SPI協(xié)議相關的內(nèi)容

我快閉嘴 ? 來源:記得誠 ? 作者:記得誠 ? 2022-09-05 10:50 ? 次閱讀

大家好,我是記得誠。

今天分享SPI協(xié)議相關的內(nèi)容。

目錄

  • 前面的話

  • 目錄

  • 先說串口

  • SPI通訊協(xié)議

  • SPI特性

  • 模式編號

  • 多從機模式

  • 優(yōu)缺點

  • 編程實現(xiàn)

先說串口

之前寫過一篇UART,通用串行異步通訊協(xié)議,感興趣可以參考一下《通俗易懂的UART協(xié)議幀格式》;因為UART沒有時鐘信號,無法控制何時發(fā)送數(shù)據(jù),也無法保證雙發(fā)按照完全相同的速度接收數(shù)據(jù)。因此,雙方以不同的速度進行數(shù)據(jù)接收和發(fā)送,就會出現(xiàn)問題。

如果要解決這個問題,UART為每個字節(jié)添加額外的起始位停止位,以幫助接收器在數(shù)據(jù)到達時進行同步;

雙方還必須事先就傳輸速度達成共識(設置相同的波特率,例如每秒9600位)。

傳輸速率如果有微小差異不是問題,因為接收器會在每個字節(jié)的開頭重新同步。相應的協(xié)議如下圖所示;

982cd136-2c54-11ed-ba43-dac502259ad0.png串口傳輸?shù)倪^程

如果您注意到上圖中的11001010不等于0x53,這是一個細節(jié)。串口協(xié)議通常會首先發(fā)送最低有效位,因此最小位在最左邊LSB。低四位字節(jié)實際上是0011 = 0x3,高四位字節(jié)是0101 = 0x5

異步串行工作得很好,但是在每個字節(jié)發(fā)送的時候都需要額外的起始位停止位以及在發(fā)送和接收數(shù)據(jù)所需的復雜硬件方面都有很多開銷。

不難發(fā)現(xiàn),如果接收端和發(fā)送端設置的速度都不一致,那么接收到的數(shù)據(jù)將是垃圾(亂碼)。

下面開始講一下SPI協(xié)議,會有哪些優(yōu)點。

SPI通訊協(xié)議

于是我們想有沒有更好一點的串行通訊方式;相比較于UART,SPI的工作方式略有不同。

SPI是一個同步的數(shù)據(jù)總線,也就是說它是用單獨的數(shù)據(jù)線一個單獨的時鐘信號來保證發(fā)送端和接收端的完美同步

時鐘是一個振蕩信號,它告訴接收端在確切的時機對數(shù)據(jù)線上的信號進行采樣。

產(chǎn)生時鐘的一側稱為主機,另一側稱為從機??偸?strong>只有一個主機(一般來說可以是微控制器/MCU),但是可以有多個從機(后面詳細介紹);

數(shù)據(jù)的采集時機可能是時鐘信號上升沿(從低到高)或下降沿(從高到低)。

具體要看對SPI的配置;

整體的傳輸大概可以分為以下幾個過程:

  • 主機先將NSS信號拉低,這樣保證開始接收數(shù)據(jù);

  • 接收端檢測到時鐘的邊沿信號時,它將立即讀取數(shù)據(jù)線上的信號,這樣就得到了一位數(shù)據(jù)(1bit);

    由于時鐘是隨數(shù)據(jù)一起發(fā)送的,因此指定數(shù)據(jù)的傳輸速度并不重要,盡管設備將具有可以運行的最高速度(稍后我們將討論選擇合適的時鐘邊沿和速度)。

  • 主機發(fā)送到從機時:主機產(chǎn)生相應的時鐘信號,然后數(shù)據(jù)一位一位地將從MOSI信號線上進行發(fā)送到從機;

  • 主機接收從機數(shù)據(jù):如果從機需要將數(shù)據(jù)發(fā)送回主機,則主機將繼續(xù)生成預定數(shù)量的時鐘信號,并且從機會將數(shù)據(jù)通過MISO信號線發(fā)送;

具體如下圖所示;

984828b4-2c54-11ed-ba43-dac502259ad0.pngSPI的時序

注意,SPI是“全雙工”(具有單獨的發(fā)送和接收線路),因此可以在同一時間發(fā)送和接收數(shù)據(jù),另外SPI的接收硬件可以是一個簡單的移位寄存器。這比異步串行通信所需的完整UART要簡單得多,并且更加便宜;

SPI特性

SPI總線包括4條邏輯線,定義如下:

  • MISOMaster input slave output 主機輸入,從機輸出(數(shù)據(jù)來自從機);

  • MOSIMaster output slave input 主機輸出,從機輸入(數(shù)據(jù)來自主機);

  • SCLKSerial Clock 串行時鐘信號,由主機產(chǎn)生發(fā)送給從機;

  • SSSlave Select 片選信號,由主機發(fā)送,以控制與哪個從機通信,通常是低電平有效信號。

其他制造商可能會遵循其他命名規(guī)則,但是最終他們指的相同的含義。以下是一些常用術語;

  • MISO也可以是SIMO,DOUT,DO,SDOSO(在主機端);

  • MOSI也可以是SOMI,DIN,DISDISI(在主機端);

  • NSS也可以是CECSSSEL;

  • SCLK也可以是SCK;

本文將按照以下命名進行講解[MISO, MOSI, SCK,NSS]

下圖顯示了單個主機和單個從機之間的典型SPI連接。

986651e0-2c54-11ed-ba43-dac502259ad0.png主從連接

時鐘頻率

SPI總線上的主機必須在通信開始時候配置并生成相應的時鐘信號。在每個SPI時鐘周期內(nèi),都會發(fā)生全雙工數(shù)據(jù)傳輸

主機在MOSI線上發(fā)送一位數(shù)據(jù),從機讀取它,而從機在MISO線上發(fā)送一位數(shù)據(jù),主機讀取它。

就算只進行單向的數(shù)據(jù)傳輸,也要保持這樣的順序。這就意味著無論接收任何數(shù)據(jù),必須實際發(fā)送一些東西!在這種情況下,我們稱其為虛擬數(shù)據(jù);

從理論上講,只要實際可行,時鐘速率就可以是您想要的任何速率,當然這個速率受限于每個系統(tǒng)能提供多大的系統(tǒng)時鐘頻率,以及最大的SPI傳輸速率。

時鐘極性 CKP/Clock Polarity

除了配置串行時鐘速率(頻率)外,SPI主設備還需要配置時鐘極性。

根據(jù)硬件制造商的命名規(guī)則不同,時鐘極性通常寫為CKPCPOL。時鐘極性和相位共同決定讀取數(shù)據(jù)的方式,比如信號上升沿讀取數(shù)據(jù)還是信號下降沿讀取數(shù)據(jù);

CKP可以配置為1或0。這意味著您可以根據(jù)需要將時鐘的默認狀態(tài)(IDLE)設置為高或低。極性反轉(zhuǎn)可以通過簡單的邏輯逆變器實現(xiàn)。您必須參考設備的數(shù)據(jù)手冊才能正確設置CKP和CKE。

  • CKP = 0:時鐘空閑IDLE為低電平 0
  • CKP = 1:時鐘空閑IDLE為高電平1

時鐘相位 CKE /Clock Phase (Edge)

除配置串行時鐘速率和極性外,SPI主設備還應配置時鐘相位(或邊沿)。根據(jù)硬件制造商的不同,時鐘相位通常寫為CKECPHA;

顧名思義,時鐘相位/邊沿,也就是采集數(shù)據(jù)時是在時鐘信號的具體相位或者邊沿;

  • CKE = 0:在時鐘信號SCK的第一個跳變沿采樣;
  • CKE = 1:在時鐘信號SCK的第二個跳變沿采樣;

時鐘配置總結

綜上幾種情況,下圖總結了所有時鐘配置組合,并突出顯示了實際采樣數(shù)據(jù)的時刻;

其中黑色線為采樣數(shù)據(jù)的時刻;

藍色線為SCK時鐘信號;

具體如下圖所示;

987912f8-2c54-11ed-ba43-dac502259ad0.png

模式編號

SPI的時鐘極性和相位的配置通常稱為 SPI模式,所有可能的模式都遵循以下約定;具體如下表所示;

SPI Mode CPOL CPHA
0 [00] 0 0
1 [01] 0 1
2 [10] 1 0
3 [11] 1 1

除此之外,我們還應該仔細檢查微控制器數(shù)據(jù)手冊中包含的模式表,以確保一切正常。

多從機模式

前面說到SPI總線必須有一個主機,可以有多個從機,那么具體連接到SPI總線的方法有以下兩種:

第一種方法:多NSS

  1. 通常,每個從機都需要一條單獨的SS線。
  2. 如果要和特定的從機進行通訊,可以將相應的NSS信號線拉低,并保持其他NSS信號線的狀態(tài)為高電平;如果同時將兩個NSS信號線拉低,則可能會出現(xiàn)亂碼,因為從機可能都試圖在同一條MISO線上傳輸數(shù)據(jù),最終導致接收數(shù)據(jù)亂碼。

具體連接方式如下圖所示;

9888c432-2c54-11ed-ba43-dac502259ad0.png多NSS連接

第二種方法:菊花鏈

在數(shù)字通信世界中,在設備信號(總線信號或中斷信號)以串行的方式從一 個設備依次傳到下一個設備,不斷循環(huán)直到數(shù)據(jù)到達目標設備的方式被稱為菊花鏈

  1. 菊花鏈的最大缺點是因為是信號串行傳輸,所以一旦數(shù)據(jù)鏈路中的某設備發(fā)生故障的時候,它下面優(yōu)先級較低的設備就不可能得到服務了;
  2. 另一方面,距離主機越遠的從機,獲得服務的優(yōu)先級越低,所以需要安排好從機的優(yōu)先級,并且設置總線檢測器,如果某個從機超時,則對該從機進行短路,防止單個從機損壞造成整個鏈路崩潰的情況;

具體的連接如下圖所示;

98ad04dc-2c54-11ed-ba43-dac502259ad0.png菊花鏈連接

其中紅線加粗為數(shù)據(jù)的流向;

所以最終的數(shù)據(jù)流向圖可以表示為:

98c347f6-2c54-11ed-ba43-dac502259ad0.png數(shù)據(jù)流圖

SCK為時鐘信號,8clks表示8個邊沿信號;

其中D為數(shù)據(jù),X為無效數(shù)據(jù);

所以不難發(fā)現(xiàn),菊花鏈模式充分使用了SPI其移位寄存器的功能,整個鏈充當通信移位寄存器,每個從機在下一個時鐘周期將輸入數(shù)據(jù)復制到輸出。

優(yōu)缺點

SPI通訊的優(yōu)勢

使SPI作為串行通信接口脫穎而出的原因很多;

  • 全雙工串行通信;
  • 高速數(shù)據(jù)傳輸速率。
  • 簡單的軟件配置;
  • 極其靈活的數(shù)據(jù)傳輸,不限于8位,它可以是任意大小的字;
  • 非常簡單的硬件結構。從站不需要唯一地址(與I2C不同)。從機使用主機時鐘,不需要精密時鐘振蕩器/晶振(與UART不同)。不需要收發(fā)器(與CAN不同)。

SPI的缺點

  • 沒有硬件從機應答信號(主機可能在不知情的情況下無處發(fā)送);
  • 通常僅支持一個主設備;
  • 需要更多的引腳(與I2C不同);
  • 沒有定義硬件級別的錯誤檢查協(xié)議;
  • RS-232和CAN總線相比,只能支持非常短的距離;

編程實現(xiàn)

下面是通過STM32的cubemx自動生成的HAL庫代碼,比較簡單,截取了其中一部分,具體如下;

staticvoidMX_SPI1_Init(void)
{
hspi1.Instance=SPI1;
hspi1.Init.Mode=SPI_MODE_MASTER;//主機模式
hspi1.Init.Direction=SPI_DIRECTION_2LINES;//全雙工
hspi1.Init.DataSize=SPI_DATASIZE_8BIT;//數(shù)據(jù)位為8位
hspi1.Init.CLKPolarity=SPI_POLARITY_LOW;//CPOL=0
hspi1.Init.CLKPhase=SPI_PHASE_1EDGE;//CPHA為數(shù)據(jù)線的第一個變化沿
hspi1.Init.NSS=SPI_NSS_SOFT;//軟件控制NSS
hspi1.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2;//2分頻,32M/2=16MHz
hspi1.Init.FirstBit=SPI_FIRSTBIT_MSB;//最高位先發(fā)送
hspi1.Init.TIMode=SPI_TIMODE_DISABLE;//TIMODE模式關閉
hspi1.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;//CRC關閉
hspi1.Init.CRCPolynomial=10;//默認值,無效
if(HAL_SPI_Init(&hspi1)!=HAL_OK)//初始化
{
_Error_Handler(__FILE__,__LINE__);
}
}

//發(fā)送數(shù)據(jù)
HAL_StatusTypeDef
HAL_SPI_Transmit(SPI_HandleTypeDef*hspi,
uint8_t*pData,
uint16_tSize,
uint32_tTimeout);
//接收數(shù)據(jù)
HAL_StatusTypeDef
HAL_SPI_Receive(SPI_HandleTypeDef*hspi,
uint8_t*pData,
uint16_tSize,
uint32_tTimeout);

希望對你有幫助,我們下一期見。

審核編輯:湯梓紅

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

    關注

    17

    文章

    1709

    瀏覽量

    91740
  • uart
    +關注

    關注

    22

    文章

    1240

    瀏覽量

    101478
  • 通訊協(xié)議

    關注

    10

    文章

    276

    瀏覽量

    20374

原文標題:SPI協(xié)議并沒有我想的那么簡單

文章出處:【微信號:記得誠,微信公眾號:記得誠】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    SPI通信協(xié)議的基礎知識解析

    SPI通信協(xié)議詳解寫在最前: 本文講述了SPI通信協(xié)議的基本內(nèi)容包括如下SPI的基礎知識
    發(fā)表于 12-13 08:05

    SPI協(xié)議相關資料分享

    FPGA作為從機與STM32進行SPI協(xié)議通信---Verilog實現(xiàn) [轉(zhuǎn)]一.SPI協(xié)議簡要介紹SPI,是英語SerialPeriphe
    發(fā)表于 01-18 10:01

    SPI協(xié)議相關資料推薦

    1.SPI協(xié)議簡介1.1.SPI協(xié)議概括  SPI,是英語Serial Peripheral interface的縮寫,顧名思義就是串行外圍
    發(fā)表于 01-24 07:06

    SPI協(xié)議相關資料推薦

    目錄第一步:SPI協(xié)議簡介1.物理層2.協(xié)議層第二步:SPI特性及架構第一步:SPI協(xié)議簡介
    發(fā)表于 01-26 08:25

    SPI協(xié)議是怎么實現(xiàn)的

    寫在前面:本文章旨在總結備份、方便以后查詢,由于是個人總結,如有不對,歡迎指正;另外,內(nèi)容大部分來自網(wǎng)絡、書籍、和各類手冊,如若侵權請告知,馬上刪帖致歉。目錄一、SPI協(xié)議二、W25Qxx芯片三
    發(fā)表于 02-17 07:29

    基于SPI協(xié)議的SD卡讀寫

    基于SPI協(xié)議的SD卡讀寫,SD卡的協(xié)議分析。
    發(fā)表于 01-06 14:24 ?0次下載

    RT-Thread上SPI的細節(jié)內(nèi)容

    相關內(nèi)容,基于此,本文就來詳細說明RT-Thread上設備SPI的移植與實踐,SPI的通信原理不用贅訴,百度一搜索,對應的知識點就明明白白的。本文的主要內(nèi)容還是闡述一下RT-Thre
    的頭像 發(fā)表于 09-30 15:35 ?3888次閱讀
    RT-Thread上<b class='flag-5'>SPI</b>的細節(jié)<b class='flag-5'>內(nèi)容</b>

    基于FPGA的SPI協(xié)議及設計實現(xiàn)

    基于FPGA的SPI協(xié)議及設計實現(xiàn)博主微信:flm13724054952,不懂的有疑惑的也可以加微信咨詢,歡迎大家前來投稿,謝謝!引言介紹在電子通信領域里采用的通信協(xié)議有IIC,SPI
    發(fā)表于 11-05 19:05 ?24次下載
    基于FPGA的<b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>及設計實現(xiàn)

    SPI協(xié)議詳解

    1.SPI協(xié)議簡介1.1.SPI協(xié)議概括  SPI,是英語Serial Peripheral interface的縮寫,顧名思義就是串行外圍
    發(fā)表于 11-29 12:06 ?18次下載
    <b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>詳解

    軟件模擬SPI協(xié)議

    軟件模擬SPI協(xié)議什么是SPISPI的通訊模式通訊協(xié)議詳細程序簡寫程序結語最近在學習51單片機的內(nèi)容,為了防止自己學過就忘,在這里寫一些平時的學習筆記,如果有錯誤希望大家可以給我指正一
    發(fā)表于 12-22 19:14 ?14次下載
    軟件模擬<b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>

    SPI協(xié)議

    目錄SPI協(xié)議簡介SPI物理層SPI協(xié)議SPI協(xié)議
    發(fā)表于 12-22 19:17 ?34次下載
    <b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>

    spi協(xié)議介紹

    文章目錄前言一、SPI介紹1.SPI總線2.尋址方式二、通信原理1.通信過程2.極性和相位3.四種工作模式三、SPI與I2C的異同1.相同點2.不同點總結前言spi
    發(fā)表于 12-22 19:21 ?19次下載
    <b class='flag-5'>spi</b><b class='flag-5'>協(xié)議</b>介紹

    STM32的SPI相關知識

    STM32的SPI相關知識一、前言本人使用的是stm32f103的開發(fā)板,F(xiàn)lash芯片是W25Q64。本章介紹SPI相關通訊知識,后續(xù)篇章會有S
    發(fā)表于 12-22 19:33 ?7次下載
    STM32的<b class='flag-5'>SPI</b><b class='flag-5'>相關</b>知識

    一文看懂SPI協(xié)議

    作者:王超首發(fā):電子電路開發(fā)學習都有哪些內(nèi)容?SPI協(xié)議簡介4線還是3線?4種工作模式多種傳輸速率SPI協(xié)議的時序
    發(fā)表于 01-25 18:35 ?38次下載
    一文看懂<b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>

    描述SPI協(xié)議verilog相關的電路

    設置SPI_ADDR_WIDTH標記SPI傳輸數(shù)據(jù)命令的寄存器地址值寬度,SPI_CMD_WIDTH變量標記SPI傳輸數(shù)據(jù)的整體寬度。
    發(fā)表于 08-20 10:08 ?1137次閱讀
    描述<b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>verilog<b class='flag-5'>相關</b>的電路
    主站蜘蛛池模板: 神马电影我不卡国语版| 毛片免费在线| 99热精品在线视频观看| 一个人在线观看视频| 色翁荡熄月月| 日本亚洲电影| 青草精品国产福利在线视频| 嗯啊插的好深啊使劲抽视频| 久久热在线视频精品1| 九九热最新视频| 亚洲国产精品热久久| 男人插曲女人的视频| 伦理片飘花手机在线| 看看妇女的B免费看| 久久日本精品在线热| 久久青草免费91线频观看站街| 久久99re6热在线播放| 久久精品AV一区二区无码| 久久yy99re66| 久久综合九色综合国产| 麻豆AV久久AV盛宴AV| 妺妺窝人体色777777野大粗 | 欧美zzzoooxxx| 欧美18videosex性欧美老师| 欧美精品熟妇乱| 肉动漫h黄动漫日本免费观看| 久久免费看视频| 美女在线永久免费网站| 女张腿男人桶羞羞漫画| 日本无码人妻精品一区二区视频| 日韩视频中文在线一区| 忘忧草在线影院WWW日本动漫| 美女扒开屁股让男人桶| 女人被躁到高潮嗷嗷叫69| 日本人添下面的全过程| 午夜福利免费院| 一本道高清码| 97干97吻| 夫妻性姿势真人做视频| 国产亚洲精品久久久久久一区二区| 成人免费网址在线|