欢迎来到纳米网!
首页 > 公众号文章>正文

FPGA外接FT232H配置FIFO实现USB通信回环测试详解

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 

下载完成后断开下载线,只保留USB连接线,使用串口助手 ATK-FUSB测试:

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

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

成功的话会在接收窗口看到同样的数据返回。

原文标题:FPGA外接FT232H配置FIFO实现USB通信回环测试

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

猜你喜欢

  • 艾为电子AW9967FSR:高效升压型WLED驱动芯片详解

    艾为电子AW9967FSR:高效升压型WLED驱动芯片详解

    在消费电子持续追求轻薄化与长续航的当下,背光系统能效成为关键瓶颈。传统方案在轻载场景效率低下,散热性能不足,严重制约设备续航并带来可靠性风险。数模龙头艾为电子推出新一代升压型WLED驱动芯片——AW9967FSR,以科学先进的热管理技术,打造卓越的散热...

    2025-12-01
  • Microchip发布MCP服务器:革新AI驱动的产品数据访问方式

    Microchip发布MCP服务器:革新AI驱动的产品数据访问方式

    该服务器支持跨AI平台获取可信产品信息,简化工作流程、加速设计并提高生产力 为进一步兑现公司为嵌入式工程师开发AI解决方案的承诺,Microchip Technology Inc.(微芯科技公司)今日推出模型语境协议(MCP)服务器。作为AI接口,MCP服务器可直接连接兼容的AI...

    2026-01-23
  • Microchip第22届中国技术精英年会北京站成功闭幕,下一站深圳

    Microchip第22届中国技术精英年会北京站成功闭幕,下一

    Microchip第22届中国技术精英年会(MASTERs)北京站于今日圆满落幕!来自各地的技术专家、行业伙伴和客户齐聚一堂,共同探讨前沿技术与创新应用。活动伊始,Microchip大中华区副总裁Edward Ho先生为本站致开幕词,欢迎各位嘉宾的到来,并分享了对行业发展的展望...

    2026-01-23
  • 国星半导体车规级LED芯片获2025年广东省名优高新技术产品

    国星半导体车规级LED芯片获2025年广东省名优高新技术

    近日,广东省高新技术企业协会正式发布《2025年第二批广东省名优高新技术产品名单》,国星半导体自主研发的车规级LED芯片与垂直LED芯片两大系列产品成功入选。该认定严格围绕技术创新性、质量稳定性、市场成熟度及产业化能力四大维度进行评审,是广东省...

    2025-12-02
  • 云英谷科技荣登2025中国半导体企业影响力百强,专注OLED显示驱动芯片

    云英谷科技荣登2025中国半导体企业影响力百强,专注OLED

    11月14日,世界集成电路协会(WICA)主办的“2025全球半导体市场峰会”在上海成功召开。本次峰会发布了2026全球半导体市场趋势展望暨2025中国半导体企业影响力百强及集成电路新锐企业50强报告。云英谷科技股份有限公司荣登“2025中国半导体企业影响力百...

    2026-01-23
^