/* * Copyright (c) 2013-15, Freescale Semiconductor, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, this list * of conditions and the following disclaimer. * * o Redistributions in binary form must reproduce the above copyright notice, this * list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * * o Neither the name of Freescale Semiconductor, Inc. nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once char code_section1[] = "/*\n\ * Copyright (c) 2013 - 15, Freescale Semiconductor, Inc.\n\ * All rights reserved\n\ *\n\ * Redistribution and use in source and binary forms, with or without modification,\n\ *are permitted provided that the following conditions are met :\n\ *\n\ * o Redistributions of source code must retain the above copyright notice, this list\n\ * of conditions and the following disclaimer.\n\ *\n\ * o Redistributions in binary form must reproduce the above copyright notice, this\n\ * list of conditions and the following disclaimer in the documentation and / or\n\ * other materials provided with the distribution.\n\ *\n\ * o Neither the name of Freescale Semiconductor, Inc. nor the names of its\n\ * contributors may be used to endorse or promote products derived from this\n\ * software without specific prior written permission.\n\ *\n\ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n\ * DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\ *LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ */\n\ \n\ /*!\n\ * @brief Device specific configuration file for Kinetis bootloader\n\ *\n\ * Provides a bootloader configuration structure and a global variable that\n\ * contains\n\ * the system bootloader configuration data.\n\ */\n\ \n\ #include \n\ \n\ /*!\n\ * @brief Defines the structure to set the Bootloader Configuration Area\n\ *\n\ * This type of variable is used to set the Bootloader Configuration Area\n\ * of the chip.\n\ *\n\ * Warning: some configuration may not work on the devices that donot support \n\ * corresponding feature.\n\ */\n\ typedef struct BootloaderConfiguration\n\ {\n\ uint32_t tag; //!< [00:03] Magic number to verify bootloader configuration is\n\ //! valid. Must be set to 'kcfg'.\n\ uint32_t crcStartAddress; //!< [04:07] Start address for application image CRC\n\ //! check. If the bits are all set then Kinetis\n\ //! bootloader by default will not perform any CRC \n\ //! check.\n\ uint32_t crcByteCount; //!< [08:0b] Byte count for application image CRC\n\ //! check. If the bits are all set then Kinetis\n\ //! bootloader by default will not prform any CRC check.\n\ uint32_t crcExpectedValue; //!< [0c:0f] Expected CRC value for application CRC\n\ //! check. If the bits are all set then Kinetis\n\ //! bootloader by default will not perform any CRC\n\ //! check.\n\ uint8_t enabledPeripherals; //!< [10:10] Bitfield of peripherals to enable.\n\ //! bit 0 - LPUART, bit 1 - I2C, bit 2 - SPI,\n\ //! bit 3 - CAN, bit 4 - USB\n\ //! Kinetis bootloader will enable the peripheral if\n\ //! corresponding bit is set to 1.\n\ uint8_t i2cSlaveAddress; //!< [11:11] If not 0xFF, used as the 7-bit I2C slave\n\ //! address. If 0xFF, defaults to 0x10\n\ //! for I2C slave address.\n\ uint16_t peripheralDetectionTimeoutMs; //!< [12:13] Timeout in milliseconds\n\ //! for active peripheral detection. If\n\ //! 0xFFFF, defaults to 5 seconds.\n\ uint16_t usbVid; //!< [14:15] Sets the USB Vendor ID reported by the device\n\ //! during enumeration. If 0xFFFF, it defaults to 0x15A2.\n\ uint16_t usbPid; //!< [16:17] Sets the USB Product ID reported by the device\n\ //! during enumeration.\n\ uint32_t usbStringsPointer; //!< [18:1b] Sets the USB Strings reported by the\n\ //! device during enumeration.\n\ uint8_t clockFlags; //!< [1c:1c] The flags in the clockFlags configuration\n\ //! field are enabled if the corresponding bit is cleared (0).\n\ //! bit 0 - HighSpeed Enable high speed mode (i.e., 48 MHz).\n\ uint8_t clockDivider; //!< [1d:1d] Inverted value of the divider to use for\n\ //! core and bus clocks when in high speed mode.\n\ uint8_t bootFlags; //!< [1e:1e] If bit 0 is cleared, then Kinetis bootloader\n\ //! will jump to either Quad SPI Flash or internal flash\n\ //! image depending on FOPT BOOTSRC_SEL bits.\n\ //! If the bit is set, then Kinetis bootloader will prepare\n\ //! for host communication over serial peripherals.\n\ uint8_t pad0; //!< [1f:1f] Reserved, set to 0xFF\n\ uint32_t mmcauConfigPointer; //!< [20:23] A pointer to the MMCAU configuration\n\ //! structure in memory.\n\ uint32_t keyBlobPointer; //!< [24:27]Holds a pointer value to the key blob\n\ //! array used to configure OTFAD\n\ uint8_t pad1; //!< [28:28] reserved\n\ uint8_t canConfig1; //!< [29:29] ClkSel[1], PropSeg[3], SpeedIndex[4]\n\ uint16_t canConfig2; //!< [2a:2b] Pdiv[8], Pseg1[3], Pseg2[3], rjw[2]\n\ uint16_t canTxId; //!< [2c:2d] txId\n\ uint16_t canRxId; //!< [2e:2f] rxId\n\ uint32_t qspi_config_block_pointer; //!< [30:33] A pointer to the QSPI config\n\ //! block in internal flash array.\n\ uint32_t reserved[3]; //!<[34:3f] reserved\n\ } bootloader_config_t;\n\ \n\ /*\n\ * Warning: To enable bootloader configuration, User still needs two extra steps :\n\ *\n\ * Step1 : Enable BOOTLOADER_CONFIG.\n\ * Example : #define BOOTLOADER_CONFIG 1\n\ *\n\ * Step2 : Add configuration of the section \"BootloaderConfig\" to your\n\ * linker configuration file.\n\ * Example(IAR) :\n\ * define symbol __application_startaddress = 0; // User-defined\n\ * define symbol m_bootloader_config_start = __application_startaddress + 0x3C0;\n\ * define symbol m_bootloader_config_end = __application_startaddress + 0x3FF;\n\ * define region m_bootloader_config_region = mem:[from m_bootloader_config_start to m_bootloader_config_end];\n\ * place in m_bootloader_config_region{ section BootloaderConfig };\n\ *\n\ * Example(Keil) :\n\ * #define __application_startaddress = 0 // User-defined\n\ * #define m_bootloader_config_start __application_startaddress + 0x3C0\n\ * #define m_bootloader_config_size 0x00000040\n\ *\n\ * LR_m_bootloader_config m_bootloader_config_start m_bootloader_config_size{\n\ * ER_m_bootloader_config m_bootloader_config_start m_bootloader_config_size{ ; load address = execution address\n\ * * (BootloaderConfig)\n\ * }\n\ * }\n\ *\n\ * Example(ARM - GCC) :\n\ * MEMORY\n\ * {\n\ * m_bootloader_config(RX) : ORIGIN = 0x000003C0, LENGTH = 0x00000040\n\ * }\n\ * .bootloader_config :\n\ * {\n\ * . = ALIGN(4);\n\ * KEEP(*(.BootloaderConfig)) // Bootloader Configuration Area (BCA)\n\ * . = ALIGN(4);\n\ * } > m_bootloader_config\n\ *\n\ */\n\ \n\ #ifdef BOOTLOADER_CONFIG\n\ /* Bootlader configuration area */\n\ #if defined(__IAR_SYSTEMS_ICC__)\n\ /* Pragma to place the Bootloader Configuration Array on correct location\n\ * defined in linker file. */\n\ #pragma language = extended\n\ #pragma location = \"BootloaderConfig\"\n\ __root const bootloader_config_t BootloaderConfig @\"BootloaderConfig\" =\n\ #elif defined(__GNUC__)\n\ __attribute__((section(\".BootloaderConfig\"))) const bootloader_config_t BootloaderConfig =\n\ #elif defined(__CC_ARM)\n\ __attribute__((section(\"BootloaderConfig\"))) const bootloader_config_t BootloaderConfig __attribute__((used)) =\n\ #else\n\ #error Unsupported compiler!\n\ #endif\n\ {"; char code_section2[] = "\n };\n\ #endif";