衡阳派盒市场营销有限公司

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

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

3天內不再提示

一文講透SPI總線和IIC總線通信3

jf_78858299 ? 來源:金沙灘工作室 ? 作者:宋雪松 ? 2023-02-13 10:41 ? 次閱讀

6.8.2 SPI****初始化配置

首先看一下SPI外設的初始化結構體成員及其描述。

圖片

1、SPI_Dirention 設置了SPI是單向通信還是雙向的通信數據模式,設置參數如表6-3所示。

圖片

2、SPI_Mode設置了SPI 設備是工作在主機模式還是從機模式,設置參數如表6-4所示。

圖片

3、SPI_DataSize設置了SPI通信時數據幀是8位還是16位,沒有特殊要求,通常配置為8位模式,設置參數如表6-5所示。

圖片

4、SPI_CPOL設置了SPI串行時鐘SCK的時鐘極性,選擇該參數時需要確保SPI通信雙方保持一致,一般根據SPI從設備支持的模式設定,設置參數如表6-6所示

圖片

5、SPI_CPHA設置了SPI采樣時發生在SCK的哪個邊沿,該參數同樣需要確保通信雙方保持一致,一般也是根據從設備支持的模式設定,設置參數如表6-7所示

圖片

6、SPI_NSS設置了NSS片選引腳是由選擇硬件模式,還是由軟件模式。采用硬件管理時,片選信號由SPI硬件自動產生,不需要手動設置,而軟件模式需要手動設置片選引腳電平。實際開發中通常設置為軟件模式,即使用普通IO口作為片選引腳。設置參數如表6-8所示

圖片

7、SPI_BaudRatePrescaler設置了SPI波特率預分頻系數,分頻后的時鐘就是SCK信號線的時鐘頻率。注意SPI正在通信時不能更改波特率預分頻系數,具體設置參數如表6-9所示

圖片

8、SPI_FirstBit設置了數據傳輸是高位在前(MSB先行)還是低位在前(LSB先行),沒有特殊要求一般設置為高位在前(MSB先行)設置參數如表6-10所示。

圖片

9、SPI_CRCPolynomial設置是否使用CRC校驗。使用時根據需求設置CRC多項式,不使用時設置其值為7(復位值為0x0007,默認不使用)。無特殊要求通常不設置CRC校驗。

SPI配置流程:

1、使能SPI外設時鐘及SPI接口引腳時鐘

2、初始化SPI引腳——初始化NSS、SCK、MISO、MOSI引腳。

3、初始化SPI外設——根據需求設置SPI初始化結構體成員參數

4、使能SPI外設——SPI使能庫函數為:SPI_Cmd(SPIx, ENABLE);其中SPIx,x為1、

2、3,用來選擇SPI外設。

5、編寫SPI數據發送和接收函數

6.8.3 SPI數據發送和接收

SPI數據發送和接收過程與USART類似,由數據緩沖區和一個8位的雙向移位寄存器構成。SPI的數據緩沖區叫做數據寄存器(SPI_DR),雖然是一個寄存器,但是實質上包含兩個緩沖區:發送緩沖和接收緩沖,分別用于進行寫操作和讀操作。與USART兩個單獨的移位寄存器不同,SPI只有一個移位寄存器且是雙向的,同一時刻既向MOSI上移出要發送的數據,又將MISO上的數據向內移入,這個過程是同步的,SPI傳輸結構如圖6-11所示。

圖片

圖6-11 SPI數據傳輸結構圖

SPI發送數據時只需要將數據寫入到SPI_DR,SPI會自動將其分配到發送緩沖區,然后再將數據從發送緩沖區并行傳送到移位寄存器中,同時設置一個發送緩沖區為空(TXE)的標志位,最后數據按照設定的數據格式(MSB或LSB)被串行的從MOSI引腳移出。與此同時MISO引腳也會接收到數據,接收到的數據同樣按照相應的格式被串行的移入到移位寄存器,當接收完一幀數據后,移位寄存器將接收到的數據傳送到接收緩沖區中,同時會設置一個接收緩沖區非空(RXNE)的標志位。使用SPI發送和接收數據時并不需要關心數據是怎么發送或者接收到的,只需要檢測相應標志位后向數據寄存器(SPI_DR)寫入要發送的數據或者讀出接收到的數據即可。

TXE標志位被置位僅表示發送緩沖區為空,可以繼續向SPI_DR寫入數據,但并不代表數據發送完成,這一點一定要搞清楚。向發送緩沖區寫入數據會清除TXE標志位,如果TXE=0即發生緩沖區非空時,向SPI_DR中寫入數據會覆蓋發送緩沖區中的數據,但不會影響移位寄存器中的數據。RXNE=1表示接收緩沖區非空,即已經接收到一幀數據。讀SPI_DR寄存器硬件會自動清除RXNE標志位,并返回接收到的數據。當SPI接收到一幀數據時,意味著SPI肯定已經發送完一幀數據,因此判斷一幀數據是否發送完成,可以通過檢測RXNE標志位。如果設置了SPI_CR1寄存器中的TXEIE位或者SPI_CR2寄存器中的RXNEIE位,將產生對應的中斷。本文主要是以查詢方式介紹SPI如何收發數據。

