FPGA和USB3.0通信-FX3硬件设计简谈
FPGA和USB3.0通信-FX3硬件设计简谈
本次演示用的是USB3.0芯片-CYPRESS CYUSB3014(下称 FX3),该芯片是标准的USB3.0 PHY,可以大大简化使用USB通信时FPGA的设计,主需要使用状态机进行FIFO的读写控制即可,同时该芯片还具有ARM核+I2S、I2C、SPI、UART等接口,大大增加了该芯片的使用范围。
芯片介绍
下面是整个芯片的框图:
主要包括以下几个部分:
1、通用可编程接口 (GPIF II)
可编程的 100-MHz GPIF II 接口能连接多种类型外部器件
8/16/32 位数据总线
多达 16 种可配置的控制信号
2、32 位 CPU
运行频率为 200 MHz 的 ARM926EJ 内核
512 KB 嵌入式 SRAM
3、外设
频率为 1 MHz 的 I2C 主控制器
采样频率为 32 kHz、44.1 kHz、48 kHz 的 I2S 主控(仅发射器)
支持高达 4 Mbps 的 UART
33 MHz 的 SPI 主控
UART 和 SPI 的工作电压为 1.8 至 3.3 V
I2C 工作电压为 1.2 V
4、多种时钟输入频率可供选择
19.2、26、38.4 和 52 MHz,支持 19.2 MHz 晶振输入
5、应用
FX3主要应用场景和他的内部结构有关,因为内置ARM核,应用范围十分广泛,在数字视频摄录机、数字照相机、打印机、扫描仪、视频采集卡、测试和测量设备、监控摄像机、个人导航设备、医疗成像设备、视频 IP 电话、便携式媒体播放器等多个场景都有应用。
正是因为内嵌ARM核,所以可以作为主处理器或者协处理器使用。
1、 作为协处理器-主要
这个主要是利用USB PHY的特点,通过GPIF接口向内部写入数据,通过USB接口输出。
2、作为主处理器
这种就是利用ARM内核功能+USB,功能类似STM32F103,但是USB功能升级了。
硬件设计
讲硬件设计主要是为了方便FPGA工程师排故使用,下面分几个方面进行介绍,排故思路也是按照下面的顺序走。
1、 时钟
我们知道FX3有19.2、26、38.4 和 52 MH,有晶体输入和有源晶振输入两种,这些组合怎么让内部PLL(锁相环)知道是那种时钟输入呢?那就是FSLC[0..2]这几个引脚进行配置,下表展示了FSLC[0..2]不同的设置代表的不同输入时钟,具体如下:
这里容易出问题的地方在于设置选项和时钟频率不匹配。
当然,FX3对于晶振/晶体是有要求的,但是比较宽松,常规的型号基本都可以满足。
复位:
通过激活 EZ-USB FX3 上的 Reset# 引脚来初始化硬复位。复位序列和时序的具体要求详见下图。
常规的使用就是RC复位即可,想控制FX3,把Reset# 引脚拉到FPGA即可(注意电平匹配)。
时序图就是大部分芯片推荐的时序图,无非就是电源、时钟先上,然后进行复位。
引导选向
这是最重要的一部分。
FX3 为了灵活使用,加载程序时可从多个源加载引导二进制文件(编译出来的),可通过 PMODE 引脚配置来选择。EZ-USB FX3 有下列引导选项:
- 从 USB 引导
- 从 I2C 引导
- 从 SPI (支持的 SPI 器件为 M25P16 (16 Mbit)、M25P80 (8 Mbit) 和 M25P40 (4 Mbit))或同类器件引导
- 从 GPIF II 异步 ADMUX 模式引导
- 从 GPIF II 同步 ADMUX 模式引导
- 从 GPIF II 异步 SRAM 模式引导
注2:F代表的是悬空。
这里面常用的就是F11(USB引导)用来调试和下载固件;I2C引导:用来从EEPROM启动;SPI引导,用来从SPI FLASH启动。
注意一下,对于SPI FLASH支持的型号(支持的 SPI 器件为 M25P16 (16 Mbit)、M25P80 (8 Mbit) 和 M25P40 (4 Mbit)),当然也支持同类型的器件。对于SPI FLASH很多相同的封装,引脚兼容,所以很容易造成混乱。
这里说明一下,大部分PHY芯片从外部器件引导器件时,都会首先读取外部器件的FLASH的ID,然后才启动,如果不是他数据手册里推荐的型号,很大概率是启动不了的,如果出现问题首先记得先核实以下FLASH的型号。这么做的好处当然是…貌似没什么好处。
我这里建议的是使用SPI FLASH,价格会便宜点。模式我设计的思路是使用0F1(SPI,如失败,则启用 USB 引导),然后FALSH的CS引脚加开关接地,需要烧写固件时将CS拉低,FX3启动检测不到FLASH后会自动启动USB boot,上电完毕后可以将CS放开,就可以烧写固件了。
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的