I am attempting to create a bootloader, for a K70, using the ideas in AN4368. My problem is with the flash driver supplied. In particular the routine 'Flash_ByteProgram". It is returning a 'Flash access error'. In flash_FTFL.h the flash write command is defined as 0x06 using '#define FlashCmd_ProgramLongWord 0x06'. However looking at the K70 reference manual there is no 0x06 command. See section 30.4.10.2. There is a 'Program Phrase' command that writes eight bytes. Is the flash driver supplied with AN4368 incorrect? Is a corrected one available?
I have attached both flash_FTFL.c and flash_FTFL.h that were supplied with AN4368.
Solved! Go to Solution.
Look at AN4370SW. It includes functional routines for K70 flash configuration
Hope this helps
The Documentation for Kinetis K70 (Graphic LCD 120/150 MHz MCUs) can be found at "K70_120 Product Summary Page", Freescale folks are constantly uploading new resources (like ANs) to help you all.
Definitely, that page deserves a bookmark
Look at AN4370SW. It includes functional routines for K70 flash configuration
Hope this helps
The code in AN4370SW uses the correct Flash command (0x07) but it still has bugs. It only works when the number of data bytes in the S record is an integral number of 'phrases'. The default in CodeWarrior 10.2 does not have this. I needed to change the projects ARM Linker Output so that the 'Max S-Record Length' is 84. It defaults to 80 which results in 9.5 phrases per S record. Also, the address in the S record must be on an 8-byte boundary (not four as tested in the program).
Changing the 'Max S-Record Length' to 84 created a file where each record had an integral number of 'phrases' and the address was on 8-byte boundaries. Programming the flash then worked.
However, I am worried about the future. Specified the 'Max S-Record Length' as 84; but did not specify a minimum. What's to stop CW 10.3 from using 80 regardless of the Max setting. Also I did not see any way to tell the linker to create S records that have addresses on 8-byte boundaries. But this is a problem for another day.
Thanks for your help.
Hi
I can't help with the application note code but older code's FLASH driver can be adapted to the devices with FPU by respecting the following points:
- the FLASH granularity (smallest block that can be erased) is 4k rather than 2k
- writes to flash have to be done in 'phrases' of 8 bytes rather than as long words
The driver changes are quite easy but there can be a bigger impact on the higher layers which may neen adaptation to work with the larger write/erase size restrictions.
However not only the Flash is different - the PLL setup needs to be calculated differently since the PLL works internally twices as fast.
If using the DMA controller this is a little different (it has groups that need to be set up correctly to avoid conflicts).
The USB source clock set up is a little different.
Therefore you may find that the application note in question requires a more thorough K70 target configuration review before it is completely operation.
Regards
Mark
P,S. I have K70 loaders for UART (S-rec), USB CDC device, USB-MSD device, SD card and Ethernet (FTP, TFT or Web server) but unfortunately not for a USB-stick....
I am using MQX which handles the PLL and DMA.