女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

FPGA外接FT232H配置FIFO實現USB通信回環測試

FPGA設計論壇 ? 來源:CSDN技術社區 ? 2025-07-17 11:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

USB英文全稱 Universal Serial Bus,即通用串行總線,是一個外部總線標準,用于規范電腦與外部設備的連接和通訊。

FTDI 公司的USB2.0 芯片FT232H 進行USB 通信

FH232H芯片在內部不僅完成了USB 硬件接口差分電平轉換,還封裝了USB 的相關協議,留出數據交互接口

FH232H可以默認配置為UART模式,還可配置為JTAG,FIFO,IIC,SPI,本次將其配置為FIFO進行實驗。

作為FPGA開發者只需要關注數據交互接口的時序即可實現USB功能。

cbbc27b8-613f-11f0-baa5-92fbcf53809c.png

MPSSE/Multi_purpose UART/FIFO controler:該模塊為多功能UART/FIFO 控制器,它集成了面向用戶的IO,直接負責與用戶端(FPGA)進行數據交互。當把FT232H 配置成不同的模式時,管腳會有不同的含義

cbd3c1e8-613f-11f0-baa5-92fbcf53809c.png

(I/O是對于FT232H來說)

ADBUS[7:0]: (I/O) 數據端口,雙向IO接口(讀寫不能同時發生)

RD: (IN) FT232H中的數據輸出使能,由FPGA發送給FT232H,低電平有效

WR: (IN) FT232H中的數據輸入使能,由FPGA發送給FT232H,低電平有效

RXF: (OUT) FT232H中的FIFO數據可讀標志位,低電平有效

TXE: (OUT) FT232H中的FIFO數據可寫標志位,低電平有效

OE: (IN) FT232H中的數據輸出,低電平有效

CLKOUT: (OUT) 60MHz時鐘信號,由FT232H產生并傳遞給FPGA作為本次實驗主時鐘

SIWU: (OUT) FT232H中的數據立即發送使能,低電平有效

cc5e4a20-613f-11f0-baa5-92fbcf53809c.png

讀時序:232拉低RXF表示有數據可讀 > FPGA拉低OE使能輸出 > 等待數據有效 > FPGA拉低RD > 有效數據 > 232拉高RXF > 讀空 > FPGA需要同時拉高RD和OE

寫時序:232中FIFO未滿 > 232拉低TXE > FPGA拉低WR > 向232寫入數據 > 232拉高TXE > 寫滿

硬件設計:參考https://github.com/WangXuan95/FPGA-ftdi245fifo,正點原子達芬奇Pro

cc77897c-613f-11f0-baa5-92fbcf53809c.png

連接好硬件后進行FT232H模式修改:

在官網下載ft_prog

安裝后運行,去掉其他FT器件,按如圖所示操作

cc8fcece-613f-11f0-baa5-92fbcf53809c.png

編寫代碼實現回環(參考正點原子源碼)

配置管腳,按硬件連接配置管腳

cca801f6-613f-11f0-baa5-92fbcf53809c.png

xilinx vivado FIFO IP核配置:

ccbc3c20-613f-11f0-baa5-92fbcf53809c.png

cccaf08a-613f-11f0-baa5-92fbcf53809c.png

頂層模塊

