MultiTech xDot

The MultiConnect® xDot™ is a low cost, low power LoRa Module.

Overview

The MultiConnect® xDot™ is a secure, CE/FCC certified, ARM® mbed™ programmable, low-power RF module, that provides long-range, low bit rate M2M data connectivity to sensors, industrial equipment and remote appliances.

The MultiConnect xDot is LoRaWAN™ 1.0.1 compliant, providing bi-directional data communication up to 10 miles/ 15 km line-of-sight and 1-3 miles / 2 km into buildings, using sub-GHz ISM bands in North America and Europe.

xDots bring intelligence, reduced complexity and a lower overall bill of material cost to the very edge of the network while supporting a variety of electronic interfaces to connect just about any “Thing” for years on battery power.

KEY BENEFITS

FEATURES

xDots can be purchased as standalone modules for design-in or mounted on the xDot-DK developer board.

Windows Serial Driver

The mbed serial driver must be installed on windows PCs before the USB debug serial port from the xDot can be used.

Offline Development Options

It is possible to develop offline for the xDot using mbed-cli and the Eclipse IDE. See our wiki page for more information.

mbed Library Limitations

This platform exclusively supports mbed OS version 5. It is compatible with the mbed-os library available to import from https://github.com/armmbed/mbed-os. The use of the mbed 2 SDK "classic" library will result in an error. Most of the APIs are compatible between mbed versions, but please remember to use the right mbed library (mbed-os).

Radio Compliance

MultiTech has certified the xDot for compliance with US and Foreign compliance bodies including FCC, R&TTE, and others. (e.g. FCC 15.247:2015 & IC RSS-210:2010)

MultiTech provides software meant to operate the LoRa radio to a level that maintains compliance with the operating modes under which these radio devices were certified. To ensure this level of compliance, the software code is provided in binary form only. Users are prohibited from making any changes that affect the operation of the radio performance. Accessing or controlling the radio through any means other than the provided binary software will require the user to obtain their own intentional radiator license from the certification body governing their locality, as all precertification provided with MTDOT-x will have been made invalid.



xDot Pinout Diagram

/media/uploads/mfiore/xdot-pinout-9.png

The pinout diagram above shows the commonly used interfaces and their locations. In addition to their stated functions, all GPIO pins (PA_*, PB_*) can also be used as DigitalIn and DigitalOut interfaces.

InterruptIn Limitations

Due to the processor's architecture, only one pin of the same number (e.g. PA_1 & PB_1) may be configured as an InterruptIn. If multiple pins of the same number are configured as InterruptIn, only the last pin configured will actually trigger an interrupt in the processor. The rest will be ignored.

Pin numbers 1, 6, 7, 8, and 13 are internally used as interrupts from the LoRa radio and may not be configured as external interrupts. Doing so will break the LoRa functionality of the xDot and cause undefined behavior.

Example: If the WAKE (PA_0) pin is configured to wake the xDot from low power modes, GPIO2 (PB_0) may not be configured as an InterruptIn. Doing so will cause the WAKE pin to not wake the xDot as desired.

PwmOut Limitations

PwmOut objects using different channels of the same timer must use the same prescaler value. Each timer has a single prescaler which applies to all channels in the timer.

For STM32L15x devices, two possible prescaler values are allowed:

  • 1us which allows for a period/pulse from 1us to 65535us
  • 500us which allows for a period/pulse from 500us to 32.76s

5V Tolerant IO Limitations

If the external voltage on a GPIO is greater than VDD + 0.3V, use of the internal pullup or pulldown resistors could damage the xDot. External pullup or pulldown resistors should be used instead.

For more information see the notes below section 6.3.1 of the STM32L151CC Data Sheet.



xDot Features



xDot-DK Pinout Diagram

The table on the right maps xDot-DK pin names to xDot pin names where they differ.

DK Pinout

xDot-DK Pin NamexDot Pin Name
UART1_TXUART_TX
UART1_RXUART_RX
UART1_CTSUART_CTS
UART1_RTSUART_RTS
I2C0_SDAI2C_SDA
I2C0_SCLI2C_SCL



