.. _cc3200_launchxl:

CC3200 LaunchXL
###############

Overview
********
The SimpleLink CC3200 LaunchXL is a development board for the CC3200
wireless microcontroller (MCU), the industry's first single-chip
programmable MCU with built-in Wi-Fi connectivity.

Features:
=========

* SimpleLink Wi-Fi, internet-on-a-chip solution with integrated MCU
* 40-pin LaunchPad standard that leverages the BoosterPack ecosystem
* FTDI based JTAG emulation with serial port for Flash programming
* On-board accelerometer and temperature sensor
* Two buttons and three LEDs for user interaction
* UART through USB to PC
* Power from USB for the LaunchPad and optional external BoosterPack
* GNU Debugger (GDB) support over Open On chip debugger (OpenOCD)

Details on the CC3200 LaunchXL development board can be found in the
`CC3200 LaunchXL User's Guide`_.

Hardware
********

The CC3200 SoC has two MCUs:

#. Applications MCU - an ARM |reg| Cortex |reg|-M4 Core at 80 MHz, with 256Kb RAM,
   and access to external serial 1Mb flash with bootloader and peripheral
   drivers in ROM.

#. Network Coprocessor (NWP) - a dedicated ARM MCU, which completely
   offloads Wi-Fi and internet protocols from the application MCU.

Complete details of the CC3200 SoC can be found in the `CC3200 TRM`_.

Supported Features
==================

Zephyr has been ported to the Applications MCU, with basic peripheral
driver support.

+-----------+------------+-----------------------+
| Interface | Controller | Driver/Component      |
+===========+============+=======================+
| UART      | on-chip    | serial port-interrupt |
+-----------+------------+-----------------------+
| GPIO      | on-chip    | gpio                  |
+-----------+------------+-----------------------+

The accelerometer, temperature sensors, WiFi, or other perhipherals
accessible through the BoosterPack, are not currently supported by
this Zephyr port.

Connections and IOs
====================

Peripherals on the CC3200 LaunchXL are mapped to the following pins in
the file :file:`boards/arm/cc3200_launchxl/pinmux.c`.

+------------+-------+-------+
| Function   | PIN   | GPIO  |
+============+=======+=======+
| UART0_TX   | 55    | N/A   |
+------------+-------+-------+
| UART0_RX   | 57    | N/A   |
+------------+-------+-------+
| LED D7 (R) | 64    | 9     |
+------------+-------+-------+
| LED D6 (O) | 01    | 10    |
+------------+-------+-------+
| LED D5 (G) | 02    | 11    |
+------------+-------+-------+
| Switch SW2 | 15    | 22    |
+------------+-------+-------+
| Switch SW3 | 04    | 13    |
+------------+-------+-------+

The default configuration can be found in the Kconfig file at
:file:`boards/arm/cc3200_launchxl/cc3200_launchxl_defconfig`.


Programming and Debugging
*************************

Build
=====

Follow the :ref:`getting_started` instructions for Zephyr application
development.

To build for the CC3200 LaunchXL:

.. code-block:: console

   % make BOARD=cc3200_launchxl

This will produce both a zephyr.elf  (for GDB debugging) and a
zephyr.bin file (for flashing) in the outdir/cc3200_launchxl/
subdirectory.

FTDI USB Setup
==============

The CC3200 LaunchXL has onboard FTDI based JTAG emulation with serial
port for Flash programming.

Under Linux, plugging the CC3200 USB cable into the PC should result in
a new USB device showing up at /dev/ttyUSB1.  If not, it may be
necessary to create a udev rule to load the FTDI Linux driver for the
TI vendor and product ID.  For example:

.. code-block:: console

   % cat /etc/udev/rules.d/98-usbftdi.rules
   SUBSYSTEM=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="c32a", MODE="0660", GROUP="dialout", RUN+="/sbin/modprobe ftdi-sio" RUN+="/bin/sh -c '/bin/echo 0451 c32a > /sys/bus/usb-serial/drivers/ftdi_sio/new_id'"

To ensure access to the usb ftdi device without having to be root, add
yourself to the dialout group:

.. code-block:: console

   % sudo usermod -a -G dialout <username>

