Seeed Studio XIAO nRF52840 系列入门指南
| XIAO nRF52840 | XIAO nRF52840 Sense | XIAO nRF52840 Plus | XIAO nRF52840 Sense Plus |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
作为 Seeed Studio XIAO 系列中的首款无线产品,Seeed Studio XIAO nRF52840 配备了强大的 Nordic nRF52840 MCU,集成了 Bluetooth 5.0 连接功能。同时,它具有小巧精致的外形,可用于可穿戴设备和物联网项目。单面表面贴装设计和板载蓝牙天线可以极大地促进物联网项目的快速部署。
此外,还有这款开发板的高级版本,Seeed Studio XIAO nRF52840 Sense。它集成了两个额外的板载传感器。其中一个是脉冲密度调制(PDM)数字麦克风。它可以实时接收音频数据,使其能够用于音频识别。另一个是6 轴惯性测量单元(IMU),这个 IMU 在手势识别等 TinyML 项目中非常有用。这些板载传感器为用户提供了极大的便利,同时开发板超小型化。
新升级的 XIAO nRF52840 Plus 和 XIAO nRF52840 Sense Plus 在功能和可用性方面提供了显著的提升。多功能引脚数量增加到 20 个,增加了 I2S 和 SPI 资源以支持更复杂的项目,暴露了 NFC 引脚以便更容易集成到物联网和智能卡应用中,BAT 引脚重新定位以提供更好的焊接便利性,从而带来更友好的硬件体验。
与 Seeed Studio XIAO RP2040 相比,Seeed Studio XIAO nRF52840 包含更丰富的接口。首先要注意的是,近场通信(NFC)接口在开发板上是功能性的。其次,在 Type-C 接口侧面有一个小的复位按钮。在另一侧,有一个三合一 LED(用户 LED)以及一个充电 LED,用于在连接电池时指示充电状态。有 11 个数字 I/O 可用作 PWM 引脚和 6 个模拟 I/O 可用作 ADC 引脚。它支持所有三种常见的串行接口,如 UART、I2C 和 SPI。与 Seeed Studio XIAO RP2040 相同,它有一个板载 2 MB 闪存,这意味着它也可以使用 Arduino、MicroPython、CircuitPython 或其他编程语言进行编程。
Seeed Studio XIAO nRF52840 Sense 与 Seeed Studio XIAO 扩展板兼容。
特性
- 强大的无线功能:Bluetooth 5.0 配备板载天线
- 强大的 CPU:Nordic nRF52840,ARM® Cortex®-M4 32 位处理器带 FPU,64 MHz
- 超低功耗:待机功耗小于 5μA
- 电池充电芯片:支持锂电池充放电管理
- 板载 2 MB 闪存
- 板载 PDM 麦克风(仅限 Seeed Studio XIAO nRF52840 Sense)
- 板载 6 轴 LSM6DS3TR-C IMU(仅限 Seeed Studio XIAO nRF52840 Sense)
- 超小尺寸:21 x 17.8mm,Seeed Studio XIAO 系列经典外形,适用于可穿戴设备
- 丰富的接口:XIAO nRF52840 (Sense) 具有 1xUART、1xI2C、1xSPI、1xNFC、1xSWD、11xGPIO(PWM)、6xADC;XIAO nRF52840 (Sense) Plus 具有 2xUART、1xI2C、2xSPI、1xI2S、1xNFC、1xSWD、18xGPIO(PWM)、6xADC
- 单面元件,表面贴装设计
规格对比
| 项目 | Seeed Studio XIAO nRF52840 | Seeed Studio XIAO nRF52840 Sense | Seeed Studio XIAO nRF52840 Plus | Seeed Studio XIAO nRF52840 Sense Plus |
|---|---|---|---|---|
| 处理器 | Nordic nRF52840,ARM® Cortex®-M4 32 位处理器带 FPU,64 MHz | |||
| 无线连接 | Bluetooth LE 5.2/NFC | |||
| 内存 | 256 KB RAM,1MB Flash 2MB 板载 Flash | |||
| 内置传感器 | 无 | 6 DOF IMU (LSM6DS3TR-C),PDM 麦克风 | 无 | 6 DOF IMU (LSM6DS3TR-C),PDM 麦克风 |
| 接口 | 1xI2C,1xUART,1xSPI | 1xI2C,2xUART,2xSPI,1xI2S | ||
| PWM/模拟引脚 | 11/6 | 20/6 | ||
| 板载按钮 | 复位按钮 | |||
| 板载 LED | 三合一 LED/ 充电 LED | |||
| 电池充电芯片 | BQ25101 | |||
| 编程语言 | Arduino/ MicroPython/ CircuitPython | |||
硬件概述
- XIAO nRF52840/XIAO nRF52840 Sense
- XIAO nRF52840 Plus/XIAO nRF52840 Sense Plus
| XIAO nRF52840/XIAO nRF52840 Sense 正面指示图 |
|---|
![]() |
| XIAO nRF52840/XIAO nRF52840 Sense 背面指示图 |
![]() |
| XIAO nRF52840/XIAO nRF52840 Sense 引脚列表 |
![]() |
引脚映射
| XIAO 引脚 | 功能 | 芯片引脚 | 描述 |
|---|---|---|---|
| 5V | VBUS | 电源输入/输出 | |
| GND | |||
| 3V3 | 3V3_OUT | 电源输出 | |
| D0 | Analog | P0.02 | GPIO,ADC |
| D1 | Analog | P0.03 | GPIO,ADC |
| D2 | Analog | P0.28 | GPIO,ADC |
| D3 | Analog | P0.29 | GPIO,ADC |
| D4 | Analog,SDA | P0.04 | GPIO,I2C 数据,ADC |
| D5 | Analog,SCL | P0.05 | GPIO,I2C 时钟,ADC |
| D6 | TX | P1.11 | GPIO,UART 发送 |
| D7 | RX | P1.12 | GPIO,UART 接收 |
| D8 | SPI_SCK | P1.13 | GPIO,SPI 时钟 |
| D9 | SPI_MISO | P1.14 | GPIO,SPI 数据 |
| D10 | SPI_MOSI | P1.15 | GPIO,SPI 数据 |
| NFC1 | P0.09 | NFC | |
| NFC2 | P0.10 | NFC | |
| Reset | P0.18 | 复位 | |
| ADC_BAT | P0.14 | 读取电池电压值 | |
| 6 DOF IMU_PWR | P1.08 | 6D 模块的电源开关 | |
| 6 DOF IMU__INT1 | P0.11 | 6D 模块的中断信号引脚 | |
| PDM Microphone_DATA | P0.16 | PDM 音频数据输入引脚 | |
| PDM Microphone_CLK | P1.00 | PDM 音频时钟输出引脚 | |
| RF Switch Port Select | P2.05 | 切换板载天线 | |
| RF Switch Power | P2.03 | 电源 | |
| CHARGE_LED | P0.17 | CHG-LED_红色 | |
| USER_LED_R | P0.26 | 用户控制的红色 RGB LED 引脚 | |
| USER_LED_B | P0.06 | 用户控制的蓝色 RGB LED 引脚 | |
| USER_LED_G | P0.30 | 用户控制的绿色 RGB LED 引脚 |
| XIAO nRF52840 Plus 正面指示图 |
|---|
![]() |
| XIAO nRF52840 Plus 背面指示图 |
![]() |
| XIAO nRF52840 Plus 引脚列表 |
![]() |
| XIAO 引脚 | 功能 | 芯片引脚 | 备用功能 | 描述 |
|---|---|---|---|---|
| 5V | VBUS | 电源输入/输出 | ||
| GND | ||||
| 3V3 | 3V3_OUT | 电源输出 | ||
| D0 | Analog | P0.02 | GPIO, ADC | |
| D1 | Analog | P0.03 | GPIO, ADC | |
| D2 | Analog | P0.28 | GPIO, ADC | |
| D3 | Analog | P0.29 | GPIO, ADC | |
| D4 | Analog,SDA | P0.04 | GPIO, I2C 数据, ADC | |
| D5 | Analog,SCL | P0.05 | GPIO, I2C 时钟, ADC | |
| D6 | TX | P1.11 | GPIO, UART 发送 | |
| D7 | RX | P1.12 | GPIO, UART 接收 | |
| D8 | SPI_SCK | P1.13 | GPIO, SPI 时钟 | |
| D9 | SPI_MISO | P1.14 | GPIO, SPI 数据 | |
| D10 | SPI_MOSI | P1.15 | GPIO, SPI 数据 | |
| D11 | I2S_SD | P0.15 | GPIO, I2S, ADC | |
| D12 | I2S_SCK | P0.19 | GPIO,I2S, ADC | |
| D13 | I2S_WS | P1.01 | GPIO, I2S ADC | |
| D14 | RX1 | P0.09 | NFC1 | GPIO, UART 接收, ADC |
| D15 | TX1 | P0.10 | NFC2 | GPIO, UART 发送, ADC |
| D16 | BAT | P0.31 | GPIO | |
| D17 | SCK1 | P1.03 | GPIO, SPI | |
| D18 | MISO1 | P1.05 | GPIO, SPI | |
| D19 | MOSI1 | P1.07 | GPIO, SPI | |
| ADC_BAT | P0.14 | 读取电池电压值 | ||
| 6 DOF IMU_PWR | P1.08 | 6D 模块的电源开关 | ||
| 6 DOF IMU__INT1 | P0.11 | 6D 模块的中断信号引脚 | ||
| PDM Microphone_DATA | P0.16 | PDM 音频数据输入引脚 | ||
| PDM Microphone_CLK | P1.00 | PDM 音频时钟输出引脚 | ||
| Reset | P0.18 | RESET | ||
| RF Switch Port Select | P2.05 | 切换板载天线 | ||
| RF Switch Power | P2.03 | 电源 | ||
| CHARGE_LED | P0.17 | CHG-LED_Red | ||
| USER_LED_R | P0.26 | 用户控制的红色 RGB LED 引脚 | ||
| USER_LED_B | P0.06 | 用户控制的蓝色 RGB LED 引脚 | ||
| USER_LED_G | P0.30 | 用户控制的绿色 RGB LED 引脚 |
两个 Arduino 库
Seeed Studio XIAO nRF52840 在一个小巧的板子上集成了许多功能,有时可能无法发挥每个功能的最佳性能。因此,Seeed 发布了两个 Arduino 库,让它能够最大化发挥每个功能的能力。因此:
- 如果您想要应用蓝牙功能和"低功耗功能",建议使用
Seeed nRF52 Boards库。 - 如果您想要在嵌入式机器学习应用中使用它或应用"IMU 和 PDM 高级功能",建议使用
Seeed nRF52 mbed-enabled Boards库。 - 当涉及基本用法时,两个库都支持得很好,例如 LED、数字、模拟、串口、I2C、SPI。
这两个库支持的引脚定义可能略有不同,Seeed 将持续更新 wiki 直到明确为止。
-
如果您使用 Seeed nRF52 Boards 的板载包,Serial 功能可能无法编译。解决方案是在您的代码中添加
#include <Adafruit_TinyUSB.h>这一行。您可以从以下地址下载此包:https://github.com/adafruit/Adafruit_TinyUSB_Arduino -
如果您喜欢更简单的方法,可以从一开始就选择 Seeed nRF52 mbed-enabled Boards。它支持 Serial 功能的编译,无需额外修改。
入门指南
首先,我们将把 Seeed Studio XIAO nRF52840 (Sense) 连接到计算机,并从 Arduino IDE 上传一个简单的代码来检查板子是否正常工作。
硬件设置
您需要准备以下物品:
- 1 x Seeed Studio XIAO nRF52840 或 Studio XIAO nRF52840 Sense
- 1 x 计算机
- 1 x USB Type-C 数据线
某些 USB 数据线只能供电而无法传输数据。如果您没有 USB 数据线或不知道您的 USB 数据线是否可以传输数据,您可以查看 Seeed USB Type-C support USB 3.1。
通过 USB Type-C 数据线将 Seeed Studio XIAO nRF52840 (Sense) 连接到您的计算机。

