在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

jf_78858299 ? 來源: Cascatrix ? 作者:Carson ? 2023-01-21 17:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

2. 從模塊(SPI_slave):

module spi_slave(

input           rst_n,

input           cs_n,

input           sclk,

input           mosi,



output          miso,

output [7:0]    reg0_out,

output [7:0]    reg1_out,

output [7:0]    reg2_out,

output [7:0]    reg3_out

);

reg miso_r;

reg [7:0] reg1_out_r;

reg [7:0] reg2_out_r;

reg [7:0] reg3_out_r;

reg [7:0] reg0_out_r;

reg start;

reg wr_rd;

reg [3:0] bit_cnt;

reg [6:0] reg_addr;

reg [7:0] reg_data;

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

//start

always @ (posedge sclk or negedge rst_n)

begin

if(~rst_n)

start <= 1'b0;

else

start <= 1'b1;

end

//bit_cnt

always @ (posedge sclk or negedge rst_n)

begin

if(~rst_n)

bit_cnt <= 4'b0;

else if(start)

bit_cnt <= bit_cnt + 1'b1;

end

//wr_rd

always @ (posedge sclk or negedge rst_n)

begin

if(~rst_n)

wr_rd <= 1'b0;

else if(bit_cnt == 4'b0 && mosi == 1'b0)

wr_rd <= 1'b0;

else if(bit_cnt == 4'b0 && mosi == 1'b1)

wr_rd <= 1'b1;

end

//reg_addr

always @ (negedge sclk or negedge rst_n)

begin

if(~rst_n)

reg_addr <= 7'b0;

else if(bit_cnt >= 4'd1 && bit_cnt <= 4'd7)

reg_addr <= {reg_addr[5:0],mosi};

end

//reg_data

always @ (posedge sclk or negedge rst_n)

begin

if(~rst_n)

reg_data <= 8'b0;

