diff --git a/firmware/config/boards/kinetis/OS/os/common/startup/ARMCMx/compilers/GCC/startup_ke1xf.S b/firmware/config/boards/kinetis/OS/os/common/startup/ARMCMx/compilers/GCC/startup_ke1xf.S index 8e392e2e97..bc70b218f9 100644 --- a/firmware/config/boards/kinetis/OS/os/common/startup/ARMCMx/compilers/GCC/startup_ke1xf.S +++ b/firmware/config/boards/kinetis/OS/os/common/startup/ARMCMx/compilers/GCC/startup_ke1xf.S @@ -19,7 +19,7 @@ .global Reset_Handler Reset_Handler: /* Errata #e10536 workaround for Kinetis MKE1XF: - * "WDOG: After getting RCS assertion by polling, 4 LPO clock-time delay is the minimum requirementbefore the next block" + * "WDOG: After getting RCS assertion by polling, 4 LPO clock-time delay is the minimum requirement before the next block" * https://www.nxp.com/docs/en/errata/Kinetis_E_0N79P.pdf * https://community.nxp.com/thread/460264 */ diff --git a/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/fsl/fsl_lpuart.c b/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/fsl/fsl_lpuart.c index ce1be46834..c1549e0456 100644 --- a/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/fsl/fsl_lpuart.c +++ b/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/fsl/fsl_lpuart.c @@ -1352,7 +1352,7 @@ void LPUART_TransferHandleIRQ(LPUART_Type *base, lpuart_handle_t *handle) uint32_t enabledInterrupts = LPUART_GetEnabledInterrupts(base); ///////////////////////////////////////////////////////////////////////////////////////// - // [andreika]: we use this 'fake' unused status to trigger the callback via IRQ in software + // [andreika][rusefi]: we use this 'fake' unused status to trigger the callback via IRQ in software if (LPUART_STAT_RXINV_MASK & status) { base->STAT &= ~LPUART_STAT_RXINV_MASK; diff --git a/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/hal_lld.c b/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/hal_lld.c index 705e343fd3..1f44949f6d 100644 --- a/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/hal_lld.c +++ b/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/hal_lld.c @@ -40,6 +40,7 @@ /*===========================================================================*/ // Bootloader config peripheral enable flags +// Bootloader on LPUART & LPSPI, not on CAN #ifndef BCA_PERIPH #define BCA_PERIPH ((1<<0) | (1<<2)) /* LPUART | LPSPI */ #endif /* BCA_PERIPH */ @@ -66,7 +67,8 @@ const uint8_t _cfm[0x10] = { 0xFF, /* NV_FPROT2: PROT=0xFF */ 0xFF, /* NV_FPROT1: PROT=0xFF */ 0xFF, /* NV_FPROT0: PROT=0xFF */ - /* [andreika]: Warning! These two bytes are extremely important! Don't change them until 100% sure! */ + /* [andreika][rusefi]: Warning! These two bytes are extremely important! Don't change them until 100% sure! */ + /* there is an opinion that wrong values would brick your Kinetis chip for good */ 0x7E, /* NV_FSEC: KEYEN=1,MEEN=3,FSLACC=3,SEC=2 */ 0xFB, /* NV_FOPT: BOOTSRC_SEL=1,res=111,RESET_PIN_CFG=1,NMI_DIS=0,BOOTPIN_OPT=1,LPBOOT=1 */ diff --git a/firmware/config/boards/kinetis/OS/os/readme.md b/firmware/config/boards/kinetis/OS/os/readme.md new file mode 100644 index 0000000000..88386ccc74 --- /dev/null +++ b/firmware/config/boards/kinetis/OS/os/readme.md @@ -0,0 +1,20 @@ +Standard NXP headers + firmware/config/boards/kinetis/OS/os/common/ext/CMSIS/KINETIS + + +To address Kinetis #e10536 errata we need to sleep 100 cycles to make watchdog happy. +This is taken care by + firmware/config/boards/kinetis/OS/os/common/startup/ARMCMx/compilers/GCC/startup_ke1xf.S +which is executed prior to the default firmware/ChibiOS/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S + +Linker script for 512K ROM + firmware/config/boards/kinetis/OS/os/common/startup/ARMCMx/compilers/GCC/ld/MKE1xF512.ld + +flash1a & flash1b is some hardware configuration magic + _bca is flash1a via .bcaconfig + _cfm is flash1b via .cfmconfig + + +firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/fsl contains Kinetis SDK files with modifications: + 1) include hal.h in the beginning + 2) firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/fsl/fsl_lpuart.c has UART patch (see AndreiKA tag) \ No newline at end of file diff --git a/firmware/config/boards/kinetis/efifeatures.h b/firmware/config/boards/kinetis/efifeatures.h index c0a385ee3b..66d291df14 100644 --- a/firmware/config/boards/kinetis/efifeatures.h +++ b/firmware/config/boards/kinetis/efifeatures.h @@ -106,6 +106,13 @@ #define EFI_INTERNAL_FLASH TRUE +/** + * Flex Non Volatile Memory is faster than flash + * It also has smaller pages so it takes less time to erase + * + * There is no remote access to FlexNVM meaning that we cannot erase settings externally + * / + #define FLASH_ADDR 0x10000000 // FlexNVM #define FLASH_ADDR_SECOND_COPY 0x10008000 @@ -296,22 +303,6 @@ #define ADC_CHANNEL_VREF ADC_CHANNEL_IN14 -/** - * currently ChibiOS uses only first and second channels of each timer for input capture - * - * So, our options are: - * - * TIM2_CH1 - * PA5 - * - * TIM4_CH1 - * PB6 - * PD12 - * - * TIM9_CH1 - * PE5 - */ - /** * Use 'HAL_USE_UART' DMA-mode driver instead of 'HAL_USE_SERIAL' * diff --git a/firmware/config/boards/kinetis/libc/!compile.bat b/firmware/config/boards/kinetis/libc/!compile.bat index 6515de02f6..d7b2aa9b68 100644 --- a/firmware/config/boards/kinetis/libc/!compile.bat +++ b/firmware/config/boards/kinetis/libc/!compile.bat @@ -1,5 +1,4 @@ @echo off -set PATH=C:\Program Files\Java\jre\bin;G:\VStudio\Subversion\bin;G:\VStudio\arm-elf-gcc\bin;G:\VStudio\MinGW\msys\1.0\bin;G:\VStudio\Git\bin rm -f libtinyc.a arm-none-eabi-gcc -c -mthumb -mcpu=cortex-m4 -mfloat-abi=hard libc_stub.c diff --git a/firmware/config/boards/kinetis/libc/readme.md b/firmware/config/boards/kinetis/libc/readme.md new file mode 100644 index 0000000000..b91a72729e --- /dev/null +++ b/firmware/config/boards/kinetis/libc/readme.md @@ -0,0 +1,12 @@ + +Here is the magic here +1) AndreiKA has downloaded libtinyc from somewhere +2) AndreiKA has compiled libtinyc locally +3) AndreiKA has taken some of the .o object files and pasted those here +4) AndreiKA has added his custom libc_stub.c + +libtinyc.a is the gcc library produced from all the above mentioned object files + +todo: open question where is the official home of libtinyc + +This is about wasting as little RAM as possible. Even complete libtinyc wastes some RAM. \ No newline at end of file diff --git a/firmware/config/boards/kinetis/readme.md b/firmware/config/boards/kinetis/readme.md new file mode 100644 index 0000000000..8e955087a8 --- /dev/null +++ b/firmware/config/boards/kinetis/readme.md @@ -0,0 +1,31 @@ +rusEfi runs on MKE16F512 (alpha version as of July 2019) + +rusEfi Kinetis implementation consists of three files/folders: + firmware/config/boards/kinetis + firmware/hw_layer/ports/kinetis + firmware/hw_layer/trigger_input_comp.cpp + + +Since MKE16F512 is the first not stm32 rusEfi implementation, AndreiKA has a lot of fun! +Kinetis overrides are in + firmware/config/boards/kinetis/rusefi_hw_enums.h overrides pins + firmware/config/boards/kinetis/config/rusefi_config_kinetis.txt + +todo: +have rusefi_stm32_hw_enums.h +have rusefi_kinetis_hw_enums.h +move more generated files to 'generated' folder(s) +maybe generated_stm32? + +todo: +move firmware/config/boards/kinetis/config/!gen_enum_to_string.bat somewhere else? merge with stm32? + +At the moment we use internal RC generator. Open question if it's good enough. + +![pic](https://raw.githubusercontent.com/wiki/rusefi/rusefi_documentation/Hardware/Deucalion/Deucalion_0_1_half_assembled.jpg) + +# How to program + +Used to be NXP_Kinetis_Bootloader_2_0_0 KinetisFlashTool and it's not clear how to download it now :( + +We happen to have https://github.com/rusefi/rusefi_external_utils/raw/master/Kinetis/FSL_Kinetis_Bootloader_2.0.0_repack.zip