- watchdog is timed out before disabling it by mbed startup - old booloader disable watchdog while new(2015/01) doesn't
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| mbed fix for Infinity
 | |
| =====================
 | |
| Without linker script patch it doesn't place vector table in final binary.
 | |
| And clock is configured to 48MHz using internal clock reference and FLL multiplication.
 | |
| 
 | |
| 
 | |
| mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/system_MK20D5.c
 | |
|     Fix SystemInit: clock setup for internal clock. Inifinity has no external Xtal.
 | |
| 
 | |
| mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/cmsis_nvic.c
 | |
|     Fix NVIC vector address of firmware 0x1000 instead of 0x0
 | |
| 
 | |
| mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/MK20D5.ld
 | |
|     Fix memory map for Infinity bootloader
 | |
|         Flash starts at 0x1000
 | |
|         No flash config bytes sector
 | |
| 
 | |
| USBDevice/USBDevice/USBHAL_KL25Z.cpp
 | |
|     Fix USB clock setup, see below.
 | |
| 
 | |
| 
 | |
| 2015/01/04  Based on mbed-sdk @2f63fa7d78a26.
 | |
| 
 | |
| 
 | |
| 
 | |
| Kinetis USB config
 | |
| ==================
 | |
| Clock source: Internal reference clock wth FLL
 | |
|     SIM_SOPT[USBSRC] = 1(MCGPLLCLK/MCGFLLCLK)
 | |
|     SIM_SOPT[PLLSEL] = 0(MCGFLLCLK)
 | |
| 
 | |
| Clock dividor:
 | |
|     SIM_CLKDIV2[USBDIV] = 0
 | |
|     SIM_CLKDIV2[USBFAC] = 0
 | |
| 
 | |
| Clock enable:
 | |
|     SIM_SCGC4[USBOTG] = 1
 | |
| 
 | |
| 
 | |
| 
 | |
| Infinity bootloader change
 | |
| ==========================
 | |
| After @2c7542e(2015/01) Infinity bootloader doesn't disable watchdog timer and keyboard firmware has to do it itself.  mbed disables watchdog in startup sequence but unfortunately timer is timed out bofore that.
 | |
| 
 | |
| We have to do that in earlier phase of mbed startup sequence.
 | |
| 
 | |
| 
 | |
| mbed starup sequence files:
 | |
| mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_M20D5.s
 | |
| mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/system_MK20D5.c
 | |
| 
 | |
| Infinity booloader change commit:
 | |
| https://github.com/kiibohd/controller/commit/2c7542e2e7f0b8a99edf563dc53164fe1a439483
 | |
| 
 | |
| discussion:
 | |
| https://geekhack.org/index.php?topic=41989.msg1686616#msg1686616
 | |
| 
 | |
| 
 | |
| WORKAROUND
 | |
| ----------
 | |
| Call SystemInit early in Reset_Handler.
 | |
| 
 | |
| $ diff -u ../../mbed-sdk/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_MK20D5.s mbed-infinity
 | |
| --- ../../mbed-sdk/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_MK20D5.s      2015-03-22 10:33:22.779866000 +0900
 | |
| +++ mbed-infinity/startup_MK20D5.s      2015-03-22 10:32:56.483866000 +0900
 | |
| @@ -147,6 +147,8 @@
 | |
|   *      __etext: End of code section, i.e., begin of data sections to copy from.
 | |
|   *      __data_start__/__data_end__: RAM address range that data should be
 | |
|   *      copied to. Both must be aligned to 4 bytes boundary.  */
 | |
| +    ldr    r0, =SystemInit
 | |
| +    blx    r0
 | |
| 
 | |
|      ldr    r1, =__etext
 | |
|      ldr    r2, =__data_start__
 | |
| @@ -161,8 +163,6 @@
 | |
| 
 | |
|  .Lflash_to_ram_loop_end:
 | |
| 
 | |
| -    ldr    r0, =SystemInit
 | |
| -    blx    r0
 | |
|      ldr    r0, =_start
 | |
|      bx    r0
 | |
|      .pool
 |