.. _b_l072z_lrwan1_board:

ST B-L072Z-LRWAN1 Discovery kit
###############################

Overview
********

This Discovery kit features an all-in-one open module CMWX1ZZABZ-091 (by Murata).
The module is powered by an STM32L072CZ and an SX1276 transceiver.

This kit provides:

- CMWX1ZZABZ-091 LoRa* / Sigfox* module (Murata)

        - Embedded ultra-low-power STM32L072CZ Series MCUs, based on
          Arm* Cortex* -M0+ core, with 192 Kbytes of Flash
          memory, 20 Kbytes of RAM, 20 Kbytes of EEPROM
        - Frequency range: 860 MHz - 930 MHz
        - USB 2.0 FS
        - 4-channel,12-bit ADC, 2xDAC
        - 6-bit timers, LP-UART, I2C and SPI
        - Embedded SX1276 transceiver
        - LoRa* , FSK, GFSK, MSK, GMSK and OOK modulations (+ Sigfox* compatibility)
        - +14 dBm or +20 dBm selectable output power
        - 157 dB maximum link budget
        - Programmable bit rate up to 300 kbit/s
        - High sensitivity: down to -137 dBm
        - Bullet-proof front end: IIP3 = -12.5 dBm
        - 89 dB blocking immunity
        - Low Rx current of 10 mA, 200 nA register retention
        - Fully integrated synthesizer with a resolution of 61 Hz
        - Built-in bit synchronizer for clock recovery
        - Sync word recognition
        - Preamble detection
        - 127 dB+ dynamic range RSSI

- SMA and U.FL RF interface connectors
- Including 50 ohm SMA RF antenna
- On-board ST-LINK/V2-1 supporting USB re-enumeration capability

- USB ST-LINK functions:
- Board power supply:

        - Through USB bus or external VIN/3.3 V supply voltage or batteries
- 3xAAA-type-battery holder for standalone operation
- 7 LEDs:

        - 4 general-purpose LEDs
        - A 5 V-power LED
        - An ST-LINK-communication LED
        - A fault-power LED
        - 2 push-buttons (user and reset)
- Arduino* Uno V3 connectors

.. image:: img/b_l072z_lrwan1.png
     :width: 500px
     :align: center
     :height: 325px
     :alt: B-L072Z-LRWAN1

More information about the board can be found at the `B-L072Z-LRWAN1 website`_.

Hardware
********

The STM32L072CZ SoC provides the following hardware IPs:

- Ultra-low-power (down to 0.29 µA Standby mode and 93 uA/MHz run mode)
- Core: ARM* 32-bit Cortex*-M0+ CPU, frequency up to 32 MHz
- Clock Sources:

        - 1 to 32 MHz crystal oscillator
        - 32 kHz crystal oscillator for RTC (LSE)
        - Internal 16 MHz factory-trimmed RC ( |plusminus| 1%)
        - Internal low-power 37 kHz RC ( |plusminus| 5%)
        - Internal multispeed low-power 65 kHz to 4.2 MHz RC
- RTC with HW calendar, alarms and calibration
- Up to 24 capacitive sensing channels: support touchkey, linear and rotary touch sensors
- 11x timers:

        - 2x 16-bit with up to 4 channels
        - 2x 16-bit with up to 2 channels
        - 1x 16-bit ultra-low-power timer
        - 1x SysTick
        - 1x RTC
        - 2x 16-bit basic for DAC
        - 2x watchdogs (independent/window)
- Up to 84 fast I/Os, most 5 V-tolerant.
- Memories

        - Up to 192 KB Flash, 2 banks read-while-write, proprietary code readout protection
        - Up to 20 KB of SRAM
        - External memory interface for static memories supporting SRAM, PSRAM, NOR and NAND memories
- Rich analog peripherals (independent supply)

        - 1x 12-bit ADC 1.14 MSPS
        - 2x 12-bit DAC
        - 2x ultra-low-power comparators
