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

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

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

常用串行總線——SPI協(xié)議(上)

jf_78858299 ? 來源:Cascatrix ? 作者:Carson ? 2023-01-21 17:00 ? 次閱讀

01

SPI基礎(chǔ)知識

SPI(Serial Perripheral Interface, 串行外圍設(shè)備接口) 是 Motorola 公司推出的一種同步串行接口技術(shù)。SPI 總線在物理上是通過接在外圍設(shè)備微控制器(PICmicro) 上面的微處理控制單元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模塊(Module)來實現(xiàn)的, 它允許 MCU 以全雙工的同步串行方式, 與各種外圍設(shè)備進行高速數(shù)據(jù)通信

**SPI **主要應用在 EEPROM, Flash, 實時時鐘(RTC), 數(shù)模轉(zhuǎn)換器(ADC), 數(shù)字信號處理器(DSP) 以及數(shù)字信號解碼器之間。它在芯片中只占用四根管腳 (Pin) 用來控制以及數(shù)據(jù)傳輸, 節(jié)約了芯片的 pin 數(shù)目, 同時為 PCB 在布局上節(jié)省了空間。正是出于這種簡單易用的特性, 現(xiàn)在越來越多的芯片上都集成了 SPI技術(shù)。

SPI主要具有以下特點:

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

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

1.2 采用同步方式(Synchronous)傳輸數(shù)據(jù)

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

1.3 數(shù)據(jù)交換(Data Exchanges)

SPI 設(shè)備間的數(shù)據(jù)傳輸之所以又被稱為數(shù)據(jù)交換, 是因為 SPI 協(xié)議規(guī)定一個 SPI 設(shè)備不能在數(shù)據(jù)通信過程中僅僅只充當一個 "發(fā)送者(Transmitter)" 或者 "接收者(Receiver)". 在每個 Clock 周期內(nèi), SPI 設(shè)備都會發(fā)送并接收一個 bit 大小的數(shù)據(jù), 相當于該設(shè)備有一個 bit 大小的數(shù)據(jù)被交換了.一個 Slave 設(shè)備要想能夠接收到 Master 發(fā)過來的控制信號, 必須在此之前能夠被 Master 設(shè)備進行訪問 (Access). 所以, Master 設(shè)備必須首先通過 SS/CS pin 對 Slave 設(shè)備進行片選, 把想要訪問的 Slave 設(shè)備選上.

在數(shù)據(jù)傳輸?shù)倪^程中, 每次接收到的數(shù)據(jù)必須在下一次數(shù)據(jù)傳輸之前被采樣. 如果之前接收到的數(shù)據(jù)沒有被讀取, 那么這些已經(jīng)接收完成的數(shù)據(jù)將有可能會被丟棄, 導致 SPI 物理模塊最終失效. 因此, 在程序中一般都會在 SPI 傳輸完數(shù)據(jù)后, 去讀取 SPI 設(shè)備里的數(shù)據(jù), 即使這些數(shù)據(jù)(Dummy Data)在我們的程序里是無用的.

圖片

02

SPI傳輸協(xié)議

2.1 SPI協(xié)議層相關(guān)組件和接口

圖片

時鐘相關(guān)概念:

CPOL(clock polarity) : 時鐘極性, 表示 SPI 在空閑時, 時鐘信號是高電平還是低電平. 若 CPOL 被設(shè)為 1, 那么該設(shè)備在空閑時 SCK 管腳下的時鐘信號為高電平. 當 CPOL 被設(shè)為 0 時則正好相反;

CPHA(clock phase) : 時鐘相位, 表示 SPI 設(shè)備是在 SCK 管腳上的時鐘信號變?yōu)樯仙貢r觸發(fā)數(shù)據(jù)采樣, 還是在時鐘信號變?yōu)橄陆笛貢r觸發(fā)數(shù)據(jù)采樣. 若 CPHA 被設(shè)置為 1, 則 SPI 設(shè)備在時鐘信號變?yōu)橄陆笛貢r觸發(fā)數(shù)據(jù)采樣, 在上升沿時發(fā)送數(shù)據(jù). 當 CPHA 被設(shè)為 0 時也正好相反.

圖片

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;

Controller : 泛指 SPI 設(shè)備里面的控制寄存器, 可以通過配置它們來設(shè)置 SPI 總線的傳輸模式.