软件设置
- 步骤 1. 根据您的操作系统下载并安装最新版本的 Arduino IDE
-
步骤 2. 启动 Arduino 应用程序
-
步骤 3. 将 Seeed Studio XIAO nRF52840 (Sense) 板包添加到您的 Arduino IDE
导航到 File > Preferences,并在 "Additional Boards Manager URLs" 中填入以下 URL: https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

导航到 Tools > Board > Boards Manager...,在搜索框中输入关键词 "seeed nrf52",选择您想要的板子的最新版本,然后安装它。您可以同时安装两个。

- 步骤 4. 选择您的板子和端口
板子
安装板包后,导航到 Tools > Board 并选择您想要的板子,继续选择 "Seeed XIAO nRF52840 Sense"。现在我们已经完成了为 Arduino IDE 设置 Seeed Studio XIAO nRF52840 (Sense)。

端口
导航到 Tools > Port 并选择已连接的 Seeed Studio XIAO nRF52840 (Sense) 的串口名称。这通常是 COM3 或更高(COM1 和 COM2 通常保留给硬件串口)。已连接的 Seeed Studio XIAO nRF52840 (Sense) 的串口通常包含括号,其中写着 Seeed Studio XIAO nRF52840(对于 Seeed Studio XIAO nRF52840)或 Seeed Studio XIAO nRF52840 Sense(对于 Seeed Studio XIAO nRF52840 Sense)。

