Post Go back to editing

Programming / Flashing a Blank Pluto Board


I am able to program the FPGA bitstream, but I am unable to program the flash. 

I keep getting an error saying:

"Problem in initializing hardware."

Steps Taken from the Vivado SDK:

1. Program FPGA bitstream using system_top.bit - this finishes and upon finishing, I can see that in addition to the power LED being on, now the user LED is on and solid as well. 

2. From there I short pin 5 of the jtag connector to ground and try to program flash with the following files:

 - u-boot.bin

 - u-boot.elf

The programmer tries to perform the flash but I end up getting the below error message and the user led turns off
"Problem in initializing hardware".

From my experimentation this far, If I try to program the flash without grounding the JTAG_Boot pin, I get an error saying that boot mode is QSPI and the flash programming never finishes. This makes sense. But when grounding the JTAG_Boot pin, I either get the above: "Problem in initializing hardware" or an error relating to failure of the blank check and/or verify after programming. 

"Flash programming initialization failed"

I know i am using the correct bit stream, but I am unsure of the correct files being used for the flash. To my understanding, What I am really trying to do is flash the FSBL so that I do not have to flash the bitstream for every power cycle. 

Is there a generalized step by step list of files that need to be used? my ultimate goal is to learn the process from starting with a "blank" pluto board and being able to get it up and going into it's default delivered state.

  • Please take a look at the content of the pluto-jtag-bootstrap files released with each release.

    It's important to initialize the PS in particular the clocks and the DDR memory. Otherwise you can't load uboot.

    This step is done my sourcing he ps7_init.tcl script and then running ps7_init and ps7_post_config.


    connect arm hw
    xreset 64

    source ps7_init.tcl

    dow u-boot.elf

    disconnect 64


  • Hello, thank you for the reply. 

    So the revised steps then, would be:

    1. Ground JTAG_BOOT pin, power on Pluto.

    2. Program bitstream

    3. Run TCL source described above. 

    I have followed these steps, taking care to specify the path to these files when running the commands in the TCL window within vivado. 

    I can program the bitstream just fine, meaning the connection to my SmartLynq seems to be working. 

    But when I run the TCL described in your initial reply, I can see that the TCL source is running but I get the following error. 

    "Error Occured"

    "Cable is not connected to the host."

    Likewise, If I run the command "connect arm hw" in the TCL console alone, I get the error: "Unknown Command"

    Why would vivado think that the cable is not connected properly if I was able to program the bitstream without an issue?

  • Seems like this could be an issue with a program called ISE from Xilinx?

  • What version of vivado are you using?

  • I found this thread that shows some steps to install cable drivers. I am going to try this without the VM.

  • Trying to move away from the VM has not worked...Seems like this issue is persistent whether i am using a VM or not..

    Any suggestions on what else I can try?

  • XMD was completely replaced by XSDB only in SDK 2018.1, so the commands posted by Michael should be valid for your version.

    However, try to use the XSDB commands instead of the XMD ones. Most of them are similar, except connect/disconnect, targets: instead of "connect arm hw", try "connect" and instead of "disconnect 64", try "disconnect". To find out the available targets type "targets" and to select one target as the active one, type "target id" - have a look here for more details:



  • Hello, Thank you for the reply.

    I have tried instead using the XSDB commands.

    Upon executing the "connect" command, I can see that the hardware sever is successfully connected to.

    "xsct% connect
    attempting to launch hw_server

    ****** Xilinx hw_server v2017.4
      **** Build date : Dec 15 2017-21:02:11
        ** Copyright 1986-2017 Xilinx, Inc. All Rights Reserved.

    INFO: hw_server application started
    INFO: Use Ctrl-C to exit hw_server application

    INFO: To connect to this hw_server instance use url: TCP:"

    I then use the "targets" command to list all available targets.

    The terminal replies with nothing.

    I did have an issue programming the bit-stream until i decreased the jtag frequency. I am wondering if there is a similar issue here.

    From there I went and referenced the Xilinx XSDB page for jtag commands and found the following here:

    Xilinx XMDB Commands

    If i use the "jtag targets" command, which is supposed to list available targets, the terminal also replies with nothing.

    It is odd because when trying to use the "jtag frequency -list" command, I receive from the terminal:

    "Invalid target. Use "jtag targets" command to select a target"

    I think this may be a jtag frequency issue as I am able to connect to the hw server but am not able to connect to the target once connected to the hw server.

    Any ideas on how to specify jtag frequency without first connecting to a target?

    According to the XSDB documentation, I should instead of using "connect arm hw" be using the two commands: "connect", then "targets" to list available targets, then "targets idcode" to connect to a specific target.

    Right now it seems like I cannot connect to the targets while using either xmd or xsdb.

  • Works for me - that's what I did:

    ****** Xilinx System Debugger (XSDB) v2018.2
      **** Build date : Jun 14 2018-20:18:43
        ** Copyright 1986-2018 Xilinx, Inc. All Rights Reserved.
    xsdb% connect                                                                                                                                                                                               
    xsdb% targets                                                                                                                                                                                               
    xsdb% targets                                                                                                                                                                                               
    xsdb% targets                                                                                                                                                                                               
    xsdb% Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0xffffff28 (Suspended)                                                                                                                            
    xsdb% Info: ARM Cortex-A9 MPCore #1 (target 3) Stopped at 0xffffff34 (Suspended)
    xsdb% targets                                                                                                                                                                                               
      1  APU
         2  ARM Cortex-A9 MPCore #0 (Suspended)
         3  ARM Cortex-A9 MPCore #1 (Suspended)
      4  xc7z010
    xsdb% targets 2                                                                                                                                                                                             
    xsdb% source build/ps7_init.tcl                                                                                                                                                                             
    xsdb% ps7_init                                                                                                                                                                                              
    xsdb% ps7_post_config                                                                                                                                                                                       
    xsdb% dow build/u-boot.elf                                                                                                                                                                                  
    Downloading Program -- /home/michael/devel/pluto/plutosdr-fw/build/u-boot.elf
    	section, .text: 0x04000000 - 0x0403f613
    	section, efi_runtime_text: 0x0403f614 - 0x0403f62b
    	section, .rodata: 0x0403f630 - 0x0404ef2c
    	section, .hash: 0x0404ef30 - 0x0404ef47
    	section, .dtb.init.rodata: 0x0404ef50 - 0x0405130f
    	section, .data: 0x04051310 - 0x04053537
    	section, .got.plt: 0x04053538 - 0x04053543
    	section, efi_runtime_data: 0x04053548 - 0x0405360f
    	section, .u_boot_list: 0x04053610 - 0x04054413
    	section, .rel.dyn: 0x04054414 - 0x0405ce73
    	section, .bss_start: 0x04054414 - 0x04054413
    	section, .bss: 0x04054414 - 0x040a4e53
    	section, .bss_end: 0x040a4e54 - 0x040a4e53
    100%    0MB   0.1MB/s  00:05                                                                                                                                                                                
    Setting PC to Program Start Address 0x04000000
    Successfully downloaded /home/michael/devel/pluto/plutosdr-fw/build/u-boot.elf
    xsdb% con                                                                                                                                                                                                   
    Info: ARM Cortex-A9 MPCore #0 (target 2) Running