.. _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
     :align: center
     :alt: Sentrius BT510 Sensor, front view

     Sentrius BT510 Sensor, front view

.. figure:: img/bt510_back.jpg
     :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             |
+-----------+------------+----------------------+

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

LED
---

Two LEDs are visible through the BT510 housing lid.

* LED_1A (green) = P0.22
* LED_1B (red) = P0.20

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

The BT510 housing lid also acts as a push button.

* BUTTON_1 = SW1 = P1.10

Magnetoresistive sensor
-----------------------

The BT510 incorporates a Honeywell SM351LT magnetoresistive sensor. Refer to the `Honeywell SM351LT datasheet`_ for further details.

* MAG = P1.14

Accelerometer
-------------

The BT510 incorporates an I2C ST Microelectronics LIS2DH accelerometer. Refer to the `ST Microelectronics LIS2DH datasheet`_ for further details.

* SDA = P0.26
* SCL = P0.27
* INT_1 = P1.05
* INT_2 = P1.12

Temperature Sensor
------------------

The BT510 incorporates an I2C Silabs SI7055 temperature sensor. Refer to the `Silabs 7055 datasheet`_ for further details.

* SDA = P0.26
* SCL = P0.27

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

Applications for the ``bt510`` board configuration can be built, flashed, and
debugged in the usual way. See :ref:`build_an_application` and
:ref:`application_run` for more details on building and running.

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 (750-03239) that supports
this connector layout, refer to the `USB SWD Programmer product page`_
.

Flashing
========

To connect the BT510 board for programming or debugging using the USB-SWD programming
board, on the programming board set SW6 to the supply out position and SW5 to the 3V3
position, ensure there is a jumper on J35 and that SW1 is in the debug position, then
connect the BT510 to the board using the Tag-Connect cable via J3:

.. figure:: img/bt510_prog.jpg
     :align: center
     :alt: Sentrius BT510 Sensor connected to programming board

     Sentrius BT510 Sensor connected to programming board

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

.. code-block:: console

   $ ninja flash

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. The USB-SWD programming board has an in-built UART connected
to the BT510 acting as a USB CDC port, on Linux and Windows 10 this driver should be
installed automatically, for Windows 7, the MBED driver is required to use the serial
port - see the `MBED Serial Driver`_ link for details and how to install the driver.

.. 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/ttyACM0`.

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. The USB-SWD programmer board has a CMSIS debugger
compatible interface and debugging can be performed using pyocd, openocd or any other
applications that support the CMSIS interface.

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:

* :zephyr:code-sample:`blinky`
* :zephyr:code-sample:`button`

You can build and flash the examples to make sure Zephyr is running correctly on
your board. The button, LED and sensor device definitions can be found in
:zephyr_file:`boards/lairdconnect/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/wireless-modules/programming-kits/usb-swd-programming-kit
.. _MAX3232 datasheet: https://www.ti.com/lit/ds/symlink/max3232.pdf
.. _Silabs 7055 datasheet: https://www.silabs.com/documents/public/data-sheets/Si7050-1-3-4-5-A20.pdf
.. _ST Microelectronics LIS2DH datasheet: https://www.st.com/resource/en/datasheet/lis2dh.pdf
.. _Honeywell SM351LT datasheet: https://sensing.honeywell.com/honeywell-sensing-nanopower-series-datasheet-50095501-c-en.pdf
.. _MBED Serial Driver: https://os.mbed.com/docs/mbed-os/v6.8/program-setup/windows-serial-driver.html