- 步骤 5. 导航到 File > Examples > 01.Basics > Blink 打开 Blink 示例

- 步骤 6. 点击 Upload 按钮将 Blink 示例代码上传到开发板

上传完成后,您将看到内置的红色 LED 以每次闪烁间隔 1 秒的频率闪烁。这意味着连接成功,现在您可以使用 Seeed Studio XIAO nRF52840 (Sense) 探索更多项目!
使用内置三合一 LED
Seeed Studio XIAO nRF52840 (Sense) 具有板载三合一 LED,用户可编程。现在您将学习如何使用 Arduino 逐一控制 RGB 颜色!
您首先必须了解,当通过代码控制时,此 LED 的行为与通常不同。当我们给出 LOW 信号时 LED 点亮,当我们给出 HIGH 信号时它熄灭。这是因为此 LED 由共阳极控制,只有在低电平信号下才会点亮。
示例代码如下:
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
}
在这里,即使使用了 HIGH,LED 也会熄灭。您需要将 HIGH 替换为 LOW 来点亮 LED。
请参考以下 LED 的引脚映射并在您的代码中使用它们:
- Red LED = LED_BUILTIN or LED_RED
- Blue LED = LED_BLUE
- Green LED = LED_GREEN
功耗验证
Seeed Studio XIAO nRF52840 具有低功耗特性,这里我们提供一种验证方法。强烈建议在此处使用 Seeed nRF52 Boards 库。
- 步骤 1. 使用 JLink 下载器为 Seeed Studio XIAO nRF52840 (Sense) 刷写引导加载程序固件。
如果您使用的是 Seeed Studio XIAO nRF52840 的出厂固件或从未对 Seeed Studio XIAO nRF52840 的固件进行过更改,您可以跳过此步骤。
- 步骤 2. 在此处使用
Seeed nRF52 Boards库。

