Support for R1 Neo hardware. New variant and baseboard class. * Known issues: - power management is not currently supported - power off via long button press is not implemented Add support for Epson Seiko RX8130CE I2C Real-time clock.
184 lines
5.5 KiB
C
184 lines
5.5 KiB
C
/*
|
|
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
|
|
Copyright (c) 2016 Sandeep Mistry All right reserved.
|
|
Copyright (c) 2018, Adafruit Industries (adafruit.com)
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the GNU Lesser General Public License for more details.
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef _VARIANT_R1NEO_
|
|
#define _VARIANT_R1NEO_
|
|
|
|
#define RAK4630
|
|
|
|
/** Master clock frequency */
|
|
#define VARIANT_MCK (64000000ul)
|
|
|
|
#define USE_LFXO // Board uses 32khz crystal for LF
|
|
// define USE_LFRC // Board uses RC for LF
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Headers
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
#include "WVariant.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif // __cplusplus
|
|
|
|
/* Number of pins defined in PinDescription array */
|
|
#define PINS_COUNT (48)
|
|
#define NUM_DIGITAL_PINS (48)
|
|
#define NUM_ANALOG_INPUTS (8)
|
|
#define NUM_ANALOG_OUTPUTS (0)
|
|
|
|
/* R1Neo peculiarities */
|
|
#define PIN_DCDC_EN_MCU_HOLD (13) // P0.13 (04) DCDC_EN_MCU_HOLD
|
|
#define PIN_SOFT_SHUTDOWN (29) // P0.29 (32) SOFT_SHUTDOWN_SIGNAL
|
|
#define PIN_MCU_SIGNAL (30) // P0.30 (33) MCU_SIGNAL
|
|
|
|
/* R1Neo LoRa Radio */
|
|
// RAK4630/4631 pins
|
|
|
|
#define P_LORA_DIO_1 (47) // P1.15 (SX)
|
|
#define P_LORA_NSS (42) // P1.10 (SX)
|
|
#define P_LORA_RESET RADIOLIB_NC // P1.06 (SX) -- 38
|
|
#define P_LORA_BUSY (46) // P1.14 (SX)
|
|
#define P_LORA_SCLK (43) // P1.11 (SX)
|
|
#define P_LORA_MISO (45) // P1.13 (SX)
|
|
#define P_LORA_MOSI (44) // P1.12 (SX)
|
|
#define SX126X_POWER_EN (37) // P1.05 (SX)
|
|
|
|
#define SX126X_DIO2_AS_RF_SWITCH true
|
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
|
|
|
/* R1Neo peripherals */
|
|
/* GPS */
|
|
#define GPS_RX (24) // P0.24 (23) UART_GPS_RX
|
|
#define GPS_TX (25) // P0.25 (24) UART_GPS_TX
|
|
#define GPS_EN (33) // P1.01 (25) GPS_EN
|
|
#define GPS_PPS (2) // P0.02 (30) GPS_PPS
|
|
|
|
#define PIN_GPS_1PPS GPS_PPS
|
|
#define GPS_BAUD_RATE 9600
|
|
|
|
/* RTC */
|
|
#define RTC_SDA (19) // P0.19 (9) RTC_SDA
|
|
#define RTC_SCL (20) // P0.20 (10) RTC_SCL
|
|
|
|
/* LEDs */
|
|
#define LED_GREEN (36) // P1.04 (28) GRN_LED_RAK
|
|
#define LED_BLUE (28) // P0.28 (31) BLU_LED_RAK
|
|
|
|
#define LED_BUILTIN (0xFF)
|
|
|
|
#ifndef P_LORA_TX_LED
|
|
#define P_LORA_TX_LED LED_GREEN
|
|
#endif
|
|
|
|
#define LED_STATE_ON 1 // State when LED is lit
|
|
|
|
/* Buttons */
|
|
#define PIN_USER_BTN (26)
|
|
|
|
/* Buzzer */
|
|
#define PIN_BUZZER (3)
|
|
|
|
/* Analog pins */
|
|
// Arduino makes me angry
|
|
#define PIN_A0 (0xFF) // NOT_PRESENT
|
|
#define PIN_A1 (0xFF) // NOT_PRESENT
|
|
#define PIN_A2 (4) // P0.04 (41) NC
|
|
#define PIN_A3 (5) // P0.05 (40) NC
|
|
#define PIN_A4 (0xFF) // NOT_PRESENT
|
|
#define PIN_A5 (0xFF) // NOT_PRESENT
|
|
#define PIN_A6 (0xFF) // NOT_PRESENT
|
|
#define PIN_A7 (31) // P0.31 (39) ADC_VBAT
|
|
|
|
static const uint8_t A0 = PIN_A0;
|
|
static const uint8_t A1 = PIN_A1;
|
|
static const uint8_t A2 = PIN_A2;
|
|
static const uint8_t A3 = PIN_A3;
|
|
static const uint8_t A4 = PIN_A4;
|
|
static const uint8_t A5 = PIN_A5;
|
|
static const uint8_t A6 = PIN_A6;
|
|
static const uint8_t A7 = PIN_A7;
|
|
#define ADC_RESOLUTION 14
|
|
|
|
// Other pins
|
|
#define PIN_AREF (0xFF) // No analog reference
|
|
|
|
static const uint8_t AREF = PIN_AREF;
|
|
|
|
/* Serial interfaces */
|
|
#define PIN_GPS_TX (GPS_TX)
|
|
#define PIN_GPS_RX (GPS_RX)
|
|
#define PIN_GPS_EN (GPS_EN)
|
|
|
|
#define PIN_SERIAL1_TX (PIN_GPS_TX)
|
|
#define PIN_SERIAL1_RX (PIN_GPS_RX)
|
|
|
|
/* SPI Interfaces */
|
|
// unused pins - define anyways
|
|
#define SPI_INTERFACES_COUNT 1
|
|
#define PIN_SPI_MOSI (9) // P0.09 (13) NC
|
|
#define PIN_SPI_MISO (10) // P0.10 (12) NC
|
|
#define PIN_SPI_SCK (21) // P0.21 (11) NC
|
|
|
|
/* I2C Interfaces */
|
|
#define WIRE_INTERFACES_COUNT 1
|
|
|
|
#define PIN_WIRE_SDA (RTC_SDA)
|
|
#define PIN_WIRE_SCL (RTC_SCL)
|
|
|
|
/* QSPI Pins */
|
|
// interface occupied by peripherals, define anyways
|
|
#define PIN_QSPI_SCK (3) // P0.03 (29) BUZZER
|
|
#define PIN_QSPI_CS (26) // P0.26 (34) USER_BUTTON
|
|
#define PIN_QSPI_IO0 (30) // P0.30 (33) MCU_SIGNAL
|
|
#define PIN_QSPI_IO1 (29) // P0.29 (32) SOFT_SHUTDOWN
|
|
#define PIN_QSPI_IO2 (28) // P0.28 (31) BLU_LED_RAK
|
|
#define PIN_QSPI_IO3 (2) // P0.02 (30) GPS_PPS
|
|
|
|
/* On-board QSPI Flash */
|
|
// No QSPI (define anyways)
|
|
#define EXTERNAL_FLASH_DEVICES IS25LP080D
|
|
#define EXTERNAL_FLASH_USE_QSPI
|
|
|
|
/* Battery */
|
|
#define PIN_VBAT_READ (31) // P0.31 (39) ADC_VBAT
|
|
#define PIN_BAT_CHG (34) // P1.02 (26) BAT_CHG_STATUS
|
|
|
|
#define ADC_MULTIPLIER (3 * 1.73 * 1.187 * 1000)
|
|
|
|
// Power management boot protection threshold (millivolts)
|
|
// Set to 0 to disable boot protection
|
|
// disabled for now until I can figure this out
|
|
#define PWRMGT_VOLTAGE_BOOTLOCK 0 // Won't boot below this voltage (mV)
|
|
// LPCOMP wake configuration (voltage recovery from SYSTEMOFF)
|
|
// AIN3 = P0.05 = PIN_A0 / PIN_VBAT_READ
|
|
#define PWRMGT_LPCOMP_AIN 5
|
|
#define PWRMGT_LPCOMP_REFSEL 4 // 5/8 VDD (~3.13-3.44V)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Arduino objects - C++ only
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
#endif
|