通常情況下, 我們只需要對上圖所描述的四個管腳(pin) 進行控制即可實現(xiàn)整個 SPI 設(shè)備之間的數(shù)據(jù)通信:

SCK(Serial Clock) : 主要的作用是 Master 設(shè)備往 Slave 設(shè)備傳輸時鐘信號, 控制數(shù)據(jù)交換的時機以及速率;

SS/CS(Slave Select/Chip Select) : 用于 Master 設(shè)備片選 Slave 設(shè)備, 使被選中的 Slave 設(shè)備能夠被 Master 設(shè)備所訪問;

SDO/MOSI(Serial Data Output/Master Out Slave In) : 在 Master 上面也被稱為 Tx-Channel, 作為數(shù)據(jù)的出口, 主要用于 SPI 設(shè)備發(fā)送數(shù)據(jù);

SDI/MISO(Serial Data Input/Master In Slave Out) : 在 Master 上面也被稱為 Rx-Channel, 作為數(shù)據(jù)的入口, 主要用于SPI 設(shè)備接收數(shù)據(jù)。

2.2 SPI協(xié)議層傳輸規(guī)則

圖片

當SPI進行數(shù)據(jù)傳輸時,片選信號cs_n置低,數(shù)據(jù)位按照SPI同步時鐘發(fā)送。主設(shè)備發(fā)給從設(shè)備的數(shù)據(jù)沿mosi數(shù)據(jù)線發(fā)送,從設(shè)備同步發(fā)給主設(shè)備的數(shù)據(jù)沿miso數(shù)據(jù)線發(fā)送,主從設(shè)備接收的數(shù)據(jù)依次分別存入主從設(shè)備內(nèi)的FIFO中。