moduleusb_loopback (  input    usb_clk_60m, //FT232輸出的60M時鐘input    sys_rst_n,  //系統復位 ,低電平input    usb_rxf_n,  //FT232H中FIFO數據的可讀標input    usb_txe_n,  //FT232H中FIFO數據的可寫標output   usb_oe_n,  //FT232H數據輸出使能output   usb_rd_n,  //FT232H讀使能信號output   usb_wr_n,  //FT232H寫使能信號output   usb_siwu_n, //send immediate/wake upoutput   c7, //send immediate/wake upinout [7:0] usb_data   //FT232H雙向數據總線);  //wire definewire[7:0] fifo_data_in; //從FT232進到FPGA的數據wire[7:0] fifo_data_out; //從FPGA輸出到FT232的數據wire   wr_en; //FPGA FIFO寫使能wire   rd_en; //FPGA FIFO讀使能wire   full; //FPGA FIFO寫滿信號wire   empty; //FPGA FIFO讀空信號//*****************************************************//** main code//*****************************************************assignusb_siwu_n =1'b1; //立即發送,喚醒assignc7 =1'b1; //立即發送,喚醒//USB 同步FIFO讀寫  usb_rw u_usb_rw (    .usb_clk_60m(usb_clk_60m),    .rst_n   (sys_rst_n),    .usb_rxf_n (usb_rxf_n),    .usb_txe_n (usb_txe_n),    .usb_oe_n (usb_oe_n),    .usb_rd_n (usb_rd_n),    .usb_wr_n (usb_wr_n),    .fifo_wr_en(wr_en),    .fifo_rd_en(rd_en),    .empty   (empty),    .usb_data (usb_data),    .fifo_data_in(fifo_data_in),    .fifo_data_out(fifo_data_out)   );  //FPGA FIFO調用  fifo_generator_0 u_fifo_generator_0 (    .clk (usb_clk_60m),  // input wire clk.srst(1'b0),     // input wire srst.din (fifo_data_in), // input wire [7 : 0] din.wr_en(wr_en),     // input wire wr_en.rd_en(rd_en),     // input wire rd_en.dout(fifo_data_out), // output wire [7 : 0] dout.full(full),     // output wire full.empty(empty)     // output wire empty  );  // ila_0 u_ila_0 (// .clk(usb_clk_60m), // input wire clk// .probe0(fifo_data_out), // input wire [7:0] probe0 // .probe1(fifo_data_in), // input wire [7:0] probe1// .probe2({usb_rxf_n,usb_txe_n,usb_oe_n,usb_rd_n,usb_wr_n}), // input wire [7:0] probe2// .probe3(0) // input wire [7:0] probe3// );endmodule

USB模塊:

moduleusb_rw (  input      usb_clk_60m, //FT232 輸出的60M 時鐘input      rst_n,    //系統復位 ,低電平//FT232Hinput      usb_rxf_n,  //FT232H 中FIFO 數據的可讀標志input      usb_txe_n,  //FT232H 中FIFO 數據的可寫標志outputreg   usb_oe_n,  //FT232H 數據輸出使能outputreg   usb_rd_n,  //FT232H 讀使能信號outputreg   usb_wr_n,  //FT232H 寫使能信號inout   [7:0] usb_data,  //FT232H 雙向數據總線//FPGA FIFOoutputreg   fifo_wr_en,  //FPGA FIFO寫使能outputreg   fifo_rd_en,  //FPGA FIFO讀使能input      empty,     //FPGA FIFO讀空信號input   [7:0] fifo_data_out, //FPGA FIFO中讀出的數據outputreg[7:0] fifo_data_in  //寫入FPGA FIFO的數據);  // localparam definelocalparamIDLE =4'b001; //FT232H 空閑localparamREAD =4'b010; //FT232H 讀狀態,此時數據從FT232H發送到FPGAlocalparamWRITE =4'b100; //FT232H 寫狀態,此時數據從FPGA發送到FT232H//reg definereg[2:0] cur_state; //讀寫現狀態reg[2:0] next_state; //讀寫次狀態reg   usb_oe_n_d1; //usb_oe_n下一拍//*****************************************************//** main code//*****************************************************//在FT232H寫狀態,將FIFO的數據輸出賦值給將USB數據總線,其他時候為高阻態assignusb_data = (next_state == WRITE) ? fifo_data_out :8'hzz;  //產生FT232H數據輸出使能usb_oe_nalways@(posedgeusb_clk_60mornegedgerst_n)beginif(!rst_n) usb_oe_n <=?1'b1; ? ? ? ?elseif?(!usb_rxf_n) usb_oe_n <=?1'b0; ? ? ? ?else?usb_oe_n <=?1'b1; ? ?end//FT232H數據輸出使能usb_oe_n打一拍always?@(posedge?usb_clk_60m?ornegedge?rst_n)?beginif?(!rst_n) usb_oe_n_d1 <=?1'b1; ? ? ? ?else?usb_oe_n_d1 <= usb_oe_n; ? ?end//狀態跳轉always?@(posedge?usb_clk_60m?ornegedge?rst_n)?beginif?(!rst_n) cur_state <= IDLE; ? ? ? ?else?cur_state <= next_state; ? ?end//讀寫狀態跳轉條件always?@(*)?begincase?(cur_state) ? ? ? ? ? ? IDLE:?beginif?(usb_rxf_n ==?1'b0) ?//usb_rxf_n拉低,,ft232中數據可讀,下一時鐘進入去讀FT232H數據? ? ? ? ? ? ? ? ? ? ?next_state <= READ; ?//usb_txe_n拉低且FPGA FIFO不空進入FT232H寫elseif?((usb_txe_n ==?1'b0) && (empty ==?1'b0)) next_state <= WRITE;//ft232可寫且本地fifo不為空else?next_state <= IDLE; ? ? ? ? ? ?end? ? ? ? ? ? ?READ:?begin//usb_rxf_n拉高,ft232數據讀空,從FT232H讀回到空閑狀態if?((usb_oe_n_d1 ==?1'b1) && (usb_rxf_n ==?1'b1)) next_state <= IDLE; ? ? ? ? ? ? ? ?else?next_state <= READ; ? ? ? ? ? ?end? ? ? ? ? ? ?WRITE:?begin//usb_txe_n拉高或者FPGA FIFO被讀空,回到空閑狀態if?((usb_txe_n ==?1'b1) || (empty ==?1'b1)) next_state <= IDLE; ? ? ? ? ? ? ? ?else?next_state <= WRITE; ? ? ? ? ? ?enddefault: next_state <= IDLE; ? ? ? ?endcaseend//狀態賦值always?@(*)?begincase?(next_state) ? ? ? ? ? ? IDLE:?begin? ? ? ? ? ? ? ? ?fifo_data_in <=?8'hzz; ? ? ? ? ? ? ? ? usb_rd_n <=?1'b1; ? ? ? ? ? ? ? ? usb_wr_n <=?1'b1; ? ? ? ? ? ? ? ? fifo_wr_en <=?1'b0; ? ? ? ? ? ? ? ? fifo_rd_en <=?1'b0; ? ? ? ? ? ?end//讀狀態時,將usb數據賦值給fifo_data_in? ? ? ? ? ? ?READ:?begin? ? ? ? ? ? ? ? ?fifo_data_in <= usb_data; ? ? ? ? ? ? ? ? usb_wr_n <=?1'b1; ? ? ? ? ? ? ? ? fifo_rd_en <=?1'b0; ? ? ? ? ? ? ? ?//在usb_oe_n為低且在usb_oe_n下一拍也為低時拉低usb_rd_n,其他時候為高if?((usb_oe_n_d1 ==?0) && (usb_oe_n ==?0)) usb_rd_n <=?1'b0;//拉低讀取標志位,開始讀取ft232數據else?usb_rd_n <=?1'b1; ? ? ? ? ? ? ? ?//在usb_oe_n下一拍為低,且usb_rxf_n也為低時使能FIFO寫if?((usb_oe_n_d1 ==?0) && (usb_rxf_n ==?0)) fifo_wr_en <=?1'b1;//使能本地fifo寫入數據else?fifo_wr_en <=?1'b0; ? ? ? ? ? ?end//寫狀態時,使能fifo_rd_en和usb_wr_n? ? ? ? ? ? ?WRITE:?begin? ? ? ? ? ? ? ? ?fifo_data_in <=?8'hzz; ? ? ? ? ? ? ? ? usb_rd_n <=?1'b1; ? ? ? ? ? ? ? ? fifo_wr_en <=?1'b0; ? ? ? ? ? ? ? ? usb_wr_n <=?1'b0; ? ? ? ? ? ? ? ? fifo_rd_en <=?1'b1; ? ? ? ? ? ?enddefault:?begin? ? ? ? ? ? ? ? ?fifo_data_in <=?8'hzz; ? ? ? ? ? ? ? ? usb_rd_n <=?1'b1; ? ? ? ? ? ? ? ? usb_wr_n <=?1'b1; ? ? ? ? ? ? ? ? ?fifo_wr_en <=?1'b0; ? ? ? ? ? ? ? ? fifo_rd_en <=?1'b0; ? ? ? ? ? ?endendcaseendendmodule

下載完成后斷開下載線,只保留USB連接線,使用串口助手 ATK-FUSB測試:

ccd97a2e-613f-11f0-baa5-92fbcf53809c.png

cce3fc74-613f-11f0-baa5-92fbcf53809c.png

成功的話會在接收窗口看到同樣的數據返回。

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

    關注

    1645

    文章

    22049

    瀏覽量

    618347
  • 接口
    +關注

    關注

    33

    文章

    9001

    瀏覽量

    153725
  • usb
    usb
    +關注

    關注

    60

    文章

    8184

    瀏覽量

    272849
  • fifo
    +關注

    關注

    3

    文章

    402

    瀏覽量

    44808
  • 串行總線
    +關注

    關注

    1

    文章

    186

    瀏覽量

    31112

原文標題:FPGA外接FT232H配置FIFO實現USB通信回環測試

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【紫光同創國產FPGA教程】【第二十八章】USB雙向測速例程

    如何使用FTDI公司的FT232H驅動芯片進行USB數據傳輸,文中從底層FPGA、驅動層固件(FT232H固件)及上位機測試軟件設計方面闡述
    的頭像 發表于 04-09 10:46 ?2.3w次閱讀
    【紫光同創國產<b class='flag-5'>FPGA</b>教程】【第二十八章】<b class='flag-5'>USB</b>雙向測速例程

    完美高性能USB解決方案1

    R, FT232H, FT230X, FT231XUSB 轉 FIFOFT245B, FT2
    發表于 03-29 11:43

    UM232H-B是FT232H高速到串行/并行接口轉換器的開發模塊

    UM232H-B-01,用于FT232H單通道USB至串行/并行接口分線板的開發模塊,帶有母頭。 UM232H-B是FT232H高速到串行/
    發表于 04-04 11:42

    FT232H單通道USB至串行/并行接口分線板開發模塊UM232H-B-WE

    UM232H-B-WE,用于FT232H單通道USB至串行/并行接口分線板的開發模塊,帶有6條懸空引線,連接到信號焊盤。 UM232H-B是FT23
    發表于 04-08 11:03

    用于FT232H單通道USB至串行/并行接口分線板的開發模塊UM232H-B-NC

    UM232H-B-NC,用于FT232H單通道USB至串行/并行接口分線板的開發模塊,僅帶焊盤。 UM232H-B是FT232H高速到串行/
    發表于 04-09 09:20

    采用FT245BM和FPGA實現USB接口設計

    USB協議芯片FT245BM,實現FPGA與PC機的USB通信,該方法不用微控制器,減少了元器
    發表于 04-22 07:00

    采用FT245BM和FPGA實現USB接口設計

    USB協議芯片FT245BM,實現FPGA與PC機的USB通信,該方法不用微控制器,減少了元器
    發表于 04-26 07:00

    PIC32MX與FTDI FT232H接口如何同步并行

    有可能將PIC32MX(目前我有一個運行@50Mhz)與FTDI FT232H接口。同步FIFO-并行(高達40MB/s)在這種模式下,FT232H輸出一個60Mhz的時鐘,這樣對于我所有
    發表于 04-29 07:16

    USB2.0高速至MPSSE SPI模塊VA800A-SPI是一個小型電子電路板

    -AN_。該模塊由十個母管接頭端接,母管接頭可與一個母管接頭連接。引腳信號在3.3伏時符合CMOS邏輯。FT232H是一個單通道USB 2.0高速(480Mb/s)到UART/FIFO IC。它可
    發表于 10-14 16:55

    基于FT2232HUSB-RS232轉換模塊設計

    鑒于大量外圍設備和軟件使用RS232串口標準,為了充分利用USB的傳輸速度快,連接簡單快捷,即插即用等優勢,給出一種采用第5代USB-to-UART-FIFO器件FT2232H設計
    發表于 12-27 10:05 ?200次下載

    微雪電子FT245USBFIFO介紹

    FT245 USBFIFO模塊 USB mini接口 支持3種供電模式 提供USB驅動 電路原理圖 型號
    的頭像 發表于 12-30 11:26 ?5546次閱讀
    微雪電子<b class='flag-5'>FT245USB</b>轉<b class='flag-5'>FIFO</b>介紹

    FT2232H USB串口芯片國產替代DP2232H

    FT2232H -高速雙 USB UART/FIFO IC FT2232H是FTDI的第5代USB設備芯片。
    發表于 12-02 10:01 ?7267次閱讀

    基于FPGAFT232H接口通信開發方案

    概述 本文主要介紹一種基于FPGAFT232H接口通信開發方案。傳統的USB通信開發對工程人員的要求比較高,除了上層應用軟件以外,還需要掌
    的頭像 發表于 07-05 09:56 ?6124次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>FT232H</b>接口<b class='flag-5'>通信</b>開發方案

    一種基于FPGAFT232H接口通信開發方案

    從圖1中我們可以了解到,FT232H芯片內部可以劃分為UTMI_PHY、USB_protocol and FIFO ctrol、Tx/Rx Buffer、MPSSE/Multi_purpose
    的頭像 發表于 07-05 09:56 ?2134次閱讀
    一種基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>FT232H</b>接口<b class='flag-5'>通信</b>開發方案

    基于FPGAUSB3.0回環傳輸測試方案

    本文開源一個FPGA項目: USB3.0 LoopBack ?;?b class='flag-5'>FPGAUSB3.0通信方案有很多,其中非常好用的一款
    的頭像 發表于 10-01 09:49 ?5876次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>USB</b>3.0<b class='flag-5'>回環</b>傳輸<b class='flag-5'>測試</b>方案