- 步骤 3. 在此处上传 deep_sleep 演示并使用 Arduino 运行它
// The MIT License (MIT)
// Copyright (c) 2019 Ha Thach for Adafruit Industries
#include "SdFat.h"
#include "Adafruit_SPIFlash.h"
// Uncomment to run example with custom SPI and SS e.g with FRAM breakout
// #define CUSTOM_CS A5
// #define CUSTOM_SPI SPI
#if defined(CUSTOM_CS) && defined(CUSTOM_SPI)
Adafruit_FlashTransport_SPI flashTransport(CUSTOM_CS, CUSTOM_SPI);
#elif defined(ARDUINO_ARCH_ESP32)
// ESP32 use same flash device that store code.
// Therefore there is no need to specify the SPI and SS
Adafruit_FlashTransport_ESP32 flashTransport;
#else
// On-board external flash (QSPI or SPI) macros should already
// defined in your board variant if supported
// - EXTERNAL_FLASH_USE_QSPI
// - EXTERNAL_FLASH_USE_CS/EXTERNAL_FLASH_USE_SPI
#if defined(EXTERNAL_FLASH_USE_QSPI)
Adafruit_FlashTransport_QSPI flashTransport;
#elif defined(EXTERNAL_FLASH_USE_SPI)
Adafruit_FlashTransport_SPI flashTransport(EXTERNAL_FLASH_USE_CS, EXTERNAL_FLASH_USE_SPI);
#else
#error No QSPI/SPI flash are defined on your board variant.h !
#endif
#endif
Adafruit_SPIFlash flash(&flashTransport);
/* If you want to use a specific flash device, for example for a custom built board, first look for it in Adafruit_SPIFlash\src\flash_devices.h
* If it isn't in there you need to create your own definition like the W25Q80DLX_EXAMPLE example below.
* These definitions need to be edited to match information on the data sheet of the flash device that you want to use.
* If you are not sure what the manufacture ID, memory type and capacity values should be, try running the sketch anyway and look at the serial output
* The flash device will report these values to you as a single hexadecimal value (the JDEC ID)
* For example, the first device on the list - the W25Q80DLX - will report its JDEC ID as 0xef4014, which is made of these three values:
* manufacturer_id = 0xef
* memory_type = 0x40
* capacity = 0x14
* With this macro properly defined you can then create an array of device definitions as shown below, this can include any from the list of devices in flash_devices.h, and any you define yourself here
* You need to update the variable on line 71 to reflect the number of items in the array
* You also need to uncomment line 84 and comment out line 81 so this array will be passed to the flash memory driver.
*/
//Example of a user defined flash memory device:
//#define W25Q80DLX_EXAMPLE \
// { \
// .total_size = (1 << 20), /* 1 MiB */ \
// .start_up_time_us = 5000, .manufacturer_id = 0xef, \
// .memory_type = 0x40, .capacity = 0x14, .max_clock_speed_mhz = 80, \
// .quad_enable_bit_mask = 0x02, .has_sector_protection = false, \
// .supports_fast_read = true, .supports_qspi = true, \
// .supports_qspi_writes = false, .write_status_register_split = false, \
// .single_status_byte = false, .is_fram = false, \
// }
/*
* Create an array of data structures and fill it with the settings we defined above.
* We are using two devices, but more can be added if you want.
*/
//static const SPIFlash_Device_t my_flash_devices[] = {
// W25Q80DLX_EXAMPLE,
//};
/*
* Specify the number of different devices that are listed in the array we just created. If you add more devices to the array, update this value to match.
*/
//const int flashDevices = 1;
#include <bluefruit.h>
bool deepPowerDown(Adafruit_SPIFlash& flash, Adafruit_FlashTransport& transport) {
uint32_t id_before = flash.getJEDECID();
transport.begin();
transport.runCommand(0xB9); // SPI deep power-down command
delay(10);
uint32_t id_after = flash.getJEDECID();
return (id_after == 0xFFFFFF || id_after == 0xFFFFFFFF);
}
void setup() {
flash.begin();
Bluefruit.begin();
if (!deepPowerDown(flash, flashTransport)) {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
while (1) {
yield();
}
}
flash.end();
sd_power_system_off();
}
void loop() {
// nothing to do
}
在此,我们要特别感谢代码作者 → daCoder ←
如果您想了解此示例的更多详细信息,请点击这里
电池充电电流
电池充电电流可选择为 50mA 或 100mA,您可以将 Pin13 设置为高电平或低电平来将其更改为 50mA 或 100mA。低电流充电电流在输入模式下设置为 HIGH LEVEL,高电流充电电流在输出模式下设置为 LOW LEVEL。
低充电电流
void setup(){
pinMode (P0_13, OUTPUT);
}
void loop() {
digitalWrite(P0_13, HIGH);
}
高充电电流
void setup(){
pinMode (P0_13, OUTPUT);
}
void loop() {
digitalWrite(P0_13, LOW);
}
访问 SWD 引脚进行调试和重新刷写引导加载程序
所需硬件
所需软件
需要从网站下载 Segger 软件。
- 步骤 1. 使用 Jlink 连接以下引脚:

