.. _tdk_robokit1:

TDK RoboKit 1
#############

Overview
********

The TDK RoboKit1 is a development board for use primarily with ROS2 and provides a large
number of small ground robotics useful sensors including chirp sensors for time of flight
(e.g. ultrasonic obstacle detection).

It pairs a 300MHz Cortex-M7 ATSAME70Q21 with an array of TDK sensors and pin headers useful for robotics.

.. image:: img/tdk_robokit1.jpg
     :align: center
     :alt: TDK RoboKit1

Hardware
********

- ATSAME70Q21 ARM Cortex-M7 Processor
- 12 MHz crystal oscillator (Pres)
- 32.768 kHz crystal oscillator
- Micro-AB USB device
- Micro-AB USB debug (Microchip EDBG) interface supporting CMSIS-DAP, Virtual COM Port and Data
- JTAG interface connector
- One reset pushbutton
- One red user LED
- TDK ICM 42688-P 6-Axis 32KHz IMU
- TDK ICP-10111 Pressure Sensor
- TDK NTC Thermistor for Temperature
- AKM AK09918C Magnetometer
- 2 TDK HVCi-4223 Cortex-M3 Dedicated Motor Controller
- 3 TDK ICS-43434 Stereo Microphones
- Connector for Industrial Dual IMU (TDK IIM-46230)
- TDK CH101 Ultrasonic Range Sensor Array (9 Connectors, comes with 3)

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

The TDK RoboKit1 board supports the following hardware
features:

.. list-table::
   : header-rows: 1

   * - Peripheral
     - Kconfig option
     - Devicetree compatible
   * - GPIO
     - :kconfig:option:`CONFIG_GPIO_SAM`
     - :dtcompatible:`atmel,sam-gpio`
   * - USART
     - :kconfig:option:`CONFIG_USART_SAM`
     - :dtcompatible:`atmel,sam-usart`
   * - UART
     - :kconfig:option:`CONFIG_UART_SAM`
     - :dtcompatible:`atmel,sam-uart`
   * - SPI
     - :kconfig:option:`CONFIG_SPI_SAM`
     - :dtcompatible:`atmel,sam-spi`
   * - I2C
     - :kconfig:option:`CONFIG_I2C_SAM_TWIHS`
     - :dtcompatible:`atmel,sam-i2c-twihs`
   * - I2S
     - :kconfig:option:`CONFIG_I2S_SAM_SSC`
     - :dtcompatible:`atmel,sam-ssc`
   * - ADC
     - :kconfig:option:`CONFIG_ADC_SAM_AFEC`
     - :dtcompatible:`atmel,sam-afec`
   * - DAC
     - :kconfig:option:`CONFIG_DAC_SAM`
     - :dtcompatible:`atmel,sam-dac`
   * - PWM
     - :kconfig:option:`CONFIG_PWM_SAM`
     - :dtcompatible:`atmel,sam-pwm`
   * - CAN
     - :kconfig:option:`CONFIG_CAN_SAM`
     - :dtcompatible:`atmel,sam-can`
   * - USB
     - :kconfig:option:`CONFIG_USB_DC_SAM_USBHS`
     - :dtcompatible:`atmel,sam-usbhs`
   * - WATCHDOG
     - :kconfig:option:`CONFIG_WDT_SAM`
     - :dtcompatible:`atmel,sam-watchdog`
   * - NVIC
     - N/A
     - :dtcompatible:`arm,v7m-nvic`
   * - SYSTICK
     - N/A
     - N/A
   * - COUNTER
     - :kconfig:option:`CONFIG_COUNTER_SAM_TC`
     - :dtcompatible:`atmel,sam-tc`
   * - DMA
     - :kconfig:option:`CONFIG_DMA_SAM_XDMAC`
     - :dtcompatible:`atmel,sam-xdmac`
   * - ENTROPY
     - :kconfig:option:`CONFIG_ENTROPY_SAM_RNG`
     - :dtcompatible:`atmel,sam-trng`
   * - HWINFO (reset cause)
     - :kconfig:option:`CONFIG_HWINFO_SAM_RSTC`
     - :dtcompatible:`atmel,sam-rstc`
   * - HWINFO (device id)
     - :kconfig:option:`CONFIG_HWINFO_SAM`
     - N/A

The default configuration can be found in the Kconfig
:zephyr_file:`boards/arm/tdk_robokit1/tdk_robokit1_defconfig`.

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

The TDK RoboKit Hardware Guide has detailed information about board connections.

System Clock
============

The SAM E70 MCU is configured to use the 12 MHz external oscillator on the board
with the on-chip PLL to generate a 300 MHz system clock.

Serial Port
===========

The ATSAME70Q21 MCU has five UARTs and three USARTs. One of the UARTs is
configured for the console and is available as a Virtual COM Port via the USB2 connector.

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

Flashing the Zephyr project onto SAM E70 MCU requires the `OpenOCD tool`_.
Both west flash and west debug commands should correctly work with both USB0 and USB1
connected and the board powered.

Flashing
========

#. Run your favorite terminal program to listen for output. Under Linux the
   terminal should be :code:`/dev/ttyACM0`. For example:

   .. code-block:: console

      $ minicom -D /dev/ttyUSB0 -o

   The -o option tells minicom not to send the modem initialization
   string. Connection should be configured as follows:

   - Speed: 115200
   - Data: 8 bits
   - Parity: None
   - Stop bits: 1

#. Connect the TDK RoboKit1 board to your host computer using the
   USB debug port (USB1), USB2 for a serial console, and remaining micro USB for
   power. Then build and flash the :ref:`hello_world` application.

   .. zephyr-app-commands::
      :zephyr-app: samples/hello_world
      :board: tdk_robokit1
      :goals: build flash

   You should see "Hello World! tdk_robokit1" in your terminal.

Debugging
=========

You can debug an application in the usual way.  Here is an example for the
:ref:`hello_world` application.

.. zephyr-app-commands::
   :zephyr-app: samples/hello_world
   :board: tdk_robokit1
   :maybe-skip-config:
   :goals: debug

References
**********

TDK RoboKit1 Product Page:
    https://invensense.tdk.com/products/robokit1-dk/

.. _OpenOCD tool:
    http://openocd.org/
