Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New board version: Nano 33 BLE Rev2 #9347

Merged
merged 6 commits into from
Jun 19, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions ports/nordic/boards/arduino_nano_33_ble/README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Arduino Nano 33 BLE and Nano 33 BLE Sense

The [Arduino Nano 33 BLE](https://store.arduino.cc/usa/nano-33-ble-with-headers) and
[Arduino Nano 33 BLE Sense](https://store.arduino.cc/usa/nano-33-ble-sense) and
are built around the NINA B306 module, based on Nordic nRF 52840 and containing
a powerful Cortex M4F. Both include an onboard 9 axis Inertial Measurement Unit (IMU), the LSM9DS1.
The Nano 33 BLE Sense adds an LPS22HB barometric pressure and temperature sensor,
an ADPS-9960 digital proximity, ambient light, RGB, and gensture sensor,
The [Arduino Nano 33 BLE](https://store.arduino.cc/usa/nano-33-ble) and
[Arduino Nano 33 BLE Sense](https://store.arduino.cc/usa/nano-33-ble-sense)
are built around the NINA-B306 module, based on the Nordic nRF52840 and containing
a powerful Cortex-M4F. Both include an onboard 9-axis Inertial Measurement Unit (IMU), the LSM9DS1.
The Nano 33 BLE Sense adds an LPS22HB barometric pressure and temperature sensor, an HTS221 humidity sensor,
an APDS-9960 digital proximity, ambient light, RGB, and gesture sensor,
and an MP34DT05 digital microphone.

Note: the Arduino Nano 33 BLE and BLE Sense do not include a QSPI external
Expand All @@ -15,11 +15,11 @@ filesystem.
I2C pins `board.SCL1` and `board.SDA1` are not exposed and are used for onboard peripherals.
Pin `board.R_PULLUP` must be set to high to enable the `SCL1` and `SDA1` pullups for proper operation.

Pin `board.VDD_ENV` applies power to the LSM9DS1, and must be high for it to be operational.
Pin `board.VDD_ENV` applies power to the LSM9DS1, the LPS22HB, and the HTS221, and must be high for them to be operational.

Pins `board.MIC_PWR`, `board.PDMDIN`, and `board.PDMCLK` are for the Nano 33 BLE Sense onboard microphone.

Pin `board.INT_ADPS` is the interrupt pin from the ADPS-9960.
Pin `board.INT_APDS` is the interrupt pin from the APDS-9960.

Pins `board.RGB_LED_R`, `board.RGB_LED_G`, and `board.RGB_LED_B`
are the red, green and blue LEDS in the onboard RGB LED.
Expand Down
2 changes: 1 addition & 1 deletion ports/nordic/boards/arduino_nano_33_ble/pins.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ static const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_RGB_LED_G), MP_ROM_PTR(&pin_P0_16) },
{ MP_ROM_QSTR(MP_QSTR_RGB_LED_B), MP_ROM_PTR(&pin_P0_06) },

// Power line to LSM9DS1.
// Power line to LSM9DS1, LPS22 and HTS221.
{ MP_ROM_QSTR(MP_QSTR_VDD_ENV), MP_ROM_PTR(&pin_P0_22) },

// Pullup voltage for SDA1 and SCL1
Expand Down
31 changes: 31 additions & 0 deletions ports/nordic/boards/arduino_nano_33_ble_rev2/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Arduino Nano 33 BLE Rev2 and Nano 33 BLE Sense Rev2

The [Arduino Nano 33 BLE Rev2](https://store.arduino.cc/usa/nano-33-ble-rev2) and
[Arduino Nano 33 BLE Sense Rev2](https://store.arduino.cc/usa/nano-33-ble-sense-rev2)
are built around the NINA-B306 module, based on the Nordic nRF52840 and containing
a powerful Cortex-M4F. Both include an onboard 9-axis Inertial Measurement Unit (IMU), made up of the BMI270 6-axis IMU and the BMM150 3-axis magnetometer.
The Nano 33 BLE Sense Rev2 adds an LPS22HB barometric pressure and temperature sensor, an HS3003 humidity sensor,
an APDS-9960 digital proximity, ambient light, RGB, and gesture sensor,
and an MP34DT06JTR digital microphone.

Note: the Arduino Nano 33 BLE Rev2 and BLE Sense Rev2 do not include a QSPI external
flash. Any Python code will need to be stored on the internal flash
filesystem.

I2C pins `board.SCL1` and `board.SDA1` are not exposed and are used for onboard peripherals.
Pin `board.R_PULLUP` must be set to high to enable the `SCL1` and `SDA1` pullups for proper operation.

Pin `board.VDD_ENV` applies power to the BMI270, the BMM150, the LPS22HB and the HS3003, and must be high for them to be operational.

Pins `board.MIC_PWR`, `board.PDMDIN`, and `board.PDMCLK` are for the Nano 33 BLE Sense onboard microphone.

Pin `board.INT_APDS` is the interrupt pin from the APDS-9960.

Pins `board.INT_BMI_1` and `board.INT_BMI_2` are the two interrupt pins from the BMI270.

Pin `board.INT_LPS` is the interrupt pin from the LPS22.

Pins `board.RGB_LED_R`, `board.RGB_LED_G`, and `board.RGB_LED_B`
are the red, green and blue LEDS in the onboard RGB LED.

Pins `board.LED_G` and `board.LED_Y` are onboard green and red LEDs. `board.LED_Y` is also `board.SCK`.
35 changes: 35 additions & 0 deletions ports/nordic/boards/arduino_nano_33_ble_rev2/board.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT

#include "supervisor/board.h"
#include "nrf.h"
#include "nrf_rtc.h"

void board_init(void) {
// Initializations below from Arduino variant.cpp.

// // turn power LED on
// pinMode(LED_PWR, OUTPUT);
// digitalWrite(LED_PWR, HIGH);

// Errata Nano33BLE - I2C pullup is on SWO line, need to disable TRACE
// was being enabled by nrfx_clock_anomaly_132
CoreDebug->DEMCR = 0;
NRF_CLOCK->TRACECONFIG = 0;

// FIXME: bootloader enables interrupt on COMPARE[0], which we don't handle
// Disable it here to avoid getting stuck when OVERFLOW irq is triggered
nrf_rtc_event_disable(NRF_RTC1, NRF_RTC_INT_COMPARE0_MASK);
nrf_rtc_int_disable(NRF_RTC1, NRF_RTC_INT_COMPARE0_MASK);

// // FIXME: always enable I2C pullup and power @startup
// // Change for maximum powersave
// pinMode(PIN_ENABLE_SENSORS_3V3, OUTPUT);
// pinMode(PIN_ENABLE_I2C_PULLUP, OUTPUT);

// digitalWrite(PIN_ENABLE_SENSORS_3V3, HIGH);
// digitalWrite(PIN_ENABLE_I2C_PULLUP, HIGH);
}
22 changes: 22 additions & 0 deletions ports/nordic/boards/arduino_nano_33_ble_rev2/mpconfigboard.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT

#pragma once

#include "nrfx/hal/nrf_gpio.h"

#define MICROPY_HW_BOARD_NAME "Arduino Nano 33 BLE Rev2"
#define MICROPY_HW_MCU_NAME "nRF52840"

#define DEFAULT_I2C_BUS_SCL (&pin_P0_02)
#define DEFAULT_I2C_BUS_SDA (&pin_P0_31)

#define DEFAULT_SPI_BUS_SCK (&pin_P0_13)
#define DEFAULT_SPI_BUS_MOSI (&pin_P0_01)
#define DEFAULT_SPI_BUS_MISO (&pin_P1_08)

#define DEFAULT_UART_BUS_RX (&pin_P1_10)
#define DEFAULT_UART_BUS_TX (&pin_P1_03)
9 changes: 9 additions & 0 deletions ports/nordic/boards/arduino_nano_33_ble_rev2/mpconfigboard.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
USB_VID = 0x2341
USB_PID = 0x805A
dhalbert marked this conversation as resolved.
Show resolved Hide resolved
USB_PRODUCT = "Arduino_Nano_33_BLE"
USB_MANUFACTURER = "Arduino"

MCU_CHIP = nrf52840

INTERNAL_FLASH_FILESYSTEM = 1
CIRCUITPY_ULAB = 0
74 changes: 74 additions & 0 deletions ports/nordic/boards/arduino_nano_33_ble_rev2/pins.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT

#include "shared-bindings/board/__init__.h"

static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS

{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_P1_11) },
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_P1_12) },
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_P1_15) },
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_P1_13) },
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_P1_14) },
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_P0_23) },
{ MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_P0_21) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_P0_27) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_P1_02) },