使用查詢方式檢測TXE和RXNE標志位時需要用到SPI標志位檢測函數,如下所示:

SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG);其中SPIx中x為1、2、3,用來選擇SPI外設;SPI_I2S_FLAG為被檢測的標志位,如表6-11所示。

圖片

同時庫函數中也有對應的SPI數據發送和接收函數,分別為:(固件庫手冊中所示的發送和接收函數有誤,實際以本文為準)

SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);//SPI發送函數

SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);//SPI接收函數

SPI使用查詢方式發送和接收數據時,在發送和接收數據之前需要檢測相應標志位,然后再調用庫函數發送或者接收數據,這樣操作雖然方便,但是由于函數相互調用會占用時間,當傳輸數據量較大時會降低SPI整體傳輸效率。為了提高SPI的整體傳輸效率,本文采用寄存器方式操作。另外SPI在接收從機數據時,由于從機自身不產生時鐘信號(SCK),通信時需要主機提供SCK以啟動數據傳輸,因此主機需要通過發送的數據來提供SCK并接收從機的數據,發送的數據并不生效。

以下是配置SPI2為主模式,8位數據格式,CPOL=1,CPHA=1,波特率2分頻,MSB先行,不使用CRC校驗,使用時可根據具體要求進行修改。由于SPI外設掛載了多個從機設備,為了方便移植,初始化SPI時并未設置片選引腳,而是選擇將片選引腳與SPI從設備放在一起配置,具體代碼如下:

圖片

圖片

96.9 SPI讀寫W25Q128

6.9.1 W25Q128****簡介

Flash是一種掉電不丟數據的非易失存儲設備,生活中常見的閃存存儲設備包塊固態硬盤、U盤、SD卡以及單片機內部的存儲設備等。Flash具有存儲空間更大,讀取速率快、可靠性高等特點。本節所要介紹的W25Q128就是Flash的一種,只不過它是以芯片的形式存在。 W25Q128是華邦公司推出的一款SPI接口的NOR Flash芯片,其存儲空間為128Mbit,相當于16M字節。W25Q128可以支持SPI的模式0和模式3,也就是CPOL=0/CPHA=0和CPOL=1/CPHA=1這兩種模式。

往Flash寫入數據時,需要注意以下兩個重要問題:

1、Flash寫入數據時和EEPROM類似,不能跨頁寫入,一次最多寫入一頁,W25Q128的一頁是256字節。寫入數據一旦跨頁,必須在寫滿上一頁的時候,等待Flash將數據從緩存搬移到非易失區,重新再次往里寫。

2、Flash有一個特點,就是可以將1寫成0,但是不能將0寫成1,要想將0寫成1,必須進行擦除操作。因此通常要改寫某部分空間的數據,必須首先進行一定物理存儲空間擦除,最小的擦除空間,通常稱之為扇區,扇區擦除就是將這整個扇區每個字節全部變成0xFF。每款Flash的扇區大小不一定相同,W25Q128的一個扇區是4096字節。為了提高擦除效率,使用不同的擦除指令還可以一次性進行32K(8個扇區)、64K(16個扇區)以及整片擦除。

Kingst-32F1開發板中W25Q128對應的管腳連接關系如圖6-10所示。

圖片

圖6-12 W25Q128電路原理圖及其引腳

6.9.2 W25Q128****讀寫操作

W25Q128內部有一個“SPI Command & Control Logic”,可以通過SPI接口向其發送指令,從而執行相應操作。指令的長度是不定的,有單字節的,也有多字節的,W25Qxx一共具有34個操作指令,在此只列舉常用的12個,具體如表6-13所示。

圖片

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

    關注

    6043

    文章

    44622

    瀏覽量

    638556
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1721

    瀏覽量

    92125
  • EEPROM
    +關注

    關注

    9

    文章

    1033

    瀏覽量

    81953
  • IIC
    IIC
    +關注

    關注

    11

    文章

    302

    瀏覽量

    38504
  • uart通信
    +關注

    關注

    0

    文章

    19

    瀏覽量

    7024