- 步骤 2. 启动 J-Flash 并搜索 nRF52840,创建新项目:

- 步骤 3. 点击 "Target" 然后选择 "Connect"。

- 步骤 4. 将 bin 或 hex 文件拖拽到软件中。然后依次按 F4 和 F5。重新刷写完成。
常见问题
Q1:我的 Arduino IDE 在上传代码到开发板时卡住了
您可以首先尝试通过点击一次 "Reset Button" 来重置开发板。如果这不起作用,快速点击两次进入引导加载程序模式。如果这也不起作用,请断开开发板与 PC 的连接,然后重新连接开发板。
Q2:我的开发板在 Arduino IDE 中没有显示为串口设备
您可以首先尝试通过点击一次 "Reset Button" 来重置开发板。如果这不起作用,快速点击两次进入引导加载程序模式。
Q3: 使用 XIAO nRF52840 (Sense) 进行电池充电时有哪些注意事项?
当 P0.14 (D14) 在 3.3V 高电平时关闭 ADC 功能时,P0.31 将处于 3.6V 的输入电压限制。存在烧毁 P0.31 引脚的风险。
目前针对此问题,我们建议用户在电池充电期间不要关闭 P0.14 (D14) 的 ADC 功能或将 P0.14 (D14) 设置为高电平。

Q4: 通电时绿灯如何表现?

P0.17 引脚用于控制绿色指示灯行为,指示充电状态:
- 低电平:当充电正在进行时。
- 高电平:当电池未充电或已充满时。
当处于低电平时,RED_CHG LED 将点亮。
更多详情,请查看 PMIC 数据手册:BQ25100 和 XIAO nRF52840 数据手册。
资源
Seeed Studio XIAO nRF52840
-
[电子书] XIAO: Big Power, Small Board Mastering Arduino and TinyML
-
[PDF] nRF52840 数据手册
-
🔗 [Kicad] Seeed Studio XIAO nRF52840 封装
Seeed Studio XIAO nRF52840 Sense
-
[PDF] nRF52840 数据手册
-
🔗 [Kicad] Seeed Studio XIAO nRF52840 Sense 封装
Seeed Studio XIAO nRF52840 (Sense) Plus
-
[PDF] nRF52840 数据手册
课程资源

技术支持与产品讨论
感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。