{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_04) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_P0_05) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_P0_30) },
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_P0_29) },

{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_P0_31) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P0_31) },

{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_P0_02) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P0_02) },

{ MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_P0_28) },
{ MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_P0_03) },

{ MP_ROM_QSTR(MP_QSTR_SDA1), MP_ROM_PTR(&pin_P0_14) },
{ MP_ROM_QSTR(MP_QSTR_SCL1), MP_ROM_PTR(&pin_P0_15) },

{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_P1_01) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_P1_08) },

{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P0_13) },
{ MP_ROM_QSTR(MP_QSTR_LED_Y), MP_ROM_PTR(&pin_P0_13) },

{ MP_ROM_QSTR(MP_QSTR_LED_G), MP_ROM_PTR(&pin_P1_09) },

{ MP_ROM_QSTR(MP_QSTR_RGB_LED_R), MP_ROM_PTR(&pin_P0_24) },
{ MP_ROM_QSTR(MP_QSTR_RGB_LED_G), MP_ROM_PTR(&pin_P0_16) },
{ MP_ROM_QSTR(MP_QSTR_RGB_LED_B), MP_ROM_PTR(&pin_P0_06) },

// Power line to IMU, pressure, temperature and humidity sensors.
{ MP_ROM_QSTR(MP_QSTR_VDD_ENV), MP_ROM_PTR(&pin_P0_22) },

