99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

FPGA外接FT232H配置FIFO實(shí)現(xiàn)USB通信回環(huán)測試

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

掃碼添加小助手

加入工程師交流群

USB英文全稱 Universal Serial Bus,即通用串行總線,是一個(gè)外部總線標(biāo)準(zhǔn),用于規(guī)范電腦與外部設(shè)備的連接和通訊。

FTDI 公司的USB2.0 芯片F(xiàn)T232H 進(jìn)行USB 通信

FH232H芯片在內(nèi)部不僅完成了USB 硬件接口差分電平轉(zhuǎn)換,還封裝了USB 的相關(guān)協(xié)議,留出數(shù)據(jù)交互接口

FH232H可以默認(rèn)配置為UART模式,還可配置為JTAG,FIFO,IIC,SPI,本次將其配置為FIFO進(jìn)行實(shí)驗(yàn)。

作為FPGA開發(fā)者只需要關(guān)注數(shù)據(jù)交互接口的時(shí)序即可實(shí)現(xiàn)USB功能。

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

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

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

(I/O是對于FT232H來說)

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

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

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

RXF: (OUT) FT232H中的FIFO數(shù)據(jù)可讀標(biāo)志位,低電平有效

TXE: (OUT) FT232H中的FIFO數(shù)據(jù)可寫標(biāo)志位,低電平有效

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

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

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

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

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

寫時(shí)序:232中FIFO未滿 > 232拉低TXE > FPGA拉低WR > 向232寫入數(shù)據(jù) > 232拉高TXE > 寫滿

硬件設(shè)計(jì):參考https://github.com/WangXuan95/FPGA-ftdi245fifo,正點(diǎn)原子達(dá)芬奇Pro

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

連接好硬件后進(jìn)行FT232H模式修改:

在官網(wǎng)下載ft_prog

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

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

編寫代碼實(shí)現(xiàn)回環(huán)(參考正點(diǎn)原子源碼)

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

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時(shí)鐘input    sys_rst_n,  //系統(tǒng)復(fù)位 ,低電平input    usb_rxf_n,  //FT232H中FIFO數(shù)據(jù)的可讀標(biāo)input    usb_txe_n,  //FT232H中FIFO數(shù)據(jù)的可寫標(biāo)output   usb_oe_n,  //FT232H數(shù)據(jù)輸出使能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雙向數(shù)據(jù)總線);  //wire definewire[7:0] fifo_data_in; //從FT232進(jìn)到FPGA的數(shù)據(jù)wire[7:0] fifo_data_out; //從FPGA輸出到FT232的數(shù)據(jù)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; //立即發(fā)送,喚醒a(bǔ)ssignc7 =1'b1; //立即發(fā)送,喚醒//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調(diào)用  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 時(shí)鐘input      rst_n,    //系統(tǒng)復(fù)位 ,低電平//FT232Hinput      usb_rxf_n,  //FT232H 中FIFO 數(shù)據(jù)的可讀標(biāo)志input      usb_txe_n,  //FT232H 中FIFO 數(shù)據(jù)的可寫標(biāo)志outputreg   usb_oe_n,  //FT232H 數(shù)據(jù)輸出使能outputreg   usb_rd_n,  //FT232H 讀使能信號outputreg   usb_wr_n,  //FT232H 寫使能信號inout   [7:0] usb_data,  //FT232H 雙向數(shù)據(jù)總線//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中讀出的數(shù)據(jù)outputreg[7:0] fifo_data_in  //寫入FPGA FIFO的數(shù)據(jù));  // localparam definelocalparamIDLE =4'b001; //FT232H 空閑localparamREAD =4'b010; //FT232H 讀狀態(tài),此時(shí)數(shù)據(jù)從FT232H發(fā)送到FPGAlocalparamWRITE =4'b100; //FT232H 寫狀態(tài),此時(shí)數(shù)據(jù)從FPGA發(fā)送到FT232H//reg definereg[2:0] cur_state; //讀寫現(xiàn)狀態(tài)reg[2:0] next_state; //讀寫次狀態(tài)reg   usb_oe_n_d1; //usb_oe_n下一拍//*****************************************************//** main code//*****************************************************//在FT232H寫狀態(tài),將FIFO的數(shù)據(jù)輸出賦值給將USB數(shù)據(jù)總線,其他時(shí)候?yàn)楦咦钁B(tài)assignusb_data = (next_state == WRITE) ? fifo_data_out :8'hzz;  //產(chǎn)生FT232H數(shù)據(jù)輸出使能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數(shù)據(jù)輸出使能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//狀態(tài)跳轉(zhuǎn)always?@(posedge?usb_clk_60m?ornegedge?rst_n)?beginif?(!rst_n) cur_state <= IDLE; ? ? ? ?else?cur_state <= next_state; ? ?end//讀寫狀態(tài)跳轉(zhuǎn)條件always?@(*)?begincase?(cur_state) ? ? ? ? ? ? IDLE:?beginif?(usb_rxf_n ==?1'b0) ?//usb_rxf_n拉低,,ft232中數(shù)據(jù)可讀,下一時(shí)鐘進(jìn)入去讀FT232H數(shù)據(jù)? ? ? ? ? ? ? ? ? ? ?next_state <= READ; ?//usb_txe_n拉低且FPGA FIFO不空進(jìn)入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數(shù)據(jù)讀空,從FT232H讀回到空閑狀態(tài)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被讀空,回到空閑狀態(tài)if?((usb_txe_n ==?1'b1) || (empty ==?1'b1)) next_state <= IDLE; ? ? ? ? ? ? ? ?else?next_state <= WRITE; ? ? ? ? ? ?enddefault: next_state <= IDLE; ? ? ? ?endcaseend//狀態(tài)賦值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//讀狀態(tài)時(shí),將usb數(shù)據(jù)賦值給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下一拍也為低時(shí)拉低usb_rd_n,其他時(shí)候?yàn)楦遡f?((usb_oe_n_d1 ==?0) && (usb_oe_n ==?0)) usb_rd_n <=?1'b0;//拉低讀取標(biāo)志位,開始讀取ft232數(shù)據(jù)else?usb_rd_n <=?1'b1; ? ? ? ? ? ? ? ?//在usb_oe_n下一拍為低,且usb_rxf_n也為低時(shí)使能FIFO寫if?((usb_oe_n_d1 ==?0) && (usb_rxf_n ==?0)) fifo_wr_en <=?1'b1;//使能本地fifo寫入數(shù)據(jù)else?fifo_wr_en <=?1'b0; ? ? ? ? ? ?end//寫狀態(tài)時(shí),使能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