2.3 說明

  1. Timing
    首先, 在這里解釋一下兩個概念:
    CPOL: 時鐘極性, 表示 SPI 在空閑時, 時鐘信號是高電平還是低電平. 若 CPOL 被設(shè)為 1, 那么該設(shè)備在空閑時 SCK 管腳下的時鐘信號為高電平. 當 CPOL 被設(shè)為 0 時則正好相反.
    CPHA: 時鐘相位, 表示 SPI 設(shè)備是在 SCK 管腳上的時鐘信號變?yōu)樯仙貢r觸發(fā)數(shù)據(jù)采樣, 還是在時鐘信號變?yōu)橄陆笛貢r觸發(fā)數(shù)據(jù)采樣. 若 CPHA 被設(shè)置為 1, 則 SPI 設(shè)備在時鐘信號變?yōu)橄陆笛貢r觸發(fā)數(shù)據(jù)采樣, 在上升沿時發(fā)送數(shù)據(jù). 當 CPHA 被設(shè)為 0 時也正好相反.
    例如,SPI 數(shù)據(jù)傳輸模式被設(shè)置成 CPOL = 1, CPHA = 1. 這樣, 在一個 Clock 周期內(nèi), 每個單獨的 SPI 設(shè)備都能以全雙工(Full-Duplex) 的方式, 同時發(fā)送和接收 1 bit 數(shù)據(jù), 即相當于交換了 1 bit 大小的數(shù)據(jù). 如果 SPI 總線的 Channel-Width 被設(shè)置成 Byte, 表示 SPI 總線上每次數(shù)據(jù)傳輸?shù)淖钚挝粸?Byte, 那么掛載在該 SPI 總線的設(shè)備每次數(shù)據(jù)傳輸?shù)倪^程至少需要 8 個 Clock 周期(忽略設(shè)備的物理延遲). 因此, SPI 總線的頻率越快, Clock 周期越短, 則 SPI 設(shè)備間數(shù)據(jù)交換的速率就越快.
  2. 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ù)膯挝?
    例如, 我們想要往 Master 設(shè)備里面的 SSPBUF 寫入 16 Byte 大小的數(shù)據(jù): 首先, 給 Master 設(shè)備的配置寄存器設(shè)置 Bus-Width 為 Byte; 然后往 Master 設(shè)備的 Tx-Data 移位寄存器在地址總線的入口寫入數(shù)據(jù), 每次寫入 1 Byte 大小的數(shù)據(jù)(使用 writeb 函數(shù)); 寫完 1 Byte 數(shù)據(jù)之后, Master 設(shè)備里面的 Tx-Data 移位寄存器會自動把從地址總線傳來的1 Byte 數(shù)據(jù)移入 SSPBUF 里; 上述動作一共需要重復執(zhí)行 16 次.
    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ù)交換頻率要快, 導致 SSPBUF 里面存放的數(shù)據(jù)為無效數(shù)據(jù)這樣的情況.
  3. SSPBUF
    我們知道, 在每個時鐘周期內(nèi), Master 與 Slave 之間交換的數(shù)據(jù)其實都是 SPI 內(nèi)部移位寄存器從 SSPBUF 里面拷貝的. 我們可以通過往 SSPBUF 對應的寄存器 (Tx-Data / Rx-Data register) 里讀寫數(shù)據(jù), 間接地操控 SPI 設(shè)備內(nèi)部的 SSPBUF.
    例如, 在發(fā)送數(shù)據(jù)之前, 我們應該先往 Master 的 Tx-Data 寄存器寫入將要發(fā)送出去的數(shù)據(jù), 這些數(shù)據(jù)會被 Master-SSPSR 移位寄存器根據(jù) Bus-Width 自動移入 Master-SSPBUF 里, 然后這些數(shù)據(jù)又會被 Master-SSPSR 根據(jù) Channel-Width 從 Master-SSPBUF 中移出, 通過 Master-SDO 管腳傳給 Slave-SDI 管腳, Slave-SSPSR 則把從 Slave-SDI 接收到的數(shù)據(jù)移入 Slave-SSPBUF 里. 與此同時, Slave-SSPBUF 里面的數(shù)據(jù)根據(jù)每次接收數(shù)據(jù)的大小(Channel-Width), 通過 Slave-SDO 發(fā)往 Master-SDI, Master-SSPSR 再把從 Master-SDI 接收的數(shù)據(jù)移入 Master-SSPBUF.在單次數(shù)據(jù)傳輸完成之后, 用戶程序可以通過從 Master 設(shè)備的 Rx-Data 寄存器讀取 Master 設(shè)備數(shù)據(jù)交換得到的數(shù)據(jù).
  4. Controller
    Master 設(shè)備里面的 Controller 主要通過時鐘信號(Clock Signal)以及片選信號(Slave Select Signal)來控制 Slave 設(shè)備. Slave 設(shè)備會一直等待, 直到接收到 Master 設(shè)備發(fā)過來的片選信號, 然后根據(jù)時鐘信號來工作.
    Master 設(shè)備的片選操作必須由程序所實現(xiàn). 例如: 由程序把 SS/CS 管腳的時鐘信號拉低電平, 完成 SPI 設(shè)備數(shù)據(jù)通信的前期工作; 當程序想讓 SPI 設(shè)備結(jié)束數(shù)據(jù)通信時, 再把 SS/CS 管腳上的時鐘信號拉高電平.

03

SPI從機配置方式

3.1 常規(guī)多片選模式

圖片

上圖所示系統(tǒng)中,主機需要為每一個從機提供單獨的片選信號,一旦主機使能(拉低)片選信號,MOSI/MISO線上的時鐘和數(shù)據(jù)便可用于所選的從機。如果使能多個片選信號,則MISO線上的數(shù)據(jù)會被破壞,因為主機無法識別哪個從機正在傳輸數(shù)據(jù)。

但是,隨著從機數(shù)量的增加,來自主機的片選線的數(shù)量也增加。這會快速增加主機需要提供的輸入和輸出數(shù)量,并限制可以使用的從機數(shù)量。可以使用其他技術(shù)來增加常規(guī)模式下的從機數(shù)量,例如使用多路復用器產(chǎn)生片選信號。

3.2 菊花鏈模式

圖片

在菊花鏈模式下,所有從機的片選信號連接在一起,數(shù)據(jù)從一個從機傳播到下一個從機。在此配置中,所有從機同時接收同一SPI時鐘。來自主機的數(shù)據(jù)直接送到第一個從機,該從機將數(shù)據(jù)提供給下一個從機,依此類推。

使用該方法時,由于數(shù)據(jù)是從一個從機傳播到下一個從機,所以傳輸數(shù)據(jù)所需的時鐘周期數(shù)與菊花鏈中的從機位置成比例。例如,在上圖所示的8位系統(tǒng)中,為使第3個從機能夠獲得數(shù)據(jù),需要24個時鐘脈沖,而常規(guī)SPI模式下只需8個時鐘脈沖。