// Pullup voltage for SDA1 and SCL1
{ MP_ROM_QSTR(MP_QSTR_R_PULLUP), MP_ROM_PTR(&pin_P1_00) },

{ MP_ROM_QSTR(MP_QSTR_MIC_PWR), MP_ROM_PTR(&pin_P0_17) },
{ MP_ROM_QSTR(MP_QSTR_PDMCLK), MP_ROM_PTR(&pin_P0_26) },
{ MP_ROM_QSTR(MP_QSTR_PDMDIN), MP_ROM_PTR(&pin_P0_25) },

{ MP_ROM_QSTR(MP_QSTR_INT_APDS), MP_ROM_PTR(&pin_P0_19) },
{ MP_ROM_QSTR(MP_QSTR_INT_BMI_1), MP_ROM_PTR(&pin_P0_11) },
{ MP_ROM_QSTR(MP_QSTR_INT_BMI_2), MP_ROM_PTR(&pin_P0_20) },
{ MP_ROM_QSTR(MP_QSTR_INT_LPS), MP_ROM_PTR(&pin_P0_12) },

{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_P1_03) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_P1_10) },

{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
};

MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
1 change: 1 addition & 0 deletions tools/ci_check_duplicate_usb_vid_pid.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"0x303A:0x8166": ["yd_esp32_s3_n8r8", "yd_esp32_s3_n16r8"],
"0x2341:0x056B": ["arduino_nano_esp32s3", "arduino_nano_esp32s3_inverted_statusled"],
"0x2E8A:0x1020": ["waveshare_rp2040_plus_4mb", "waveshare_rp2040_plus_16mb"],
"0x2341:0x805A": ["arduino_nano_33_ble", "arduino_nano_33_ble_rev2"]
dhalbert marked this conversation as resolved.
Show resolved Hide resolved
}

cli_parser = argparse.ArgumentParser(
Expand Down
Loading