nuttx/boards/arm/tiva/tm4c129e-launchpad
Nathan Hartman b04ae46ea6 boards/arm/tiva: Add tm4c129e-launchpad
* boards/arm/tiva/tm4c129e-launchpad: New subdirectory providing
  board support for the Texas Instruments TM4C Crypto Connected
  LaunchPad, or more correctly the EK-TM4C129EXL.

* Documentation/introduction/detailed_support.rst,
  Documentation/introduction/supported_platforms.rst,
  boards/README.txt: Document the additional board support.

* boards/Kconfig:
  (ARCH_BOARD_TM4C129E_LAUNCHPAD): New config.
  (ARCH_BOARD): Add tm4c129e-launchpad.
  (Board-Specific Options): Source the board-specific Kconfig
   boards/arm/tiva/tm4c129e-launchpad/Kconfig when selected.
2022-09-07 14:15:48 +08:00
..
configs
include
scripts
src
tools
Kconfig
README.txt

README
======

  This is the README file for a port of NuttX to the TM4C129E Crypto Connected
  LaunchPad (more correctly, the EK-TM4C129EXL). For more information about this
  board, see https://www.ti.com/tool/EK-TM4C129EXL.

EK-TM4C1294XL and DK-TM4C129X
=============================

  This board configuration derives from the EK-TM4C1294XL, which in turn derives
  from the DK-T4C129X. Refer to the following README files for additional
  information that may be relevant to this board as well:

    boards/arm/tiva/tm4c1294-launchpad/README.txt
    boards/arm/tiva/dk-tm4c129x/README.txt

Directory Structure
===================

Layout for board support package directories:
$TOPDIR/boards/     - Directory containing BSP subdirectories
  arch              - CPU architecture (e.g., arm)
    chip            - Chip type (e.g., tiva)

Within chip subdirectory:
  <board>           - Subdirectory for each board (e.g., LaunchPad129)
    drivers         - Board-specific drivers
    include         - Board-specific headers
    scripts         - Board-specific build scripts (e.g., linker, Make.defs)
    src             - Board-specific code
    tools           - Board-specific tools or scripts (e.g., OpenOCD startup)
    configs/        - Subdirectory for one or more board configuration(s)
      <config_1..n> - Configuration for use with tools/configure.sh or .bat

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

  These configurations use UART0 for the serial console. UART0 is connected to
  the on-board TM4C123G-based debugger and is forwarded through the ICDI virtual
  UART.

Buttons and LEDs
================

  Buttons
  -------

    The board has two on-board pushbuttons accessible to software. These are
    connected to GPIO pins PJ0 and PJ1.

    In addition, the board also has a Reset switch and a Wake switch. The Reset
    switch asserts the reset signal to the microcontroller, the Breadboard
    headers, and the BoosterPack headers and, therefore, any attached
    BoosterPack boards. The Wake switch is provided as one of the means to wake
    the microcontroller from hibernate mode.

  LEDs
  ----

    The board has four LEDs which are accessible to software. LEDs D1 and D2 are
    connected to GPIOs PN1 and PN0 and are dedicated for software use. LEDs D3
    and D4 are connected to GPIOs PF4 and PF0 and can be controlled either by
    software or by the integrated Ethernet PHY of the TM4C129ENCPDT.

Configurations
==============

Each EK-TM4C129EXL configuration is maintained in a sub-directory and can be
selected as follow:

    tools/configure.sh tm4c129e-launchpad:<subdir>

