Modified AN2295 UART bootloader for K21 (It's applicable to all Kinetis)

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

Modified AN2295 UART bootloader for K21 (It's applicable to all Kinetis)

Modified AN2295 UART bootloader for K21 (It's applicable to all Kinetis)

Hi, all

The default AN2295 UART bootloader doesn't work well on K21/other Kinetis because of using FEI and complicated autocalibration mechanism. I made a simple version to make it works on MK21DX128VMC5, FYI.

Readm.txt:

UART bootloader for K21. (Default is MK21DX128VMC5)

128KB_Pflash_64KB_Dflash.icf is application link script example for MK21DX128 used together with UART bootloader, UART bootloader use 0x0 - 0xFFF.

Q: Why need this patch?
A: The original AN2295 use internal RC and FLL output as system clock. The calibration mechanism is not stable. The main change of this patch is to use external cystal plus PLL as system clock to communicate with PC software.

Changes to AN2295
1) Add MK21D5.h for K21 support
2) Add AN2295_TWR_K21_cfg.h for K21 support(Copy from AN2295_TWR_K60_cfg.h)
3) AN2295_TWR_K21_cfg.h
   1> #define KINETIS_MODEL K21_50MHz
   2> #define KINETIS_FLASH FLASH_128K
   3> #define BOOT_UART_BASE UART2_BASE_PTR
      #define BOOT_UART_GPIO_PORT PORTE_BASE_PTR
      #define BOOT_UART_GPIO_PIN_RX   17
      #define BOOT_UART_GPIO_PIN_TX   16
   4> #define BOOT_PIN_ENABLE_NUM        7
4) Add mcg folder and mcg.c/mcg.h
5) kinetis_params.h:
   1> Modify SRS_REG/SRS_POR_MASK/INIT_CLOCKS_TO_MODULES to meet MK21D5.h
   2> Add PORT_PCR_PS_MASK for BOOTLOADER_PIN_ENABLE_INIT to enable Pull-up.
6) bootloader.h: #define BOOT_WAITING_TIMEOUT 500. PC software can't communicate to bootloader if only 1s delay.
7) bootloader.c:
   1> #include "mcg.h"
   2> Use 25MHz PEE:
      SIM_CLKDIV1 = ( 0    | SIM_CLKDIV1_OUTDIV1(1)
                           | SIM_CLKDIV1_OUTDIV2(1)
                           | SIM_CLKDIV1_OUTDIV4(1));
     
      (void)pll_init(8000000,       /* CLKIN0 frequency */
                     LOW_POWER,     /* Set the oscillator for low power mode */
                     CRYSTAL,       /* Crystal or canned oscillator clock input */
                     4,             /* PLL predivider value */
                     25,            /* PLL multiplier */
                     MCGOUT);       /* Use the output from this PLL as the MCGOUT */
   3> Restore to FEI mode before jump to Application:
      pee_pbe(8000000);
      pbe_fbe(8000000);
      fbe_fei(32768);

Knowing issues:
1) Don't use virtualCOM from OSJTAG, it's very hard to communicate with PC software. Use RS232 in TWR-SER2.
2) BOOTLOADER_CRC_ENABLE must be 0, otherwise PC software will report unknown protocol version

Attachments
No ratings
Version history
Last update:
‎06-27-2013 07:45 PM
Updated by: