Xilinx UltraScale+系列FPGA实现USB3.0 DEV 设备 部分原理图+代码分享

Zynq UltraScale+ MPSoC 系列是 Xilinx 新一代 Zynq 平台。在 FPGA 里有完整的 ARM 处理(PS),包含了四核或双核 Cortex-A53 处理器 ,处理器子系统中有DDR内存控制器等大量的外设,在FPGA中完全独立于可编程逻辑单元(PL)如果暂时没有用到PL部分,PS也能单独工作,相当于可以当成一个ARM来用了(以前的不行)。

ARM也包含USB3.0控制器,这是实现USB3.0DEV的关键,根据官方手册(ug1085)描述,USB主(Host)从(Device)以及OTG模式都能实现。

1.Vivado开发步骤

接下来介绍本工程的vivado开发步骤,其中省略了一些不必要的操作:

先来看下原理图,上图可以看到USB2.0需要外挂支持ULPI协议的PHY,USB3.0则是通过PIPE实现(内部GTR高速接口),本次设计选用的PHY是USB3320:

 FPGA的连接,需要到vivado里查看或者参考checklist的管脚配置。下面介绍vivado查看方法:

打开或创建工程-->添加zynq IP-->双击打开-->IO configuration-->High Speed-->USB:

有了以上的连接关系后,就可以按照上图来连接原理图的PFGA和USB2.0 PHY了,USB RESET管脚可以任意分配:

回到vivado工程,如果还有PL的内容,要看是否需要加给PL的时钟。如果仅是PS端工作,可以直接点击综合了,综合完成后点击导出硬件,得到我们需要的.xsa文件。

 至此,逻辑部分开发告一段落。

2.petalinux开发步骤

接下来介绍本工程petalinux开发步骤:

(1)设置petalinux环境变量,进入petalinux安装路径,执行:

./ settings.sh

在用户目录下,创建一个工作目录, 将vivado导出xsa文件拷贝迚hardware文件夹下:

mkdir –p ~/work/USB_DEV/hardware

(2)创建petalinux工程,名称为“petalinux”,类型为“project”,使用zynqMP模板:

petalinux-create -t project -n petalinux --template zynqMP

迚入petalinux目录:

cd~/peta_prj/linxPsBase/petalinux

(3) 配置Petalinux工程的硬件信息,执行前要注意命令窗口的大小。太小会报错:

petalinux-config --get-hw-description ../hardware/

6.配置界面可以按照默认的设置,直接退出,等待配置完成:

 

(4)使用下面的命令迚入petalinux 目录,读取硬件信息,弹出的配置界面可以保存关闭,等待配置完成:

cd /petalinux

petalinux-config --get-hw-description ../hardware/

 

(5)执行以下命令配置 Linux 内核以支持 USB CDC小工具驱动程序:

petalinux-config -c kernel

进入配置界面后,转到

Device Drivers ---> USB Support ---> USB Gadget Support -->

根据需要配置所需的功能,实现串口,需要空格打开Serial Gadget

在转到 File Systems -->

Pseudo filesystems --> enable Userspace-driven configuration filesystems

通常这个是默认打开的,需要再确认一下:

配置完成后保存退出,等待系统完成配置。

(6)进入工程目录<project_name>/project-spec/meta-user/recipes-bsp/device-tree/files,找到设备树文件  system-user.dtsi 添加如下内容:

&dwc3_0 {

dr_mode = "peripheral";

status = "okay";

};

/* SD */

&sdhci1 {

disable-wp;

no-1-8-v;

};

 

**********分界线********

如果需要实现USB2.0设备,需要在设备树里对USB进行限速,USB部分改为以下内容:

&dwc3_0 {

  status = "okay";

  dr_mode = "peripheral";

  snps,dis_u2_susphy_quirk;

  snps,dis_u3_susphy_quirk;

  maximum-speed = "high-speed";

};

&usb0 {

    status = "okay";

    /delete-property/ clocks;

    /delete-property/ clock-names;

    clocks = <0x3 0x20>;

    clock-names = "bus_clk";

};

**********分界线********

如果需要USB1工作,则设备树USB部分配置如下:

&dwc3_1 {

dr_mode = "peripheral";

status = "okay";

};

(7)通过内核配置完成上述更改,使用命令“ $ petalinux-build ”构建 petalinux。这将生成image.ub 可执行文件和一些其他 USB CDC小工具驱动程序支持模块,等待编译完成:

(8)迚入image文件目录

cd images/linux

生成boot文件,如果包含bit文件,需要在--force 前面加上—fpga:

petalinux-package --boot --u-boot –force

(9)复制以下文件到SD卡根目录,SD卡需要为FAT32格式,最好用DiskGenius格式化

~petalinux/images/linux  路径 BOOT.BIN文件image.ub文件

/home/ssmec/work/application/usb_cdc/petalinux/build/tmp/work/plnx_zynqmp-xilinx-linux/linux-xlnx/4.19-xilinx-v2019.2+git999-r0/image/lib/modules/4.19.0-xilinx-v2019.2/kernel/drivers/usb/gadget/legacy路径下的.ko文件

早期的版本还需要configfs.ko、libcomposite.ko等文件,2019版本已经不需要;

(10)将SD卡插入系统板,设置为SD卡启动,连接好串口,上电后等待系统起来,用户名root,密码root进入系统,执行以下命令:

mount /dev/mmcblk0p1 /mnt/

cd /mnt/

dd if=/dev/zero of=/tmp/test.img bs=1M count=256

insmod g_mass_storage.ko file=/tmp/test.img removable=1

(11)将USB3.0线连接电脑USB口和FPGA的USB口,电脑上弹出是否格式化USB存储设备格式化完成后USB大容量存储设备即可使用。

 

  • 4
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值