Where <subdir> is one of the following:

  nsh:
  ---
    Configures the NuttShell (nsh) located at apps/examples/nsh. The
    configuration enables the serial ICDI virtual UART on UART0. Support for
    builtin applications is enabled, but in the base configuration no builtin
    applications are selected.

    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. By default, this configuration uses the GNU ARM EABI toolchain
       (Linaro) such as the one delivered with TI's Code Composer
       Studio (CCS) and builds under Linux. (Cygwin / MSYS / MSYS2 under
       Windows might work as well.) These options can be reconfigured
       with 'make menuconfig' as described above.

       CONFIG_HOST_LINUX=y                 : Linux (Cygwin under Windows okay too).
       CONFIG_ARCH_TOOLCHAIN_GNU=y         : GNU toolchain (arm-none-eabi-gcc)
       CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL=y
       CONFIG_RAW_BINARY=y                 : Output formats: ELF and raw binary

    3. Default stack sizes are large and should really be tuned to reduce the
       RAM footprint:

         CONFIG_SCHED_HPWORKSTACKSIZE=2048
         CONFIG_IDLETHREAD_STACKSIZE=1024
         CONFIG_INIT_STACKSIZE=2048
         CONFIG_PTHREAD_STACK_DEFAULT=2048
         CONFIG_POSIX_SPAWN_PROXY_STACKSIZE=1024
         CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=2048
         CONFIG_BUILTIN_PROXY_STACKSIZE=1024
         CONFIG_NSH_TELNETD_DAEMONSTACKSIZE=2048
         CONFIG_NSH_TELNETD_CLIENTSTACKSIZE=2048

    4. This configuration has the network enabled by default. See the paragraph
       "Using the network with NSH" in the DK-TM4C129X README).

       Networking can easily be disabled or reconfigured with 'make menuconfig'
       if desired.

       By default:

         This configuration assumes a DHCP network.

         The network initialization thread is enabled. NSH will create
         a separate thread when it starts to initialize the network.
         This eliminates start-up delays to bring up the network.

         The persistent network monitor thread is enabled.  It monitors
         changes in link status, takes the network down when the link is
         lost (e.g., cable disconnected), abd brings the network back up
         when the link becomes available again (e.g., cable connected).

         The Ethernet MAC address is factory-programmed into the non-volatile
         USER0 and USER1 registers. If CONFIG_TIVA_BOARDMAC is defined, the
         function tiva_ethernetmac() will obtain the MAC address from these
         registers and use it.

  ipv6:
  ----
    This is another version of the NuttShell configuration. It is very similar
    to the nsh configuration except that it has IPv6 enabled and IPv4 disabled.
    Several network utilities that are not yet available under IPv6 are
    disabled.

    NOTES:

    1. As of 2022-09-06, this configuration was identical to the nsh
       configuration other than using IPv6. So all of the notes above regarding
       the nsh configuration apply.

       Telnet does work with IPv6 but is not enabled in this configuration (but
       could be).

    2. This configuration can be modified so that both IPv4 and IPv6 are
       supported. Here is a summary of the additional configuration settings
       required to support both IPv4 and IPv6:

         CONFIG_NET_IPv4=y
         CONFIG_NET_ARP=y
         CONFIG_NET_ARP_SEND=y (optional)
         CONFIG_NET_ICMP=y
         CONFIG_NET_ICMP_SOCKET=y

         CONFIG_NETDB_DNSCLIENT=y
         CONFIG_NETUTILS_TELNETD=y

         CONFIG_NSH_IPADDR=0x0a000002
         CONFIG_NSH_DRIPADDR=0x0a000001
         CONFIG_NSH_NETMASK=0xffffff00
         CONFIG_NSH_TELNET=y

       Then from NSH, you have both ping and ping6 commands:

         nsh> ping 10.0.0.1
         nsh> ping6 fc00::1

       And from the host you can do similar:

         ping 10.0.0.2
         ping6 fc00::2   (Linux)
         ping -6 fc00::2 (Windows cmd)

       and Telnet is now enabled and works from the host... but only using IPv6
       addressing:

         telnet fc00::2

       That is because the Telnet daemon will default to IPv6 and there is no
       Telnet option to let you select which if both IPv4 and IPv6 are enabled.

    3. You can enable IPv6 autonomous address configuration with the following
       changes to the configuration:

       + CONFIG_NET_ICMPv6_AUTOCONF=y
       + CONFIG_ICMPv6_AUTOCONF_DELAYMSEC=100
       + CONFIG_ICMPv6_AUTOCONF_MAXTRIES=5

       - CONFIG_NSH_DRIPv6ADDR_1=0xfc00
       - CONFIG_NSH_DRIPv6ADDR_2=0x0000
       - CONFIG_NSH_DRIPv6ADDR_3=0x0000
       - CONFIG_NSH_DRIPv6ADDR_4=0x0000
       - CONFIG_NSH_DRIPv6ADDR_5=0x0000
       - CONFIG_NSH_DRIPv6ADDR_6=0x0000
       - CONFIG_NSH_DRIPv6ADDR_7=0x0000
       - CONFIG_NSH_DRIPv6ADDR_8=0x0001

       - CONFIG_NSH_IPv6ADDR_1=0xfc00
       - CONFIG_NSH_IPv6ADDR_2=0x0000
       - CONFIG_NSH_IPv6ADDR_3=0x0000
       - CONFIG_NSH_IPv6ADDR_4=0x0000
       - CONFIG_NSH_IPv6ADDR_5=0x0000
       - CONFIG_NSH_IPv6ADDR_6=0x0000
       - CONFIG_NSH_IPv6ADDR_7=0x0000
       - CONFIG_NSH_IPv6ADDR_8=0x0002
       - CONFIG_NSH_IPv6NETMASK_1=0xffff
       - CONFIG_NSH_IPv6NETMASK_2=0xffff
       - CONFIG_NSH_IPv6NETMASK_3=0xffff
       - CONFIG_NSH_IPv6NETMASK_4=0xffff
       - CONFIG_NSH_IPv6NETMASK_5=0xffff
       - CONFIG_NSH_IPv6NETMASK_6=0xffff
       - CONFIG_NSH_IPv6NETMASK_7=0xffff
       - CONFIG_NSH_IPv6NETMASK_8=0xff80