.. zephyr:board:: ctcc

Overview
********

Connectivity Cards come with either M.2 or mPCIe form factor with various SoCs, enabling different
radio interfaces.

* The Connectivity Card nRF52840 enables BLE and IEEE 802.15.4 over mPCIe or M.2
  using USB device with on-board nRF52840 SoC

* The Connectivity Card nRF9161 enables LTE-M/NB-IoT and DECT NR+ over mPCIe or M.2
  using on-board USB-UART converter

Connectivity Card has following features:

* CLOCK
* FLASH
* :abbr:`GPIO (General Purpose Input Output)`
* :abbr:`MPU (Memory Protection Unit)`
* :abbr:`NVIC (Nested Vectored Interrupt Controller)`
* RADIO (Bluetooth Low Energy and 802.15.4) (only nRF52840)
* RADIO (LTE-M/NB-IoT and DECT NR+) (only nRF9161)
* :abbr:`RTC (nRF RTC System Clock)`
* :abbr:`USB (Universal Serial Bus)` (only nRF52840)
* :abbr:`UARTE (Universal asynchronous receiver-transmitter with EasyDMA)` (only nRF9161)
* :abbr:`WDT (Watchdog Timer)`

.. figure:: img/ctcc_nrf52840_mpcie.webp
     :align: center
     :alt: CTCC nRF52840 mPCIe

     ctcc/nrf52840 mPCie board

.. figure:: img/ctcc_nrf52840_m2.webp
     :align: center
     :alt: CTCC nRF52840 M.2

     ctcc/nrf52840 M.2 board

.. figure:: img/ctcc_nrf9161_mpcie.webp
     :align: center
     :alt: CTCC nRF9161 mPCIe

     ctcc/nrf9161 mPCIe board

More information about the board can be found at the
`Connectivity Cards Website`_ and for SoC information: `Nordic Semiconductor Infocenter`_.

Hardware
********

* The ``ctcc/nrf52840`` board target has one external oscillator of the 32.768 kHz.
* The ``ctcc/nrf9161`` board target has one external SPI NOR 64Mbit memory and one on-board USB-UART
  converter (CP210X).

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

.. zephyr:board-supported-hw::

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

LED
---

Note that boards do not have on-board LEDs, however they expose
LED signals on mPCIe/M.2 pins.

nRF52840:

* LED1 = P0.23
* LED2 = P0.22

nRF9161:

* LED1 = P0.11
* LED2 = P0.12

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

.. zephyr:board-supported-runners::

Applications for ``ctcc`` boards can be
built in the usual way (see :ref:`build_an_application` for more details).

Flashing
========

The board supports the following programming options:

1. Using an external :ref:`debug probe <debug-probes>`
2. Using `MCUboot`_ with MCUmgr support

Below instructions are provided for ``ctcc/nrf52840``, to use ``nrf9161`` target, the USB device configs have
to be replaced with UART configurations.

Option 1: Using an External Debug Probe
---------------------------------------

Connectivity Card can be programmed using an external debug probe (Segger J-Link) by connecting
to on-board SWD test pads.

For Segger J-Link debug probes, follow the instructions in the
:ref:`nordic_segger` page to install and configure all the necessary
software. Further information can be found in :ref:`nordic_segger_flashing`.

Then build and flash applications as usual (see :ref:`build_an_application` and
:ref:`application_run` for more details).

Here is an example for the :zephyr:code-sample:`usb-cdc-acm-console` application which prints out
logs on emulated USB port.

.. zephyr-app-commands::
   :zephyr-app: samples/subsys/usb/console
   :board: ctcc/nrf52840
   :goals: build flash

Option 2: Using MCUboot with MCUmgr support
-------------------------------------------

It is also possible to use the MCUboot bootloader with :ref:`mcu_mgr` support to flash
Zephyr applications.

Install a MCUmgr-compatible tool from :ref:`supported list <mcumgr_tools_libraries>`
and make sure MCUboot's ``imgtool`` is available for signing your binary
for MCUboot as described on :ref:`west-sign`.

#. Compile MCUboot as a Zephyr application with ``MCUmgr`` support.

   .. tabs::

      .. group-tab:: nRF52840

         To build the MCUboot:

         .. zephyr-app-commands::
            :app: mcuboot/boot/zephyr
            :board: ctcc/nrf52840
            :build-dir: mcuboot
            :goals: build

      .. group-tab:: nRF9161

         To build the MCUboot:

         .. zephyr-app-commands::
            :app: mcuboot/boot/zephyr
            :board: ctcc/nrf9161
            :build-dir: mcuboot
            :goals: build

#. Flash it onto the board as described in Option 1.

#. Flash other Zephyr application over USB using :ref:`MCUmgr-compatible tool <mcumgr_tools_libraries>` and reset target to boot into the image.

   .. tabs::

      .. group-tab:: nRF52840

         Build the blinky example with MCUboot support:

         .. zephyr-app-commands::
            :zephyr-app: samples/basic/blinky
            :board: ctcc/nrf52840
            :goals: build
            :gen-args: -DCONFIG_BOOTLOADER_MCUBOOT=y -DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE=\"path/to/mcuboot/boot/root-rsa-2048.pem\"

      .. group-tab:: nRF9161

         Build the blinky example with MCUboot support:

         .. zephyr-app-commands::
            :zephyr-app: samples/basic/blinky
            :board: ctcc/nrf9161
            :goals: build
            :gen-args: -DCONFIG_BOOTLOADER_MCUBOOT=y -DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE=\"path/to/mcuboot/boot/root-rsa-2048.pem\"

.. note::

   In all examples it is assumed to use default :file:`root-rsa-2048.pem` file from ``mcuboot/boot``
   directory. Providing certificate in build args produces signed binary automatically.
   Do not use this certificate in your production firmware!

Debugging
=========

These boards do not have an on-board J-Link debug IC, however
instructions from the :ref:`nordic_segger` page also apply to them,
with the additional step of connecting an external debugger.

To test flashed software, plug in ``ctcc`` card to mPCIe/M.2 slot or use mPCIe/M.2 adapter to USB and plug such adapter to USB port.

   * For ``ctcc/nrf52840`` check on Linux system by entering ``lsusb`` command if the following device appears: ``NordicSemiconductor MCUBOOT`` or ``NordicSemiconductor USB-DEV`` (when booted into blinky example).
   * For ``ctcc/nrf9161`` it's not possible to see a change in ``lsusb`` due to the on-board USB-UART converter. Instead, connect to the UART console using a terminal emulation program of your choice.

References
**********

.. target-notes::

.. _Connectivity Cards Website:
   https://cthings.co/products/connectivity-cards
.. _Nordic Semiconductor Infocenter:
   https://infocenter.nordicsemi.com
.. _MCUboot:
   https://github.com/zephyrproject-rtos/mcuboot
