This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 8e0004fd668 docs/freedom-k64f: Migrate README.txt to RST
8e0004fd668 is described below

commit 8e0004fd668906fa0011af5abbb899a0d4b0a79c
Author: Swatantra Yadav <[email protected]>
AuthorDate: Mon Oct 12 21:12:15 2026 +0530

    docs/freedom-k64f: Migrate README.txt to RST
    
    Migrate the legacy monospaced README.txt for the NXP Freedom K64F
    development board (MK64FN1M0VLL12 MCU) to standard Sphinx rST
    documentation format in index.rst, and delete the legacy README.txt.
    
    Includes:
    - Microcontroller and hardware specifications (Cortex-M4 @ 120 MHz with 
FPU, 1MB Flash, 256KB SRAM)
    - Pinout mapping tables for RGB LEDs, user pushbuttons, and serial consoles 
(OpenSDA UART0 and Arduino shield UART3)
    - Ethernet MAC and Micrel KSZ8081RNA PHY signal mapping table, including 
MDIO internal pull-up requirement (CONFIG_KINETIS_ENET_MDIOPULLUP)
    - MicroSD 4-bit SDHC card slot pinout and card detection switch (PTE6)
    - Comprehensive flashing and debugging guides (OpenSDAv2 drag-and-drop MSD, 
pyOCD, OpenOCD, and Segger J-Link firmware)
    - Step-by-step build and configuration instructions for all 4 supported 
board configurations (nsh, netnsh, cdcacm, demo)
    
    Addresses #11077
    Part of #15737
    
    Signed-off-by: Swatantra Yadav <[email protected]>
    Assisted-by: Google Gemini
---
 .../arm/kinetis/boards/freedom-k64f/README.txt     | 940 ---------------------
 .../arm/kinetis/boards/freedom-k64f/index.rst      | 437 +++++++++-
 2 files changed, 435 insertions(+), 942 deletions(-)

