Merge pull request #529 from mer0m/master

kcu105: add support for secondary QSPI
This commit is contained in:
Gwenhael Goavec-Merou 2025-03-21 19:12:44 +01:00 committed by GitHub
commit f5ed5c4400
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 35 additions and 5 deletions

View File

@ -494,7 +494,7 @@
URL: https://www.xilinx.com/products/boards-and-kits/kcu105.html
FPGA: Kintex UltraScale xcku040-ffva1156
Memory: OK
Flash: OK
Flash: OK (primary and secondary)
- ID: kcu116
Description: Xilinx KCU116

View File

@ -34,7 +34,7 @@ Reading the bitstream from STDIN
.. code-block:: bash
# FPGA side
nc -lp port | openFPGALoader --file-type xxx [option
nc -lp port | openFPGALoader --file-type xxx [option]
# Bitstream side
nc -q 0 host port < /path/to/bitstream.ext
@ -83,6 +83,35 @@ Writing to an arbitrary address in flash memory
With FPGA using an external SPI flash (*xilinx*, *lattice ECP5/nexus/ice40*, *anlogic*, *efinix*) option ``-o`` allows
one to write raw binary file to an arbitrary adress in FLASH.
Detect/read/write on primary/secondary flash memories
=====================================================
With FPGA using two external SPI flash (some *xilinx* boards) option ``--target-flash`` allows to select the QSPI chip.
To detect:
.. code-block:: bash
openFPGALoader -b kcu105 -f --target-flash {primary,secondary} --detect
To read the primary flash memory:
.. code-block:: bash
openFPGALoader -b kcu105 -f --target-flash primary --dump-flash --file-size N_BYTES mydump.bin
and the second flash memory:
.. code-block:: bash
openFPGALoader -b kcu105 -f --target-flash secondary --dump-flash --file-size N_BYTES --secondary-bitstream mydump.bin
To write on secondary flash memory:
.. code-block:: bash
openFPGALoader -b kcu105 -f --target-flash secondary --secondary-bitstream mySecondaryBitstream.bin
Using an alternative directory for *spiOverJtag*
================================================

View File

@ -174,7 +174,7 @@ static std::map <std::string, target_board_t> board_list = {
0, 0, CABLE_DEFAULT),
DFU_BOARD("icebreaker-bitsy", "", "dfu", 0x1d50, 0x6146, 0),
JTAG_BOARD("kc705", "", "digilent", 0, 0, CABLE_DEFAULT),
JTAG_BOARD("kcu105", "", "jtag-smt2-nc", 0, 0, CABLE_DEFAULT),
JTAG_BOARD("kcu105", "xcku040-ffva1156", "jtag-smt2-nc", 0, 0, CABLE_DEFAULT),
JTAG_BOARD("kcu116", "xcku5p-ffvb676", "jtag-smt2-nc", 0, 0, CABLE_DEFAULT),
JTAG_BOARD("LD-SCHOKO", "LFE5U-45F-6CABGA256", "", 0, 0, CABLE_MHZ(6)),
DFU_BOARD("LD-SCHOKO-DFU", "", "dfu", 0x16d0, 0x116d, 0),

View File

@ -1044,7 +1044,8 @@ int parse_opt(int argc, char **argv, struct arguments *args,
args->secondary_bit_file.empty() &&
!args->protect_flash &&
!args->unprotect_flash &&
!args->bulk_erase_flash
!args->bulk_erase_flash &&
!args->detect
) {
printError("Error: secondary bitfile not specified");
cout << options.help() << endl;

View File

@ -313,7 +313,7 @@ Xilinx::Xilinx(Jtag *jtag, const std::string &filename,
_secondary_file_extension = secondary_filename.substr(
secondary_filename.find_last_of(".") + 1);
_mode = Device::SPI_MODE;
if (!(_device_package == "xcvu9p-flga2104" || _device_package == "xcku5p-ffvb676")) {
if (!(_device_package == "xcvu9p-flga2104" || _device_package == "xcku5p-ffvb676" || _device_package == "xcku040-ffva1156")) {
throw std::runtime_error("Error: secondary flash unavailable");
}
}