diff --git a/boards/SUMMARY.md b/boards/SUMMARY.md
index e26cd5d..9ab7ac8 100644
--- a/boards/SUMMARY.md
+++ b/boards/SUMMARY.md
@@ -1,6 +1,7 @@
- [BW12](../boards/bw12/README.md)
+- [BW15](../boards/bw15/README.md)
- [CB2S](../boards/cb2s/README.md)
- [WB2L](../boards/wb2l/README.md)
- [WB2S](../boards/wb2s/README.md)
diff --git a/boards/_base/pcb/bw15.json b/boards/_base/pcb/bw15.json
new file mode 100644
index 0000000..035c23d
--- /dev/null
+++ b/boards/_base/pcb/bw15.json
@@ -0,0 +1,79 @@
+{
+ "pcb": {
+ "templates": [
+ "esp12s",
+ "esp12s-shield",
+ "rf-16mm-type1"
+ ],
+ "vars": {
+ "MASK_PRESET": "mask_black",
+ "TRACE_COLOR": "#FAFD9D",
+ "SILK_COLOR": "white",
+ "PINTYPE_VERT": "pin_vert_2mm_cast_nohole"
+ },
+ "pinout_hidden": "I2S,TRIG,WAKE,CTS,RTS,SD",
+ "pinout": {
+ "1": {
+ "IC": 38,
+ "ARD": "D0"
+ },
+ "2": {
+ "IC": 39,
+ "ARD": "D1"
+ },
+ "3": {
+ "IC": 14
+ },
+ "4": {
+ "IC": 18,
+ "ARD": "D2"
+ },
+ "5": {
+ "IC": 36,
+ "ARD": "D3"
+ },
+ "6": {
+ "IC": 20,
+ "ARD": "D4"
+ },
+ "7": {
+ "IC": 40,
+ "ARD": "D5"
+ },
+ "8": {
+ "PWR": 3.3
+ },
+ "9": {
+ "GND": null
+ },
+ "10": {
+ "IC": 1,
+ "ARD": "D6"
+ },
+ "11": {
+ "IC": 37,
+ "ARD": "D7"
+ },
+ "12": {
+ "IC": 15,
+ "ARD": "D8"
+ },
+ "13": {
+ "IC": 19,
+ "ARD": "D9"
+ },
+ "14": {
+ "IC": 16,
+ "ARD": "D10"
+ },
+ "15": {
+ "IC": 33,
+ "ARD": "D11"
+ },
+ "16": {
+ "IC": 34,
+ "ARD": "D12"
+ }
+ }
+ }
+}
diff --git a/boards/_base/pcb/ic-rtl8720cf.json b/boards/_base/pcb/ic-rtl8720cf.json
new file mode 100644
index 0000000..baf08eb
--- /dev/null
+++ b/boards/_base/pcb/ic-rtl8720cf.json
@@ -0,0 +1,186 @@
+{
+ "pcb": {
+ "ic": {
+ "1": {
+ "C_NAME": "PIN_A20",
+ "GPIO": "PA20",
+ "IRQ": null,
+ "SD": "D1",
+ "SPI":
+ "0_MISO"
+ ,
+ "UART": "2_RTS",
+ "I2C": "0_SDA",
+ "PWM": 0
+ },
+ "3": {
+ "C_NAME": "PIN_A23",
+ "GPIO": "PA23",
+ "IRQ": null,
+ "PWM": 7
+ },
+ "14": {
+ "IO": "I",
+ "CTRL": "CEN"
+ },
+ "15": {
+ "C_NAME": "PIN_A0",
+ "GPIO": "PA00",
+ "IRQ": null,
+ "JTAG": "TCK",
+ "UART": "1_RX",
+ "PWM": 0,
+ "SWD": "CLK"
+ },
+ "16": {
+ "C_NAME": "PIN_A1",
+ "GPIO": "PA01",
+ "IRQ": null,
+ "JTAG": "TMS",
+ "UART": "1_TX",
+ "PWM": 1,
+ "SWD": "DIO"
+ },
+ "18": {
+ "C_NAME": "PIN_A2",
+ "GPIO": "PA02",
+ "IRQ": null,
+ "JTAG": "TDO",
+ "UART": "1_RX",
+ "SPI": "0_CS",
+ "I2C": "0_SCL",
+ "PWM": 2
+ },
+ "19": {
+ "C_NAME": "PIN_A3",
+ "GPIO": "PA03",
+ "IRQ": null,
+ "JTAG": "TDI",
+ "UART": "1_TX",
+ "SPI": "0_SCK",
+ "I2C": "0_SDA",
+ "PWM": 3
+ },
+ "20": {
+ "C_NAME": "PIN_A4",
+ "GPIO": "PA04",
+ "IRQ": null,
+ "JTAG": "tRST",
+ "UART": "1_CTS",
+ "SPI": "0_MOSI",
+ "PWM": 4
+ },
+ "21": {
+ "C_NAME": "PIN_A7",
+ "GPIO": "PA07",
+ "IRQ": null,
+ "FLASH": "^FCS",
+ "SPI": "0_CS"
+ },
+ "22": {
+ "C_NAME": "PIN_A8",
+ "GPIO": "PA08",
+ "IRQ": null,
+ "FLASH": "FSCK",
+ "SPI": "0_SCK"
+ },
+ "23": {
+ "C_NAME": "PIN_A9",
+ "GPIO": "PA09",
+ "IRQ": null,
+ "FLASH": "FD2",
+ "SPI": "0_MOSI",
+ "UART": "0_RTS"
+ },
+ "24": {
+ "C_NAME": "PIN_A10",
+ "GPIO": "PA10",
+ "IRQ": null,
+ "FLASH": "FD1",
+ "SPI": "0_MISO",
+ "UART": "0_CTS"
+ },
+ "25": {
+ "C_NAME": "PIN_A11",
+ "GPIO": "PA11",
+ "IRQ": null,
+ "FLASH": "FD0",
+ "UART": "0_TX",
+ "I2C": "0_SCL",
+ "PWM": 0
+ },
+ "26": {
+ "C_NAME": "PIN_A12",
+ "GPIO": "PA12",
+ "IRQ": null,
+ "FLASH": "FD3",
+ "UART": "0_RX",
+ "I2C": "0_SDA",
+ "PWM": 1
+ },
+ "30": {
+ "IO": "I",
+ "C_NAME": "VBAT_IN"
+ },
+ "33": {
+ "C_NAME": "PIN_A13",
+ "GPIO": "PA13",
+ "IRQ": null,
+ "UART": "0_RX",
+ "PWM": 7
+ },
+ "34": {
+ "C_NAME": "PIN_A14",
+ "GPIO": "PA14",
+ "IRQ": null,
+ "SD": "INT",
+ "UART": "0_TX",
+ "PWM": 2
+ },
+ "36": {
+ "C_NAME": "PIN_A15",
+ "GPIO": "PA15",
+ "IRQ": null,
+ "SD": "D2",
+ "SPI": "0_CS",
+ "UART": "2_RX",
+ "I2C": "0_SCL",
+ "PWM": 3
+ },
+ "37": {
+ "C_NAME": "PIN_A16",
+ "GPIO": "PA16",
+ "IRQ": null,
+ "SD": "D3",
+ "SPI": "0_SCK",
+ "UART": "2_TX",
+ "I2C": "0_SDA",
+ "PWM": 4
+ },
+ "38": {
+ "C_NAME": "PIN_A17",
+ "GPIO": "PA17",
+ "IRQ": null,
+ "SD": "CMD",
+ "PWM": 5
+ },
+ "39": {
+ "C_NAME": "PIN_A18",
+ "GPIO": "PA18",
+ "IRQ": null,
+ "SD": "CLK",
+ "PWM": 6
+ },
+ "40": {
+ "C_NAME": "PIN_A19",
+ "GPIO": "PA19",
+ "IRQ": null,
+ "SD": "D0",
+ "SPI": "0_MOSI",
+ "UART": "2_CTS",
+ "I2C": "0_SCL",
+ "PWM": 7
+ }
+ }
+ }
+}
diff --git a/boards/bw15.json b/boards/bw15.json
new file mode 100644
index 0000000..939b6fa
--- /dev/null
+++ b/boards/bw15.json
@@ -0,0 +1,24 @@
+{
+ "_base": [
+ "realtek-ambz2",
+ "realtek-ambz2-8720",
+ "realtek-ambz2-2mb-large",
+ "pcb/ic-rtl8720cf",
+ "pcb/bw15"
+ ],
+ "build": {
+ "mcu": "rtl8720cf",
+ "variant": "bw15"
+ },
+ "name": "BW15",
+ "url": "https://docs.ai-thinker.com/_media/rtl8710/docs/bw15_datasheet_en.pdf",
+ "vendor": "Ai-Thinker Co., Ltd.",
+ "pcb": {
+ "symbol": "BW15"
+ },
+ "doc": {
+ "links": {
+ "Vendor datasheet": "https://docs.ai-thinker.com/_media/rtl8710/docs/bw15_datasheet_en.pdf"
+ }
+ }
+}
diff --git a/boards/bw15/README.md b/boards/bw15/README.md
new file mode 100644
index 0000000..4e8330f
--- /dev/null
+++ b/boards/bw15/README.md
@@ -0,0 +1,43 @@
+# BW15
+
+*by Ai-Thinker Co., Ltd.*
+
+[Product page](https://docs.ai-thinker.com/_media/rtl8710/docs/bw15_datasheet_en.pdf)
+
+- [General info](../../docs/platform/realtek/README.md)
+- [Vendor datasheet](https://docs.ai-thinker.com/_media/rtl8710/docs/bw15_datasheet_en.pdf)
+
+Parameter | Value
+-------------|--------------------------
+MCU | RTL8720CF
+Manufacturer | Realtek
+Series | AmebaZ2
+Frequency | 100 MHz
+Flash size | 2 MiB
+RAM size | 256 KiB
+Voltage | 3.0V - 3.6V
+I/O | 13x GPIO, 8x PWM, 3x UART
+Wi-Fi | 802.11 b/g/n
+BLE | v4.2
+
+## Pinout
+
+
+
+## Flash memory map
+
+Flash size: 2 MiB / 2,097,152 B / 0x200000
+
+Hex values are in bytes.
+
+Name | Start | Length | End
+----------------|----------|-------------------|---------
+Partition Table | 0x000000 | 4 KiB / 0x1000 | 0x001000
+System Data | 0x001000 | 4 KiB / 0x1000 | 0x002000
+Calibration | 0x002000 | 4 KiB / 0x1000 | 0x003000
+(reserved) | 0x003000 | 4 KiB / 0x1000 | 0x004000
+Boot Image | 0x004000 | 32 KiB / 0x8000 | 0x00C000
+OTA1 Image | 0x00C000 | 992 KiB / 0xF8000 | 0x104000
+OTA2 Image | 0x104000 | 992 KiB / 0xF8000 | 0x1FC000
+Key-Value Store | 0x1FC000 | 8 KiB / 0x2000 | 0x1FE000
+User Data | 0x1FE000 | 8 KiB / 0x2000 | 0x200000
diff --git a/boards/bw15/pinout_bw15.svg b/boards/bw15/pinout_bw15.svg
new file mode 100644
index 0000000..fc777d0
--- /dev/null
+++ b/boards/bw15/pinout_bw15.svg
@@ -0,0 +1,355 @@
+
+
diff --git a/boards/bw15/pins_arduino.h b/boards/bw15/pins_arduino.h
new file mode 100644
index 0000000..1de3ade
--- /dev/null
+++ b/boards/bw15/pins_arduino.h
@@ -0,0 +1 @@
+#include "variant.h"
diff --git a/boards/bw15/variant.h b/boards/bw15/variant.h
new file mode 100644
index 0000000..32b21b3
--- /dev/null
+++ b/boards/bw15/variant.h
@@ -0,0 +1,7 @@
+/* This file was auto-generated from bw15.json using boardgen */
+
+#pragma once
+
+#include
+
+// clang-format off
diff --git a/docs/supported_boards.md b/docs/supported_boards.md
index 6e21e11..6b46d54 100644
--- a/docs/supported_boards.md
+++ b/docs/supported_boards.md
@@ -1,9 +1,10 @@
Name | MCU | Flash | RAM | Pins* | Wi-Fi | BLE | ZigBee | Family name
----------------------------------------------|-----------|-------|---------|-------------|-------|-----|--------|---------------
+---------------------------------------------|-----------|-------|---------|-------------|-------|-----|--------|----------------
**Ai-Thinker Co., Ltd.** | | | | | | | |
[BW12](../boards/bw12/README.md) | RTL8710BX | 2 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz`
+[BW15](../boards/bw15/README.md) | RTL8720CF | 2 MiB | 256 KiB | 16 (13 I/O) | ✔️ | ✔️ | ❌ | `realtek-ambz2`
**Tuya Inc.** | | | | | | | |
[CB2S](../boards/cb2s/README.md) | BK7231N | 2 MiB | 256 KiB | 11 (8 I/O) | ✔️ | ✔️ | ❌ | `beken-7231n`
[WB2L](../boards/wb2l/README.md) | BK7231T | 2 MiB | 256 KiB | 7 (5 I/O) | ✔️ | ✔️ | ❌ | `beken-7231t`
diff --git a/tools/boardgen b/tools/boardgen
index 76d89af..65561e8 160000
--- a/tools/boardgen
+++ b/tools/boardgen
@@ -1 +1 @@
-Subproject commit 76d89af332a4eef56cd181e9df0c79548aad77ba
+Subproject commit 65561e83a9fdd2c1ae65a6d9c52619fb23c90c7b