- 11x communication interfaces

        - USB OTG 2.0 full-speed, LPM and BCD
        - 3x I2C FM+(1 Mbit/s), SMBus/PMBus
        - 4x USARTs (ISO 7816, LIN, IrDA, modem)
        - 6x SPIs (4x SPIs with the Quad SPI)
- 7-channel DMA controller
- True random number generator
- CRC calculation unit, 96-bit unique ID
- Development support: serial wire debug (SWD), JTAG, Embedded Trace Macrocell*


More information about STM32L072CZ can be found here:

- `STM32L072CZ on www.st.com`_
- `STM32L0x2 reference manual`_

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

The Zephyr B-L072Z-LRWAN1 Discovery board configuration supports the following hardware features:

+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component                    |
+===========+============+=====================================+
| UART      | on-chip    | serial port-polling;                |
|           |            | serial port-interrupt               |
+-----------+------------+-------------------------------------+
| PINMUX    | on-chip    | pinmux                              |
+-----------+------------+-------------------------------------+
| I2C       | on-chip    | i2c                                 |
+-----------+------------+-------------------------------------+
| SPI       | on-chip    | spi                                 |
+-----------+------------+-------------------------------------+
| GPIO      | on-chip    | gpio                                |
+-----------+------------+-------------------------------------+
| RTC       | on-chip    | counter                             |
+-----------+------------+-------------------------------------+

Other hardware features are not yet supported on this Zephyr port.

The default configuration can be found in the defconfig file:
``boards/arm/b_l072z_lrwan1/b_l072z_lrwan1_defconfig``


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

B-L072Z-LRWAN1 Discovery kit has GPIO controllers. These controllers are responsible for pin muxing,
input/output, pull-up, etc.

Available pins:
---------------

For detailed information about available pins please refer to `B-L072Z-LRWAN1 website`_.

Default Zephyr Peripheral Mapping:
----------------------------------

- UART_1_TX/RX: PA9/PA10 (Arduino Serial)
- UART_2_TX/RX: PA2/PA3 (ST-Link Virtual COM Port)
- SPI1 NSS/SCK/MISO/MOSI: PA15/PB3/PA6/PA7 (Semtech SX1276 LoRa* Transceiver)
- SPI2 NSS/SCK/MISO/MOSI: PB12/PB13/PB14/PB15 (Arduino SPI)
- I2C1 SCL/SDA : PB8/PB9 (Arduino I2C)

System Clock
------------

B-L072Z-LRWAN1 Discovery board System Clock is at 32MHz.

Serial Port
-----------

B-L072Z-LRWAN1 Discovery board has 2 U(S)ARTs. The Zephyr console output is assigned to UART2.
Default settings are 115200 8N1.

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

Applications for the ``b_l072z_lrwan1`` board configuration can be built and
flashed in the usual way (see :ref:`build_an_application` and
:ref:`application_run` for more details).

Flashing
========

B-L072Z-LRWAN1 Discovery board includes an ST-LINK/V2-1 embedded debug
tool interface. This interface is supported by the openocd version included
in the Zephyr SDK since v0.9.2.


Flashing an application to B-L072Z-LRWAN1 Discovery board
---------------------------------------------------------

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

Connect the B-L072Z-LRWAN1 Discovery board to a STLinkV2 to your host computer using the USB port, then
run a serial host program to connect with your board. For example:

.. code-block:: console

   $ minicom -D /dev/ttyACM0

Then build and flash the application:

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

You should see the following message on the console:

.. code-block:: console

   $ Hello World! arm

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: b_l072z_lrwan1
   :maybe-skip-config:
   :goals: debug

.. _B-L072Z-LRWAN1 website:
   https://www.st.com/en/evaluation-tools/b-l072z-lrwan1.html

.. _STM32L072CZ on www.st.com:
   http://www.st.com/en/microcontrollers/stm32l072cz.html

.. _STM32L0x2 reference manual:
   http://www.st.com/resource/en/reference_manual/DM00108281.pdf
