freedom-k28f

README
======

  This port is for the FRDM-K28F development board that features the
  MK28FN2M0VMI15 MCU.  The features of the FRDM-K28F board are:

    o Kinetis MK28FN2M0VMI15 MCU (ARM Cortex-M4 at150 MHz, 1 MB SRAM, 2 MB flash,
      HS and FS USB, 169 MAPBGA package).
    o Kinetis K20 MCU (K20DX128VFM5) based OpenSDA circuit.
    o Dual-role high-speed and full-speed USB interface with the micro-B USB
      connector via the high-speed switch.
    o One 256 Mbit (32 MB) on-board QuadSPI memory at 1.8 V.
    o One 128 Mbit (16 MB) on-board mobile SDRAM memory at 3.3 V.
    o Multiple independent voltage domains: VDD_CORE, VDD, VBAT, and VDDIO_E.
    o FlexIO socket which enables you to connect an optional TFT Proto 5"
      CAPACITIVE from MikroElektronika (5" display board with capacitive touch).
    o Easy access to the MCU input/output through Arduino R3-compatible I/O
      connectors to connect external add-on boards.
    o Flexible power supply option—OpenSDA v2.2 USB, Kinetis K28 USB, or an
      external source.
    o FXOS8700CQ—6-axis sensor with accelerometer and magnetometer.
    o RGB LED.
    o Two mechanical push-buttons for user input and one for the reset.
    o Programmable OpenSDA v2.2 debug circuit supporting the DAP-Link interface
      software which provides:

      - Mass-Storage Device (MSD) flash programming interface.
      - CMSIS-DAP debug interface over a driverless USB HID connection providing
        run-control debugging and compatibility with the IDE tools.
      - Virtual serial port interface.
      - Open-source CMSIS-DAP software project.

Contents
========

  o STATUS
  o Serial Console
  o LEDs and Buttons
  o Configurations

STATUS
======

  2018-05-05:  The basic NSH port appears to be fully functional.  I do see
    one anomaly:  There is a significant, long start up delay.  This delay
    seems to be variable from immediate to several seconds.  I have not
    studied the cause, but there are the symptoms:

    This debug on, I see this output after a reset:

      __start: Reset status: 00:00

      NuttShell (NSH) NuttX-7.24
      nsh> help
      help usage:  help [-v] [<cmd>]

        [           cmp         false       mkdir       rm          true
        ?           dirname     free        mh          rmdir       uname
        basename    dd          help        mount       set         umount
        break       df          hexdump     mv          source      unset
        cat         echo        kill        mw          sleep       usleep
        cd          exec        ls          ps          test        xd
        cp          exit        mb          pwd         time

      Builtin Apps:
      nsh>

  The delay occurs between the reset and the __start debug output.  __start
  is the reset handler so this is very early in the logic.  On a reset, it
  vectors to __start.  That particular debug message is output after most
  low-level initialization has occurred.  So the delay is something within
  the initialization sequence at the beginning of __start.  My suspicion is
  the delays associated with the clock configuration.

Serial Console
==============

    ----- --------------- -------------------------------
    GPIO  LPUART FUNCTION BOARD CONFIGURATION
    ----- --------------- -------------------------------
    PTA1  LPUART0_RX      PTA1  GPIO0
    PTA15 LPUART0_RX      PTA15 FXIO0_D21
    PTB14 LPUART0_RX      PTB14
    PTB16 LPUART0_RX      PTB16 SDRAM_D17
    PTC25 LPUART0_RX      PTC25 LPUART0_RX_TGTMCU
    PTD6  LPUART0_RX      PTD6  Arduino_D17_ADC0_SE7b
    PTA2  LPUART0_TX      PTA2  INT
    PTA14 LPUART0_TX      PTA14 FXIO0_D20
    PTB15 LPUART0_TX            N/C
    PTB17 LPUART0_TX      PTB17 SDRAM_D16
    PTC24 LPUART0_TX      PTC24 LPUART0_TX_TGTMCU
    PTD7  LPUART0_TX      PTD7  SDRAM_CKE
    PTA3  LPUART0_RTS     PTA3
    PTA17 LPUART0_RTS     PTA17 FXIO0_D23
    PTB2  LPUART0_RTS     PTB2  Arduino_D19_ADC0_SE12/I2C0_SCL/SDRAM_WE
    PTB12 LPUART0_RTS     PTB12 Arduino_D5_FTM1_CH0/FTM0_CH4
    PTC27 LPUART0_RTS     PTC27 FXOS8700CQ_RESET
    PTD4  LPUART0_RTS     PTD4  SDRAM_A10
    PTA0  LPUART0_CTS     PTA0  K28F_SWD_CLK
    PTA16 LPUART0_CTS     PTA16 FXIO0_D22
    PTB3  LPUART0_CTS     PTB3  Arduino_D18_ADC0_SE13/I2C0_SDA/SDRAM_CS0
    PTB13 LPUART0_CTS     PTB13 Arduino_D6_FTM1_CH1/FTM0_CH5
    PTC26 LPUART0_CTS     PTC26 FXOS8700CQ_INT
    PTD5  LPUART0_CTS     PTD5  SDRAM_A9
    ----- --------------- -------------------------------
    PTD8  LPUART1_RX      PTD8  FXIO0_D24
    PTC3  LPUART1_RX      PTC3  CLKOUT
    PTE1  LPUART1_RX      PTE1  QSPIA0_SCLK
    PTC4  LPUART1_TX      PTC4  SDRAM_A19
    PTD9  LPUART1_TX      PTD9  FXIO0_D25
    PTE0  LPUART1_TX      PTE0  QSPIA0_DATA3
    PTD10 LPUART1_RTS     PTD10 FXIO0_D26
    PTC1  LPUART1_RTS     PTC1  SDRAM_A21
    PTE3  LPUART1_RTS     PTE3  QSPIA0_DATA2
    PTC2  LPUART1_CTS     PTC1  SDRAM_A21
    PTD11 LPUART1_CTS     PTD11 FXIO0_D27
    PTE2  LPUART1_CTS     PTE2  QSPIA0_DATA0
    ----- --------------- -------------------------------
    PTA25 LPUART2_RX      PTA25 SDHC0_D0/Arduino_D0_LPUART2_RX
    PTD2  LPUART2_RX      PTD2  SDRAM_A12
    PTE13 LPUART2_RX            N/C
    PTE17 LPUART2_RX            N/C
    PTA24 LPUART2_TX      PTA24 SDHC0_D1/Arduino_D1_LPUART2_TX
    PTD3  LPUART2_TX      PTD3  SDRAM_A11
    PTE12 LPUART2_TX      PTE12 I2S0_TX_BCLK
    PTE16 LPUART2_TX            N/C
    PTD0  LPUART2_RTS     PTD0  Button_LLWU_P12
    PTA27 LPUART2_RTS     PTA27 SDHC0_CMD
    PTE19 LPUART2_RTS           N/C
    PTA26 LPUART2_CTS     PTA26 SDHC0_DCLK
    PTD1  LPUART2_CTS     PTD1  Arduino_D16_ADC0_SE5b
    PTE18 LPUART2_CTS           N/C
    ----- --------------- -------------------------------
    PTA29 LPUART3_RX      PTA29 SDHC0_D2
    PTB10 LPUART3_RX      PTB10 SDRAM_D19
    PTC16 LPUART3_RX      PTC16 SDRAM_DQM2
    PTE5  LPUART3_RX      PTE5  QSPIA0_SS0/USB0_SOF_OUT
    PTA28 LPUART3_TX      PTA28 SDHC0_D3
    PTB11 LPUART3_TX      PTB11 SDRAM_D18
    PTC17 LPUART3_TX      PTC17 SDRAM_DQM3
    PTE4  LPUART3_TX      PTE4  QSPIA0_DATA1
    PTB8  LPUART3_RTS     PTB8  SDRAM_D21
    PTA31 LPUART3_RTS     PTA31
    PTC18 LPUART3_RTS     PTC18 Arduino_D7
    PTE7  LPUART3_RTS     PTE7  I2S0_RXD0/LEDRGB_GREEN
    PTA30 LPUART3_CTS     PTA30
    PTB9  LPUART3_CTS     PTB9  SDRAM_D20
    PTC19 LPUART3_CTS     PTC19 Arduino_D8
    PTE6  LPUART3_CTS     PTE6  I2S0_MCK/LEDRGB_RED
    ----- --------------- -------------------------------
    PTA21 LPUART4_RX      PTA21 TE/FXIO0_D9
    PTC14 LPUART4_RX      PTC14 SDRAM_D25
    PTE21 LPUART4_RX            N/C
    PTA20 LPUART4_TX      PTA20 RD/FXIO0_D8
    PTC15 LPUART4_TX      PTC15 SDRAM_D24
    PTE20 LPUART4_TX            N/C
    PTA23 LPUART4_RTS     PTA23 WR/FXIO0_D7
    PTC12 LPUART4_RTS     PTC12 SDRAM_D27
    PTE23 LPUART4_RTS           N/C
    PTA22 LPUART4_CTS     PTA22 CS/FXIO0_D6
    PTC13 LPUART4_CTS     PTC13 SDRAM_D26
    PTE22 LPUART4_CTS           N/C
    ----- --------------- -------------------------------

  Arduino RS-232 Shield
  ---------------------

    ----- --------------- -------------------------------
    GPIO  LPUART FUNCTION BOARD CONFIGURATION
    ----- --------------- -------------------------------
    PTA25 LPUART2_RX      PTA25 SDHC0_D0/Arduino_D0_LPUART2_RX
    PTA24 LPUART2_TX      PTA24 SDHC0_D1/Arduino_D1_LPUART2_TX
    ----- --------------- -------------------------------

  Note:  PTA24 and PTA25 are shared between Micro SD Card circuit and
  Arduino connectors. Remove R106 and R107 or R94 and R11 as necessary to
  prevent contention.

  Virtual serial port
  -------------------

  A serial port connection is available between the OpenSDA v2.2 MCU and
  pins PTC24 and PTC25 of the K28 MCU:

    ----- --------------- -------------------------------
    GPIO  LPUART FUNCTION BOARD CONFIGURATION
    ----- --------------- -------------------------------
    PTC25 LPUART0_RX      PTC25 LPUART0_RX_TGTMCU
    PTC24 LPUART0_TX      PTC24 LPUART0_TX_TGTMCU
    ----- --------------- -------------------------------

  Default Console
  ---------------

    Unless otherwise noted, LPUART0 (the virtual serial port) is the console
    used in all Freedom-K28F configurations.

  RGB LED
  -------
  An RGB LED is connected through GPIO as shown below:

    LED    K28
    ------ -------------------------------------------------------
    RED    PTE6
    GREEN  PTE7
    BLUE   PTE8

  If CONFIG_ARCH_LEDs is defined, then NuttX will control the LED on board
  the Freedom K28.  Usage of these LEDs is defined in include/board.h and
  src/k28_leds.c.  The following definitions describe how NuttX controls the
  LEDs:

    SYMBOL                Meaning                 LED state
                                                  RED   GREEN  BLUE
    -------------------  -----------------------  -----------------
    LED_STARTED          NuttX has been started    OFF  OFF  OFF
    LED_HEAPALLOCATE     Heap has been allocated   OFF  OFF  ON
    LED_IRQSENABLED      Interrupts enabled        OFF  OFF  ON
    LED_STACKCREATED     Idle stack created        OFF  ON   OFF
    LED_INIRQ            In an interrupt          (no change)
    LED_SIGNAL           In a signal handler      (no change)
    LED_ASSERTION        An assertion failed      (no change)
    LED_PANIC            The system has crashed    FLASH OFF OFF
    LED_IDLE             K28 is in sleep mode     (Optional, not used)

  Buttons
  -------
  Two push button switches, SW2 and SW3, are available on the FRDM-K28F
  board. SW2 is connected to PTA4 and SW3 is connected to PTD0.
  Beside the general purpose IO function, both SW2 and SW3 can be used
  as a low-leakage wakeup (LLWU) source.

    Switch    GPIO Function
    --------- ---------------------------------------------------------------
    SW2       PTA4/NMI_B
    SW3       PTD0/LLWU_P12