xDot-DK Features



LoRa Stack (libxDot)

Dot Library Version 3 Updates

Dot Library versions 3.x.x require a channel plan to be injected into the stack. Available channel plans will be in the Dot Library repository in the plans folder.

Inject a channel plan into the stack

#include "mDot.h"
#include "ChannelPlans.h"

int main() {
    // use US915 plan
    lora::ChannelPlan* plan = new lora::ChannelPlan_US915();
    // use EU868 plan
    // lora::ChannelPlan* plan = new lora::ChannelPlan_EU868();
    assert(plan);

    mDot* dot = mDot::getInstance(plan);
    assert(dot);

    // your code ...

    return 0;
}


Revision 20 and earlier of Dot-Examples and revision 15 and earlier of Dot-AT-Firmware should be used with Dot Library versions prior to 3.0.0.

Supported Toolchains

Development and production builds of the Dot Library currently only support the ARM and GCC_ARM toolchains. The IAR toolchain is not supported at this time.

xDot Library Limitations

The commit messages in libxDot-mbed5 and libxDot-dev-mbed5 specify the version of the Dot library the commit contains and the version of mbed-os it was compiled against. We recommend building your application with the version of mbed-os specified in the commit message of the version of the Dot library you're using. This will ensure that you don't run into any runtime issues caused by differences in the mbed-os versions.

The xDot library is built against the mbed-os library (mbed 5) and is not compaible with the mbed/mbed-rtos (mbed 2). Compiling libxDot with mbed 2 will result in build failure.

Stable Production Build

This build of libxDot is stable, tested, and suitable for deployment scenarios. It is hosted on mbed and GitHub for convenience.

Import librarylibxDot-mbed5

Stable version of the xDot library for mbed 5. This version of the library is suitable for deployment scenarios.

Bleeding Edge Development Build

This build of libxDot contains bug fixes and new feature development which may not be complete. It is not guaranteed to be stable or well-tested and is not suitable for deployment scenarios. It is hosted on mbed and GitHub for convenience.

Import librarylibxDot-dev-mbed5

Bleeding edge development version of the xDot library for mbed 5. This version of the library is not guaranteed to be stable or well tested and should not be used in production or deployment scenarios.

Limited System Memory

Due to limited system memory, stack sizes on the xDot are smaller than mbed defaults.

  • Default main thread/other threads: 4kB/2kB
  • xDot main thread/other threads: 1.5kB/256B

It is possible to allocate a custom stack and pass it to a thread when it is created. The code snippet below demonstrates how to do this.

Create a thread with a custom stack

#include "mbed.h"

// create a 2kB stack for the thread
uint8_t t1_stack[2048];

// create the thread with custom stack
Thread t1(osPriorityNormal, sizeof(t1_stack), t1_stack);

// create the thread with default stack
//Thread t1(osPriorityNormal);

void t1_func() {
    while (true) {
        printf("hi ");
        wait(2);
    }
}

int main() {
    t1.start(t1_func);

    while (true) {
        printf("hey ");
        wait(5);
    }

    return 0;
}


If a stack overflows or the heap gets corrupted, mbed-os will detect this and report a runtime RTX error. This will cause the system to stop executing and a RTX error code will print out the debug port. If this occurs, stack sizes need to be adjusted or memory consumption needs to be reduced.



Example Programs

The following programs support multiple Dot devices. Before examples or the AT firmware are compiled, a Dot library must be imported. See the Dot-Examples or Dot-AT-Firmware landing pages for more details.

Dot Library Version 3 Updates

Dot Library versions 3.x.x require a channel plan to be injected into the stack. The Dot-Examples and Dot-AT-Firmware do this by defining a macro called "CHANNEL_PLAN" that controls the channel plan that will be used in the examples. Available channel plans will be in the Dot Library repository in the plans folder.

Revision 20 and earlier of Dot-Examples and revision 15 and earlier of Dot-AT-Firmware should be used with Dot Library versions prior to 3.0.0.

