Hi,
I'm very confusing with IBL from MCSDK_2_01_02_06.
I found two main functions in IBL package. These are :
- main () from iblinit.c
- main () from iblmain.c
What is intended for these programs ? I can't understand the relationship between these programs.
Do you have any documents for IBL ? Please note I have read the documents under <mcsdk_ver>/tools/boot_loader/ibl/doc folder but these do not answer to my questions. (....maybe, my problem in English)
I briefly checked the source code to understand its behavior
I want to know how we can apply IBL to user's target board, rather than EVM. So I want to understand the behavior of IBL correctly.
And my current understanding is as below. Please note I'm focusing to the implementations for C6678.
- main () from iblinit.c
- read IBL Boot Map from external device via I2C/SPI I/F to understand the pointers to IBL Configuration Parameter and Boot Table, endianess, etc...
- initialize IBL structure by reading IBL Configuration Parameter from external device.
- initialize PLLs (MAIN/DDR/NET) if IBL structure is being enabled to configure PLLs
- enable EDC if it is enabled at compile time
- branch ROM and re-start boot sequence if it is enabled at compile time
- decode Boot Table and branch to the application
So, no initialization for EMIF/DDR happens. Is this program intended for secondary boot loader for the user application ?
Also, what is Boot Map and IBL Configuration Parameter ? How can users create these image on external device ? i2cConfig ? - main () from iblmain.c
- First of all, the control of this program completely relies on the configurations of IBL structure, but it looks un-initialized. Who initialize IBL structure ?
- Assuming IBL strucutre is being initialized correctly, this program works to initialize EMIF I/F for DDR (If PLL re-initialization is being enabled at compile time, re-configure all PLLs and EMIF) and lastly boot from appropriate boot device.
Any suggestions will be helpful. Thanks.
Kawada