Using sdphost to configure SDRAM, load binary to SDRAM and then jump/execute?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Using sdphost to configure SDRAM, load binary to SDRAM and then jump/execute?

1,239 Views
jackking
Senior Contributor I

Hello,

I am building some testing utilities for production.  I just need to load and run the testing utility once.   I am currently using a modified version of the NXP bootloader project, but that runs from DTCM and I am running out of space.

I would like to load the testing binary into SDRAM and run from there if possible.

I have created a python script to configure clocks and SDRAM, then load the binary into SDRAM and jump to SDRAM to begin execution, but the execution fails.

I have confirmed that I can read/write SDRAM using sdphost, so I'm not sure if the problem is with my linker, elftosb or if it just isn't possible to jump to an SDRAM address for execution. 

Has anyone successfully done this?

I plan to just build a simple "hello world" executable and see if I can successfully load and run that as my next step, but was hoping someone has some insight.

thanks

0 Kudos
Reply
6 Replies

1,212 Views
jackking
Senior Contributor I

Here are the sdphost commands I am executing:

Configuring system clocks...
Executing clock config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x400fc068 32 0xFFFFFFFF
Executing clock config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x400fc06c 32 0xFFFFFFFF
Executing clock config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x400fc070 32 0xFFFFFFFF
Executing clock config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x400fc074 32 0xFFFFFFFF
Executing clock config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x400fc078 32 0xFFFFFFFF
Executing clock config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x400fc07c 32 0xFFFFFFFF
Executing clock config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x400fc080 32 0xFFFFFFFF
Executing clock config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x400D8030 32 0x00002001
Executing clock config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x400D8100 32 0x001D0000
Executing clock config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x400FC014 32 0x00010D40

Configuring SDRAM registers...
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8014 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8018 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f801c 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8020 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8024 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8028 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f802c 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8030 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8034 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8038 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f803c 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8040 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8044 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8048 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f804c 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8050 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8054 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8058 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f805c 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8060 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8064 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8068 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f806c 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8070 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8074 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8078 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f807c 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8080 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8084 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8088 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f808c 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8090 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8094 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8098 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f809c 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f80a0 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f80a4 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f80a8 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f80ac 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401F80B0 32 0x00000010
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f80b4 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f80b8 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8204 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8208 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f820c 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8210 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8214 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8218 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f821c 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8220 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8224 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8228 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f822c 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8230 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8234 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8238 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f823c 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8240 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8244 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8248 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f824c 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8250 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8254 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8258 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f825c 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8260 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8264 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8268 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f826c 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8270 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8274 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8278 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f827c 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8280 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8284 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8288 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f828c 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8290 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8294 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f8298 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f829c 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f82a0 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f82a4 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x401f82a8 32 0x000110F9
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F0000 32 0x10000004
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F0008 32 0x00030524
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F000C 32 0x06030524
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F0010 32 0x8000001B
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F0040 32 0x00000F31
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F0044 32 0x00652922
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F0048 32 0x00010920
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F004C 32 0x50210A08
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F0090 32 0x80000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F0094 32 0x00000002
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F0098 32 0x00000000
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F009C 32 0xA55A000F
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F009C 32 0xA55A000C
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F009C 32 0xA55A000C
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F00A0 32 0x00000033
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F009C 32 0xA55A000A
Executing command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0x402F004C 32 0x08080A01
Configuring MPU for SDRAM execution...
Executing MPU config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0xE000ED94 32 0x00000000
Executing MPU config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0xE000ED9C 32 0x80000000
Executing MPU config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0xE000EDA0 32 0x0307001B
Executing MPU config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0xE000ED94 32 0x00000005
Executing MPU config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0xE000EF0C 32 0x00000000
Executing MPU config command: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0xE000EF0C 32 0x00000000

Updating Vector Table Offset Register (VTOR)...
Updating VTOR to point to SDRAM: ../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 write-register 0xE000ED08 32 0x80001000
Command '../secure_provisioning/tools/mac/sdphost -u 0x1FC9,0x0135 jump-address 0x80001000' succeeded
0 Kudos
Reply

1,209 Views
jackking
Senior Contributor I

Here is an example "hello_world.bin" I am trying to load and run (for testing purposes).

I don't think the DCD information matters if loading directly from sdphost and jumping to execute (?)

0 Kudos
Reply

1,207 Views
jackking
Senior Contributor I

The IVT location seems correct at 0x1000


SCR-20241231-ipbx-3.png

0 Kudos
Reply

1,161 Views
Gavin_Jia
NXP TechSupport
NXP TechSupport

Hi @jackking ,

Thanks for your interest in NXP MIMXRT series!

Your scenario is perfectly viable. It's also true that DCD is no longer critical after configuration via spdhost. But I don't find the command to write image in your log? 

sdphost write-file

Also, if you also want to try the SDRAM configuration method via DCD, check out these two links:

1. https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Uploading-to-and-executing-from-SDRAM-on-the-i-M...
2. https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Getting-board-SDRAM-working-with-RT1050EVKB/m-p/...

Best regards,
Gavin

 

0 Kudos
Reply

721 Views
jackking
Senior Contributor I

Do you have any update on this?

Even a working example of the sdphost commands to jump to SDRAM and execute a hello_world binary would help!

Thanks

 

0 Kudos
Reply

923 Views
jackking
Senior Contributor I
Sorry, the write-file is being called, I just didn't have the debug printing it out. The readback of the RAM confirms that the file is written successfully, it just seems that the jump to RAM to begin execution fails.
0 Kudos
Reply