Sorry, you need to enable JavaScript to visit this website.

USB Host on Microzed with Petalinux 2017.2

Zedboard forums is currently read-only while it under goes maintenance.

6 posts / 0 new
USB Host on Microzed with Petalinux 2017.2

Does anyone have the USB host working on Microzed SOM board with 2017.2 tools? Tried all options and all the solutions out there on the Avnet and Xilinx forums but still can't get it working.
1) USB Host works with prebuilt Pulsar Linux image available on
2) USB Host works with prebuilt Vivado / Petalinux 2014.4 image available on
3) USB host doesn't work with 2017.2 tools  - a basic platform design (no custom PL components) and then Petalinux build.
Followed several suggestions across Xilinx/Microzed forums, app notes, tutorials, etc. -- looked at the device tree entries, interrupts,reset and others.. still the USB is not detected.
(1) and (2) means that the hardware is good. Checked reset, 5V etc.. all good. The board is not configured for the USB device mode, it is still what came out of factory - USB Host mode.
with (3) there is hardly anything in the hdf / bit file because it is just opening the Vivado and adding a Zynq IP and then generating the bit/hdf files. So I guess the platform is also good. That leaves the Petalinux 2017.2.
Opened a ticket with Xilinx support, and have been exchanging files/logs and they keep telling what is available on the internet forums (for other boards / tool versions) and have been of zero help even after several days.
Would Avnet or be able to provide a Petalinux 2017.2 project for Microzed SOM with all the peripherals working?
Any help would be appreciated.

RE: USB Host on Microzed with Petalinux 2017.2

Hi inchara,

We ran into the same problems when putting together the 2017.2 PetaLinux BSPs for Microzed with no progress on this either. There do not appear to be any changes to the Linux USB Device Driver so I am not sure why this is not working:

My next step is to try PetaLinux 2017.2 on a ZC702
board. Please let us know if you discover a solution.

Best Regards,



We rolled back to 2014.4 (Vivado + petalinux)  just for the sake of that feature which is very important to one of our projects.  We also tested 2016.4 suite which didn't work either. We thought of testing 2015.4, but had to take a call not spending unnecessary effort on debugging the tool issues, anyways both 2015 and 2014 are more than 3 years old  so decided to stick to the working 2014.4.
I'm surprised that this problem hasn't surfaced well enough for Xilinx/Avnet to act. Either Microzed board users are very small in number OR whoever is using Microzed are using old Vivado versions!! 
ZC702 should be working because it is Xilinx's board (or at least Xilinx MUST own the problem and support ). Looks like issue is something related to the phandle  / interrupt configuration in the petalinux driver or dts.
I'm afraid that the same USB phy (3320) is used in many other boards which we use on other projects and petalinux might break USB feature on many other boards if it is something related to SW/ driver compatibility with HW. If it is only SW then it is good, there is a hope that sometime in future Xilinx  will resolve this (when it fails on many boards and lots of users are affected).
You also kindly let us know if you get it working on 2017.2 +.
Best regards,

My last customer project used

My last customer project used a Picozed board and Petalinux 2015.4. USB host mode worked as a USB thumb drive was recognized and accessible when plugging it in. However, I seem to recall that it wasn't 100% reliable between either builds or reboots - can't remember exactly. I don't remember having to do any manual fixup of device tree - it just (gasp!) worked when first tried.

It works

I was able to use a 16GB USB stick on Microzed (Petalinux 2017.4)  without any magic commands like explicit connecting modules. All I did is just followed with a call to petalinux-config -c rootfs with defgault settings. Before calling petalinux-build I also updated device tree by substituting whatever is in project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi to
        usb_phy0: usb_phy@0 {
            compatible = "usb-nop-xceiv";
            #phy-cells = <0>;

    &usb0 {
        dr_mode = "host";
        usb-phy = <&usb_phy0>;
On power on it looks like:
PetaLinux 2017.4 uz_min /dev/ttyPS0

uz_min login: root
root@uz_min:~# lsusb
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 002: ID 154b:00e1
root@uz_min:~# fdisk -l

Disk /dev/mmcblk0: 15.9 GB, 15931539456 bytes
255 heads, 63 sectors/track, 1936 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

        Device Boot      Start         End      Blocks  Id System
/dev/mmcblk0p1               1        1937    15554048   c Win95 FAT32 (LBA)

Disk /dev/sda: 16.0 GB, 16025387008 bytes
255 heads, 63 sectors/track, 1948 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks  Id System
/dev/sda1               1        1949    15649776   c Win95 FAT32 (LBA)


The command I meant was petalinux-config -c kernel . It configures USB drivers and prepares device tree, location of which was changed recently.