.. _96b_neonkey:

96Boards Neonkey
################

Overview
********

96Boards Neonkey board is based on the STMicroelectronics STM32F411CE
Cortex M4 CPU.

.. figure:: img/96b_neonkey.jpg
     :width: 500px
     :align: center
     :height: 330px
     :alt: 96Boards Neonkey

     96Boards Neonkey

This board acts as a sensor hub platform for all 96Boards compliant
family products. It can also be used as a standalone board.

Hardware
********

96Boards Neonkey provides the following hardware components:

- STM32F411CE in UFQFPN48 package
- ARM |reg| 32-bit Cortex |reg|-M4 CPU with FPU
- 84 MHz max CPU frequency
- 1.8V work voltage
- 512 KB Flash
- 128 KB SRAM
- On board sensors:

  - Temperature/Humidity: SI7034-A10
  - Pressure: BMP280
  - ALS/Proximity: RPR-0521RS
  - Geomagnetic: BMM150
  - Acclerometer/Gyroscope: BMI160
  - AMR Hall sensor: MRMS501A
  - Microphone: SPK0415HM4H-B

- 4 User LEDs
- 15 General purpose LEDs
- GPIO with external interrupt capability
- I2C (3)
- SPI (1)
- I2S (1)

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

The Zephyr 96b_neonkey board configuration supports the following hardware
features:

+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component                    |
+===========+============+=====================================+
| NVIC      | on-chip    | nested vector interrupt controller  |
+-----------+------------+-------------------------------------+
| SYSTICK   | on-chip    | system clock                        |
+-----------+------------+-------------------------------------+
| UART      | on-chip    | serial port                         |
+-----------+------------+-------------------------------------+
| GPIO      | on-chip    | gpio                                |
+-----------+------------+-------------------------------------+
| PINMUX    | on-chip    | pinmux                              |
+-----------+------------+-------------------------------------+
| FLASH     | on-chip    | flash                               |
+-----------+------------+-------------------------------------+
| SPI       | on-chip    | spi                                 |
+-----------+------------+-------------------------------------+
| I2C       | on-chip    | i2c                                 |
+-----------+------------+-------------------------------------+

More details about the board can be found at `96Boards website`_.

The default board configuration can be found in the defconfig file:

        ``boards/arm/96b_neonkey/96b_neonkey_defconfig``

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

LED
---

- LED1 / User1 LED = PB12
- LED2 / User2 LED = PB13
- LED3 / User3 LED = PB14
- LED4 / User4 LED = PB15

Push buttons
------------

- BUTTON = RST (SW1)
- BUTTON = USR (SW2)

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

96Boards Neonkey can be driven by an internal oscillator as well as the main
PLL clock. By default System clock is sourced by PLL clock at 84MHz, driven
by internal oscillator.

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

On 96Boards Neonkey Zephyr console output is assigned to USART1.
Default settings are 115200 8N1.

I2C
---

96Boards Neonkey board has up to 3 I2Cs. The default I2C mapping for Zephyr is:

- I2C1_SCL : PB6
- I2C1_SDA : PB7
- I2C2_SCL : PB10
- I2C2_SDA : PB3
- I2C3_SCL : PA8
- I2C3_SCL : PB4

SPI
---

96Boards Neonkey board has one SPI. The default SPI mapping for Zephyr is:

- SPI1_NSS  : PA4
- SPI1_SCK  : PA5
- SPI1_MISO : PA6
- SPI1_MOSI : PA7

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

Building
========

Here is an example for building the :ref:`hello_world` application.

.. zephyr-app-commands::
   :zephyr-app: samples/hello_world
   :board: 96b_neonkey
   :goals: build

Flashing
========

96Boards Neonkey can be flashed by two methods, one using the ROM
bootloader and another using the SWD debug port (which requires additional
hardware).

Using ROM bootloader:
---------------------

ROM bootloader can be triggered by the following pattern:

1. Connect BOOT0 to VDD (link JTAG pins 1 and 5 on P4 header)
2. Press and hold the USR button
3. Press and release the RST button

More detailed information on activating the ROM bootloader can be found in
Chapter 29 of Application note `AN2606`_. The ROM bootloader supports flashing
via UART, I2C and SPI protocols.

For flashing, `stm32flash`_ command line utility can be used. The following
command will flash the ``zephyr.bin`` binary to the Neonkey board using UART
and starts its execution:

.. code-block:: console

   $ stm32flash -w zephyr.bin -v -g 0x08000000 /dev/ttyS0

.. note::
   The above command assumes that Neonkey board is connected to
   serial port ``/dev/ttyS0``.

Using SWD debugger:
-------------------

For flashing via SWD debug port, 0.1" male header must be soldered at P4
header available at the bottom of the board, near RST button.

Use the `Black Magic Debug Probe`_ as an SWD programmer, which can
be connected to the P4 header using its flying leads and its 20 Pin
JTAG Adapter Board Kit. When plugged into your host PC, the Black
Magic Debug Probe enumerates as a USB serial device as documented on
its `Getting started page`_.

It also uses the GDB binary provided with the Zephyr SDK,
``arm-zephyr-eabi-gdb``. Other GDB binaries, such as the GDB from GCC
ARM Embedded, can be used as well.

.. code-block:: console

   $ arm-zephyr-eabi-gdb -q zephyr.elf
   (gdb) target extended-remote /dev/ttyACM0
   Remote debugging using /dev/ttyACM0
   (gdb) monitor swdp_scan
   Target voltage: 1.8V
   Available Targets:
   No. Att Driver
    1      STM32F4xx
   (gdb) attach 1
   Attaching to Remote target
   0x080005d0 in ?? ()
   (gdb) load

Debugging
=========

After flashing 96Boards Neonkey, it can be debugged using the same
GDB instance. To reattach, just follow the same steps above, till
"attach 1". You can then debug as usual with GDB. In particular, type
"run" at the GDB prompt to restart the program you've flashed.

References
**********

.. _96Boards website:
   https://www.96boards.org/product/neonkey/

.. _AN2606:
   https://www.st.com/resource/en/application_note/cd00167594.pdf

.. _stm32flash:
   https://sourceforge.net/p/stm32flash/wiki/Home/

.. _Black Magic Debug Probe:
   https://github.com/blacksphere/blackmagic/wiki

.. _Getting started page:
   https://github.com/blacksphere/blackmagic/wiki/Getting-Started
