Hi people ^^
I'm trying to use the Kinetis Bootloader 1.1.0 and it works perfectly for the drag&drop apps attached in the package. Of course, all the documentation is very useful.
But I have a problem when I try to upgrade MyApp. I'm using CodeWarrior 10.6, the KL25Z platform, and the MyApp is simple: just LED green blinking, with a WAIT component. Compile and generate the .bin file.
I open the IAR project "...\FSL_Kinetis_Bootloader_1_1_0\targets\MKL25Z4\bootloader.eww" and download to my freedom board. Then, open the "...\FSL_Kinetis_Bootloader_1_1_0\bin\win\KinetisUpdater\KinetisUpdater.exe". If I load the "...\FSL_Kinetis_Bootloader_1_1_0\apps\led_demo\binaries\led_demo_FRDM-KL25Z_8000.bin" file it works perfectly, but if I load MyApp, it doesn't work
So I read the doc, and I need the BCA (Bootloader Configuration Area) in MyApp. By reading the "...\FSL_Kinetis_Bootloader_1_1_0\doc\Demo Applications User-s Guide for the Kinetis KL25Z Platforms.pdf", I get this:
"The Bootloader Configuration Area is located at offset 0x3C0 from the beginning of the User Application image". Sounds easy, but how???
At the IAR "...\FSL_Kinetis_Bootloader_1_1_0\FSL_Kinetis_Bootloader_1_1_0\apps\led_demo\led_demo_kl25z4.eww" project I found the file startup_MKL25Z4.s and found this:
------------------------------------------------------------------------------------------------------------------------
#ifdef BL_HAS_BOOTLOADER_CONFIG
; Fill to align with bootloader configuration area BCA.
REPT (0x3c0-0xc0)/4 ; 0xc0:0x3c0
DCD 0xFFFFFFFF
ENDR
__bootloaderConfigurationArea ; 0x3c0
DCD 'kcfg' ; [00:03] tag - Tag value used to validate the bootloader configuration data. Must be set to 'kcfg'.
DCD 0xFFFFFFFF ; [04:07] crcStartAddress
DCD 0xFFFFFFFF ; [08:0b] crcByteCount
DCD 0xFFFFFFFF ; [0c:0f] crcExpectedValue
DCB 0xFF ; [10:10] enabledPeripherals
DCB 0xFF ; [11:11] i2cSlaveAddress
#ifdef FREEDOM
; FRDM-KL25Z doesn't have boot pin so needs the default 5 second timeout
DCW 5000 ; [12:13] peripheralDetectionTimeoutMs - Timeout in milliseconds for peripheral detection before jumping to application code
#else
DCW 500 ; [12:13] peripheralDetectionTimeoutMs - Timeout in milliseconds for peripheral detection before jumping to application code
#endif
DCW 0xFFFF ; [14:15] usbVid
DCW 0xFFFF ; [16:17] usbPid
DCD 0xFFFFFFFF ; [18:1b] usbStringsPointer
DCB 0xFF ; [1c:1c] clockFlags - High Speed and other clock options
DCB 0xFF ; [1d:1d] clockDivider - One's complement of clock divider, zero divider is divide by 1
DCW 0xFFFF ; [1e:1f] reserved
#ifdef BL_HAS_FLASH_CONFIG
; Fill to align with flash configuration field.
REPT (0x400-0x3e0)/4 ; 0x3E0 - 0x3FF
DCD 0xFFFFFFFF
ENDR
#endif
#else
#ifdef BL_HAS_FLASH_CONFIG
; Fill to align with flash configuration field.
REPT (0x400-0xc0)/4 ; 0xc0:0x400
DCD 0xFFFFFFFF
ENDR
#endif
#endif
------------------------------------------------------------------------------------------------------------------------
But in CodeWarrior, I don't know how to put the magic 'kcfg' at 0x83C0. I've tried to change CPU > Build Options > Generate linker file > ROM/RAM Areas, and it generates the next ProccessorExpert.ld file.
MEMORY {
m_interrupts (RX) : ORIGIN = 0x00008000, LENGTH = 0x000003C0
m_bca (RX) : ORIGIN = 0x000083C0, LENGTH = 0x00000040
m_text (RX) : ORIGIN = 0x00008400, LENGTH = 0x00017C00
m_data (RW) : ORIGIN = 0x1FFFF000, LENGTH = 0x00004000
m_cfmprotrom (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010
}
Then, I use the IntFLASH component for writing the FLASH before PEx initializes (CPU > Build Options > User Initialization).
So, my question is: how can I locate de BCA??
Thanks in advance
Original Attachment has been moved to: kinetisboot_8000_LEDgreen.zip
Hi Juanma
I don't know that the BCA area settings are that relevant because if you have a board without an application loaded all these values are 0xff and its is possible to load with a default configuration. If you application keeps them empty at 0xff then the boot loader settings will not be changed in any way. Whatever their values, they don't affect the application - only the way that the boot loader operates later.
The fact that your application is not working will have more to do with the application itself (if using interrupts you will need to either set the VBA accordingly or move vectors to RAM, for example).
See the following for more KL25 references: http://www.utasker.com/kinetis/FRDM-KL25Z.html
See the following for for ideas for configuring for boot loader operation (valid also for KBOOT): http://www.utasker.com/forum/index.php?topic=1869.msg6789#msg6789
Regards
Mark
Hi Mark, thanks for the answer!
Probably you're right, but my question is easier:
- I have the Kinetis Bootloader 1.1.0 (bootloader + RGB LED app) and MyApp (just green LED app).
- I load the Bootloader in debug mode and it works perfectly for RGB LED app binary file provided by the package, but MyApp doesn't.
- So, what should I do to put MyApp by using the bootloader?
Thanks!
Hi Juanma
You need to load your application with KBOOT and then connect the debugger and see why the application doesn't run as you expect.
It may be that KBOOT is not jumping to the application (debugging KBOOT code will show why) and it may be that it is jumping to the application but the application is failing - in the second case you need to debug in your code that was jumped to to find out what is going wrong.
Regards
Mark
Hi Mark
You're right: the KBOOT is not jumping to MyApp because MyApp's bin file is not created correctly.
So, imagine that you create an app from zero (just a blinking led) with CodeWarrior. What should you do?
Thanks a lot
Hi Juanma
Just go here http://www.utasker.com/kinetis.html
There is a CW configuration for the KL25Z that works with KBOOT. Either work with a compete project framework or else copy the methods used.
Regards
Mark