aboutsummaryrefslogtreecommitdiffstats
path: root/keyboard/infinity/mbed-infinity/README
diff options
context:
space:
mode:
Diffstat (limited to 'keyboard/infinity/mbed-infinity/README')
-rw-r--r--keyboard/infinity/mbed-infinity/README83
1 files changed, 83 insertions, 0 deletions
diff --git a/keyboard/infinity/mbed-infinity/README b/keyboard/infinity/mbed-infinity/README
new file mode 100644
index 000000000..43051c900
--- /dev/null
+++ b/keyboard/infinity/mbed-infinity/README
@@ -0,0 +1,83 @@
+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