I'm currently running a Zedboard with bare-metal code in QSPI flash, programmed from the SDK. Once we ship systems to the customer, we'd like to be able to have them update in the field, as simply as possible.
The primary interface is Ethernet for the application (we use lwIP), but the J17 USB connector is theoretically also available to the customer.
It seems that any solution that involves reprogramming QSPI flash over J17 (USB-JTAG) will involve Xilinx tools -- the Lab Tools at a minimum. We consider this too much of a burden for technologically unsophisticated customers.
One option would be to program a fairly complicated update routine in our application that receives new firmware over Ethernet and then programs the QSPI. This seems doable, but may be a lot of work.
A second option would be to ship the customer an SD card containing Linux plus new firmware; the customer would change the boot jumpers to SD card mode, and from then on the SD card code would handle everything automatically, presumably using simple Linux commands to program the QSPI. Then the customer would reset the jumpers to QSPI boot mode. The downside of this approach is that the customer would have to open the box for access to the SD card and jumpers, but conceptually it seems quick to implement.
Have I missed another alternative? Is there a way to program QSPI over USB/JTAG that doesn't involve Xilinx tools? Thanks for any input.