時鐘周期和通過菊花鏈的數(shù)據(jù)傳播如下圖所示:

圖片

04

SPI的Verilog實現(xiàn)代碼

4.1 SPI目標實現(xiàn)功能

設(shè)計4線SPI master 模塊和slave 模塊,要求如下:

  1. 主機模塊(master)接口定義:

module spi_master(

input         clk_40k,       //時鐘信號,40kHz

input         rst_n,           //復位信號,低有效

input [7:0] data_in, //主機準備要輸出給從機的數(shù)據(jù),8位寬

input  send_start,       //通信使能信號,高有效,寬度為1個時鐘周期(40kHz),收到該信號后開始一次主從設(shè)備通信

output [7:0]  data_out,   //主機從從機接收到的數(shù)據(jù),8位寬

output  data_out_vld, //輸出數(shù)據(jù)有效標志,高電平有效,寬度為1個時鐘周期(40kHz)

output  cs_n,             //從設(shè)備片選使能信號,低有效,低電平時選中從設(shè)備與主設(shè)備進行通信,處于通信狀態(tài)時維持低電平

output        sclk,          //同步時鐘,1kHz,空閑時置低電平

input         miso,          //主機當前從從機收到的串行數(shù)據(jù)

output        mosi          //主機當前發(fā)送給從機的串行數(shù)據(jù)

);

  1. 從機模塊(slave)接口定義:

module spi_slave(

input        rst_n,        //復位信號,低有效

input        cs_n,         //從設(shè)備片選使能信號

input        sclk,         //SPI時鐘,1kHz空閑時置低電平

input mosi, //從機從主機接收到的串行數(shù)據(jù)

output       miso,       //從機要發(fā)送給主機的串行數(shù)據(jù)

output [7:0]   reg0_out, //內(nèi)部寄存器0的值

output [7:0]   reg1_out, //內(nèi)部寄存器1的值

output [7:0]   reg2_out, //內(nèi)部寄存器2的值

output [7:0]   reg3_out  //內(nèi)部寄存器3的值

);

  1. 電路功能描述:

Slave模塊中有四個八位內(nèi)部寄存器(reg0、reg1、reg2、reg3),地址分別為 0~3,master模塊通過SPI總線配置slave模塊中四個寄存器的值,slave寄存器的值直接通過其端口輸出。Master模塊收到send_start信號之后,將數(shù)據(jù)data_in通過spi總線發(fā)送到slave模塊的reg0,然后將data_in循環(huán)右移兩位后發(fā)送到slave模塊的reg1,然后再將data_in循環(huán)右移兩位發(fā)送到reg2,最后將data_in再循環(huán)右移兩位發(fā)送到reg3。至此,master完成對slave中所有寄存器的配置。然后master再通過spi總線將slave中reg2的數(shù)據(jù)讀出來,通過data_out輸出,并同時給出一個周期寬度的data_out_vld。

  1. SPI傳輸格式:

SPI每幀數(shù)據(jù)包含16位,最先發(fā)送的第0位為讀寫控制位,該位為0代表master向slave寫數(shù)據(jù),為1則代表master從slave讀數(shù)據(jù);隨后發(fā)送的第1-7位為地址位,先發(fā)高位地址再發(fā)低位地址,9-16位為數(shù)據(jù)位,高位數(shù)據(jù)先發(fā)。所有數(shù)據(jù)均在sclk的上升沿產(chǎn)生,下降沿采樣。

SPI寫數(shù)據(jù)格式如圖所示:

圖片

SPI讀數(shù)據(jù)格式如圖所示:

圖片

4.2 Verilog代碼

1. 主模塊(SPI_master):

module spi_master(

input         clk_40k,     

input         rst_n,        

input  [7:0]  data_in,      

input         send_start,  



output [7:0]  data_out,     

output        data_out_vld,

output        cs_n,

output        sclk,         



input         miso,       

output        mosi

);

reg cs_n_r;

reg sclk_r;

reg mosi_r;

reg data_out_vld_r;

reg [7:0] data_out_r;

reg wr_rd;

reg [1:0] reg_num;

reg [6:0] clk_cnt;

reg [3:0] bit_cnt;

reg [7:0] rx_data;

reg [15:0] tx_data;

parameter reg0 = 2'd0;

parameter reg1 = 2'd1;

