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

FSBL hangs when initializing Si5338

Started by Stonebull, June 13, 2024, 09:37:56 PM

Previous topic - Next topic

Stonebull

Hello,
I am using a TE0715 together with the TE0701 carrier board with Vivado 2019.1. I started my project based on the supplied reference project from trenz for the specific board.

I am having problems getting any program to boot from flash lately and I just cannot figure out what's wrong. I run bare-metal software on the ARM cortex A9.
For simplicity I tried with the simple trenz_hello_world project, which I successfully flashed onto the SoM, but during boot the FSBL(trenz modified) hangs with the following output:

--------------------------------------------------------------------------------<\r>
<\n>
Xilinx First Stage Boot Loader (TE modified)
<\n>
<\r>Release 2018.3<9>Jun 13 2024-15:58:55<\r>
<\n>
<\r>
<\n>
Device IDCODE: 373B093<\r>
<\n>
Device Name: 7z015 (1B)<\r>
<\n>
Device Revision: 0 <\r>
<\n>
--------------------------------------------------------------------------------<\r>
<\n>
TE0715 TE_FsblHookBeforeHandoff_Custom<\r>
<\n>
Configure TE715 SI5338<\r>
<\n>
Si5338 Init Registers Write.<\r>
<\n>
Si5338 Hard reset done.<\r>
<\n>

I left all FSBL(trenz_modified) files untoutched except for enabling the DEBUG_INFO switch and adding a few more p_print() for more info about when the fsbl fails.

int si5338_init(unsigned char chip_addr)
{
int i;
u8 reg_val;
Reg_Data rd;
int Status;

    //p_printf(("Si5338 Init Start.\r\n"));
    //iic_init();
    p_printf(("Si5338 Init Registers Write.\r\n"));

// I2C Programming Procedure
iic_write8( chip_addr, 246, 0x01); //Hard reset
p_printf(("Si5338 Hard reset done.\r\n"));

// Disable Outputs
iic_write8_mask( chip_addr, 230, EOB_ALL, EOB_ALL); // EOB_ALL = 1
p_printf(("Si5338 Disable Outputs done.\r\n"));

// Pause LOL
iic_write8_mask( chip_addr, 241, DIS_LOL, DIS_LOL); // DIS_LOL = 1
p_printf(("Si5338 Pause LOL done.\r\n"));

        ...

Judging from the output I'd say that the fsbl is not able to communicate with the clock generator.

Maybe it is worth mentioning that I've removed and later re-added the I2C1 from the design.
I noticed too late that the I2C1 resource is actually used during boot, but as I re-added it to the MIO pins 48/49 like it was before, I guess that should not be the problem now.

Does anybody have any ideas on how to proceed?
Any help is appreciated.

Waldi3141

Hello Stonebull,

can you try our latest 2022.2 reference design?
https://shop.trenz-electronic.de/de/Download/?path=Trenz_Electronic/Modules_and_Module_Carriers/4x5/TE0715/Reference_Design/2022.2/test_board

I just flashed the hello_te0715 BOOT.bin file to the onboard qspi flash and it boots and programs the PLL just normal on the TE0701. You can use the prebuilt file from our 2022.2 project and try it out without rebuilding anything.

Also, you might need to update the TE0715 CPLD firmware
https://shop.trenz-electronic.de/de/Download/?path=Trenz_Electronic/Modules_and_Module_Carriers/4x5/TE0715

best regards
waldi

Stonebull

Hello Waldi,
sorry for my late reply, I did not see your message earlier.

I am still using the Vivado Version 2019.1 for a reason. A while ago a colleague of mine tried using the Trenz SOMs with the newest reference design, the 2022.2 which resulted in extreme problems during debugging (Stepping issues, breakpoints setting failed,...).

On his request for support, Mr. John Hartfiel could not provide us a solution, apart from telling us to go ask Xilinx for support on their faulty toolchain. Unfortunately AMD repied that they cannot give us support on outdated Tools (Vivado at the time released version 2023.x). So we were stuck, as the newest Reference Design from Trenz was (and still is) using only Vivado 2022.2.

My solution for the current problem of not being able to boot from flash anymore, was to rebuild the project from scratch from a working reference design.

Can you tell me if it is save to not program the Si5338 Clock Generator at all, in order to use the I2C1 for other stuff?
And how may I overcome the booting issue of the FSBL? Can I skip the section that blocks entirely without damaging something?

JH

Hi,
yes simple remove this part of the code for PLL programming. You will not damage the board. This part is like a example in case you want to reprogramm PLL on power up. TE0715 PLL is preprogramm with following CLKS:
https://wiki.trenz-electronic.de/display/PD/TE0715+TRM#TE0715TRM-ProgrammableClockGenerator
it's the same output CLK frequence like on the example reprogramming on runtime.


br
John

Stonebull

Okay great, thanks for the info.

Best Regards