else if(!wr_rd && bit_cnt >= 4'd7)

reg_data <= {reg_data[6:0],mosi};

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

reg_data <= reg2_out_r;

else if(wr_rd && bit_cnt >= 4'd7)

reg_data <= {reg_data[6:0],reg_data[7]};

end

//reg_out

assign reg0_out = reg0_out_r;

assign reg1_out = reg1_out_r;

assign reg2_out = reg2_out_r;

assign reg3_out = reg3_out_r;

always @ (negedge sclk or negedge rst_n)

begin

if(~rst_n)

begin

reg0_out_r <= 8'b0;

reg1_out_r <= 8'b0;

reg2_out_r <= 8'b0;

reg3_out_r <= 8'b0;

end

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

case(reg_addr)

reg0_address: reg0_out_r <= reg_data;

reg1_address: reg1_out_r <= reg_data;

reg2_address: reg2_out_r <= reg_data;

reg3_address: reg3_out_r <= reg_data;

endcase

end

//miso

assign miso = miso_r;

always @ (negedge sclk or posedge rst_n)

begin

if(~rst_n)

miso_r <= 1'b0;

else if(wr_rd && bit_cnt >= 4'd7)

miso_r <= reg_data[7];

end

endmodule

3. Testbench(tb):

`timescale 1us/1us

module tb();

regclk_40k;

regrst_n;

reg [7:0] data_in;

regsend_start;

wiresclk;

wirecs_n;

wiremosi;

wiremiso;

wire [7:0] data_out;

wire data_out_vld;

wire [7:0] reg0_out;

wire [7:0] reg1_out;

wire [7:0] reg2_out;

wire [7:0] reg3_out;

spi_master i_spi_master(

.clk_40k          (clk_40k),     

.rst_n              (rst_n),

.data_in          (data_in),

.send_start     (send_start),

.sclk               (sclk),

.cs_n              (cs_n),

.mosi              (mosi),

.miso              (miso),

.data_out        (data_out),  

.data_out_vld (data_out_vld)

);

spi_slave i_spi_slave(

.rst_n            (rst_n),       

.cs_n             (cs_n),

.sclk             (sclk),        

.mosi            (mosi),      

.miso            (miso),      

.reg0_out      (reg0_out), 

.reg1_out      (reg1_out), 

.reg2_out      (reg2_out), 

.reg3_out      (reg3_out)

);

initial

begin

rst_n = 1'b0;

#10rst_n = 1'b1;

end

initial

begin

clk_40k = 1'b0;

forever

#1clk_40k = ~clk_40k;

end

initial

begin

send_start = 1'b0;

data_in = 8'd0;

forever

begin

    #200;

    data_in = $random()%256;

    send_start = 1'b1;

    #2

    send_start = 1'b0;

    #8000;

end

end

endmodule

4. 仿真結(jié)果:

按照testbench對SPI主從設(shè)備進行仿真,仿真結(jié)果如圖:

圖片

  1. 系統(tǒng)時鐘和SPI時鐘不一致,clk_40k為高頻系統(tǒng)時鐘,利用計數(shù)器分頻實現(xiàn)1k波特率SPI時鐘;
  2. 復(fù)位信號rst_n低電平有效,正常傳輸時始終處于高電平;
  3. 開始傳輸時send_start信號拉高,傳輸結(jié)束時data_out_vld信號拉高;
  4. SPI主設(shè)備將輸入數(shù)據(jù)data_in并行轉(zhuǎn)mosi串行輸出,SPI從設(shè)備將接收到的串行存入數(shù)據(jù),將移位后的數(shù)據(jù)data_out并行轉(zhuǎn)miso串行輸出。

05

SPI的優(yōu)缺點

5.1 SPI協(xié)議優(yōu)點

  1. 全雙工同步串行通信
  2. 允許數(shù)據(jù)逐位傳遞;
  3. 允許數(shù)據(jù)傳輸暫停;
  4. 硬件結(jié)構(gòu)簡單,不需要精密時鐘;
  5. 從機不需要唯一地址,也不需要收發(fā)器

5.1 SPI協(xié)議缺點

  1. 需要4個引腳接口
  2. 支持傳輸距離較短;
  3. 硬件層面沒有定義校錯協(xié)議和從機應(yīng)答信號。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17918

    瀏覽量

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

    關(guān)注

    17

    文章

    1791

    瀏覽量

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

    關(guān)注

    0

    文章

    35

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

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

    常用串行總線協(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

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

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

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

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

    介紹一SPI協(xié)議

    硬件接口協(xié)議在芯片是被廣泛使用的,上篇博文詳細介紹了I2C協(xié)議,這次來介紹一spi協(xié)議。一、SPI
    發(fā)表于 02-17 07:44

    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 ?3193次閱讀
    一文介紹<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 ?5431次閱讀
    基于<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 ?16次下載
    基于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 ?34次下載
    <b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>

    spi協(xié)議介紹

    硬件接口協(xié)議在芯片是被廣泛使用的,上篇博文詳細介紹了I2C協(xié)議,這次來介紹一spi協(xié)議。一、SPI
    發(fā)表于 12-22 19:21 ?19次下載
    <b class='flag-5'>spi</b><b class='flag-5'>協(xié)議</b>介紹

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

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

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

    SPI(Serial Perripheral Interface, 串行外圍設(shè)備接口)** 是 Motorola 公司推出的一種同步串行接口技術(shù)。SPI
    的頭像 發(fā)表于 01-21 17:00 ?1731次閱讀
    <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>(上)
    主站蜘蛛池模板: 美日毛片 | 美女被免费视频网站九色 | 一区二区三区网站 | 五月天婷婷伊人 | 超级乱淫视频播放日韩 | 国模精品视频 | 久久都是精品 | 婷婷亚洲综合一区二区 | 美女性视频网站 | 久久久鲁| 就去色播 | 亚洲第一视频区 | 一区二区免费在线观看 | 凸输偷窥xxxx自由视频 | 欧美黄一片 | 日韩福利一区 | 夜夜春夜夜夜夜猛噜噜噜噜噜 | 免费又爽又黄禁片视频在线播放 | 久久久这里有精品999 | 久久精品30 | 亚洲一区欧美日韩 | 五月婷婷激情综合 | 久久久久免费精品国产小说 | 老师啊灬啊灬用力啊快224视频 | 久久在精品线影院精品国产 | 手机在线电影你懂的 | 韩国理论片2023现在观看 | 性日韩| av成人在线播放 | 高h办公室 | 日b毛片 | 日本亚洲精品色婷婷在线影院 | 亚洲精品福利你懂 | 亚洲一卡二卡三卡 | 视频在线免费观看 | 国产亚洲卡二卡3卡4卡乱码 | 国产亚洲一区二区精品 | 一区二区三区四区在线观看视频 | 男人呻吟双腿大开男男h互攻 | 五月婷婷六月丁香综合 | 午夜影视在线 |