Import programDot-Examples

Example programs for MultiTech Dot devices demonstrating how to use the Dot devices and the Dot libraries for LoRa communication.

Import programDot-AT-Firmware

AT command firmware for MultiTech Dot devices.

The mbed OS API References contain example code which demonstrates how to use common peripherals like Digital IO, Analog IO, Serial, SPI, I2C, PWM, RTOS, Timers, Tickers, etc.



Factory Firmware

The xDot ships from the factory pre-loaded with our custom AT Command Firmware. This firmware provides a serial AT command interface for configuring and using the xDot. This firmware is great during development for testing LoRa transmissions and in production when using a separate host processor that controls the mDot via AT commands. It is available here. AT command documentation is available here.



Offline IDE

It is possible to compile for the xDot and debug them on the xDot using the Eclipse IDE. See our wiki page for more information.



Technical Reference

Documentation

Data Sheets



Interface Firmware

The xDot-DK has DAPLink interface firmware. Interface firmware for the xDot-DK will be included in DAPLink releases. To update the interface firmware on your xDot-DK, follow these steps:



Getting Started with mbed

1. Connect your microcontroller to a PC

Use the USB lead to connect your mbed to a PC. The status light will come on, indicating it has power. After a few seconds of activity, the PC will recognise the mbed Microcontroller as a standard USB drive.

/media/uploads/dan/winxp-disk.png/media/uploads/dan/mac-disk.png
Windows XP exampleMac OS X example

Go to the new USB Drive, and click MBED.HTM to open it in a web browser.

If you do not have an mbed account, choose "Signup", and create your mbed Account. Otherwise, log in with your normal username and password.

This will give you access to the website, tools, libraries and documentation.



PC Configuration

Your mbed Microcontroller can appear on your computer as a serial port. On Mac and Linux, this will happen by default. For Windows, you need to install a driver:

Windows

See Windows-serial-configuration for full details about setting up Windows for serial communication with your mbed Microcontroller

From a host PC to communicate with mbed you will need a terminal application. This allows the mbed Microcontroller to print to your PC screen, and for you to send characters back to your mbed.

Some terminal programs (e.g. TeraTerm) list the available serial ports by name. However, if you do need to know the identity of the serial port so that you can attach a terminal or an application to it:

WindowsMacLinux
Find the identity of the COM port by opening ''Device Manager''. To do this navigate ''Start -> Control Panel -> System -> Hardware -> Device Manager''.To find the device name under Mac OS X, use the command ''ls /dev/tty.usbmodem*''To find the device name under Linux, use the command ''ls /dev/ttyACM*''
windowsmaclinux

On both Mac and Linux PCs, the port with the higher number will be the USB serial debug port. For example, if you have Linux and get ports /dev/ttyACM0 and /dev/ttyACM1, ttyACM1 will be the debug port and ttyACM0 the AT command/secondary port.



Downloading A program

1. Save a program binary (.bin) to the Platform

Download the appropriate "Hello World!" binary:

Note: the source code for this program will be seen in the next section.

Save the program binary file to your mbed Microcontroller Disk, just like you would with a normal USB disk. The Status LED will flash as the PC writes the file to the Microcontroller disk. The file is now consumed.

2. Press the Reset Button

When the Reset Button in pressed, the microcontroller will be reset and the last programmed application will begin to run.

3. Hello World!

The Microcontroller is now running the program; flashing LED1 forever! If you reset the Microcontroller, or disconnect and reconnect the power, the program will simply restart.



Hello World!

Import programmbed-os-example-blinky

This is a very simple guide, reviewing the steps required to get Blinky working on an mbed OS platform.



Where Next

Follow the guide to creating your own programs using the online compiler

Please log in to start a discussion or ask a question.

Discussion topics

TopicRepliesLast post
xDot, getNextTxMs() function, serious glitch causes module to get stuck irrecoverably 0 14 Jun 2017 by Tuomas Manninen

Questions

See more related questions