diff --git a/Documentation/platforms/arm/kinetis/boards/freedom-k64f/README.txt 
b/Documentation/platforms/arm/kinetis/boards/freedom-k64f/README.txt
deleted file mode 100644
index bf46251329e..00000000000
--- a/Documentation/platforms/arm/kinetis/boards/freedom-k64f/README.txt
+++ /dev/null
@@ -1,940 +0,0 @@
-README.txt
-==========
-
-This is the README file for the port of NuttX to the Freescale Freedom-K64F
-development board.
-
-Contents
-========
-
-  o Freedom K64F Features
-  o Serial Console
-  o LEDs and Buttons
-  o Networking Support
-  o SD Card Support
-  o USB Device Controller Support
-  o Development Environment
-  o GNU Toolchain Options
-  o Freedom K64F Configuration Options
-  o Configurations
-  o Status
-
-Kinetis Freedom K64F Features:
-=============================
-
-  The features of the FRDM-K64F hardware are as follows:
-
-  - MK64FN1M0VLL12 MCU (120 MHz, 1 MB flash memory, 256 KB RAM, low-power,
-    crystal-less USB, and 100 LQFP)
-  - Dual role USB interface with micro-B USB connector
-  - RGB LED
-  - FXOS8700CQ - accelerometer and magnetometer
-  - Two user push buttons
-  - Flexible power supply option - OpenSDAv2 USB, K64 USB, and external
-    source
-  - Easy access to MCU input/output through Arduino R3TM compatible I/O
-    connectors
-  - Programmable OpenSDAv2 debug circuit supporting the CMSIS-DAP Interface
-    software that provides:
-    o Mass storage device (MSD) flash programming interface
-    o CMSIS-DAP debug interface over a driver-less USB HID connection
-       providing run-control debugging and compatibility with IDE tools
-    o Virtual serial port interface
-    o Open-source CMSIS-DAP software project: github.com/mbedmicro/CMSIS-DAP.
-  - Ethernet
-  - SDHC
-  - Add-on RF module: nRF24L01+ Nordic 2.4GHz Radio
-  - Add-on Bluetooth module: JY-MCU BT board V1.05 BT
-
-OpenSDAv2
-=========
-
-  The FRDM-K64F platform features OpenSDAv2, the Freescale open-source
-  hardware embedded serial and debug adapter running an open-source
-  bootloader. This circuit offers several options for serial communication,
-  flash programming, and run-control debugging. OpenSDAv2 is an mbed
-  HDK-compatible debug interface preloaded with the open-source CMSIS-DAP
-  Interface firmware (mbed interface) for rapid prototyping and product
-  development.
-
-  To use set raw binary output for nuttx.bin
-
-Serial Console
-==============
-
-  USB VCOM Console
-  ----------------
-  The primary serial port interface signals are PTB16 UART0_RX and PTB17
-  UART0_TX. These signals are connected to the OpenSDAv2 VCOM circuit.
-
-  Serial Shield Console
-  ---------------------
-  An alternative serial port might use a standard serial shield mounted
-  on the Freedom Board.  In this case, Arduino pin D1 provides UART TX and
-  pin D0 provides UART RX.
-
-  The I/O headers on the FRDM-K64F board are arranged to enable
-  compatibility with Arduino shield. The outer rows of pins (even numbered
-  pins) on the headers, share the same mechanical spacing and placement with
-  the I/O headers on the Arduino Revision 3 (R3) standard.
-
-  The Arduino D0 and D1 pins then correspond to pins 2 and 4 on the J1 I/O
-  connector:
-
-    Arduino Pin              FRDM-K64F J1 Connector
-    ------------------------ -----------------------
-    UART TX, Arduino D1 pin  Pin 4, PTC17, UART3_TX
-    UART RX, Arduino D0 pin  Pin 2, PTC16, UART3_RX
-
-  Default Serial Console
-  ----------------------
-  By default, these configuration are setup to use the Serial Console on
-  UART3.  That, however, is easily reconfigured.
-
-LEDs and Buttons
-================
-
-  RGB LED
-  -------
-  An RGB LED is connected through GPIO as shown below:
-
-    LED    K64
-    ------ -------------------------------------------------------
-    RED    PTB22/SPI2_SOUT/FB_AD29/CMP2_OUT
-    BLUE   PTB21/SPI2_SCK/FB_AD30/CMP1_OUT
-    GREEN  PTE26/ENET_1588_CLKIN/UART4_CTS_b/RTC_CLKOUT/USB0_CLKIN
-
-  If CONFIG_ARCH_LEDs is defined, then NuttX will control the LED on board the
-  Freedom KL25Z.  Usage of these LEDs is defined in include/board.h and
-  src/k64_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             K64 is in sleep mode     (Optional, not used)
-
-  Buttons
-  -------
-  Two push buttons, SW2 and SW3, are available on FRDM-K64F board, where
-  SW2 is connected to PTC6 and SW3 is connected to PTA4. Besides the
-  general purpose input/output functions, SW2 and SW3 can be low-power
-  wake up signal. Also, only SW3 can be a non-maskable interrupt.
-
-  Switch    GPIO Function
-  --------- ---------------------------------------------------------------
-  SW2       PTC6/SPI0_SOUT/PD0_EXTRG/I2S0_RX_BCLK/FB_AD9/I2S0_MCLK/LLWU_P10
-  SW3       PTA4/FTM0_CH1/NMI_b/LLWU_P3
-
-Networking Support
-==================
-
-  Ethernet MAC/KSZ8081 PHY
-  ------------------------
-  ------------ ----------------- --------------------------------------------
-  KSZ8081      Board Signal(s)   K64F Pin
-  Pin Signal                     Function                       pinmux Name
-  --- -------- ----------------- --------------------------------------------
-   1  VDD_1V2  VDDPLL_1.2V       ---                            ---
-   2  VDDA_3V3 VDDA_ENET         ---                            ---
-   3  RXM      ENET1_RX-         ---                            ---
-   4  RXP      ENET1_RX+         ---                            ---
-   5  TXM      ENET1_TX-         ---                            ---
-   6  TXP      ENET1_TX+         ---                            ---
-   7  X0       RMII_XTAL0        ---                            ---
-   8  XI       RMII_XTAL1        ---                            ---
-   9  REXT     ---               ---, Apparently not connected  ---
-  10  MDIO     RMII0_MDIO        PTB0/RMII0_MDIO                PIN_RMII0_MDIO
-  11  MDC      RMII0_MDC         PTB1/RMII0_MDC                 PIN_RMII0_MDC
-  12  RXD1     RMII0_RXD_1       PTA12/RMII0_RXD1               PIN_RMII0_RXD1
-  13  RXD0     RMII0_RXD_0       PTA13/RMII0_RXD0               PIN_RMII0_RXD0
-  14  VDDIO    VDDIO_ENET        ---                            ---
-  15  CRS_DIV                    PTA14/RMII0_CRS_DV             
PIN_RMII0_CRS_DV
-  16  REF_CLK  RMII_RXCLK        PTA18/EXTAL0, PHY clock input  ---
-  17  RXER     RMII0_RXER        PTA5/RMII0_RXER                PIN_RMII0_RXER
-  18  INTRP    RMII0_INT_B,      J14 Pin 2, Apparently not      ---
-               PHY_INT_1         available unless jumpered
-  19  TXEN     RMII0_TXEN        PTA15/RMII0_TXEN               PIN_RMII0_TXEN
-  20  TXD0     RMII0_TXD_0       PTA16/RMII0_TXD0               PIN_RMII0_TXD0
-  21  TXD1     RMII0_TXD_1       PTA17/RMII0_TXD1               PIN_RMII0_TXD1
-  22  GND1     ---               ---                            ---
-  24  nRST     PHY_RST_B         ---                            ---
-  25  GND2     ---               ---                            ---
-  --- -------- ----------------- --------------------------------------------
-
-  No external pullup is available on MDIO signal when MK64FN1M0VLL12 MCU is
-  requests status of the Ethernet link connection. Internal pullup is required
-  when port configuration for MDIO signal is enabled:
-
-    CONFIG_KINETIS_ENET_MDIOPULLUP=y
-
-  Networking support via the can be added to NSH by selecting the following
-  configuration options.
-
-  Selecting the EMAC peripheral
-  -----------------------------
-
-  System Type -> Kinetis Peripheral Support
-    CONFIG_KINETIS_ENET=y               : Enable the EThernet MAC peripheral
-
-  System Type -> Ethernet Configuration
-    CONFIG_KINETIS_ENETNETHIFS=1
-    CONFIG_KINETIS_ENETNRXBUFFERS=6
-    CONFIG_KINETIS_ENETNTXBUFFERS=2
-    CONFIG_KINETIS_ENET_MDIOPULLUP=y
-
-  Networking Support
-    CONFIG_NET=y                        : Enable Neworking
-    CONFIG_NET_ETHERNET=y               : Support Ethernet data link
-    CONFIG_NET_SOCKOPTS=y               : Enable socket operations
-    CONFIG_NET_ETH_PKTSIZE=590          : Maximum packet size 1518 is more 
standard
-    CONFIG_NET_ARP=y                    : Enable ARP
-    CONFIG_NET_ARPTAB_SIZE=16           : ARP table size
-    CONFIG_NET_ARP_IPIN=y               : Enable ARP address harvesting
-    CONFIG_NET_ARP_SEND=y               : Send ARP request before sending data
-    CONFIG_NET_TCP=y                    : Enable TCP/IP networking
-    CONFIG_NET_TCP_WRITE_BUFFERS=y      : Support TCP write-buffering
-    CONFIG_NET_TCPBACKLOG=y             : Support TCP/IP backlog
-    CONFIG_NET_MAX_LISTENPORTS=20       :
-    CONFIG_NET_UDP=y                    : Enable UDP networking
-    CONFIG_NET_BROADCAST=y              : Needed for DNS name resolution
-    CONFIG_NET_ICMP=y                   : Enable ICMP networking
-    CONFIG_NET_ICMP_SOCKET=y            : Needed for NSH ping command
-                                        : Defaults should be okay for other 
options
-f Application Configuration -> Network Utilities
-    CONFIG_NETDB_DNSCLIENT=y               : Enable host address resolution
-    CONFIG_NETUTILS_TELNETD=y           : Enable the Telnet daemon
-    CONFIG_NETUTILS_TFTPC=y             : Enable TFTP data file transfers for 
get and put commands
-    CONFIG_NETUTILS_NETLIB=y            : Network library support is needed
-    CONFIG_NETUTILS_WEBCLIENT=y         : Needed for wget support
-                                        : Defaults should be okay for other 
options
-  Application Configuration -> NSH Library
-    CONFIG_NSH_TELNET=y                 : Enable NSH session via Telnet
-    CONFIG_NSH_IPADDR=0x0a000002        : Select a fixed IP address
-    CONFIG_NSH_DRIPADDR=0x0a000001      : IP address of gateway/host PC
-    CONFIG_NSH_NETMASK=0xffffff00       : Netmask
-    CONFIG_NSH_NOMAC=y                  : Need to make up a bogus MAC address
-                                        : Defaults should be okay for other 
options
-
-  You can also enable enable the DHCPC client for networks that use
-  dynamically assigned address:
-
-  Application Configuration -> Network Utilities
-    CONFIG_NETUTILS_DHCPC=y             : Enables the DHCP client
-
-  Networking Support
-    CONFIG_NET_UDP=y                    : Depends on broadcast UDP
-
-  Application Configuration -> NSH Library
-    CONFIG_NET_BROADCAST=y
-    CONFIG_NSH_DHCPC=y                  : Tells NSH to use DHCPC, not
-                                        : the fixed addresses
-
-  Using the network with NSH
-  --------------------------
-
-  So what can you do with this networking support?  First you see that
-  NSH has several new network related commands:
-
-    ifconfig, ifdown, ifup:  Commands to help manage your network
-    get and put:             TFTP file transfers
-    wget:                    HTML file transfers
-    ping:                    Check for access to peers on the network
-    Telnet console:          You can access the NSH remotely via telnet.
-
-  You can also enable other add on features like full FTP or a Web
-  Server or XML RPC and others.  There are also other features that
-  you can enable like DHCP client (or server) or network name
-  resolution.
-
-  By default, the IP address of the FRDM-K64F will be 10.0.0.2 and
-  it will assume that your host is the gateway and has the IP address
-  10.0.0.1.
-
-    nsh> ifconfig
-    eth0    HWaddr 00:e0:de:ad:be:ef at UP
-            IPaddr:10.0.0.2 DRaddr:10.0.0.1 Mask:255.255.255.0
-
-  You can use ping to test for connectivity to the host (Careful,
-  Window firewalls usually block ping-related ICMP traffic).  On the
-  target side, you can:
-
-    nsh> ping 10.0.0.1
-    PING 10.0.0.1 56 bytes of data
-    56 bytes from 10.0.0.1: icmp_seq=1 time=0 ms
-    56 bytes from 10.0.0.1: icmp_seq=2 time=0 ms
-    56 bytes from 10.0.0.1: icmp_seq=3 time=0 ms
-    56 bytes from 10.0.0.1: icmp_seq=4 time=0 ms
-    56 bytes from 10.0.0.1: icmp_seq=5 time=0 ms
-    56 bytes from 10.0.0.1: icmp_seq=6 time=0 ms
-    56 bytes from 10.0.0.1: icmp_seq=7 time=0 ms
-    56 bytes from 10.0.0.1: icmp_seq=8 time=0 ms
-    56 bytes from 10.0.0.1: icmp_seq=9 time=0 ms
-    56 bytes from 10.0.0.1: icmp_seq=10 time=0 ms
-    10 packets transmitted, 10 received, 0% packet loss, time 10100 ms
-
-  NOTE: In this configuration is is normal to have packet loss > 0%
-  the first time you ping due to the default handling of the ARP
-  table.
-
-  On the host side, you should also be able to ping the FRDM-K64F:
-
-    $ ping 10.0.0.2
-
-  You can also log into the NSH from the host PC like this:
-
-    $ telnet 10.0.0.2
-    Trying 10.0.0.2...
-    Connected to 10.0.0.2.
-    Escape character is '^]'.
-    sh_telnetmain: Session [3] Started
-
-    NuttShell (NSH) NuttX-6.31
-    nsh> help
-    help usage:  help [-v] [<cmd>]
-
-      [           echo        ifconfig    mkdir       mw          sleep
-      ?           exec        ifdown      mkfatfs     ping        test
-      cat         exit        ifup        mkfifo      ps          umount
-      cp          free        kill        mkrd        put         usleep
-      cmp         get         losetup     mh          rm          wget
-      dd          help        ls          mount       rmdir       xd
-      df          hexdump     mb          mv          source
-
-    Builtin Apps:
-    nsh>
-
-  NOTE:  If you enable this networking as described above, you will
-  experience a delay on booting NSH.  That is because the start-up logic
-  waits for the network connection to be established before starting
-  NuttX.  In a real application, you would probably want to do the
-  network bringup on a separate thread so that access to the NSH prompt
-  is not delayed.
-
-  This delay will be especially long if the board is not connected to
-  a network.  On the order of minutes!  You will probably think that
-  NuttX has crashed!  And then, when it finally does come up after
-  numerous timeouts and retries, the network will not be available --
-  even if the network cable is plugged in later.
-
-  The long delays can be eliminated by using a separate the network
-  initialization thread discussed below.  Recovering after the network
-  becomes available requires the network monitor feature, also discussed
-  below.
-
-  Network Initialization Thread
-  -----------------------------
-  There is a configuration option enabled by CONFIG_NSH_NETINIT_THREAD
-  that will do the NSH network bring-up asynchronously in parallel on
-  a separate thread.  This eliminates the (visible) networking delay
-  altogether.  This current implementation, however, has some limitations:
-
-    - If no network is connected, the network bring-up will fail and
-      the network initialization thread will simply exit.  There are no
-      retries and no mechanism to know if the network initialization was
-      successful (it could perform a network Ioctl to see if the link is
-      up and it now, keep trying, but it does not do that now).
-
-    - Furthermore, there is currently no support for detecting loss of
-      network connection and recovery of the connection (similarly, this
-      thread could poll periodically for network status, but does not).
-
-  Both of these shortcomings could be eliminated by enabling the network
-  monitor:
-
-  Network Monitor
-  ---------------
-  By default the network initialization thread will bring-up the network
-  then exit, freeing all of the resources that it required.  This is a
-  good behavior for systems with limited memory.
-
-  If the CONFIG_NSH_NETINIT_MONITOR option is selected, however, then the
-  network initialization thread will persist forever; it will monitor the
-  network status.  In the event that the network goes down (for example, if
-  a cable is removed), then the thread will monitor the link status and
-  attempt to bring the network back up.  In this case the resources
-  required for network initialization are never released.
-
-  Pre-requisites:
-
-    - CONFIG_NSH_NETINIT_THREAD as described above.
-
-    - The K64F EMAC block does not support PHY interrupts.  The KSZ8081
-      PHY interrupt line is brought to a jumper block and it should be
-      possible to connect that some some interrupt port pin.  You would
-      need to provide some custom logic in the Freedcom K64F
-      configuration to set up that PHY interrupt.
-
-    - In addition to the PHY interrupt, the Network Monitor also requires the
-      following setting:
-
-        CONFIG_NETDEV_PHY_IOCTL. Enable PHY IOCTL commands in the Ethernet
-        device driver. Special IOCTL commands must be provided by the Ethernet
-        driver to support certain PHY operations that will be needed for link
-        management. There operations are not complex and are implemented for
-        the Atmel SAMA5 family.
-
-        CONFIG_ARCH_PHY_INTERRUPT. This is not a user selectable option.
-        Rather, it is set when you select a board that supports PHY
-        interrupts.  For the K64F, like most other architectures, the PHY
-        interrupt must be provided via some board-specific GPIO.  In any
-        event, the board-specific logic must provide support for the PHY
-        interrupt. To do this, the board logic must do two things: (1) It
-        must provide the function arch_phy_irq() as described and prototyped
-        in the nuttx/include/nuttx/arch.h, and (2) it must select
-        CONFIG_ARCH_PHY_INTERRUPT in the board configuration file to
-        advertise that it supports arch_phy_irq().
-
-        One other thing: UDP support is required (CONFIG_NET_UDP).
-
-  Given those prerequisites, the network monitor can be selected with these
-  additional settings.
-
-    System Type -> Kinetis Ethernet Configuration
-      CONFIG_ARCH_PHY_INTERRUPT=y           : (auto-selected)
-      CONFIG_NETDEV_PHY_IOCTL=y             : (auto-selected)
-
-    Application Configuration -> NSH Library -> Networking Configuration
-      CONFIG_NSH_NETINIT_THREAD             : Enable the network 
initialization thread
-      CONFIG_NSH_NETINIT_MONITOR=y          : Enable the network monitor
-      CONFIG_NSH_NETINIT_RETRYMSEC=2000     : Configure the network monitor as 
you like
-
-SD Card Support
-===============
-
-  Card Slot
-  ---------
-  A micro Secure Digital (SD) card slot is available on the FRDM-K64F 
connected to
-  the SD Host Controller (SDHC) signals of the MCU. This slot will accept micro
-  format SD memory cards. The SD card detect pin (PTE6) is an open switch that
-  shorts with VDD when card is inserted.
-
-    ------------ ------------- --------
-    SD Card Slot Board Signal  K64F Pin
-    ------------ ------------- --------
-    DAT0         SDHC0_D0      PTE1
-    DAT1         SDHC0_D1      PTE0
-    DAT2         SDHC0_D2      PTE5
-    CD/DAT3      SDHC0_D3      PTE4
-    CMD          SDHC0_CMD     PTE3
-    CLK          SDHC0_DCLK    PTE2
-    SWITCH       D_CARD_DETECT PTE6
-    ------------ ------------- --------
-
-  There is no Write Protect pin available to the K64F.
-
-  Configuration Settings
-  ----------------------
-  Enabling SDHC support. The Freedom K64F provides one microSD memory card
-  slot.  Support for the SD slots can be enabled with the following
-  settings:
-
-    System Type->Kinetic Peripheral Selection
-      CONFIG_KINETIS_SDHC=y                 : To enable SDHC0 support
-      CONFIG_KINETIS_SDHC_DMA=y             : Use SDIO DMA
-
-    System Type
-      CONFIG_KINETIS_GPIOIRQ=y              : GPIO interrupts needed
-      CONFIG_KINETIS_PORTEINTS=y            : Card detect pin is on PTE6
-
-    Device Drivers -> MMC/SD Driver Support
-      CONFIG_MMCSD=y                        : Enable MMC/SD support
-      CONFIG_MMSCD_NSLOTS=1                 : One slot per driver instance
-      CONFIG_MMCSD_MULTIBLOCK_LIMIT=1       : (REVISIT)
-      CONFIG_MMCSD_HAVE_CARDDETECT=y        : Supports card-detect PIOs
-      CONFIG_MMCSD_MMCSUPPORT=n             : Interferes with some SD cards
-      CONFIG_MMCSD_SPI=n                    : No SPI-based MMC/SD support
-      CONFIG_MMCSD_SDIO=y                   : SDIO-based MMC/SD support
-      CONFIG_SDIO_BLOCKSETUP=y              : Needs to know block sizes
-
-    RTOS Features -> Work Queue Support
-      CONFIG_SCHED_WORKQUEUE=y              : Driver needs work queue support
-      CONFIG_SCHED_HPWORK=y
-
-    Application Configuration -> NSH Library
-      CONFIG_BOARDCTL=y                 : Or
-      CONFIG_BOARD_LATE_INITIALIZE=y
-
-  Using the SD card
-  -----------------
-
-  1. After booting, the SDHC device will appear as /dev/mmcsd0.
-  2. If you try mounting an SD card with nothing in the slot, the mount will
-     fail:
-
-       nsh> mount -t vfat /dev/mmcsd0 /mnt/sd0
-       nsh: mount: mount failed: 19
-
-     NSH can be configured to provide errors as strings instead of
-     numbers.  But in this case, only the error number is reported.  The
-     error numbers can be found in nuttx/include/errno.h:
-
-       #define ENODEV              19
-       #define ENODEV_STR          "No such device"
-
-     So the mount command is saying that there is no device or, more
-     correctly, that there is no card in the SD card slot.
-
-  3. Insert the SD card.  Then the mount should succeed.
-
-      nsh> mount -t vfat /dev/mmcsd0 /mnt/sd0
-      nsh> ls /mnt/sd1
-      /mnt/sd1:
-       atest.txt
-      nsh> cat /mnt/sd1/atest.txt
-      This is a test
-
-     NOTE:  See the next section entitled "Auto-Mounter" for another way
-     to mount your SD card.
-
-  4. Before removing the card, you must umount the file system.  This is
-     equivalent to "ejecting" or "safely removing" the card on Windows:  It
-     flushes any cached data to an SD card and makes the SD card unavailable
-     to the applications.
-
-       nsh> umount -t /mnt/sd0
-
-     It is now safe to remove the card.  NuttX provides into callbacks
-     that can be used by an application to automatically unmount the
-     volume when it is removed.  But those callbacks are not used in
-     these configurations.
-
-  Auto-Mounter
-  ------------
-  NuttX implements an auto-mounter than can make working with SD cards
-  easier.  With the auto-mounter, the file system will be automatically
-  mounted when the SD card is inserted into the SDHC slot and automatically
-  unmounted when the SD card is removed.
-
-  Here is a sample configuration for the auto-mounter:
-
-    File System Configuration
-      CONFIG_FS_AUTOMOUNTER=y
-
-    Board-Specific Options
-      CONFIG_FRDMK64F_SDHC_AUTOMOUNT=y
-      CONFIG_FRDMK64F_SDHC_AUTOMOUNT_FSTYPE="vfat"
-      CONFIG_FRDMK64F_SDHC_AUTOMOUNT_BLKDEV="/dev/mmcsd0"
-      CONFIG_FRDMK64F_SDHC_AUTOMOUNT_MOUNTPOINT="/mnt/sdcard"
-      CONFIG_FRDMK64F_SDHC_AUTOMOUNT_DDELAY=1000
-      CONFIG_FRDMK64F_SDHC_AUTOMOUNT_UDELAY=2000
-
-  WARNING:  SD cards should never be removed without first unmounting
-  them.  This is to avoid data and possible corruption of the file
-  system.  Certainly this is the case if you are writing to the SD card
-  at the time of the removal.  If you use the SD card for read-only access,
-  however, then I cannot think of any reason why removing the card without
-  mounting would be harmful.
-
-USB Device Controller Support
-==============================
-
-  USB Device Controller Support
-  -----------------------------
-  The USBHS device controller driver is enabled with he following
-  configurationsettings:
-
-    Device Drivers -> USB Device Driver Support
-      CONFIG_USBDEV=y                           : Enable USB device support
-    For full-speed/low-power mode:
-      CONFIG_USBDEV_DUALSPEED=n                 : Disable High speed support
-    For high-speed/normal mode:
-      CONFIG_USBDEV_DUALSPEED=y                 : Enable High speed support
-      CONFIG_USBDEV_DMA=y                       : Enable DMA methods
-      CONFIG_USBDEV_MAXPOWER=100                : Maximum power consumption
-      CONFIG_USBDEV_SELFPOWERED=y               : Self-powered device
-
-    System Type -> Kinetis Peripheral Selection
-      CONFIG_KINETIS_USBOTG=y
-
-  CDC/ACM Device Class
-  --------------------
-  In order to be usable, you must all enabled some class driver(s) for the
-  USBHS device controller.  Here, for example, is how to configure the CDC/ACM
-  serial device class:
-
-    Device Drivers -> USB Device Driver Support
-      CONFIG_CDCACM=y                           : USB Modem (CDC ACM) support
-      CONFIG_CDCACM_EP0MAXPACKET=64             : Endpoint 0 packet size
-      CONFIG_CDCACM_EPINTIN=1                   : Interrupt IN endpoint number
-      CONFIG_CDCACM_EPINTIN_FSSIZE=64           : Full speed packet size
-      CONFIG_CDCACM_EPINTIN_HSSIZE=64           : High speed packet size
-      CONFIG_CDCACM_EPBULKOUT=3                 : Bulk OUT endpoint number
-      CONFIG_CDCACM_EPBULKOUT_FSSIZE=64         : Full speed packet size
-      CONFIG_CDCACM_EPBULKOUT_HSSIZE=512        : High speed packet size
-      CONFIG_CDCACM_EPBULKIN=2                  : Bulk IN endpoint number
-      CONFIG_CDCACM_EPBULKIN_FSSIZE=64          : Full speed packet size
-      CONFIG_CDCACM_EPBULKIN_HSSIZE=512         : High speed packet size
-      CONFIG_CDCACM_NWRREQS=4                   : Number of write requests
-      CONFIG_CDCACM_NRDREQS=8                   : Number of read requests
-      CONFIG_CDCACM_BULKIN_REQLEN=96            : Size of write request buffer 
(for full speed)
-      CONFIG_CDCACM_BULKIN_REQLEN=768           : Size of write request buffer 
(for high speed)
-      CONFIG_CDCACM_RXBUFSIZE=257               : Serial read buffer size
-      CONFIG_CDCACM_TXBUFSIZE=193               : Serial transmit buffer size 
(for full speed)
-      CONFIG_CDCACM_TXBUFSIZE=769               : Serial transmit buffer size 
(for high speed)
-      CONFIG_CDCACM_VENDORID=0x0525             : Vendor ID
-      CONFIG_CDCACM_PRODUCTID=0xa4a7            : Product ID
-      CONFIG_CDCACM_VENDORSTR="NuttX"           : Vendor string
-      CONFIG_CDCACM_PRODUCTSTR="CDC/ACM Serial" : Product string
-
-    Device Drivers -> Serial Driver Support
-      CONFIG_SERIAL_REMOVABLE=y                 : Support for removable serial 
device
-
-  The CDC/ACM application provides commands to connect and disconnect the
-  CDC/ACM serial device:
-
-    CONFIG_SYSTEM_CDCACM=y                     : Enable connect/disconnect 
support
-    CONFIG_SYSTEM_CDCACM_DEVMINOR=0            : Use device /dev/ttyACM0
-    CONFIG_CDCACM_RXBUFSIZE=???                : A large RX may be needed
-
-  If you include this CDC/ACM application, then you can connect the CDC/ACM
-  serial device to the host by entering the command 'sercon' and you detach
-  the serial device with the command 'serdis'.  If you do no use this
-  application, they you will have to write logic in your board initialization
-  code to initialize and attach the USB device.
-
-Development Environment
-=======================
-
-  Either Linux or Cygwin on Windows can be used for the development 
environment.
-  The source has been built only using the GNU toolchain (see below).  Other
-  toolchains will likely cause problems. Testing was performed using the Cygwin
-  environment.
-
-GNU Toolchain Options
-=====================
-
-  The NuttX make system supports several GNU-based toolchains under Linux,
-  Cygwin under Windows, and Windows native.  To select a toolchain:
-
-  1. Use 'make menuconfig' and select the toolchain that you are using
-     under the System Type menu.
-  2. The default toolchain is the NuttX buildroot under Linux or Cygwin:
-
-    CONFIG_ARM_TOOLCHAIN_BUILDROOT=y
-
-  You may also have to modify the PATH environment variable if your make cannot
-  find the tools.
-
-Freedom K64F Configuration Options
-==================================
-
-    CONFIG_ARCH - Identifies the arch/ subdirectory.  This should
-       be set to:
-
-       CONFIG_ARCH=arm
-
-    CONFIG_ARCH_family - For use in C code:
-
-       CONFIG_ARCH_ARM=y
-
-    CONFIG_ARCH_architecture - For use in C code:
-
-       CONFIG_ARCH_CORTEXM4=y
-
-    CONFIG_ARCH_CHIP - Identifies the arch/*/chip subdirectory
-
-       CONFIG_ARCH_CHIP=kinetis
-
-    CONFIG_ARCH_CHIP_name - For use in C code to identify the exact
-       chip:
-
-       CONFIG_ARCH_CHIP_MK64FN1M0VLL12
-
-    CONFIG_ARCH_BOARD - Identifies the boards/ subdirectory and
-       hence, the board that supports the particular chip or SoC.
-
-       CONFIG_ARCH_BOARD="freedom-k64f" (for the Freedom K64F development 
board)
-
-    CONFIG_ARCH_BOARD_name - For use in C code
-
-       CONFIG_ARCH_BOARD_FREEDOM_K64F=y
-
-    CONFIG_ARCH_LOOPSPERMSEC - Must be calibrated for correct operation
-       of delay loops
-
-    CONFIG_ENDIAN_BIG - define if big endian (default is little
-       endian)
-
-    CONFIG_RAM_SIZE - Describes the installed DRAM (SRAM in this case):
-
-       CONFIG_RAM_SIZE=0x00010000 (64Kb)
-
-    CONFIG_RAM_START - The start address of installed DRAM
-
-       CONFIG_RAM_START=0x20000000
-
-    CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to boards that
-       have LEDs
-
-    CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
-       stack. If defined, this symbol is the size of the interrupt
-        stack in bytes.  If not defined, the user task stacks will be
-      used during interrupt handling.
-
-    CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
-
-    CONFIG_ARCH_LEDS -  Use LEDs to show state. Unique to board architecture.
-
-  Individual subsystems can be enabled:
-
-    CONFIG_KINETIS_TRACE    -- Enable trace clocking on power up.
-    CONFIG_KINETIS_FLEXBUS  -- Enable flexbus clocking on power up.
-    CONFIG_KINETIS_UART0    -- Support UART0
-    CONFIG_KINETIS_UART1    -- Support UART1
-    CONFIG_KINETIS_UART2    -- Support UART2
-    CONFIG_KINETIS_UART3    -- Support UART3
-    CONFIG_KINETIS_UART4    -- Support UART4
-    CONFIG_KINETIS_UART5    -- Support UART5
-    CONFIG_KINETIS_ENET     -- Support Ethernet (K5x, K6x, and K7x only)
-    CONFIG_KINETIS_RNGB     -- Support the random number generator(K6x only)
-    CONFIG_KINETIS_FLEXCAN0 -- Support FlexCAN0
-    CONFIG_KINETIS_FLEXCAN1 -- Support FlexCAN1
-    CONFIG_KINETIS_SPI0     -- Support SPI0
-    CONFIG_KINETIS_SPI1     -- Support SPI1
-    CONFIG_KINETIS_SPI2     -- Support SPI2
-    CONFIG_KINETIS_I2C0     -- Support I2C0
-    CONFIG_KINETIS_I2C1     -- Support I2C1
-    CONFIG_KINETIS_I2S      -- Support I2S
-    CONFIG_KINETIS_DAC0     -- Support DAC0
-    CONFIG_KINETIS_DAC1     -- Support DAC1
-    CONFIG_KINETIS_ADC0     -- Support ADC0
-    CONFIG_KINETIS_ADC1     -- Support ADC1
-    CONFIG_KINETIS_CMP      -- Support CMP
-    CONFIG_KINETIS_VREF     -- Support VREF
-    CONFIG_KINETIS_SDHC     -- Support SD host controller
-    CONFIG_KINETIS_FTM0     -- Support FlexTimer 0
-    CONFIG_KINETIS_FTM1     -- Support FlexTimer 1
-    CONFIG_KINETIS_FTM2     -- Support FlexTimer 2
-    CONFIG_KINETIS_LPTMR0   -- Support the low power timer 0
-    CONFIG_KINETIS_RTC      -- Support RTC
-    CONFIG_KINETIS_SLCD     -- Support the segment LCD (K3x, K4x, and K5x only)
-    CONFIG_KINETIS_EWM      -- Support the external watchdog
-    CONFIG_KINETIS_CMT      -- Support Carrier Modulator Transmitter
-    CONFIG_KINETIS_USBOTG   -- Support USB OTG (see also CONFIG_USBHOST and 
CONFIG_USBDEV)
-    CONFIG_KINETIS_USBDCD   -- Support the USB Device Charger Detection module
-    CONFIG_KINETIS_LLWU     -- Support the Low Leakage Wake-Up Unit
-    CONFIG_KINETIS_TSI      -- Support the touch screeen interface
-    CONFIG_KINETIS_FTFL     -- Support FLASH
-    CONFIG_KINETIS_DMA      -- Support DMA
-    CONFIG_KINETIS_CRC      -- Support CRC
-    CONFIG_KINETIS_PDB      -- Support the Programmable Delay Block
-    CONFIG_KINETIS_PIT      -- Support Programmable Interval Timers
-    CONFIG_ARM_MPU          -- Support the MPU
-
-  Kinetis interrupt priorities (Default is the mid priority).  These should
-  not be set because they can cause unhandled, nested interrupts.  All
-  interrupts need to be at the default priority in the current design.
-
-    CONFIG_KINETIS_UART0PRIO
-    CONFIG_KINETIS_UART1PRIO
-    CONFIG_KINETIS_UART2PRIO
-    CONFIG_KINETIS_UART3PRIO
-    CONFIG_KINETIS_UART4PRIO
-    CONFIG_KINETIS_UART5PRIO
-
-    CONFIG_KINETIS_EMACTMR_PRIO
-    CONFIG_KINETIS_EMACTX_PRIO
-    CONFIG_KINETIS_EMACRX_PRIO
-    CONFIG_KINETIS_EMACMISC_PRIO
-
-    CONFIG_KINETIS_SDHC_PRIO
-
-  PIN Interrupt Support
-
-    CONFIG_KINETIS_GPIOIRQ   -- Enable pin interrupt support.  Also needs
-      one or more of the following:
-    CONFIG_KINETIS_PORTAINTS -- Support 32 Port A interrupts
-    CONFIG_KINETIS_PORTBINTS -- Support 32 Port B interrupts
-    CONFIG_KINETIS_PORTCINTS -- Support 32 Port C interrupts
-    CONFIG_KINETIS_PORTDINTS -- Support 32 Port D interrupts
-    CONFIG_KINETIS_PORTEINTS -- Support 32 Port E interrupts
-
-  Kinetis K64 specific device driver settings
-
-    CONFIG_UARTn_SERIAL_CONSOLE - selects the UARTn (n=0..5) for the
-      console and ttys0 (default is the UART0).
-    CONFIG_UARTn_RXBUFSIZE - Characters are buffered as received.
-       This specific the size of the receive buffer
-    CONFIG_UARTn_TXBUFSIZE - Characters are buffered before
-       being sent.  This specific the size of the transmit buffer
-    CONFIG_UARTn_BAUD - The configure BAUD of the UART.
-    CONFIG_UARTn_BITS - The number of bits.  Must be either 8 or 8.
-    CONFIG_UARTn_PARTIY - 0=no parity, 1=odd parity, 2=even parity
-
-  Kenetis ethernet controller settings
-
-    CONFIG_ENET_NRXBUFFERS - Number of RX buffers.  The size of one
-        buffer is determined by CONFIG_NET_ETH_PKTSIZE.  Default: 6
-    CONFIG_ENET_NTXBUFFERS - Number of TX buffers.  The size of one
-        buffer is determined by CONFIG_NET_ETH_PKTSIZE.  Default: 2
-    CONFIG_ENET_USEMII - Use MII mode.  Default: RMII mode.
-    CONFIG_ENET_PHYADDR - PHY address
-
-Configurations
-==============
-
-Each Freedom K64F configuration is maintained in a sub-directory and
-can be selected as follow:
-
-    tools/configure.sh freedom-k64f:<subdir>
-
-Where <subdir> is one of the following:
-
-  netnsh:
-  ------
-    This configuration is identical to the nsh configuration described
-    below except that networking support is enabled.
-
-    NOTES:
-
-    1. This configuration uses the mconf-based configuration tool.  To
-       change this configuration using that tool, you should:
-
-       a. Build and install the kconfig-mconf tool.  See nuttx/README.txt
-          see additional README.txt files in the NuttX tools repository.
-
-       b. Execute 'make menuconfig' in nuttx/ in order to start the
-          reconfiguration process.
-
-    2. Default platform/toolchain:
-
-       CONFIG_HOST_WINDOWS=y               : Cygwin under Windows
-       CONFIG_WINDOWS_CYGWIN=y
-       CONFIG_ARM_TOOLCHAIN_GNU_EABI=y  : ARM/mbed toolcahin (arm-none-elf-gcc)
-       CONFIG_INTELHEX_BINARY=y            : Output formats: Intel hex binary
-
-    3. The Serial Console is provided on UART3 with the correct pin
-       configuration for use with an Arduino Serial Shield.
-
-    4. SDHC support is not enabled in this configuration.  Refer to the
-       configuration settings listed above under "SD Card Support".
-
-    5. Support for NSH built-in applications is enabled, but no built-in
-       applications have been configured in.
-
-    6. No external pullup is available on MDIO signal when MK64FN1M0VLL12 MCU
-       is requests status of the Ethernet link connection. Internal pullup is
-       required when port configuration for MDIO signal is enabled:
-
-       CONFIG_KINETIS_ENET_MDIOPULLUP=y
-
-    7. Configured to use a fixed IPv4 address:
-
-       CONFIG_NSH_IPADDR=0x0a000002
-       CONFIG_NSH_DRIPADDR=0x0a000001
-       CONFIG_NSH_NETMASK=0xffffff00
-
-       And a bogus MAC address:
-
-       CONFIG_NSH_NOMAC=y
-       CONFIG_NSH_SWMAC=y
-       CONFIG_NETINIT_MACADDR=0x00e0deadbeef
-
-  nsh:
-  ---
-    Configures the NuttShell (nsh) located at apps/examples/nsh using a
-    serial console on UART3.
-
-    NOTES:
-
-    1. This configuration uses the mconf-based configuration tool.  To
-       change this configuration using that tool, you should:
-
-       a. Build and install the kconfig-mconf tool.  See nuttx/README.txt
-          see additional README.txt files in the NuttX tools repository.
-
-       b. Execute 'make menuconfig' in nuttx/ in order to start the
-          reconfiguration process.
-
-    2. Default platform/toolchain:
-
-         CONFIG_HOST_WINDOWS=y               : Cygwin under Windows
-         CONFIG_WINDOWS_CYGWIN=y
-         CONFIG_ARM_TOOLCHAIN_GNU_EABI=y  : ARM/mbed toolcahin 
(arm-none-elf-gcc)
-         CONFIG_INTELHEX_BINARY=y            : Output formats: Intel hex binary
-
-    3. The Serial Console is provided on UART0 with the correct pin
-       configuration for use with the OpenSDAv2 VCOM.  This can be switched
-       to use a RS-232 shield on UART3 by reconfiguring the serial console.
-
-         -CONFIG_KINETIS_UART0=y
-         +CONFIG_KINETIS_UART3=y
-         -CONFIG_UART0_SERIALDRIVER=y
-         +CONFIG_UART3_SERIALDRIVER=y
-         -CONFIG_UART0_SERIAL_CONSOLE=y
-         +CONFIG_UART3_SERIAL_CONSOLE=y
-         -CONFIG_UART0_RXBUFSIZE=256
-         +CONFIG_UART3_RXBUFSIZE=256
-         -CONFIG_UART0_TXBUFSIZE=256
-         +CONFIG_UART3_TXBUFSIZE=256
-         -CONFIG_UART0_BAUD=115200
-         +CONFIG_UART3_BAUD=115200
-         -CONFIG_UART0_BITS=8
-         +CONFIG_UART3_BITS=8
-         -CONFIG_UART0_PARITY=0
-         +CONFIG_UART3_PARITY=0
-         -CONFIG_UART0_2STOP=0
-         +CONFIG_UART3_2STOP=0
-
-       NOTE: On my Windows 10 / Cygwin64 system, the OpenSDAv2 VCOM is not
-       recognized.  I probably need to install a driver?
-
-       There is a serial USB driver on the mbed web site.  However, this
-       driver would not install on Windows 10 for me.  I understand that
-       it installs OK on Windows 7.
-
-    4. Support for NSH built-in applications is enabled, but no built-in
-       applications have been configured in.
-
-    5. An SDHC driver is enabled in this configuration but does not yet work.
-       The basic problem seems to be that it does not sense the presence of
-       the SD card on PTE6.  No interrupts are generated when the SD card is
-       inserted or removed.  You might want to disable SDHC and MMC/SD if
-       you are using this configuration.  Refer to the configuration
-       settings listed above under "SD Card Support".
-
-Status
-======
-
-  2016-07-11:  Received hardware today and the board came up on the very
-    first try.  That does not happen often.  At this point, the very basic
-    NSH configuration is working and LEDs are working.
-
-    The only odd behavior that I see is that pressing SW3 causes an NMI
-    interrupt (followed by a crash):
-
-      kinetis_nmi: PANIC!!! NMI received
-
-    I don't yet understand why this is.
-
-  2016-07-12:  Added support for the KSZ8081 PHY and added the netnsh
-    configuration.  The network is basically functional.  More testing is
-    needed, but I have not seen any obvious network failures.
-
-    In testing, I notice a strange thing.  If I run at full optimization the
-    code runs (albeit with bugs-to-be-solved).  But with no optimization or
-    even at -O1, the system fails to boot.  This seems to be related to the
-    watchdog timer.
-
-  2016-07-13:  Add SD automounter logic; broke out SDHC logic into a separate
-    file.  The nsh configuration now has SDHC enabled be default.  Does not
-    yet work.  The basic problem seems to be that it does not sense the
-    presence of the SD card on PTE6.  No interrupts are generated when the
-    SD card is inserted or removed.  You might want to disable SDHC and
-    MMC/SD if you are using this configuration.
-
-    The nsh configuration now builds successfully with USB device enabled.
-    USB device, however, has not yet been tested.  I have not yet looked
-    into 48MHz clocking requirements.
-
-  2017-02-10:  These have been numerous SDHC fixes submitted by Marc Rechte'.
-    These may or may not have fixed the SDHC issues mentioned about.  You
-    would have to retest to verify the SDHC functionality.
diff --git a/Documentation/platforms/arm/kinetis/boards/freedom-k64f/index.rst 
b/Documentation/platforms/arm/kinetis/boards/freedom-k64f/index.rst
index d5dabd8fe68..c7a6044eca2 100644
--- a/Documentation/platforms/arm/kinetis/boards/freedom-k64f/index.rst
+++ b/Documentation/platforms/arm/kinetis/boards/freedom-k64f/index.rst
@@ -4,6 +4,439 @@ freedom-k64f
 
 .. tags:: arch:arm, chip:kinetis, vendor:nxp
 
-.. include:: README.txt
-   :literal:
+The Freescale / NXP Freedom K64F (FRDM-K64F) is an ultra-low-cost, compact
+development board designed for rapid prototyping with the NXP Kinetis K64
+microcontroller family.
 
+The board features the **MK64FN1M0VLL12** MCU, built around an ARM Cortex-M4
+core with hardware Floating Point Unit (FPU), running at up to 120 MHz with 1 
MB
+of Flash memory and 256 KB of SRAM. The board is mechanically and electrically
+compatible with the Arduino Uno Revision 3 (R3) form factor.
+
+Key Features
+============
+
+- **Microcontroller**: NXP Kinetis MK64FN1M0VLL12 (100-pin LQFP)
+  - 32-bit ARM Cortex-M4 with single-precision hardware FPU
+  - Core clock frequency up to 120 MHz
+  - 1 MB dual-bank embedded Flash memory (with read-while-write capability)
+  - 256 KB SRAM
+  - Hardware Cryptographic Acceleration Unit (CAU) and Random Number Generator 
(RNGB)
+- **Ethernet**:
+  - Onboard 10/100 Mbps RMII Ethernet PHY (Micrel / Microchip KSZ8081RNA)
+  - Integrated RJ-45 connector with built-in magnetics
+- **Mass Storage**:
+  - Push-push MicroSD memory card slot connected to SDHC (4-bit SDIO interface)
+  - Dedicated card-detection switch on pin PTE6
+- **USB**:
+  - Dual-role Full-Speed USB 2.0 Device/Host controller with Micro-B USB 
connector
+  - Crystal-less USB operation capability
+- **Sensors**:
+  - NXP FXOS8700CQ 6-axis sensor (3-axis digital accelerometer and 3-axis 
digital magnetometer)
+  - Connected via I2C bus 0 (I2C0)
+- **User Interface**:
+  - Tricolor (RGB) user LED (Red on PTB22, Blue on PTB21, Green on PTE26)
+  - Two user pushbuttons: SW2 (PTC6) and SW3 (PTA4 / NMI)
+  - Dedicated system reset pushbutton (SW1)
+- **Debug & Programming (OpenSDAv2)**:
+  - Onboard Freescale OpenSDAv2 circuit running CMSIS-DAP / mbed bootloader 
firmware
+  - Mass Storage Device (MSD) drag-and-drop flash programming
+  - Virtual Serial Port (VCOM) over USB for the default NuttShell console
+  - CMSIS-DAP debug interface for run-control and GDB debugging
+- **Expansion Connectors**:
+  - Arduino R3 compatible footprint outer header pins
+  - Additional inner row headers for full MCU I/O breakout
+  - Footprint for 2.4 GHz RF module (Nordic nRF24L01+) and Bluetooth module
+
+Hardware Configuration
+======================
+
+Serial Console
+--------------
+
+The Kinetis K64 provides multiple UART modules. NuttX supports two primary
+serial console configurations:
+
+USB VCOM Console (Default)
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The default serial console uses **UART0**, which is routed directly to the
+onboard OpenSDAv2 microcontroller:
+
+- **RX**: PTB16 (UART0_RX)
+- **TX**: PTB17 (UART0_TX)
+- **Baud rate**: 115200 8N1
+
+Connecting the OpenSDA micro-USB port (J26) to a host PC exposes a virtual 
serial
+port (e.g., ``/dev/ttyACM0`` on Linux or ``COMx`` on Windows), giving immediate
+access to the NuttShell prompt without requiring external FTDI adapters.
+
+Arduino Shield Serial Console
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Alternatively, UART3 is routed to the Arduino R3 standard header pins on
+connector J1:
+
+- **UART3_RX**: PTC16 (Arduino Pin D0 / J1 Pin 2)
+- **UART3_TX**: PTC17 (Arduino Pin D1 / J1 Pin 4)
+- **Baud rate**: 115200 8N1
+
+This interface allows attaching standard Arduino serial shields or RS-232 / TTL
+expansion boards.
+
+Switching Console to UART3 (Arduino Shield)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To switch the primary serial console from OpenSDA (UART0) to the Arduino
+shield pins on UART3, configure the following settings via ``make menuconfig``:
+
+.. code-block:: text
+
+   # Disable UART0 as serial console
+   CONFIG_KINETIS_UART0 is not set
+   CONFIG_UART0_SERIAL_CONSOLE is not set
+
+   # Enable UART3 as serial console
+   CONFIG_KINETIS_UART3=y
+   CONFIG_UART3_SERIALDRIVER=y
+   CONFIG_UART3_SERIAL_CONSOLE=y
+   CONFIG_UART3_RXBUFSIZE=256
+   CONFIG_UART3_TXBUFSIZE=256
+   CONFIG_UART3_BAUD=115200
+   CONFIG_UART3_BITS=8
+   CONFIG_UART3_PARITY=0
+   CONFIG_UART3_2STOP=0
+
+RGB LED
+-------
+
+The FRDM-K64F provides an onboard tricolor (RGB) LED. The cathodes are 
connected
+to MCU GPIO pins, so driving a pin low illuminates the corresponding color:
+
+===== ========================================================
+LED   K64 Port Pin / Function
+===== ========================================================
+RED   PTB22 / SPI2_SOUT / FB_AD29 / CMP2_OUT (Active Low)
+BLUE  PTB21 / SPI2_SCK / FB_AD30 / CMP1_OUT (Active Low)
+GREEN PTE26 / ENET_1588_CLKIN / UART4_CTS_b / RTC_CLKOUT (Active Low)
+===== ========================================================
+
+When ``CONFIG_ARCH_LEDS`` is enabled, NuttX indicates kernel state using the
+RGB LED:
+
+==================== ======================= ===== ===== =====
+Symbol               Meaning                 RED   GREEN BLUE
+==================== ======================= ===== ===== =====
+``LED_STARTED``      NuttX has started       OFF   OFF   OFF
+``LED_HEAPALLOCATE`` Heap allocated          OFF   OFF   ON
+``LED_IRQSENABLED``  Interrupts enabled      OFF   OFF   ON
+``LED_STACKCREATED`` Idle stack created      OFF   ON    OFF
+``LED_INIRQ``        Handling an interrupt   N/C   N/C   N/C
+``LED_SIGNAL``       Inside signal handler   N/C   N/C   N/C
+``LED_ASSERTION``    Assertion failed        N/C   N/C   N/C
+``LED_PANIC``        Kernel crash / panic    FLASH OFF   OFF
+==================== ======================= ===== ===== =====
+
+During normal operation, the green LED remains illuminated. In the event of a
+fatal kernel panic, the red LED flashes.
+
+User Pushbuttons
+----------------
+
+The board includes two user pushbuttons:
+
+====== ======================= ==============================================
+Switch Port Pin                Features
+====== ======================= ==============================================
+SW2    PTC6 / LLWU_P10         User button, Low-Leakage Wake-up unit input
+SW3    PTA4 / NMI_b / LLWU_P3  User button, Non-Maskable Interrupt, Wake-up
+====== ======================= ==============================================
+
+.. note::
+   Pin PTA4 is multiplexed with the Cortex-M4 Non-Maskable Interrupt (NMI).
+   By default, NuttX configures PTA4 as a standard GPIO with pull-up.
+
+Ethernet (KSZ8081RNA PHY)
+-------------------------
+
+The onboard Micrel / Microchip KSZ8081RNA Ethernet PHY connects to the K64
+Ethernet MAC via Reduced Media Independent Interface (RMII):
+
+============ ================= ===================== ========================
+PHY Signal   Board Net Name    K64 Port Pin          Pinmux Function
+============ ================= ===================== ========================
+MDIO         RMII0_MDIO        PTB0                  PIN_RMII0_MDIO
+MDC          RMII0_MDC         PTB1                  PIN_RMII0_MDC
+RXD0         RMII0_RXD_0       PTA13                 PIN_RMII0_RXD0
+RXD1         RMII0_RXD_1       PTA12                 PIN_RMII0_RXD1
+CRS_DV       RMII0_CRS_DV      PTA14                 PIN_RMII0_CRS_DV
+RXER         RMII0_RXER        PTA5                  PIN_RMII0_RXER
+REF_CLK      RMII_RXCLK        PTA18 / EXTAL0        50 MHz Clock Input
+TXEN         RMII0_TXEN        PTA15                 PIN_RMII0_TXEN
+TXD0         RMII0_TXD_0       PTA16                 PIN_RMII0_TXD0
+TXD1         RMII0_TXD_1       PTA17                 PIN_RMII0_TXD1
+RST_B        PHY_RST_B         Reset line            Active Low
+============ ================= ===================== ========================
+
+.. important::
+   The FRDM-K64F board does not provide an external pull-up resistor on the
+   MDIO signal line. Therefore, the internal pull-up resistor on the MCU must
+   be enabled via ``CONFIG_KINETIS_ENET_MDIOPULLUP=y`` in the NuttX 
configuration.
+
+MicroSD Card Slot (SDHC)
+------------------------
+
+A push-push MicroSD slot connects directly to the K64 SD Host Controller (SDHC)
+over a 4-bit SDIO interface:
+
+============ ================= =====================
+SD Card Net  Board Signal      K64 Port Pin
+============ ================= =====================
+DAT0         SDHC0_D0          PTE1
+DAT1         SDHC0_D1          PTE0
+DAT2         SDHC0_D2          PTE5
+CD/DAT3      SDHC0_D3          PTE4
+CMD          SDHC0_CMD         PTE3
+CLK          SDHC0_DCLK        PTE2
+CARD_DETECT  D_CARD_DETECT     PTE6 (Active Low switch)
+============ ================= =====================
+
+Using the MicroSD Card
+~~~~~~~~~~~~~~~~~~~~~~
+
+Once booted, the SD card block driver registers at ``/dev/mmcsd0``.
+
+Manual Mount and Unmount:
+
+.. code-block:: bash
+
+   # Mount FAT filesystem to /mnt/sdcard
+   nsh> mount -t vfat /dev/mmcsd0 /mnt/sdcard
+
+   # List files and read contents
+   nsh> ls /mnt/sdcard
+   nsh> cat /mnt/sdcard/test.txt
+
+   # Always unmount before removing the card
+   nsh> umount /mnt/sdcard
+
+.. note::
+   If the ``mount`` command returns ``mount failed: 19``, this corresponds to
+   POSIX error ``ENODEV`` (No such device), indicating that no MicroSD card is
+   present in the slot.
+
+Auto-Mounter Configuration
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+NuttX provides an automated filesystem mounter that detects insertion and
+removal via the card-detect switch on pin PTE6:
+
+.. code-block:: text
+
+   CONFIG_FS_AUTOMOUNTER=y
+   CONFIG_FRDMK64F_SDHC_AUTOMOUNT=y
+   CONFIG_FRDMK64F_SDHC_AUTOMOUNT_FSTYPE="vfat"
+   CONFIG_FRDMK64F_SDHC_AUTOMOUNT_BLKDEV="/dev/mmcsd0"
+   CONFIG_FRDMK64F_SDHC_AUTOMOUNT_MOUNTPOINT="/mnt/sdcard"
+   CONFIG_FRDMK64F_SDHC_AUTOMOUNT_DDELAY=1000
+   CONFIG_FRDMK64F_SDHC_AUTOMOUNT_UDELAY=2000
+
+With the auto-mounter enabled, inserting a MicroSD card mounts the FAT 
filesystem
+at ``/mnt/sdcard`` automatically, and removing it unmounts the volume.
+
+.. warning::
+   While the auto-mounter automatically unmounts the volume upon detecting card
+   removal via the card-detect switch, this occurs after the card has already
+   begun disconnecting. If the card is physically removed while write 
operations
+   or cache flushes are in progress, data loss or filesystem corruption can 
still
+   occur. Users should always ensure all files are closed and flush/unmount the
+   filesystem before physically extracting the MicroSD card.
+
+Flashing and Debugging
+======================
+
+The FRDM-K64F features the OpenSDAv2 multi-function debug interface. There are
+several methods for flashing and debugging NuttX firmware:
+
+OpenSDAv2 Mass Storage Device (MSD) Drag-and-Drop
+-------------------------------------------------
+
+1. Build NuttX to generate a raw binary image (``nuttx.bin``):
+
+   .. code-block:: bash
+
+      ./tools/configure.sh freedom-k64f:nsh
+      make -j$(nproc)
+
+2. Connect a micro-USB cable between your host computer and the OpenSDA USB 
port
+   (**J26**, labeled ``SDA``).
+
+3. The board mounts on your host system as a removable mass-storage device 
named
+   ``FRDM-K64F`` or ``MBED``.
+
+4. Copy ``nuttx.bin`` onto the drive:
+
+   .. code-block:: bash
+
+      cp nuttx.bin /media/$USER/FRDM-K64F/
+
+5. The OpenSDA status LED blinks during programming. Once complete, the board
+   resets automatically and begins executing NuttX.
+
+pyOCD (CMSIS-DAP)
+-----------------
+
+`pyOCD <https://pyocd.io/>`_ is an open-source tool for programming and
+debugging ARM Cortex-M microcontrollers over CMSIS-DAP:
+
+.. code-block:: bash
+
+   # Flash the binary
+   pyocd flash -t k64f nuttx.bin
+
+   # Or start a GDB debug server on port 3333
+   pyocd gdbserver -t k64f
+
+OpenOCD
+-------
+
+You can also use OpenOCD via the CMSIS-DAP interface:
+
+.. code-block:: bash
+
+   openocd -f interface/cmsis-dap.cfg -f target/kx.cfg \
+           -c "program nuttx.bin 0x00000000 verify reset exit"
+
+J-Link OpenSDA Firmware
+-----------------------
+
+The OpenSDAv2 processor can be loaded with Segger J-Link OpenSDA firmware,
+converting the onboard interface into a standard Segger J-Link debugger.
+Once loaded, you can program and debug using ``JLinkExe``:
+
+.. code-block:: bash
+
+   JLinkExe -device MK64FN1M0xxx12 -if SWD -speed 4000 -autoconnect 1
+   loadfile nuttx.bin 0x00000000
+   r
+   g
+
+Supported Configurations
+========================
+
+The board configurations for the FRDM-K64F are located under
+``boards/arm/kinetis/freedom-k64f/configs/``.
+
+nsh
+---
+
+The default NuttShell (NSH) configuration provides an interactive command-line
+interface over the OpenSDAv2 virtual serial port.
+
+- **Console**: UART0 (PTB16 RX / PTB17 TX) at 115200 8N1 via OpenSDA VCOM
+- **Memory**: 128 KB configured SRAM heap, ProcFS filesystem
+- **Building**:
+
+  .. code-block:: bash
+
+     ./tools/configure.sh freedom-k64f:nsh
+     make -j$(nproc)
+     cp nuttx.bin /media/$USER/FRDM-K64F/
+
+netnsh
+------
+
+Extends the NSH environment with full 10/100 Mbps Ethernet network support via
+the onboard KSZ8081 PHY.
+
+- **Networking Features**:
+
+  - IPv4 TCP/IP and UDP protocol stacks
+  - ICMP socket support for the NSH ``ping`` utility
+  - Telnet daemon utility (``CONFIG_NETUTILS_TELNETD=y``)
+  - TFTP client (``tftpc``) for network file transfers
+  - HTTP web client (``webclient``) for ``wget`` commands
+  - Dynamic DHCP client (``dhcpc``) or static IP configuration (default 
``10.0.0.2``)
+
+- **Network Bringup Options**:
+
+  - ``CONFIG_NETINIT_THREAD=y``: Runs network bringup on an asynchronous 
background thread, preventing boot pauses when the network cable is 
disconnected.
+  - ``CONFIG_NETDEV_PHY_IOCTL=y``: Enables PHY link monitoring and carrier 
detection.
+
+- **Building**:
+
+  .. code-block:: bash
+
+     ./tools/configure.sh freedom-k64f:netnsh
+     make -j$(nproc)
+     cp nuttx.bin /media/$USER/FRDM-K64F/
+
+- **Network Verification**:
+
+  .. code-block:: bash
+
+     # From NSH prompt (via OpenSDA VCOM):
+     nsh> ifconfig
+     nsh> ping 10.0.0.1
+
+  .. note::
+     To enable an interactive remote NSH shell over Telnet, enable
+     ``CONFIG_NSH_TELNET=y`` in ``make menuconfig``. Once enabled, connect
+     from a host terminal using ``telnet 10.0.0.2``.
+
+cdcacm
+------
+
+Configures the NuttShell console on OpenSDA UART0 while enabling the native
+K64 USB Micro-B port (connector J22) as a CDC/ACM serial device
+(``/dev/ttyACM0``).
+
+- **Console**: UART0 (OpenSDA VCOM) at 115200 8N1
+- **USB Device**: CDC/ACM virtual serial class driver (``CONFIG_CDCACM=y``)
+- **Utilities**: Builtin ``sercon`` and ``serdis`` commands to dynamically 
connect and disconnect the CDC/ACM interface
+- **Peripherals**: FlexTimer PWM (FTM0 channel 2) and SDHC MicroSD storage 
support
+- **Building**:
+
+  .. code-block:: bash
+
+     ./tools/configure.sh freedom-k64f:cdcacm
+     make -j$(nproc)
+     cp nuttx.bin /media/$USER/FRDM-K64F/
+
+- **Using the CDC/ACM Serial Interface**:
+
+  1. Connect a USB cable to the native K64 USB Micro-B port (**J22**).
+  2. From the NSH prompt on the OpenSDA console, attach the USB device:
+
+     .. code-block:: bash
+
+        nsh> sercon
+
+  3. The host computer enumerates the serial device (e.g., ``/dev/ttyACM0`` on 
Linux).
+  4. To disconnect the USB device cleanly:
+
+     .. code-block:: bash
+
+        nsh> serdis
+
+demo
+----
+
+A comprehensive feature demonstration configuration enabling multiple onboard
+peripherals:
+
+- **Features**:
+
+  - NSH console on OpenSDA UART0
+  - FXOS8700CQ 6-axis accelerometer/magnetometer sensor example application 
(``examples/fxos8700cq``)
+  - 10/100 Mbps Ethernet networking stack with DNS client and netcat
+  - FTM0 PWM driver
+  - SDHC MicroSD storage support
+
+- **Building**:
+
+  .. code-block:: bash
+
+     ./tools/configure.sh freedom-k64f:demo
+     make -j$(nproc)
+     cp nuttx.bin /media/$USER/FRDM-K64F/

Reply via email to