parameter reg2 = 2'd2;

parameter reg3 = 2'd3;

parameter reg0_address = 7'b0000000; //address of reg0

parameter reg1_address = 7'b0000001; //address of reg1

parameter reg2_address = 7'b0000010; //address of reg2

parameter reg3_address = 7'b0000011; //address of reg3

//cs_n

assign cs_n = cs_n_r;

always @ (posedge clk_40k or negedge rst_n)

begin

if(~rst_n)

cs_n_r <= 1'b1;

else if(send_start)

cs_n_r <= 1'b0;

else if(data_out_vld_r)

cs_n_r <= 1'b1;

end

//clk_cnt

always @ (posedge clk_40k or negedge rst_n)

begin

if(~rst_n)

clk_cnt <= 7'b0;

else if(cs_n_r)

clk_cnt <= 7'b0;

else if(clk_cnt == 7'd39)

clk_cnt <= 7'b0;

else

clk_cnt <= clk_cnt + 1'b1;

end

//bit_cnt

always @ (posedge clk_40k or negedge rst_n)

begin

if(~rst_n)

bit_cnt <= 4'b0;

else if(clk_cnt == 7'd39)

bit_cnt <= bit_cnt + 1'b1;

end

//sclk

assign sclk = sclk_r;

always @ (posedge clk_40k or negedge rst_n)

begin

if(~rst_n)

sclk_r <= 1'b0;

else if(clk_cnt == 7'd19 || clk_cnt == 7'd39)

sclk_r <= ~sclk_r;

end

//wr_rd

always @ (posedge clk_40k or negedge rst_n)

begin

if(~rst_n)

    wr_rd <= 1'b0;

else if(cs_n_r)

    wr_rd <= 1'b0;

else if(reg_num == reg3 && bit_cnt == 4'd15 && clk_cnt == 7'd39)

    wr_rd <= 1'b1;

end

//send

//reg_num

always @ (posedge clk_40k or negedge rst_n)

begin

if(~rst_n)

    reg_num <= reg0;

else if(cs_n_r)

    reg_num <= reg0;

else if(bit_cnt == 4'd15 && clk_cnt == 7'd39)

case(reg_num)

    reg0:reg_num <= reg1;

    reg1:reg_num <= reg2;

    reg2:reg_num <= reg3;

    reg3:reg_num <= reg0;

endcase

end

//tx_data

always @ (posedge sclk_r or negedge rst_n)

begin

if(~rst_n)

    tx_data <= 16'b0;

else if(wr_rd && bit_cnt == 4'd0)

    tx_data <= {1'b1,reg2_address,8'b0};

else if(~wr_rd && bit_cnt == 4'd0)

case(reg_num)

    reg0:tx_data <= {1'b0,reg0_address,data_in};

    reg1:tx_data <= {1'b0,reg1_address,data_in[1:0],data_in[7:2]};

    reg2:tx_data <= {1'b0,reg2_address,data_in[3:0],data_in[7:4]};

    reg3:tx_data <= {1'b0,reg3_address,data_in[5:0],data_in[7:6]};

endcase

else

    tx_data <= {tx_data[14:0],tx_data[15]};

end

//mosi

assign mosi = tx_data[15];

//recieve

//rx_data

always @ (posedge sclk_r or negedge rst_n)

begin

if(~rst_n)

    rx_data <= 8'b0;

else if(wr_rd)

    rx_data <= {rx_data[6:0],miso};

end

//data_out_vld

assign data_out_vld = data_out_vld_r;

always @ (posedge clk_40k or negedge rst_n)

begin

if(~rst_n)

    data_out_vld_r <= 1'b0;

else if(wr_rd && bit_cnt == 4'd15 && clk_cnt == 7'd39)

    data_out_vld_r <= 1'b1;

else

    data_out_vld_r <= 1'b0;

end

//data_out

assign data_out = data_out_r;

always @ (posedge clk_40k or negedge rst_n)

begin

if(~rst_n)

    data_out_r <= 8'b0;

else if(wr_rd && bit_cnt == 4'd15 && clk_cnt == 7'd39)

    data_out_r <= rx_data;

end

endmodule

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

    關(guān)注

    146

    文章

    16665

    瀏覽量

    347752
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1666

    瀏覽量

    90718
  • 串行端口
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    11590
收藏 人收藏

    評論

    相關(guān)推薦

    常用的串口通信協(xié)議SPI協(xié)議簡析

    SPI(serial peripheral interface)也是一種同步串行通信協(xié)議。這里為啥要說“也”呢,回想上一篇介紹的PS/2不也是同步串行通信
    發(fā)表于 07-07 09:33 ?4041次閱讀

    常用串行總線協(xié)議有哪些

    一、常用串行總線協(xié)議目前常用的微機與外設(shè)之間進行數(shù)據(jù)傳輸?shù)?b class='flag-5'>串行
    發(fā)表于 11-03 07:14

    SPI總線協(xié)議介紹及硬件設(shè)計資料分享

    typora-copy-images-to: typora_picture基于FPGA與MCU通信的SPI協(xié)議設(shè)計1. SPI總線協(xié)議介紹及
    發(fā)表于 11-10 07:06

    常用串行總線協(xié)議有哪些

    常用串行總線協(xié)議I2C總線、SPI總線、SCI
    發(fā)表于 11-19 06:46

    SPI總線協(xié)議簡介

    1. SPI簡介SPI,是英語Serial Peripheral interface(串行外圍接口)的縮寫,顧名思義就是串行外圍設(shè)備接口協(xié)議
    發(fā)表于 12-13 07:37

    常用串行擴展總線有哪些呢

    常用串行擴展總線有:I2C總線,SPI總線,單總線
    發(fā)表于 01-11 08:15

    SPI協(xié)議的作用介紹

    目錄SPI協(xié)議簡介SPI物理層SPI協(xié)議SPI協(xié)議
    發(fā)表于 02-17 07:02

    SPI、I2C、UART三種串行總線協(xié)議的區(qū)別

    SPI、I2C、UART三種串行總線協(xié)議的區(qū)別
    發(fā)表于 07-17 17:23 ?0次下載

    一文介紹SPI串行總線

    SPI協(xié)議是由摩托羅拉公司提出的通訊協(xié)議(SerialPeripheralInterface),即串行外圍設(shè)備接口,是一種高速全雙工的通信總線
    發(fā)表于 07-16 17:58 ?2851次閱讀
    一文介紹<b class='flag-5'>SPI</b><b class='flag-5'>串行</b><b class='flag-5'>總線</b>

    基于SPI串行總線接口的Verilog實現(xiàn)

    簡 介: 集成電路設(shè)計越來越向系統(tǒng)級的方向發(fā)展,并且越來越強調(diào)模塊化的設(shè)計。SPI(Serial Peripheral Bus)總線是Motorola公司提出的一個同步串行外設(shè)接口,容許CPU
    的頭像 發(fā)表于 05-29 10:16 ?4913次閱讀
    基于<b class='flag-5'>SPI</b><b class='flag-5'>串行</b><b class='flag-5'>總線</b>接口的Verilog實現(xiàn)

    基于FPGA與MCU通信的SPI協(xié)議設(shè)計

    typora-copy-images-to: typora_picture基于FPGA與MCU通信的SPI協(xié)議設(shè)計1. SPI總線協(xié)議介紹及
    發(fā)表于 11-05 15:35 ?14次下載
    基于FPGA與MCU通信的<b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>設(shè)計

    SPI協(xié)議

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

    FPGA實現(xiàn)的SPI協(xié)議(一)----SPI驅(qū)動

    1、什么是SPI協(xié)議SPI(Serial Peripheral Interface,串行外圍設(shè)備接口)通訊協(xié)議,是 Motorola 公司提
    發(fā)表于 12-22 19:29 ?19次下載
    FPGA實現(xiàn)的<b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>(一)----<b class='flag-5'>SPI</b>驅(qū)動

    常用串行總線(二)——SPI協(xié)議(Verilog實現(xiàn))

    SPI(Serial Perripheral Interface, 串行外圍設(shè)備接口)是 Motorola 公司推出的一種同步串行接口技術(shù)。SPI
    的頭像 發(fā)表于 01-06 14:35 ?7248次閱讀

    常用串行總線——SPI協(xié)議(下)

    SPI(Serial Perripheral Interface, 串行外圍設(shè)備接口)** 是 Motorola 公司推出的一種同步串行接口技術(shù)。SPI
    的頭像 發(fā)表于 01-21 17:03 ?880次閱讀
    <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'>協(xié)議</b>(下)