278 lines
8.6 KiB
C
278 lines
8.6 KiB
C
#ifndef _SEEED_XIAO_NRF52840_KIT_H_
|
|
#define _SEEED_XIAO_NRF52840_KIT_H_
|
|
|
|
/** 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
|
|
|
|
/*
|
|
Xiao pin assignments
|
|
|
|
| Pin | Default | I2C | BTB | BLE-L | | Pin | Default | I2C | BTB | BLE-L |
|
|
| ----- | -------- | ---- | ---- | ----- | --- | ----- | ------- | ---- | ---- | ----- |
|
|
| | | | | | | | | | | |
|
|
| D0 | G_STBY | UBTN | DIO1 | CS | | 5v | | | | |
|
|
| D1 | DIO1 | DIO1 | Busy | DIO1 | | GND | | | | |
|
|
| D2 | NRST | NRST | NRST | Busy | | 3v3 | | | | |
|
|
| D3 | Busy | Busy | CS | NRST | | D10 | MOSI | MOSI | MOSI | MOSI |
|
|
| D4 | CS | CS | RXEN | SDA | | D9 | MISO | MISO | MISO | MISO |
|
|
| D5 | RXEN | RXEN | | SCL | | D8 | SCK | SCK | SCK | SCK |
|
|
| D6 | G_TX | SDA | G_TX | | | D7 | G_RX | SCL | G_RX | RXEN |
|
|
| | | | | | | | | | | |
|
|
| | End | | | | | | | | | |
|
|
| NFC1/ | SDA | G_TX | SDA | G_TX | | NFC2/ | SCL | G_RX | SCL | G_RX |
|
|
| D30 | | | | | | D31 | | | | |
|
|
| | | | | | | | | | | |
|
|
| | Internal | | | | | | | | | |
|
|
| D16 | SCL1 | SCL1 | SCL1 | SCL1 | | | | | | |
|
|
| D17 | SDA1 | SDA1 | SDA1 | SDA1 | | | | | | |
|
|
|
|
The default column shows the pin assignments for the Wio-SX1262 for XIAO
|
|
(standalone SKU 113010003 or nRF52840 kit SKU 102010710).
|
|
The I2C column shows an alternative pin assignment using I2C on D6/D7 in place of the GNSS.
|
|
The BTB column shows the pin assignment for the Wio-SX1262 -30-pin board-to-board connector version from the ESP32S3 kit.
|
|
The BLE-L column shows the pin assignment for the original DIY xiao_ble, and which is retained for legacy users.
|
|
Note that the in addition to the difference between the default and the I2C pinouts in placing the pins on NFC or
|
|
D6/D7, the user button is activated on D0. The button conflicts with the official GNSS module, so caution is advised.
|
|
*/
|
|
|
|
#define PINS_COUNT (33)
|
|
#define NUM_DIGITAL_PINS (33)
|
|
#define NUM_ANALOG_INPUTS (8)
|
|
#define NUM_ANALOG_OUTPUTS (0)
|
|
|
|
/*
|
|
* Digital Pins
|
|
*/
|
|
#define D0 (0ul)
|
|
#define D1 (1ul)
|
|
#define D2 (2ul)
|
|
#define D3 (3ul)
|
|
#define D4 (4ul)
|
|
#define D5 (5ul)
|
|
#define D6 (6ul)
|
|
#define D7 (7ul)
|
|
#define D8 (8ul)
|
|
#define D9 (9ul)
|
|
#define D10 (10ul)
|
|
|
|
/*
|
|
* Analog pins
|
|
*/
|
|
#define PIN_A0 (0)
|
|
#define PIN_A1 (1)
|
|
#define PIN_A2 (32)
|
|
#define PIN_A3 (3)
|
|
#define PIN_A4 (4)
|
|
#define PIN_A5 (5)
|
|
#define PIN_VBAT (32)
|
|
#define VBAT_ENABLE (14)
|
|
|
|
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;
|
|
#define ADC_RESOLUTION 12
|
|
|
|
/*
|
|
* LEDs
|
|
*/
|
|
#define LED_STATE_ON (0) // RGB LED is common anode
|
|
#define LED_RED (11)
|
|
#define LED_GREEN (13)
|
|
#define LED_BLUE (12)
|
|
|
|
#define PIN_LED1 LED_GREEN // PIN_LED1 is used in src/platform/nrf52/architecture.h to define LED_POWER
|
|
#define PIN_LED2 LED_BLUE
|
|
#define PIN_LED3 LED_RED
|
|
|
|
/*
|
|
* Buttons
|
|
*/
|
|
|
|
/*
|
|
* D0 is shared with PIN_GPS_STANDBY on the L76K GNSS Module, so refer to
|
|
* GPS_L76K definition preventing this conflict
|
|
*/
|
|
|
|
// #define BUTTON_PIN D0
|
|
|
|
/*
|
|
* Serial Interfaces
|
|
*/
|
|
#define PIN_SERIAL2_RX (-1)
|
|
#define PIN_SERIAL2_TX (-1)
|
|
|
|
/*
|
|
* Pinout for SX126x
|
|
*/
|
|
#define USE_SX1262
|
|
|
|
#if defined(XIAO_BLE_LEGACY_PINOUT)
|
|
// Legacy xiao_ble variant pinout for third-party SX126x modules e.g. EBYTE E22
|
|
#define SX126X_CS D0
|
|
#define SX126X_DIO1 D1
|
|
#define SX126X_BUSY D2
|
|
#define SX126X_RESET D3
|
|
#define SX126X_RXEN D7
|
|
#else
|
|
#if defined(SEEED_XIAO_NRF_WIO_BTB)
|
|
// Wio-SX1262 for XIAO with 30-pin board-to-board connector
|
|
// https://files.seeedstudio.com/products/SenseCAP/Wio_SX1262/Schematic_Diagram_Wio-SX1262_for_XIAO.pdf
|
|
#define SX126X_CS D3
|
|
#define SX126X_DIO1 D0
|
|
#define SX126X_BUSY D1
|
|
#define SX126X_RESET D2
|
|
#define SX126X_RXEN D4
|
|
#else
|
|
// Wio-SX1262 for XIAO (standalone SKU 113010003 or nRF52840 kit SKU 102010710)
|
|
// Same for both default and I2C pinouts
|
|
// https://files.seeedstudio.com/products/SenseCAP/Wio_SX1262/Wio-SX1262%20for%20XIAO%20V1.0_SCH.pdf
|
|
#define SX126X_CS D4
|
|
#define SX126X_DIO1 D1
|
|
#define SX126X_BUSY D3
|
|
#define SX126X_RESET D2
|
|
#define SX126X_RXEN D5
|
|
#endif // defined(SEEED_XIAO_NRF_WIO_BTB)
|
|
#endif // defined(XIAO_BLE_LEGACY_PINOUT)
|
|
|
|
// Common pinouts for all SX126x pinouts above
|
|
#define SX126X_TXEN RADIOLIB_NC
|
|
#define SX126X_DIO2_AS_RF_SWITCH // DIO2 is used to control the TX side of the RF switch
|
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
|
|
|
/*
|
|
* SPI Interfaces
|
|
* Defined after pinout for SX1262x to factor in CS pinout variations
|
|
*/
|
|
#define SPI_INTERFACES_COUNT 1
|
|
|
|
#define PIN_SPI_MISO D9
|
|
#define PIN_SPI_MOSI D10
|
|
#define PIN_SPI_SCK D8
|
|
|
|
static const uint8_t SS = SX126X_CS;
|
|
static const uint8_t MOSI = PIN_SPI_MOSI;
|
|
static const uint8_t MISO = PIN_SPI_MISO;
|
|
static const uint8_t SCK = PIN_SPI_SCK;
|
|
|
|
/*
|
|
* GPS
|
|
*/
|
|
// GPS L76K
|
|
|
|
// Default GPS L76K
|
|
#if defined(SEEED_XIAO_NRF_KIT_DEFAULT) || defined(SEEED_XIAO_NRF_WIO_BTB)
|
|
#define GPS_L76K
|
|
#define GPS_TX_PIN D6 // This is data from the MCU
|
|
#define GPS_RX_PIN D7 // This is data from the GNSS module
|
|
#if defined(SEEED_XIAO_NRF_KIT_DEFAULT)
|
|
#define PIN_GPS_STANDBY D0 // this is where the conflicting pinouts come from
|
|
#endif
|
|
// I2C and BLE-Legacy put them on the NFC pins
|
|
#else
|
|
#define GPS_TX_PIN (30)
|
|
#define GPS_RX_PIN (31)
|
|
#endif
|
|
|
|
#define HAS_GPS 1
|
|
#define GPS_BAUDRATE 9600
|
|
#define GPS_THREAD_INTERVAL 50
|
|
#define PIN_SERIAL1_TX GPS_TX_PIN
|
|
#define PIN_SERIAL1_RX GPS_RX_PIN
|
|
|
|
/*
|
|
* Battery
|
|
*/
|
|
#define BATTERY_PIN PIN_VBAT // P0.31: VBAT voltage divider
|
|
#define ADC_MULTIPLIER (3) // ... R17=1M, R18=510k
|
|
#define ADC_CTRL VBAT_ENABLE // P0.14: VBAT voltage divider
|
|
#define ADC_CTRL_ENABLED LOW // ... sink
|
|
#define EXT_CHRG_DETECT (23) // P0.17: Charge LED
|
|
#define EXT_CHRG_DETECT_VALUE LOW // ... BQ25101 ~CHG indicates charging
|
|
#define HICHG (22) // P0.13: BQ25101 ISET 100mA instead of 50mA
|
|
|
|
#define BATTERY_SENSE_RESOLUTION_BITS (10)
|
|
|
|
/*
|
|
* Wire Interfaces
|
|
* Keep this section after potentially conflicting pin definitions
|
|
*/
|
|
#define I2C_NO_RESCAN // I2C is a bit finicky, don't scan too much
|
|
#define WIRE_INTERFACES_COUNT 1 // changed to 1 for now, as LSM6DS3TR has issues.
|
|
|
|
#if defined(XIAO_BLE_LEGACY_PINOUT)
|
|
// Used for I2C by DIY xiao_ble variant
|
|
#define PIN_WIRE_SDA D4
|
|
#define PIN_WIRE_SCL D5
|
|
#else
|
|
// Put the I2C pins on the NFC pins by default
|
|
#if defined(SEEED_XIAO_NRF_KIT_DEFAULT) || defined(SEEED_XIAO_NRF_WIO_BTB)
|
|
#define PIN_WIRE_SDA 30
|
|
#define PIN_WIRE_SCL 31
|
|
#else
|
|
// If not on legacy or defauly, we're wanting I2C on the back pins
|
|
#define PIN_WIRE_SDA D6
|
|
#define PIN_WIRE_SCL D7
|
|
#endif // defined(SEEED_XIAO_NRF_KIT_DEFAULT) || defined(SEEED_XIAO_NRF_WIO_BTB)
|
|
#endif // defined(XIAO_BLE_LEGACY_PINOUT)
|
|
|
|
// // Internal LSM6DS3TR on XIAO nRF52840 Series - put it on wire1
|
|
// // Note: disabled for now, as there are some issues with the LSM.
|
|
// #define PIN_WIRE1_SDA (17)
|
|
// #define PIN_WIRE1_SCL (16)
|
|
|
|
static const uint8_t SDA = PIN_WIRE_SDA; // Not sure if this is needed
|
|
static const uint8_t SCL = PIN_WIRE_SCL; // Not sure if this is needed
|
|
|
|
// // QSPI Pins
|
|
// // ---------
|
|
// #define PIN_QSPI_SCK (24)
|
|
// #define PIN_QSPI_CS (25)
|
|
// #define PIN_QSPI_IO0 (26)
|
|
// #define PIN_QSPI_IO1 (27)
|
|
// #define PIN_QSPI_IO2 (28)
|
|
// #define PIN_QSPI_IO3 (29)
|
|
|
|
// // On-board QSPI Flash
|
|
// // -------------------
|
|
// #define EXTERNAL_FLASH_DEVICES P25Q16H
|
|
// #define EXTERNAL_FLASH_USE_QSPI
|
|
|
|
/*
|
|
* Buttons
|
|
* Keep this section after potentially conflicting pin definitions
|
|
* because D0 has multiple possible conflicts with various XIAO modules:
|
|
*/
|
|
#if defined(SEEED_XIAO_NRF_KIT_I2C)
|
|
#define BUTTON_PIN D0
|
|
#endif
|
|
|
|
#if defined(SEEED_XIAO_NRF_WIO_BTB)
|
|
#define BUTTON_PIN D5
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Arduino objects - C++ only
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
#endif
|