From 0d222db31f599e90e5e281f80d21ce3c6af0fef8 Mon Sep 17 00:00:00 2001 From: Jun Wako Date: Sun, 22 Mar 2015 10:51:30 +0900 Subject: infinity: Fix disabling watchdog - watchdog is timed out before disabling it by mbed startup - old booloader disable watchdog while new(2015/01) doesn't --- keyboard/infinity/mbed-infinity/README | 44 ++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'keyboard/infinity/mbed-infinity/README') diff --git a/keyboard/infinity/mbed-infinity/README b/keyboard/infinity/mbed-infinity/README index b0d226f793..43051c9003 100644 --- a/keyboard/infinity/mbed-infinity/README +++ b/keyboard/infinity/mbed-infinity/README @@ -37,3 +37,47 @@ 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 -- cgit v1.2.3