News:

Attention: For security reasons,please choose a user name *different* from your login name.
Also make sure to choose a secure password and change it regularly.

Main Menu

TE0720-04-62I33MA QSPI programming

Started by michalk, October 17, 2025, 12:21:27 PM

Previous topic - Next topic

michalk

I have issues consistently programming above SoM.
Some time ago I created an aplication for the said module and (not without issues) managed to flash it onto module using Vivado 2019.2.
Now I needed to repeat this but was unable to use previous flow - for some reason modified FSBL did not work for me anymore with same binaries.
I decided to test how newer version of Vivado work. The project was ported to 2024.2 and still I was unable to program QSPI.

I took the step back, placed my SoM onto TE0705-03 eval board and tried to run the TestBoard example - and I still am unable to flash QSPI.
I even tried 2023.2 Vivado and example, but the result is the same:

TE::pr_program_flash -swapp hello_te0720
Start Flash Programming
INFO: [Labtools 27-1435] Device xc7z020 (JTAG device index = 1) is not programmed (DONE status = 0).
WARNING: [Labtoolstcl 44-653] Creating new cfgmem for device xc7z020_1 will delete cfgmem object cfgmem_2 currently associated with it.
INFO: [Labtools 27-1435] Device xc7z020 (JTAG device index = 1) is not programmed (DONE status = 0).
WARNING: [Xicom 50-100] The current boot mode is QSPI.
Flash programming is not supported with the selected boot mode.If flash programming fails, configure device for JTAG boot mode and try again.
Problem in Initializing Hardware
Flash programming initialization failed.
ERROR: [Labtools 27-3161] Flash Programming Unsuccessful
ERROR: [TE_PR-108] Script (TE::VLAB::hw_program_flash) failed: ERROR: [Common 17-39] 'program_hw_cfgmem' failed due to earlier errors.

This is done in completely fresh installation of Vivado 2023.2, using freshly downloaded example (2023.2 version) generated for Som number 66 - TE0720-04-62I33MA. The result does not vary depending on whether SD Cards is inserted.

What may possibly be wrong if I can't even get reference design to flash QSPI on my module? I will be glad for any pointers.

JH

#1
Hi,
yes alternative FSBL for Flash programming does not longer work with newer Vivado versions.

Can you try out following workaround (this was working on my place):
Put the Hello TE0720 boot.bin on SD Card and boot from SD (SD card must be inserted to switch mode). When it boots connect HW Manager and try to configure QSPI again.

On newer TE0705-4 together with TE0720 newest CPLD firmware, we add possibility to change boot mode to JTAG only for QSPI programming.

If you still have problems with this workaround,
there is also an alternative firmware for TE0705-3 available, which can be used to set JTAG boot mode temporary (https://wiki.trenz-electronic.de/display/PD/TE0705+CPLD#TE0705CPLD-PCBREV03(Optional).1). In this case you need to update your TE0705 CPLD and maybe your TE0720 CPLD (depending how old it is, newest CPLD Firmware was released June 2022, so it must be newer.).
If the workaround doesn't work, let me know and I help you to update firmware.


br
John






michalk

Thank you JH,
the workaroud worked just fine and it seems after initial flash I can reflash QSPI without any issues.

This allows me to confirm the module is fine, but now I need to move on to production environment where SD card is not supported by hardware.
What would be the workflow then? I have a working bin file for QSPI, a brand new module and only JTAG connection. Ideally the module would already be placed in a sealed chassis, but one time programming could be done earlier.

Having to do first flash on the dev board is an option but not very welcome, since module is already attached to a final device at the time the programming is required. As I mentioned I tried alternative fsbl earlier (on 2019.2) and it would not work for me this time (I programmed earlier modules some time ago during development with success) So this time I want to prepare an instruction for future production series that will work every time.

best regards,
Michal

JH

Hi,
without changing boot mode to JTAG only, I think it's hard.

I think it's not possible to control MODE and PGOOD Pin on your carrier or?  With newer CPLD Firmware it's possible to switch to JTAG only than.
Is Ethernet is available on your final product? Than it's maybe possible to start maybe uboot from xsct console temporary to load your final design from network and write it into the flash.

br
John

michalk

Hi,
Could you please point me to more information on how to use ethernet for programming? The board fortunately is ethernet connected. Will it be possible to use this method with baremetal application and blank QSPI or after some error that makes qspi content unbootable? Dedicated firmware for programming is an option - the process may be complicated, reliability is a priority.

Unfortunately the MODE pin is hardwired do VCC and pgood is used in its primary function (I have to admit I missed the possibility to use this pin to force JTAG-only mode when making a base board design a while back).
On the other hand even routing to jumpers would not help much since the final product is assembled into sealed chassis. I might be able to salvage a single pin on the service connetor so if I understand correctly it would work if I could short pgood and mode, add weak pull-up and an option to short to gnd via service connector. This should set 1/1 on normal operation (QSPI Boot) and 0/0 with programming adapter connected to service connector (JTAG Boot). This change could probably be manually wired even on existing boards.

best regards,
Michal


JH

Hi,
load Uboot with over JTAG with xsct console,this should be:
connect
targets -set -filter {name =~ "Cortex-A9 #0"}
rst
dow fsbl.elf
con
# Wait until DDR init done, then stop CPU and load U-Boot:
stop
dow u-boot.elf
con
On Uboot load your boot.bin with tftp and write to the qspi flah. this should be somthing like this:
setenv serverip 192.168.1.1
setenv ipaddr 192.168.1.10
tftpboot 0x1000000 BOOT.BIN && \
sf probe 0 0 0 && \
sf erase 0x0 +${filesize} && \
sf write 0x1000000 0x0 ${filesize}

br
John