.. _bt510:

Laird Connectivity Sentrius BT510 Sensor
########################################

Overview
********

The Sentrius™ BT510 Sensor is a battery powered, Bluetooth v5 Long Range integrated sensor that uses a Nordic Semiconductor nRF52840 ARM Cortex-M4F CPU.

The sensor has the following features:

* :abbr:`ADC (Analog to Digital Converter)`
* CLOCK
* FLASH
* :abbr:`GPIO (General Purpose Input Output)`
* :abbr:`I2C (Inter-Integrated Circuit)`
* :abbr:`MPU (Memory Protection Unit)`
* :abbr:`NVIC (Nested Vectored Interrupt Controller)`
* :abbr:`PWM (Pulse Width Modulation)`
* RADIO (Bluetooth Low Energy and 802.15.4)
* :abbr:`RTC (nRF RTC System Clock)`
* Segger RTT (RTT Console)
* :abbr:`UART (Universal Asynchronous Receiver-Transmitter)`
* :abbr:`WDT (Watchdog Timer)`

.. figure:: img/bt510.jpg
     :width: 250px
     :align: center
     :alt: Sentrius BT510 Sensor, front view

     Sentrius BT510 Sensor, front view

.. figure:: img/bt510_back.jpg
     :width: 250px
     :align: center
     :alt: Sentrius BT510 Sensor, rear view

     Sentrius BT510 Sensor, rear view

More information about the board can be found at the
`Sentrius BT510 website`_.

Hardware
********

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

The BT510 Sensor supports the following
hardware features:

+-----------+------------+----------------------+
| Interface | Controller | Driver/Component     |
+===========+============+======================+
| ADC       | on-chip    | adc                  |
+-----------+------------+----------------------+
| CLOCK     | on-chip    | clock_control        |
+-----------+------------+----------------------+
| FLASH     | on-chip    | flash                |
+-----------+------------+----------------------+
| GPIO      | on-chip    | gpio                 |
+-----------+------------+----------------------+
| I2C(M)    | on-chip    | i2c                  |
+-----------+------------+----------------------+
| MPU       | on-chip    | arch/arm             |
+-----------+------------+----------------------+
| NVIC      | on-chip    | arch/arm             |
+-----------+------------+----------------------+
| PWM       | on-chip    | pwm                  |
+-----------+------------+----------------------+
| RADIO     | on-chip    | Bluetooth,           |
|           |            | ieee802154           |
+-----------+------------+----------------------+
| RTC       | on-chip    | system clock         |
+-----------+------------+----------------------+
| RTT       | Segger     | console              |
+-----------+------------+----------------------+
| UART      | on-chip    | serial               |
+-----------+------------+----------------------+
| WDT       | on-chip    | watchdog             |
+-----------+------------+----------------------+

Other hardware features are not supported by the Zephyr kernel.
See the `Sentrius BT510 website`_
for a complete list of BT510 Sensor features.

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

LED
---

* LED1A (green) = P0.22
* LED1B (red) = P0.20

Push button
------------

* BUTTON = SW1 = P1.10

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

Applications for the ``bt510`` board configuration can be
built and flashed in the usual way (see :ref:`build_an_application`
and :ref:`application_run` for more details); however, the standard
debugging targets are not currently available.

The BT510 features a TagConnect 10 way socket for connection of a
programmer/debugger, refer to `TagConnect TC2050 product page`_
for details of an appropriate TagConnect cable.

A non-standard layout is used to include access to the sensor debug UART.

+-----------+------------+----------------------+
| Pin No.   | Name       | Description          |
+===========+============+======================+
| 1         | Vcc        | Power Supply, 3.3V   |
+-----------+------------+----------------------+
| 2         | SWDIO      | SWD Data             |
+-----------+------------+----------------------+
| 3         | RXD        | Debug UART RX Data   |
+-----------+------------+----------------------+
| 4         | SWDCLK     | SWD Clock            |
+-----------+------------+----------------------+
| 5         | TM         | Spare GPIO           |
+-----------+------------+----------------------+
| 6         | SWO        | SWD Output           |
+-----------+------------+----------------------+
| 7         | N/C        | Not Connected        |
+-----------+------------+----------------------+
| 8         | TXD        | Debug UART TX Data   |
+-----------+------------+----------------------+
| 9         | GND        | Ground               |
+-----------+------------+----------------------+
| 10        | RESET      | Reset, Active Low    |
+-----------+------------+----------------------+

Connectivity to the programmer/debugger must be modified to match
the pinout shown above.

Laird Connectivity provide the USB-SWD programming board that supports
this connector layout, refer to the `USB SWD Programmer product page`_
.

Flashing
========

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 :ref:`hello_world` application.

First, run your favorite terminal program to listen for output.

NOTE: On the BT510, the UART lines are at TTL levels and must be passed through
an appropriate line driver circuit for translation to RS232 levels. Refer to the `MAX3232 datasheet`_
for a suitable driver IC.

.. code-block:: console

   $ minicom -D <tty_device> -b 115200

Replace :code:`<tty_device>` with the port where the bt510 can be found. For example, under Linux, :code:`/dev/ttyUSB0`.

Then build and flash the application in the usual way.

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

Note that an external debugger is required to perform application flashing.

Debugging
=========

The ``bt510`` board does not have an on-board J-Link debug IC
as some nRF5x development boards, however, instructions from the
:ref:`nordic_segger` page also apply to this board, with the additional step
of connecting an external debugger.

Testing Bluetooth on the BT510
***********************************
Many of the Bluetooth examples will work on the BT510.
Try them out:

* :ref:`ble_peripheral`
* :ref:`bluetooth-eddystone-sample`
* :ref:`bluetooth-ibeacon-sample`


Testing the LEDs and buttons on the BT510
*****************************************

There are 2 samples that allow you to test that the buttons (switches) and LEDs on
the board are working properly with Zephyr:

* :ref:`blinky-sample`
* :ref:`button-sample`

You can build and flash the examples to make sure Zephyr is running correctly on
your board. The button and LED definitions can be found in
:zephyr_file:`boards/arm/bt510/bt510.dts`.


References
**********

.. target-notes::

.. _Sentrius BT510 website: https://www.lairdconnect.com/iot-devices/iot-sensors/bt510-bluetooth-5-long-range-ip67-multi-sensor
.. _TagConnect TC2050 product page: https://www.tag-connect.com/product/tc2050-idc-050
.. _USB SWD Programmer product page: https://www.lairdconnect.com/usb-swd-programmer/
.. _MAX3232 datasheet: https://www.ti.com/lit/ds/symlink/max3232.pdf