Once the USB cable is connected to your host PC running Linux, one
should see something like:

.. code-block:: console

    % dmesg -t
    usb 1-2: new full-speed USB device number 32 using ohci-pci
    usb 1-2: New USB device found, idVendor=0451, idProduct=c32a
    usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    usb 1-2: Product: USB <-> JTAG/SWD
    usb 1-2: Manufacturer: FTDI
    usb 1-2: SerialNumber: cc3101
    ftdi_sio 1-2:1.0: FTDI USB Serial Device converter detected
    usb 1-2: Detected FT2232C
    usb 1-2: Number of endpoints 2
    usb 1-2: Endpoint 1 MaxPacketSize 64
    usb 1-2: Endpoint 2 MaxPacketSize 64
    usb 1-2: Setting MaxPacketSize 64
    usb 1-2: FTDI USB Serial Device converter now attached to ttyUSB0
    ftdi_sio 1-2:1.1: FTDI USB Serial Device converter detected
    usb 1-2: Detected FT2232C
    usb 1-2: Number of endpoints 2
    usb 1-2: Endpoint 1 MaxPacketSize 64
    usb 1-2: Endpoint 2 MaxPacketSize 64
    usb 1-2: Setting MaxPacketSize 64
    usb 1-2: FTDI USB Serial Device converter now attached to ttyUSB1
    ftdi_sio ttyUSB0: failed to get modem status: -110

    % ls -l /dev/ttyUSB1
    crw-rw---- 1 root dialout  /dev/ttyUSB1

.. note::
   The ttyUSB1 device is used for UART0 output.  ttyUSB0 is not used.


Flashing
========

The CC3200 has no integrated internal flash, but has 1Mb external serial
flash for storing program images and other files.  Upon reset, the TI
bootloader copies the program from serial flash into RAM, and then
transfers control to the program.

The `CC3200 Programmer's Guide`_ provides instructions for development
using the `CC3200 SDK`_ with Windows platforms, including how to flash
the zephyr.bin binary onto the board.

For Windows:
------------

See Section 5.4 of the `CC3200 Programmer's Guide`_; or, follow the
directions per the `UniFlash Quick Start Guide`_. Please be sure to use
UniFlash version 3.4.1.

For Linux:
----------

An option for flashing the CC3200 LaunchXL on Linux is the
`cc3200tool`_.  See the README there for build/install/usage.

The following command has been known to work:

.. code-block:: console

   % cc3200tool -p /dev/ttyUSB1 --reset prompt write_file zephyr.bin
   /sys/mcuimg.bin

.. note:: You will need to manually insert a jumper on SOP2 (J15) for
   flashing and remove the jumper for execution.

Debugging
=========

The `CC3200 SDK`_ supports debugging using GDB (for ARM) over OpenOCD,
and includes the necessary OpenOCD CFG and sample gdbinit scripts.

See Section 5.3.3.5 of the `CC3200 Programmer's Guide`_.

To see program output from UART0, one can execute in a separate terminal
window:

.. code-block:: console

  % screen /dev/ttyUSB1 115200 8N1

.. note:: The bootloader takes the first 16Kb of the 256Kb RAM, so the
   Zephyr application starts at 0x20004000.  The Zephyr CC3200
   configuration thus sets the max SRAM size to 240Kb.


References
**********

CC32xx Wiki:
    http://processors.wiki.ti.com/index.php/CC31xx_%26_CC32xx

TI CC3200 Product Page:
    http://www.ti.com/product/cc3200

.. _CC3200 TRM:
   http://www.ti.com/lit/pdf/swru367

.. _CC3200 Programmer's Guide:
   http://www.ti.com/lit/pdf/swru369

.. _UniFlash Quick Start Guide:
   http://processors.wiki.ti.com/index.php/CC31xx_%26_CC32xx_UniFlash_Quick_Start_Guide

.. _cc3200tool:
   https://github.com/ALLTERCO/cc3200tool

.. _CC3200 SDK:
   http://www.ti.com/tool/cc3200sdk

.. _CC3200 LaunchXL User's Guide:
   http://www.ti.com/lit/pdf/swru372
