diff --git a/boards.txt b/boards.txt index f78ca62..beb96b0 100644 --- a/boards.txt +++ b/boards.txt @@ -1074,6 +1074,92 @@ seeed52840sense.menu.bootloader.none.bootloader.flags= seeed52840sense.menu.bootloader.none.build.bootloader.file=tools/none_bootloader.hex +# Arduino + +nano33blesense.name=Arduino Nano 33 BLE Sense + +nano33blesense.vid.0=0x2341 +nano33blesense.pid.0=0x805a +nano33blesense.vid.1=0x2341 +nano33blesense.pid.1=0x005a +nano33blesense.vid.2=0x2341 +nano33blesense.pid.2=0x025a +nano33blesense.vid.3=0x2341 +nano33blesense.pid.3=0x015a + +nano33blesense.upload.tool=openocd +nano33blesense.upload.target=nrf52 +nano33blesense.upload.jlink_device=nRF52840_xxAA +nano33blesense.upload.use_1200bps_touch=true +nano33blesense.upload.wait_for_upload_port=true +nano33blesense.upload.maximum_size=1032192 +nano33blesense.upload.maximum_data_size=262144 +nano33blesense.bootloader.tool=openocd + +nano33blesense.build.dfu_pattern={adafruit-nrfutil.dfu_pattern} +nano33blesense.build.mcu=cortex-m4 +nano33blesense.build.f_cpu=64000000 +nano33blesense.build.board=ARDUINO_NANO33BLE_SENSE +nano33blesense.build.core=nRF5 +nano33blesense.build.variant=Arduino_Nano33BLE_Sense +nano33blesense.build.variant_system_lib= +nano33blesense.build.usb_manufacturer="Arduino" +nano33blesense.build.usb_product="Nano 33 BLE Sense" +nano33blesense.build.vid=0x2341 +nano33blesense.build.pid=0x805a +nano33blesense.build.float_flags=-mfloat-abi=hard -mfpu=fpv4-sp-d16 +nano33blesense.build.extra_flags=-DNRF52_SERIES -DNRF52840_XXAA {bootloader.flags} {build.flags.usb} -DCONFIG_NIMBLE_CPP_LOG_LEVEL={build.cpp_debug} {build.nimble_flags} +nano33blesense.build.ldscript=nrf52840_xxaa.ld + +nano33blesense.menu.role.all=All +nano33blesense.menu.role.all.build.nimble_flags= +nano33blesense.menu.role.periph=Peripheral +nano33blesense.menu.role.periph.build.nimble_flags=-DCONFIG_BT_NIMBLE_ROLE_CENTRAL_DISABLED -DCONFIG_BT_NIMBLE_ROLE_OBSERVER_DISABLED +nano33blesense.menu.role.adv=Advertiser +nano33blesense.menu.role.adv.build.nimble_flags=-DCONFIG_BT_NIMBLE_ROLE_CENTRAL_DISABLED -DCONFIG_BT_NIMBLE_ROLE_OBSERVER_DISABLED -DCONFIG_BT_NIMBLE_ROLE_PERIPHERAL_DISABLED +nano33blesense.menu.role.scan=Scanner +nano33blesense.menu.role.scan.build.nimble_flags=-DCONFIG_BT_NIMBLE_ROLE_CENTRAL_DISABLED -DCONFIG_BT_NIMBLE_ROLE_PERIPHERAL_DISABLED -DCONFIG_BT_NIMBLE_ROLE_CENTRAL_DISABLED +nano33blesense.menu.role.central=Client +nano33blesense.menu.role.central.build.nimble_flags=-DCONFIG_BT_NIMBLE_ROLE_PERIPHERAL_DISABLED -DCONFIG_BT_NIMBLE_ROLE_BROADCASTER_DISABLED + +nano33blesense.menu.cppDbgLvl.none=None +nano33blesense.menu.cppDbgLvl.none.build.cpp_debug=0 +nano33blesense.menu.cppDbgLvl.error=Error +nano33blesense.menu.cppDbgLvl.error.build.cpp_debug=1 +nano33blesense.menu.cppDbgLvl.warn=Warn +nano33blesense.menu.cppDbgLvl.warn.build.cpp_debug=2 +nano33blesense.menu.cppDbgLvl.info=Info +nano33blesense.menu.cppDbgLvl.info.build.cpp_debug=3 +nano33blesense.menu.cppDbgLvl.debug=Debug +nano33blesense.menu.cppDbgLvl.debug.build.cpp_debug=4 + +nano33blesense.menu.bootloader.adafruit_ble=Adafruit BLE (s140 v7 softdevice) +nano33blesense.menu.bootloader.adafruit_ble.bootloader.flags=-DUSE_ADA_BL -DADA_SD_BL +nano33blesense.menu.bootloader.adafruit_ble.upload.tool=adafruit-nrfutil +nano33blesense.menu.bootloader.adafruit_ble.upload.protocol=adafruit-nrfutil +nano33blesense.menu.bootloader.adafruit_ble.upload.tool=adafruit-nrfutil +nano33blesense.menu.bootloader.adafruit_ble.upload.maximum_size=823296 +nano33blesense.menu.bootloader.adafruit_ble.upload.maximum_data_size=237568 +nano33blesense.menu.bootloader.adafruit_ble.build.dfu_pattern={adafruit-nrfutil.dfu_pattern} +nano33blesense.menu.bootloader.adafruit_ble.build.bootloader.file=tools/nrf52840_s140_v7_adabl.hex +nano33blesense.menu.bootloader.adafruit_ble.build.ldscript=nrf52840_s140_v7_adabl.ld + +nano33blesense.menu.bootloader.adafruit_serial=Adafruit Serial (no softdevice) +nano33blesense.menu.bootloader.adafruit_serial.bootloader.flags=-DUSE_ADA_BL +nano33blesense.menu.bootloader.adafruit_serial.upload.tool=adafruit-nrfutil +nano33blesense.menu.bootloader.adafruit_serial.upload.protocol=adafruit-nrfutil +nano33blesense.menu.bootloader.adafruit_serial.upload.tool=adafruit-nrfutil +nano33blesense.menu.bootloader.adafruit_serial.upload.maximum_size=978944 +nano33blesense.menu.bootloader.adafruit_serial.upload.maximum_data_size=262136 +nano33blesense.menu.bootloader.adafruit_serial.build.dfu_pattern={adafruit-nrfutil.dfu_pattern} +nano33blesense.menu.bootloader.adafruit_serial.build.bootloader.file=tools/nrf52840_serial_adabl.hex +nano33blesense.menu.bootloader.adafruit_serial.build.ldscript=nrf52840_serial_adabl.ld + +nano33blesense.menu.bootloader.none=No bootloader +nano33blesense.menu.bootloader.none.bootloader.flags= +nano33blesense.menu.bootloader.none.build.bootloader.file=tools/none_bootloader.hex + + # Adafruit feather52840.name=Adafruit Feather nRF52840 Express diff --git a/variants/Arduino_Nano33BLE_Sense/variant.cpp b/variants/Arduino_Nano33BLE_Sense/variant.cpp new file mode 100644 index 0000000..8ae9139 --- /dev/null +++ b/variants/Arduino_Nano33BLE_Sense/variant.cpp @@ -0,0 +1,68 @@ +#include "variant.h" +#include "wiring_constants.h" +#include "wiring_digital.h" +#include "nrf.h" + +const uint32_t g_ADigitalPinMap[] = +{ + // D0 .. D13 + 35, // D0 is P1.03 (TX) + 42, // D1 is P1.10 (RX) + 43, // D2 is P1.11 + 44, // D3 is P1.12 + 47, // D4 is P1.15 + 45, // D5 is P1.13 + 46, // D6 is P1.14 + 23, // D7 is P0.23 + 21, // D8 is P0.21 + 27, // D9 is P0.27 + 34, // D10 is P1.02 (SS) + 33, // D11 is P1.01 (MOSI) + 40, // D12 is P1.08 (MISO) + 13, // D13 is P0.13 (SCK / LED_BUILTIN) + + // A0 .. A7 (D14 .. D21) + 4, // D14 is P0.04 (A0) + 5, // D15 is P0.05 (A1) + 30, // D16 is P0.30 (A2) + 29, // D17 is P0.29 (A3) + 31, // D18 is P0.31 (A4 / SDA) + 2, // D19 is P0.02 (A5 / SCL) + 28, // D20 is P0.28 (A6) + 3, // D21 is P0.03 (A7) + + // LEDs (D22 .. D25) + 24, // D22 is P0.24 (LED_RED) + 16, // D23 is P0.16 (LED_GREEN) + 6, // D24 is P0.06 (LED_BLUE) + 41, // D25 is P1.09 (LED_PWR) + + // Interrupt (D26) + 19, // D26 is P0.19 (INT_APDS) + + // PDM microphone (D27 .. D29) + 17, // D27 is P0.17 (PDM_PWR) + 26, // D28 is P0.26 (PDM_CLK) + 25, // D29 is P0.25 (PDM_DIN) + + // Internal I2C for sensors (D30 .. D31) + 14, // D30 is P0.14 (Wire1 SDA) + 15, // D31 is P0.15 (Wire1 SCL) + + // Internal power control (D32 .. D33) + 32, // D32 is P1.00 (I2C pull-up enable) + 22, // D33 is P0.22 (VDD_ENV / sensors 3V3 enable) +}; + +void initVariant() +{ + // Turn on the power LED + pinMode(LED_PWR, OUTPUT); + digitalWrite(LED_PWR, HIGH); + + // Enable 3.3V power rail and I2C pull-ups for the onboard sensors + pinMode(PIN_ENABLE_SENSORS_3V3, OUTPUT); + pinMode(PIN_ENABLE_I2C_PULLUP, OUTPUT); + digitalWrite(PIN_ENABLE_SENSORS_3V3, HIGH); + digitalWrite(PIN_ENABLE_I2C_PULLUP, HIGH); +} diff --git a/variants/Arduino_Nano33BLE_Sense/variant.h b/variants/Arduino_Nano33BLE_Sense/variant.h new file mode 100644 index 0000000..6d04f89 --- /dev/null +++ b/variants/Arduino_Nano33BLE_Sense/variant.h @@ -0,0 +1,138 @@ +#ifndef _ARDUINO_NANO33BLE_SENSE_H_ +#define _ARDUINO_NANO33BLE_SENSE_H_ + +#define TARGET_ARDUINO_NANO33BLE_SENSE + +/** 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 + +#define PINS_COUNT (34) +#define NUM_DIGITAL_PINS (34) +#define NUM_ANALOG_INPUTS (8) +#define NUM_ANALOG_OUTPUTS (0) + +// LEDs +#define PIN_LED (13u) +#define LED_BUILTIN PIN_LED + +#define LED_RED (22u) +#define LED_GREEN (23u) +#define LED_BLUE (24u) +#define LED_PWR (25u) + +#define LED_STATE_ON (1) // State when LED is litted + +// Buttons +#define PIN_BUTTON1 (PINS_COUNT) + +// Digital pins +static const uint8_t D0 = 0; +static const uint8_t D1 = 1; +static const uint8_t D2 = 2; +static const uint8_t D3 = 3; +static const uint8_t D4 = 4; +static const uint8_t D5 = 5; +static const uint8_t D6 = 6; +static const uint8_t D7 = 7; +static const uint8_t D8 = 8; +static const uint8_t D9 = 9; +static const uint8_t D10 = 10; +static const uint8_t D11 = 11; +static const uint8_t D12 = 12; +static const uint8_t D13 = 13; + +// Analog pins +#define PIN_A0 (14u) +#define PIN_A1 (15u) +#define PIN_A2 (16u) +#define PIN_A3 (17u) +#define PIN_A4 (18u) +#define PIN_A5 (19u) +#define PIN_A6 (20u) +#define PIN_A7 (21u) + +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 (12) + +// Serial interfaces +#ifndef USB_CDC_DEFAULT_SERIAL + #define USB_CDC_DEFAULT_SERIAL (1) +#endif + +#if USB_CDC_DEFAULT_SERIAL + #define PIN_SERIAL1_TX (0) + #define PIN_SERIAL1_RX (1) +#else + #define PIN_SERIAL_TX (0) + #define PIN_SERIAL_RX (1) +#endif + +// SPI Interfaces +#define SPI_INTERFACES_COUNT (1) + +#define PIN_SPI_MISO (12) +#define PIN_SPI_MOSI (11) +#define PIN_SPI_SCK (13) + +static const uint8_t SS = 10; +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; + +// Wire Interfaces +#define WIRE_INTERFACES_COUNT (2) + +// External I2C (A4/A5) +#define PIN_WIRE_SDA (18u) +#define PIN_WIRE_SCL (19u) + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + +// Internal I2C for onboard sensors +#define PIN_WIRE1_SDA (30u) +#define PIN_WIRE1_SCL (31u) + +// APDS9960 interrupt pin +#define PIN_INT_APDS (26u) + +// PDM microphone (MP34DT05) +#define PIN_PDM_PWR (27u) +#define PIN_PDM_CLK (28u) +#define PIN_PDM_DIN (29u) + +// Internal power control pins +#define PIN_ENABLE_I2C_PULLUP (32u) +#define PIN_ENABLE_SENSORS_3V3 (33u) + +#ifdef __cplusplus +} +#endif + +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#endif