Electronic – Nexys 4 DDR doesn’t load bitstream from microSD card

fpgaxilinx

Following the lower half of page 6 of this PDF, I formatted a 2 GB microSD card to FAT32 filesystem using mkfs.fat on Ubuntu and copied main.bit from one of my projects. Then I inserted the microSD card onto my Nexys 4 DDR board, made sure the two jumpers are in the correct place (JP2 connected to SD and JP1 connected to USB/SD). Then I power-reset the board and saw the "BUSY" LED slowly pulsing, indicating that the board is waiting for a valid media to be inserted, according to the PDF.

Things I've tried:

  • Note first: I have tried 2 sets of all hardware involved here, including the Nexys 4 DDR board (and the jumpers on it), the microSD card, the USB flash drive (mentioned below) and the USB cable.
  • Formatted the microSD card in Windows 10 instead of Ubuntu
  • Verified that the bitstream file is working correctly by downloading to the board via the PROG/UART micro USB port using Vivado 2018.2 software
  • Regenerated the bitstream using Vivado
  • Pulled another bitstream file from another project
  • Renamed the bitstream file (keeping the .bit extension)
  • Replaced microSD card with a 4 GB USB drive inserted into the USB Host port on the board (and changed JP2 to USB)
  • Powered the board via a 5V phone charger

Here's what the board looks like (click to enlarge):

board

The microSD card is inserted in the slot on the other side so not visible in the image, as indicated by the arrow on the left. The two squares are JP2 (left) and JP1 (right), as I have correctly (I suppose) configured.

What could be a possible cause of this? How can I tell the board to load bitstream from the microSD card?

Best Answer

There's an open source FAT library called DOSFS that's used in a lot of embedded systems / development boards that seems to struggle with some allocation sizes. For Windows using the /A:32K (or as per you comment 16K) format switch to force the allocation unit size seems to fix it, it seems this board suffers from the same problem and probably uses the same library.

I encountered a similar problem a while back on an STM32 based project that used to work when the cards were formatted under Windows XP but it stopped working when formatting under later Windows versions so it seems the default allocation unit sizes used by newer operating systems has changed.