diff --git a/README.md b/README.md index 9614176..d3be78e 100644 --- a/README.md +++ b/README.md @@ -174,6 +174,7 @@ An external display can be optionally connected. For details and wiring instruct | NodeMCU-32S | ESP32 | yes | yes | yes | no | nodemcu_32 | | NodeMCU V2 (aka v1.0) | ESP8266 | yes | yes | yes | no | nodemcuv2 | | Arduino Pro Mini (ATmega328 8mHz) | ATmega328 | yes | yes | no | no | pro8mhzatmega328 | +| Teensy LC | MKL26Z64VFT4 | yes | yes | yes | no | teensylc | | Arduino Zero (USB) | SAMD21 | yes | yes | yes | no | zerousb | _\*7_: These boards have onboard USB but by default do not support firmware upload over USB or serial over USB. For upload use a STLink programmer or USB to serial adapter. diff --git a/platformio.ini b/platformio.ini index 78dd5e0..f96da7e 100644 --- a/platformio.ini +++ b/platformio.ini @@ -41,12 +41,12 @@ default_envs = ; heltec_wireless_stick_lite ; Heltec Wireless Stick Lite ; heltec_wireless_stick ; Heltec Wireless Stick ; lopy4 ; Pycom Lopy4 - ; lora32u4II ; BSFrance LoRa32u4 II - ; ttgo_lora32_v1 ; TTGO LoRa32 V1.3 - ; ttgo_lora32_v2 ; TTGO LoRa32 V2.0 - ; ttgo_lora32_v21 ; TTGO LoRa32 V2.1.6 - ; ttgo_tbeam ; TTGO T-Beam V0.7 - ; ttgo_tbeam_v1 ; TTGO T-Beam V1.0 + ; lora32u4II ; BSFrance LoRa32u4 II v1.0, v1.1, v1.2, v1.3 + ; ttgo_lora32_v1 ; TTGO LoRa32 v1.3 + ; ttgo_lora32_v2 ; TTGO LoRa32 v2.0 + ; ttgo_lora32_v21 ; TTGO LoRa32 v2.1.6 + ; ttgo_tbeam ; TTGO T-Beam v0.5, v0.6, v0.7 + ; ttgo_tbeam_v1 ; TTGO T-Beam v1.0, v1.1 ; Development boards that require an external SPI LoRa module: @@ -62,6 +62,7 @@ default_envs = ; nodemcu_32s ; NodeMCU-32S ; nodemcuv2 ; NodeMCU V2 ; pro8mhzatmega328 ; Arduino Pro Mini 3.3V 8Mhz + ; teensylc ; Teensy LC ; zerousb ; Arduino Zero (USB) @@ -704,6 +705,26 @@ build_flags = ; -D USE_DISPLAY ; Requires external I2C OLED display +[env:teensylc] +; Teensy LC (NXP MKL26Z64VFT4) +; No display +platform = teensy +board = teensylc +framework = arduino +monitor_speed = ${common.monitor_speed} +lib_deps = + ${common.lib_deps} + ${mcci_lmic.lib_deps} +build_flags = + ${common.build_flags} + ${mcci_lmic.build_flags} + -D BSFILE=\"boards/teensylc.h\" + -D MONITOR_SPEED=${common.monitor_speed} + -D USE_SERIAL + -D USE_LED + ; -D USE_DISPLAY ; Requires external I2C OLED display + + [env:zerousb] ; Arduino Zero USB (SAMD21) ; The SPI pins are available on the ICSP connector pins on top of the PCB diff --git a/src/boards/teensylc.h b/src/boards/teensylc.h new file mode 100644 index 0000000..a4d0ea2 --- /dev/null +++ b/src/boards/teensylc.h @@ -0,0 +1,136 @@ +/******************************************************************************* + * + * File: teensylc.h + * + * Function: Board Support File for Teensy LC with external SPI LoRa module. + * + * Copyright: Copyright (c) 2021 Leonel Lopes Parente + * + * License: MIT License. See accompanying LICENSE file. + * + * Author: Leonel Lopes Parente + * + * Description: This board has onboard USB (provided by the MCU). + * It supports automatic firmware upload and serial over USB. + * No onboard display. Optionally an external display con be connected. + * + * Onboard LED and SPI SCK use the same GPIO (13) which causes a hardware conflict. + * Fortunately SCK can be remapped to a different GPIO (14). + * + * Connect an optional display according to below connection details. + * + * CONNECTIONS AND PIN DEFINITIONS: + * + * Indentifiers between parentheses are defined in the board's + * Board Support Package (BSP) which is part of the Arduino core. + * + * Leds GPIO + * ---- ---- + * LED <――――――――――> 13 (LED_BUILTIN) (SCK) Hardware conflict. + * Cannot use LED_BUILTIN and SCK together. + * + * I2C [display] GPIO + * --- ---- + * SDA <――――――――――> 18 (SDA) + * SCL <――――――――――> 19 (SCL) + * + * SPI/LoRa module GPIO + * --- ---- + * MOSI <――――――――――> 11 (MOSI) + * MISO <――――――――――> 12 (MISO) + * SCK <――――――――――> 14 NOT SCK! + * SPI SCK is remapped to GPIO14 because + * SCK definition conflicts with onboard LED. + * NSS <――――――――――> 10 + * RST <――――――――――> 9 + * DIO0 <――――――――――> 8 + * DIO1 <――――――――――> 7 + * DIO2 - Not needed for LoRa. + * + * Docs: https://docs.platformio.org/en/latest/boards/teensy/teensylc.html + * + * Identifiers: LMIC-node + * board: teensylc + * PlatformIO + * board: teensylc + * platform: teensy + * Arduino + * board: ARDUINO_TEENSYLC + * architecture: + * + ******************************************************************************/ + +#pragma once + +#ifndef TEENSYLC_H_ +#define TEENSYLC_H_ + +#include "LMIC-node.h" +#include + +#define DEVICEID_DEFAULT "teensylc" // Default deviceid value + +// Wait for Serial +// Can be useful for boards with MCU with integrated USB support. +#define WAITFOR_SERIAL_SECONDS_DEFAULT 10 // -1 waits indefinitely + +// LMIC Clock Error +// This is only needed for slower 8-bit MCUs (e.g. 8MHz ATmega328 and ATmega32u4). +// Value is defined in parts per million (of MAX_CLOCK_ERROR). +// #define LMIC_CLOCK_ERROR_PPM 0 + +// Pin mappings for LoRa tranceiver +const lmic_pinmap lmic_pins = { + .nss = 10, + .rxtx = LMIC_UNUSED_PIN, + .rst = 9, + .dio = { /*dio0*/ 8, /*dio1*/ 7, /*dio2*/ LMIC_UNUSED_PIN } +#ifdef MCCI_LMIC + , + .rxtx_rx_active = 0, + .rssi_cal = 10, + .spi_freq = 8000000 /* 8 MHz */ +#endif +}; + +#ifdef USE_SERIAL + usb_serial_class& serial = Serial; +#endif + +#ifdef USE_LED + EasyLed led(LED_BUILTIN, EasyLed::ActiveLevel::High); +#endif + +#ifdef USE_DISPLAY + // Create U8x8 instance for SSD1306 OLED display (no reset) using hardware I2C. + U8X8_SSD1306_128X64_NONAME_HW_I2C display(/*rst*/ U8X8_PIN_NONE, /*scl*/ SCL, /*sda*/ SDA); +#endif + + +bool boardInit(InitType initType) +{ + // This function is used to perform board specific initializations. + // Required as part of standard template. + + // InitType::Hardware Must be called at start of setup() before anything else. + // InitType::PostInitSerial Must be called after initSerial() before other initializations. + + bool success = true; + switch (initType) + { + case InitType::Hardware: + // Note: Serial port and display are not yet initialized and cannot be used use here. + // SPI SCK needs to remapped to GPIO14 because it conflicts with LED_BUILTIN. + SPI.setSCK(14); + break; + + case InitType::PostInitSerial: + // Note: If enabled Serial port and display are already initialized here. + // No actions required for this board. + break; + } + return success; +} + + +#endif // TEENSYLC_H_ \ No newline at end of file