收藏 人收藏

    評論

    相關推薦

    詳解IIC總線

    IIC(Inter-Integrated Circuit)集成電路總線,它是種兩線式串行通信總線,又叫I2C,使用多主從架構,由飛利浦公司
    發表于 06-07 15:38 ?1w次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>詳解<b class='flag-5'>IIC</b><b class='flag-5'>總線</b>

    詳解IIC總線

    IIC(Inter-Integrated Circuit)是個多主從的串行總線,又叫I2C,是由飛利浦公司發明的通訊總線,屬于半雙工同步傳輸類型
    發表于 09-12 11:15 ?2364次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>詳解<b class='flag-5'>IIC</b><b class='flag-5'>總線</b>

    SPI總線學習筆記

    SPI種全雙工的串行通信總線,最早由Motorola提出,雖然應用廣泛,但沒有個統
    發表于 09-20 15:17 ?1174次閱讀
    <b class='flag-5'>SPI</b><b class='flag-5'>總線</b>學習筆記

    IIC總線SPI總線的比較

    現今,在低端數字通信應用領域,我們隨處可見IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。原因是這兩種
    發表于 09-26 09:30 ?2700次閱讀
    <b class='flag-5'>IIC</b><b class='flag-5'>總線</b>和<b class='flag-5'>SPI</b><b class='flag-5'>總線</b>的比較

    IIC總線SPI總線通信詳解

    IIC總線SPI總線通信介紹
    發表于 12-23 07:02

    串行通信中的IIC總線工作原理是什么

    串行通信中的IIC總線工作原理51本身不帶IIC總線 ,使用程序模擬IIC
    發表于 12-08 07:52

    IIC總線接口學習

    在多主設備IIC 總線模式下,多個S3C2440A 微處理器可以從從屬設備接收或發送串行數據。主設備S3C2440A 可以初始化和終止個基
    發表于 04-27 15:31 ?61次下載
    <b class='flag-5'>IIC</b><b class='flag-5'>總線</b>接口學習

    iic總線通信程序

    iic總線通信,要的人速度下載看看哦。
    發表于 03-21 13:50 ?30次下載

    深度解析IICSPI總線協議的區別與應用場景

    IIC vs SPI: 哪位是贏家?我們來對比IICSPI些關鍵點: 第
    的頭像 發表于 12-22 16:48 ?1.9w次閱讀
    深度解析<b class='flag-5'>IIC</b>和<b class='flag-5'>SPI</b><b class='flag-5'>總線</b>協議的區別與應用場景

    解讀IIC總線的FPGA實現原理及過程

    本文首先介紹了IIC總線概念和IIC總線硬件結構,其次介紹了IIC總線典型應用,最后詳細介紹了
    發表于 05-31 10:56 ?6766次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>解讀<b class='flag-5'>IIC</b><b class='flag-5'>總線</b>的FPGA實現原理及過程

    IIC通信總線尋址

    IIC的使用IIC總線簡介IIC通信時序IIC總線
    發表于 12-04 16:06 ?14次下載
    <b class='flag-5'>IIC</b><b class='flag-5'>通信</b><b class='flag-5'>總線</b>尋址

    SPI總線IIC總線通信1

    從應用上來講,UART通信多用于板間通信,比如單片機和計算機,這個設備和另外個設備之間的通信。而IIC
    的頭像 發表于 02-13 10:39 ?2739次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>講</b><b class='flag-5'>透</b><b class='flag-5'>SPI</b><b class='flag-5'>總線</b>和<b class='flag-5'>IIC</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>1

    SPI總線IIC總線通信2

    從應用上來講,UART通信多用于板間通信,比如單片機和計算機,這個設備和另外個設備之間的通信。而IIC
    的頭像 發表于 02-13 10:40 ?2122次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>講</b><b class='flag-5'>透</b><b class='flag-5'>SPI</b><b class='flag-5'>總線</b>和<b class='flag-5'>IIC</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>2

    SPI總線IIC總線通信4

    從應用上來講,UART通信多用于板間通信,比如單片機和計算機,這個設備和另外個設備之間的通信。而IIC
    的頭像 發表于 02-13 10:41 ?1826次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>講</b><b class='flag-5'>透</b><b class='flag-5'>SPI</b><b class='flag-5'>總線</b>和<b class='flag-5'>IIC</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>4

    淺談SPI總線通信接口及其協議

    上篇內容我們介紹了IIC總線通信接口及其協議,這篇文章我們介紹另種項目開發中非常常見的通信
    的頭像 發表于 03-22 16:11 ?1881次閱讀
    淺談<b class='flag-5'>SPI</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>接口及其協議
    聚宝盆百家乐官网的玩法技巧和规则 | 百家乐官网解析| 新彩百家乐的玩法技巧和规则| 蓝山县| 澳门百家乐下注最低| 新星娱乐城| 利赢百家乐现金网| 齐博线上娱乐| 百家乐现金网平台| 在线老虎机| 优博百家乐yobo88| 周宁县| 利都百家乐国际娱乐网| 百家乐官网投注技巧建议| 百家乐双龙| 百家乐官网赢的秘籍在哪| 百家乐免费下| 沁源县| 百家乐百战百胜| 滨海湾百家乐官网娱乐城| 皇马百家乐的玩法技巧和规则 | 最可信百家乐娱乐城| 澳门百家乐官网游戏| 大发888娱乐城登录| 做生意风水方向怎么看| 365在线投注| 百家乐百战百胜| 百家乐官网谁能看准牌| 网上娱乐城注册送彩金| 川宜百家乐分析软件| 百家乐官网庄家胜率| A8百家乐娱乐场| 至尊百家乐官网娱乐场| 棋牌休闲游戏| 百家乐注码投注论坛| 澳门百家乐官网的公式| 大发888非法吗| 百家乐群东方鸿运| 百家乐官网博彩通网| 大发888真钱游戏下载到桌面| 川宜百家乐注册号|