成功的話會(huì)在接收窗口看到同樣的數(shù)據(jù)返回。

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

    關(guān)注

    1645

    文章

    22049

    瀏覽量

    618350
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9001

    瀏覽量

    153727
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    8184

    瀏覽量

    272853
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    402

    瀏覽量

    44808
  • 串行總線
    +關(guān)注

    關(guān)注

    1

    文章

    186

    瀏覽量

    31112

原文標(biāo)題:FPGA外接FT232H配置FIFO實(shí)現(xiàn)USB通信回環(huán)測試

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    【紫光同創(chuàng)國產(chǎn)FPGA教程】【第二十八章】USB雙向測速例程

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

    完美高性能USB解決方案1

    R, FT232H, FT230X, FT231XUSB 轉(zhuǎn) FIFOFT245B, FT2
    發(fā)表于 03-29 11:43

    UM232H-B是FT232H高速到串行/并行接口轉(zhuǎn)換器的開發(fā)模塊

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

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

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

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

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

    采用FT245BM和FPGA實(shí)現(xiàn)USB接口設(shè)計(jì)

    USB協(xié)議芯片FT245BM,實(shí)現(xiàn)FPGA與PC機(jī)的USB通信,該方法不用微控制器,減少了元器
    發(fā)表于 04-22 07:00

    采用FT245BM和FPGA實(shí)現(xiàn)USB接口設(shè)計(jì)

    USB協(xié)議芯片FT245BM,實(shí)現(xiàn)FPGA與PC機(jī)的USB通信,該方法不用微控制器,減少了元器
    發(fā)表于 04-26 07:00

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

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

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

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

    基于FT2232HUSB-RS232轉(zhuǎn)換模塊設(shè)計(jì)

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

    微雪電子FT245USB轉(zhuǎn)FIFO介紹

    FT245 USB轉(zhuǎn)FIFO模塊 USB mini接口 支持3種供電模式 提供USB驅(qū)動(dòng) 電路原理圖 型號
    的頭像 發(fā)表于 12-30 11:26 ?5547次閱讀
    微雪電子<b class='flag-5'>FT245USB</b>轉(zhuǎn)<b class='flag-5'>FIFO</b>介紹

    FT2232H USB串口芯片國產(chǎn)替代DP2232H

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

    基于FPGAFT232H接口通信開發(fā)方案

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

    一種基于FPGAFT232H接口通信開發(fā)方案

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

    基于FPGAUSB3.0回環(huán)傳輸測試方案

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