02-17-2020 10:41 PM
Quick background: I have a couple of different boards - one with an Artix 7 + Micron 128Mb qspi flash, and the other with a Kintex 7 + Spansion 256Mb qspi flash. On the Artix board, I can use Vivado to program the flash chip via JTAG (from empty/erased flash) or I can use OpenOCD to program (from empty/erased) and the board will always boot fine and the FPGA will load from qspi flash. On the Kintex board however, I can use Vivado to program the empty/erased flash and it will always boot/load fine, but if I use OpenOCD on an empty/erased flash, it will never load/boot. If the Kintex board has already been programmed using Vivado and I reprogram the qspi flash using OpenOCD, it boots/loads just fine - I can do that all day with different images. It just seems that the initial programming on an empty chip has different behavior when using Vivado (on the Kinex with the spansion memory) than when using OpenOCD. Does anyone know if there is any 'special sauce' that Vivado might do to any non-volatile registers in the FPGA or perhpas the qspi flash chip itself? I have dumped the contents of flash (from empty) when using both Vivado and OpenOCD, and the contents of the flash is identical - no diff.
Any thoughts would be really appreciated.