[boards] Add remaining WR2x and WR3x boards

This commit is contained in:
Kuba Szczodrzyński
2022-07-11 14:23:10 +02:00
parent b6008fc9bb
commit aed97a5e92
66 changed files with 3543 additions and 49 deletions

View File

@@ -1,7 +1,15 @@
<!-- This file is auto-generated -->
- [BW12](../boards/bw12/README.md)
- [CB2S Wi-Fi Module](../boards/cb2s/README.md)
- [WB2L Wi-Fi Module](../boards/wb2l/README.md)
- [WR3 Wi-Fi Module](../boards/wr3/README.md)
- [CB2S](../boards/cb2s/README.md)
- [WB2L](../boards/wb2l/README.md)
- [WR2](../boards/wr2/README.md)
- [WR2E](../boards/wr2e/README.md)
- [WR3](../boards/wr3/README.md)
- [WR3E](../boards/wr3e/README.md)
- [WR3N](../boards/wr3n/README.md)
- [WR2L](../boards/wr2l/README.md)
- [WR2LE](../boards/wr2le/README.md)
- [WR3L](../boards/wr3l/README.md)
- [WR3LE](../boards/wr3le/README.md)
- [Generic - Host-native](../boards/generic-native/README.md)

View File

@@ -8,8 +8,7 @@
"vars": {
"MASK_PRESET": "mask_blue_light",
"TRACE_COLOR": "#58839B",
"SILK_COLOR": "white",
"PINTYPE_HORZ": "pin_horz_2mm_cast_hole"
"SILK_COLOR": "white"
},
"pinout_hidden": "I2S,JTAG,FLASH",
"pinout": {

View File

@@ -0,0 +1,14 @@
{
"pcb": {
"templates": [
"tuya2",
"rf-15mm-type1",
"tuya2-shield"
],
"vars": {
"MASK_PRESET": "mask_blue_light",
"TRACE_COLOR": "#58839B",
"SILK_COLOR": "white"
}
}
}

49
boards/_base/pcb/wr2.json Normal file
View File

@@ -0,0 +1,49 @@
{
"pcb": {
"scale": 10.5,
"pinout_hidden": "I2S,TRIG,WAKE,CTS,RTS,SD,SPI",
"pinout": {
"1": {
"PWR": 3.3
},
"2": {
"IC": 17,
"ARD": "D0"
},
"3": {
"GND": null
},
"4": {
"IC": 16,
"ARD": "D1"
},
"5": {
"IC": 29,
"ARD": "D4"
},
"6": {
"IC": 28,
"ARD": "D2"
},
"7": {
"IC": 32,
"ARD": "D5"
},
"8": {
"IC": 27,
"ARD": "A1"
},
"9": {
"IC": 13,
"ARD": "D6"
},
"10": {
"IC": 12
},
"11": {
"IC": 14,
"ARD": "D7"
}
}
}
}

View File

@@ -0,0 +1,52 @@
{
"pcb": {
"scale": 10.5,
"pinout_hidden": "I2S,TRIG,WAKE,CTS,RTS,SD,SPI,SDA0",
"pinout": {
"1": {
"PWR": 3.3
},
"2": {
"IC": 17,
"ARD": "D0"
},
"3": {
"GND": null
},
"4": {
"IC": 30,
"ARD": [
"D1",
"A0"
]
},
"5": {
"IC": 29,
"ARD": "D3"
},
"6": {
"IC": 28,
"ARD": "D2"
},
"7": {
"IC": 32,
"ARD": "D4"
},
"8": {
"IC": 27,
"ARD": "A1"
},
"9": {
"IC": 13,
"ARD": "D5"
},
"10": {
"IC": 12
},
"11": {
"IC": 14,
"ARD": "D6"
}
}
}
}

View File

@@ -0,0 +1,15 @@
{
"pcb": {
"templates": [
"tuya2l",
"rf-15mm-type1",
"tuya2l-shield"
],
"vars": {
"MASK_PRESET": "mask_blue_light",
"TRACE_COLOR": "#58839B",
"SILK_COLOR": "white",
"PINTYPE_HORZ": "pin_horz_2mm_cast_hole"
}
}
}

View File

@@ -0,0 +1,36 @@
{
"pcb": {
"pinout_hidden": "I2S,TRIG,WAKE,CTS,RTS,SD,SPI,I2C",
"pinout": {
"1": {
"IC": 14,
"ARD": "D0"
},
"2": {
"IC": 13,
"ARD": "D1"
},
"3": {
"IC": 28,
"ARD": "D2"
},
"4": {
"IC": 30,
"ARD": [
"D3",
"A0"
]
},
"5": {
"IC": 17,
"ARD": "D4"
},
"6": {
"GND": null
},
"7": {
"PWR": 3.3
}
}
}
}

View File

@@ -0,0 +1,33 @@
{
"pcb": {
"pinout_hidden": "I2S,TRIG,WAKE,CTS,RTS,SD,SPI,I2C",
"pinout": {
"1": {
"IC": 14,
"ARD": "D0"
},
"2": {
"IC": 13,
"ARD": "D1"
},
"3": {
"IC": 28,
"ARD": "D2"
},
"4": {
"IC": 31,
"ARD": "D3"
},
"5": {
"IC": 17,
"ARD": "D4"
},
"6": {
"GND": null
},
"7": {
"PWR": 3.3
}
}
}
}

View File

@@ -0,0 +1,16 @@
{
"pcb": {
"templates": [
"esp12s",
"esp12s-shield",
"tuya-16x24",
"rf-16mm-type1"
],
"vars": {
"MASK_PRESET": "mask_black",
"TRACE_COLOR": "#505050",
"SILK_COLOR": "white",
"PINTYPE_VERT": "pin_vert_2mm_cast_nohole"
}
}
}

View File

@@ -1,17 +1,5 @@
{
"pcb": {
"templates": [
"esp12s",
"esp12s-shield",
"tuya-16x24",
"rf-16mm-type1"
],
"vars": {
"MASK_PRESET": "mask_black",
"TRACE_COLOR": "#505050",
"SILK_COLOR": "white",
"PINTYPE_VERT": "pin_vert_2mm_cast_nohole"
},
"pinout_hidden": "I2S,TRIG,WAKE,CTS,RTS,SD",
"pinout": {
"1": {

View File

@@ -1,16 +1,9 @@
{
"pcb": {
"templates": [
"esp12s",
"esp12s-shield",
"tuya-16x24",
"rf-16mm-type1"
],
"vars": {
"MASK_PRESET": "mask_black",
"TRACE_COLOR": "#505050",
"SILK_COLOR": "white",
"PINTYPE_VERT": "pin_vert_2mm_cast_nohole"
"MASK_PRESET": "mask_blue_light",
"TRACE_COLOR": "#58839B",
"SILK_COLOR": "white"
},
"pinout_hidden": "I2S,TRIG,WAKE,CTS,RTS,SD",
"pinout": {
@@ -26,19 +19,19 @@
},
"4": {
"IC": 2,
"ARD": "D5"
"ARD": "D0"
},
"5": {
"IC": 13,
"ARD": "D2"
"ARD": "D1"
},
"6": {
"IC": 14,
"ARD": "D3"
"ARD": "D2"
},
"7": {
"IC": 31,
"ARD": "D0"
"ARD": "D3"
},
"8": {
"PWR": 3.3
@@ -52,12 +45,12 @@
},
"11": {
"IC": 1,
"ARD": "D6"
"ARD": "D5"
},
"12": {
"IC": 30,
"ARD": [
"D1",
"D6",
"A0"
]
},

View File

@@ -0,0 +1,16 @@
{
"pcb": {
"templates": [
"esp12s",
"esp12e-shield",
"tuya-16x24",
"rf-16mm-type1"
],
"vars": {
"MASK_PRESET": "mask_white",
"TRACE_COLOR": "#E0E0E0",
"SILK_COLOR": "black",
"PINTYPE_VERT": "pin_vert_2mm_cast_hole"
}
}
}

View File

@@ -0,0 +1,65 @@
{
"pcb": {
"pinout_hidden": "I2S,TRIG,WAKE,CTS,RTS,SD,SPI",
"pinout": {
"1": {
"NC": null
},
"2": {
"IC": 27,
"ARD": "A1"
},
"3": {
"IC": 12
},
"4": {
"IC": 2,
"ARD": "D0"
},
"5": {
"IC": 13,
"ARD": "D1"
},
"6": {
"IC": 14,
"ARD": "D2"
},
"7": {
"IC": 16,
"ARD": "D3"
},
"8": {
"PWR": 3.3
},
"9": {
"GND": null
},
"10": {
"NC": null
},
"11": {
"IC": 1,
"ARD": "D4"
},
"12": {
"NC": null
},
"13": {
"IC": 28,
"ARD": "D5"
},
"14": {
"IC": 17,
"ARD": "D6"
},
"15": {
"IC": 29,
"ARD": "D7"
},
"16": {
"IC": 32,
"ARD": "D8"
}
}
}
}

19
boards/wr2.json Normal file
View File

@@ -0,0 +1,19 @@
{
"_base": [
"realtek-ambz",
"realtek-ambz-2mb-large",
"pcb/ic-rtl8710bn",
"pcb/wr2-base",
"pcb/wr2"
],
"build": {
"mcu": "rtl8710bn",
"variant": "wr2"
},
"name": "WR2 Wi-Fi Module",
"url": "https://developer.tuya.com/en/docs/iot/wifiwr2module?id=K9605tko0juc3",
"vendor": "Tuya Inc.",
"pcb": {
"symbol": "WR2"
}
}

62
boards/wr2/README.md Normal file
View File

@@ -0,0 +1,62 @@
# WR2 Wi-Fi Module
*by Tuya Inc.*
[Product page](https://developer.tuya.com/en/docs/iot/wifiwr2module?id=K9605tko0juc3)
- [General info](../../docs/platform/realtek/README.md)
- [Debugging](../../docs/platform/realtek/debugging.md)
- [Flashing guide](../../docs/platform/realtek-ambz/flashing.md)
- [ImageTool (AmebaZ/AmebaD)](https://images.tuyacn.com/smart/Image_Tool/Image_Tool.zip)
Parameter | Value
-------------|---------------------------------
MCU | RTL8710BN
Manufacturer | Realtek
Series | AmebaZ
Frequency | 125 MHz
Flash size | 2 MiB
RAM size | 256 KiB
Voltage | 3.0V - 3.6V
I/O | 7x GPIO, 5x PWM, 1x UART, 1x ADC
Wi-Fi | 802.11 b/g/n
## Pinout
![Pinout](pinout_wr2.svg)
## Arduino Core pin mapping
No. | Pin | UART | I²C | SPI | PWM | Other
----|------|----------|----------|----------------------|------|------
D0 | PA12 | | | | PWM3 |
D1 | PA00 | | | | PWM2 |
D2 | PA05 | | | | PWM4 |
D4 | PA18 | UART0_RX | I2C1_SCL | SPI0_SCK, SPI1_SCK | |
D5 | PA23 | UART0_TX | I2C1_SDA | SPI0_MOSI, SPI1_MOSI | PWM0 |
D6 | PA14 | | | | PWM0 | SWCLK
D7 | PA15 | | | | PWM1 | SWDIO
A1 | ADC2 | | | | |
## Flash memory map
Flash size: 2 MiB / 2,097,152 B / 0x200000
Hex values are in bytes.
Name | Start | Length | End
----------------|----------|-------------------|---------
Boot XIP | 0x000000 | 16 KiB / 0x4000 | 0x004000
Boot RAM | 0x004000 | 16 KiB / 0x4000 | 0x008000
(reserved) | 0x008000 | 4 KiB / 0x1000 | 0x009000
System Data | 0x009000 | 4 KiB / 0x1000 | 0x00A000
Calibration | 0x00A000 | 4 KiB / 0x1000 | 0x00B000
OTA1 Image | 0x00B000 | 788 KiB / 0xC5000 | 0x0D0000
OTA2 Image | 0x0D0000 | 788 KiB / 0xC5000 | 0x195000
Key-Value Store | 0x195000 | 24 KiB / 0x6000 | 0x19B000
User Data | 0x19B000 | 400 KiB / 0x64000 | 0x1FF000
RDP | 0x1FF000 | 4 KiB / 0x1000 | 0x200000
RDP is most likely not used in Tuya firmwares, as the System Data partition contains an incorrect offset 0xFF000 for RDP, which is in the middle of OTA2 image.
Additionally, Tuya firmware uses an encrypted KV or file storage, which resides at the end of flash memory. This seems to overlap system RDP area.

224
boards/wr2/pinout_wr2.svg Normal file
View File

@@ -0,0 +1,224 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="full" height="500" version="1.1" viewBox="0,0,97.52380952380952,47.61904761904762" width="1024">
<defs/>
<rect fill="white" height="47.61904761904762" stroke="black" stroke-width="0.1" width="97.52380952380952" x="0" y="0"/>
<linearGradient gradientUnits="objectBoundingBox" id="id1" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="#47a8cd"/>
<stop offset="100%" stop-color="#008fb5"/>
</linearGradient>
<rect fill="url(#id1) none" height="17.799999999999997" stroke="#b5a739" stroke-width="0.1" width="14.9" x="15.930952380952377" y="11.45952380952381"/>
<rect fill="#b5a739" height="0.1" width="1.6" x="15.880952380952376" y="25.75952380952381"/>
<rect fill="#b5a739" height="3.45" width="0.1" x="17.480952380952377" y="25.75952380952381"/>
<rect fill="#fff" height="3.55" width="1.7" x="15.780952380952376" y="25.859523809523807"/>
<rect fill="#b5a739" height="0.1" width="1.6" x="29.180952380952377" y="25.75952380952381"/>
<rect fill="#b5a739" height="3.45" width="0.1" x="29.180952380952377" y="25.75952380952381"/>
<rect fill="#fff" height="3.55" width="1.7" x="29.280952380952378" y="25.859523809523807"/>
<rect fill="#e5b472" height="2.5" id="pads_horz5_2mm.pin1.pad" rx="0.2" ry="0.2" width="1.0" x="18.880952380952376" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz5_2mm.pin2.pad" rx="0.2" ry="0.2" width="1.0" x="20.880952380952376" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz5_2mm.pin3.pad" rx="0.2" ry="0.2" width="1.0" x="22.880952380952376" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz5_2mm.pin4.pad" rx="0.2" ry="0.2" width="1.0" x="24.880952380952376" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz5_2mm.pin5.pad" rx="0.2" ry="0.2" width="1.0" x="26.880952380952376" y="26.45952380952381"/>
<rect fill="#4e4c4c" height="2.0" width="0.2" x="19.280952380952375" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="0.2" x="19.080952380952375" y="31.30952380952381"/>
<rect height="0.0" id="tuya2.front.pins.label1.anchor" width="0.0" x="19.580952380952375" y="31.40952380952381"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="21.280952380952378" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="19.080952380952375" y="33.30952380952381"/>
<rect height="0.0" id="tuya2.front.pins.label2.anchor" width="0.0" x="19.580952380952375" y="33.40952380952381"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="23.280952380952378" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="19.080952380952375" y="35.30952380952381"/>
<rect height="0.0" id="tuya2.front.pins.label3.anchor" width="0.0" x="19.580952380952375" y="35.40952380952381"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="25.280952380952378" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="25.380952380952376" y="35.30952380952381"/>
<rect height="0.0" id="tuya2.front.pins.label4.anchor" width="0.0" x="29.080952380952375" y="35.40952380952381"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="27.280952380952378" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="27.380952380952376" y="33.30952380952381"/>
<rect height="0.0" id="tuya2.front.pins.label5.anchor" width="0.0" x="29.080952380952375" y="33.40952380952381"/>
<text fill="#fff" font-family="Consolas" font-size="1.0" x="22.880952380952376" y="16.40952380952381">WR2</text>
<rect fill="#58839b" height="5.2" width="0.5" x="16.680952380952377" y="11.90952380952381"/>
<rect fill="#58839b" height="0.5" width="4.6" x="16.680952380952377" y="11.90952380952381"/>
<rect fill="#58839b" height="5.2" width="0.5" x="18.880952380952376" y="11.90952380952381"/>
<rect fill="#58839b" height="3.0" width="0.5" x="20.780952380952378" y="11.90952380952381"/>
<rect fill="#58839b" height="0.5" width="3.0" x="20.780952380952378" y="14.40952380952381"/>
<rect fill="#58839b" height="3.0" width="0.5" x="23.280952380952378" y="11.90952380952381"/>
<rect fill="#58839b" height="0.5" width="2.7" x="23.280952380952378" y="11.90952380952381"/>
<rect fill="#58839b" height="3.0" width="0.5" x="25.480952380952374" y="11.90952380952381"/>
<rect fill="#58839b" height="0.5" width="3.0" x="25.480952380952374" y="14.40952380952381"/>
<rect fill="#58839b" height="3.0" width="0.5" x="27.980952380952374" y="11.90952380952381"/>
<rect fill="#58839b" height="0.5" width="2.5" x="27.980952380952374" y="11.90952380952381"/>
<rect fill="#58839b" height="4.4" width="0.5" x="29.980952380952374" y="11.90952380952381"/>
<linearGradient gradientUnits="objectBoundingBox" id="id2" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="whitesmoke"/>
<stop offset="100%" stop-color="#999"/>
</linearGradient>
<rect fill="url(#id2) none" height="8.0" rx="0.5" ry="0.5" width="14.4" x="16.180952380952377" y="17.40952380952381"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.580952380952375" y="33.30952380952381"/>
<g transform="translate(32.99531173489728,32.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="34.48095238095238" y="33.40952380952381">PA12</text>
<g transform="translate(36.59531173489728,32.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="37.78095238095238" y="33.40952380952381">D0</text>
<g transform="translate(39.59531173489728,32.609523809523814)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="41.08095238095238" y="33.40952380952381">PWM3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.580952380952375" y="35.30952380952381"/>
<g transform="translate(32.99531173489728,34.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="34.48095238095238" y="35.40952380952381">PA00</text>
<g transform="translate(36.59531173489728,34.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="37.78095238095238" y="35.40952380952381">D1</text>
<g transform="translate(39.59531173489728,34.609523809523814)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="41.08095238095238" y="35.40952380952381">PWM2</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="16.480952380952374" y="35.30952380952381"/>
<g transform="translate(12.695311734897274,34.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="14.180952380952375" y="35.40952380952381">PA05</text>
<g transform="translate(9.695311734897274,34.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="10.880952380952376" y="35.40952380952381">D2</text>
<g transform="translate(6.095311734897274,34.609523809523814)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="7.580952380952376" y="35.40952380952381">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="16.480952380952374" y="33.30952380952381"/>
<g transform="translate(12.695311734897274,32.609523809523814)">
<rect fill="#8ad039" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="14.180952380952375" y="33.40952380952381">ADC2</text>
<g transform="translate(9.695311734897274,32.609523809523814)">
<rect fill="#16a352" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="10.880952380952376" y="33.40952380952381">A1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="16.480952380952374" y="31.30952380952381"/>
<g transform="translate(12.695311734897274,30.60952380952381)">
<rect fill="#ed602e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="14.180952380952375" y="31.40952380952381">CEN</text>
<linearGradient gradientUnits="objectBoundingBox" id="id3" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="#47a8cd"/>
<stop offset="100%" stop-color="#008fb5"/>
</linearGradient>
<rect fill="url(#id3) none" height="17.799999999999997" stroke="#b5a739" stroke-width="0.1" width="14.9" x="63.942857142857136" y="11.45952380952381"/>
<rect fill="#b5a739" height="0.1" width="1.6" x="63.89285714285714" y="25.75952380952381"/>
<rect fill="#b5a739" height="3.45" width="0.1" x="65.49285714285713" y="25.75952380952381"/>
<rect fill="#fff" height="3.55" width="1.7" x="63.79285714285714" y="25.859523809523807"/>
<rect fill="#b5a739" height="0.1" width="1.6" x="77.19285714285714" y="25.75952380952381"/>
<rect fill="#b5a739" height="3.45" width="0.1" x="77.19285714285714" y="25.75952380952381"/>
<rect fill="#fff" height="3.55" width="1.7" x="77.29285714285714" y="25.859523809523807"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin1.pad" rx="0.2" ry="0.2" width="1.0" x="65.84285714285714" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin2.pad" rx="0.2" ry="0.2" width="1.0" x="67.84285714285714" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin3.pad" rx="0.2" ry="0.2" width="1.0" x="69.84285714285714" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin4.pad" rx="0.2" ry="0.2" width="1.0" x="71.84285714285714" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin5.pad" rx="0.2" ry="0.2" width="1.0" x="73.84285714285714" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin6.pad" rx="0.2" ry="0.2" width="1.0" x="75.84285714285714" y="26.45952380952381"/>
<rect fill="#4e4c4c" height="2.0" width="0.2" x="66.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="0.2" x="66.04285714285714" y="31.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label1.anchor" width="0.0" x="66.54285714285714" y="31.40952380952381"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="68.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="66.04285714285714" y="33.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label2.anchor" width="0.0" x="66.54285714285714" y="33.40952380952381"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="70.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="66.04285714285714" y="35.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label3.anchor" width="0.0" x="66.54285714285714" y="35.40952380952381"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="72.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="72.34285714285714" y="35.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label4.anchor" width="0.0" x="76.04285714285714" y="35.40952380952381"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="74.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="74.34285714285714" y="33.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label5.anchor" width="0.0" x="76.04285714285714" y="33.40952380952381"/>
<rect fill="#4e4c4c" height="2.0" width="0.2" x="76.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="0.2" x="76.34285714285714" y="31.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label6.anchor" width="0.0" x="76.04285714285714" y="31.40952380952381"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="63.44285714285714" y="31.30952380952381"/>
<g transform="translate(59.657216496802036,30.60952380952381)">
<rect fill="#cd3c24" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="61.14285714285714" y="31.40952380952381">3V3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="63.44285714285714" y="33.30952380952381"/>
<g transform="translate(59.657216496802036,32.609523809523814)">
<rect fill="#000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="61.14285714285714" y="33.40952380952381">GND</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="63.44285714285714" y="35.30952380952381"/>
<g transform="translate(59.657216496802036,34.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="61.14285714285714" y="35.40952380952381">PA18</text>
<g transform="translate(56.65721649680204,34.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.84285714285714" y="35.40952380952381">D4</text>
<g transform="translate(53.05721649680204,34.609523809523814)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.542857142857144" y="35.40952380952381">RX0</text>
<g transform="translate(49.45721649680204,34.609523809523814)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="50.94285714285714" y="35.40952380952381">SCL1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="76.54285714285714" y="35.30952380952381"/>
<g transform="translate(79.95721649680203,34.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="81.44285714285714" y="35.40952380952381">PA23</text>
<g transform="translate(83.55721649680203,34.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="84.74285714285713" y="35.40952380952381">D5</text>
<g transform="translate(86.55721649680203,34.609523809523814)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="88.04285714285713" y="35.40952380952381">TX0</text>
<g transform="translate(90.15721649680204,34.609523809523814)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="91.64285714285714" y="35.40952380952381">SDA1</text>
<g transform="translate(93.75721649680204,34.609523809523814)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="95.24285714285715" y="35.40952380952381">PWM0</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="76.54285714285714" y="33.30952380952381"/>
<g transform="translate(79.95721649680203,32.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="81.44285714285714" y="33.40952380952381">PA14</text>
<g transform="translate(83.55721649680203,32.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="84.74285714285713" y="33.40952380952381">D6</text>
<g transform="translate(86.55721649680203,32.609523809523814)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="88.04285714285713" y="33.40952380952381">PWM0</text>
<g transform="translate(90.15721649680204,32.609523809523814)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="91.64285714285714" y="33.40952380952381">SWCLK</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="76.54285714285714" y="31.30952380952381"/>
<g transform="translate(79.95721649680203,30.60952380952381)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="81.44285714285714" y="31.40952380952381">PA15</text>
<g transform="translate(83.55721649680203,30.60952380952381)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="84.74285714285713" y="31.40952380952381">D7</text>
<g transform="translate(86.55721649680203,30.60952380952381)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="88.04285714285713" y="31.40952380952381">PWM1</text>
<g transform="translate(90.15721649680204,30.60952380952381)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="91.64285714285714" y="31.40952380952381">SWDIO</text>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -0,0 +1 @@
#include "variant.h"

28
boards/wr2/variant.cpp Normal file
View File

@@ -0,0 +1,28 @@
/* This file was auto-generated from wr2.json using boardgen */
#include <Arduino.h>
extern "C" {
// clang-format off
PinInfo pinTable[PINS_COUNT] = {
// D0: PA12, PWM3
{PA_12, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D1: PA00, PWM2
{PA_0, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D2: PA05, PWM4, WAKE1
{PA_5, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D4: PA18, UART0_RX, SPI0_SCK, SPI1_SCK, I2C1_SCL, SD_D2, TMR4_TRIG, I2S0_MCK, WAKE0
{PA_18, PIN_GPIO | PIN_IRQ | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D5: PA23, UART0_TX, SPI0_MOSI, SPI1_MOSI, I2C1_SDA, SD_D1, PWM0, WAKE3
{PA_23, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D6: PA14, PWM0, SWCLK
{PA_14, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D7: PA15, PWM1, SWDIO
{PA_15, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// A1: ADC2
{AD_2, PIN_ADC, PIN_NONE, 0},
};
// clang-format on
} // extern "C"

35
boards/wr2/variant.h Normal file
View File

@@ -0,0 +1,35 @@
/* This file was auto-generated from wr2.json using boardgen */
#pragma once
#include <WVariant.h>
// clang-format off
// Pins
// ----
#define PINS_COUNT 8
#define NUM_DIGITAL_PINS 7
#define NUM_ANALOG_INPUTS 1
#define NUM_ANALOG_OUTPUTS 0
// Analog pins
// -----------
#define PIN_A1 7u // AD_2
#define A1 PIN_A1
// SPI Interfaces
// --------------
#define SPI_INTERFACES_COUNT 0
// Wire Interfaces
// ---------------
#define WIRE_INTERFACES_COUNT 1
#define PIN_WIRE1_SCL 3u // PA_18
#define PIN_WIRE1_SDA 4u // PA_23
// Serial ports
// ------------
#define SERIAL_INTERFACES_COUNT 1
#define PIN_SERIAL0_RX 3u // PA_18
#define PIN_SERIAL0_TX 4u // PA_23

19
boards/wr2e.json Normal file
View File

@@ -0,0 +1,19 @@
{
"_base": [
"realtek-ambz",
"realtek-ambz-2mb-large",
"pcb/ic-rtl8710bn",
"pcb/wr2-base",
"pcb/wr2e"
],
"build": {
"mcu": "rtl8710bn",
"variant": "wr2e"
},
"name": "WR2E Wi-Fi Module",
"url": "https://developer.tuya.com/en/docs/iot/wr2e?id=K97scnsjhue4h",
"vendor": "Tuya Inc.",
"pcb": {
"symbol": "WR2E"
}
}

63
boards/wr2e/README.md Normal file
View File

@@ -0,0 +1,63 @@
# WR2E Wi-Fi Module
*by Tuya Inc.*
[Product page](https://developer.tuya.com/en/docs/iot/wr2e?id=K97scnsjhue4h)
- [General info](../../docs/platform/realtek/README.md)
- [Debugging](../../docs/platform/realtek/debugging.md)
- [Flashing guide](../../docs/platform/realtek-ambz/flashing.md)
- [ImageTool (AmebaZ/AmebaD)](https://images.tuyacn.com/smart/Image_Tool/Image_Tool.zip)
Parameter | Value
-------------|---------------------------------
MCU | RTL8710BN
Manufacturer | Realtek
Series | AmebaZ
Frequency | 125 MHz
Flash size | 2 MiB
RAM size | 256 KiB
Voltage | 3.0V - 3.6V
I/O | 7x GPIO, 4x PWM, 1x UART, 2x ADC
Wi-Fi | 802.11 b/g/n
## Pinout
![Pinout](pinout_wr2e.svg)
## Arduino Core pin mapping
No. | Pin | UART | I²C | SPI | PWM | Other
----|------------|-----------|----------|----------------------|------|------
D0 | PA12 | | | | PWM3 |
D1 | PA19 | UART0_CTS | I2C0_SDA | SPI0_CS, SPI1_CS | |
D2 | PA05 | | | | PWM4 |
D3 | PA18 | UART0_RX | I2C1_SCL | SPI0_SCK, SPI1_SCK | |
D4 | PA23 | UART0_TX | I2C1_SDA | SPI0_MOSI, SPI1_MOSI | PWM0 |
D5 | PA14 | | | | PWM0 | SWCLK
D6 | PA15 | | | | PWM1 | SWDIO
A0 | PA19, ADC1 | | | | |
A1 | ADC2 | | | | |
## Flash memory map
Flash size: 2 MiB / 2,097,152 B / 0x200000
Hex values are in bytes.
Name | Start | Length | End
----------------|----------|-------------------|---------
Boot XIP | 0x000000 | 16 KiB / 0x4000 | 0x004000
Boot RAM | 0x004000 | 16 KiB / 0x4000 | 0x008000
(reserved) | 0x008000 | 4 KiB / 0x1000 | 0x009000
System Data | 0x009000 | 4 KiB / 0x1000 | 0x00A000
Calibration | 0x00A000 | 4 KiB / 0x1000 | 0x00B000
OTA1 Image | 0x00B000 | 788 KiB / 0xC5000 | 0x0D0000
OTA2 Image | 0x0D0000 | 788 KiB / 0xC5000 | 0x195000
Key-Value Store | 0x195000 | 24 KiB / 0x6000 | 0x19B000
User Data | 0x19B000 | 400 KiB / 0x64000 | 0x1FF000
RDP | 0x1FF000 | 4 KiB / 0x1000 | 0x200000
RDP is most likely not used in Tuya firmwares, as the System Data partition contains an incorrect offset 0xFF000 for RDP, which is in the middle of OTA2 image.
Additionally, Tuya firmware uses an encrypted KV or file storage, which resides at the end of flash memory. This seems to overlap system RDP area.

228
boards/wr2e/pinout_wr2e.svg Normal file
View File

@@ -0,0 +1,228 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="full" height="500" version="1.1" viewBox="0,0,97.52380952380952,47.61904761904762" width="1024">
<defs/>
<rect fill="white" height="47.61904761904762" stroke="black" stroke-width="0.1" width="97.52380952380952" x="0" y="0"/>
<linearGradient gradientUnits="objectBoundingBox" id="id1" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="#47a8cd"/>
<stop offset="100%" stop-color="#008fb5"/>
</linearGradient>
<rect fill="url(#id1) none" height="17.799999999999997" stroke="#b5a739" stroke-width="0.1" width="14.9" x="14.430952380952377" y="11.45952380952381"/>
<rect fill="#b5a739" height="0.1" width="1.6" x="14.380952380952376" y="25.75952380952381"/>
<rect fill="#b5a739" height="3.45" width="0.1" x="15.980952380952376" y="25.75952380952381"/>
<rect fill="#fff" height="3.55" width="1.7" x="14.280952380952376" y="25.859523809523807"/>
<rect fill="#b5a739" height="0.1" width="1.6" x="27.680952380952377" y="25.75952380952381"/>
<rect fill="#b5a739" height="3.45" width="0.1" x="27.680952380952377" y="25.75952380952381"/>
<rect fill="#fff" height="3.55" width="1.7" x="27.780952380952378" y="25.859523809523807"/>
<rect fill="#e5b472" height="2.5" id="pads_horz5_2mm.pin1.pad" rx="0.2" ry="0.2" width="1.0" x="17.380952380952376" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz5_2mm.pin2.pad" rx="0.2" ry="0.2" width="1.0" x="19.380952380952376" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz5_2mm.pin3.pad" rx="0.2" ry="0.2" width="1.0" x="21.380952380952376" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz5_2mm.pin4.pad" rx="0.2" ry="0.2" width="1.0" x="23.380952380952376" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz5_2mm.pin5.pad" rx="0.2" ry="0.2" width="1.0" x="25.380952380952376" y="26.45952380952381"/>
<rect fill="#4e4c4c" height="2.0" width="0.2" x="17.780952380952375" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="0.2" x="17.580952380952375" y="31.30952380952381"/>
<rect height="0.0" id="tuya2.front.pins.label1.anchor" width="0.0" x="18.080952380952375" y="31.40952380952381"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="19.780952380952378" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="17.580952380952375" y="33.30952380952381"/>
<rect height="0.0" id="tuya2.front.pins.label2.anchor" width="0.0" x="18.080952380952375" y="33.40952380952381"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="21.780952380952378" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="17.580952380952375" y="35.30952380952381"/>
<rect height="0.0" id="tuya2.front.pins.label3.anchor" width="0.0" x="18.080952380952375" y="35.40952380952381"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="23.780952380952378" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="23.880952380952376" y="35.30952380952381"/>
<rect height="0.0" id="tuya2.front.pins.label4.anchor" width="0.0" x="27.580952380952375" y="35.40952380952381"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="25.780952380952378" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="25.880952380952376" y="33.30952380952381"/>
<rect height="0.0" id="tuya2.front.pins.label5.anchor" width="0.0" x="27.580952380952375" y="33.40952380952381"/>
<text fill="#fff" font-family="Consolas" font-size="1.0" x="21.380952380952376" y="16.40952380952381">WR2E</text>
<rect fill="#58839b" height="5.2" width="0.5" x="15.180952380952377" y="11.90952380952381"/>
<rect fill="#58839b" height="0.5" width="4.6" x="15.180952380952377" y="11.90952380952381"/>
<rect fill="#58839b" height="5.2" width="0.5" x="17.380952380952376" y="11.90952380952381"/>
<rect fill="#58839b" height="3.0" width="0.5" x="19.280952380952378" y="11.90952380952381"/>
<rect fill="#58839b" height="0.5" width="3.0" x="19.280952380952378" y="14.40952380952381"/>
<rect fill="#58839b" height="3.0" width="0.5" x="21.780952380952378" y="11.90952380952381"/>
<rect fill="#58839b" height="0.5" width="2.7" x="21.780952380952378" y="11.90952380952381"/>
<rect fill="#58839b" height="3.0" width="0.5" x="23.980952380952374" y="11.90952380952381"/>
<rect fill="#58839b" height="0.5" width="3.0" x="23.980952380952374" y="14.40952380952381"/>
<rect fill="#58839b" height="3.0" width="0.5" x="26.480952380952374" y="11.90952380952381"/>
<rect fill="#58839b" height="0.5" width="2.5" x="26.480952380952374" y="11.90952380952381"/>
<rect fill="#58839b" height="4.4" width="0.5" x="28.480952380952374" y="11.90952380952381"/>
<linearGradient gradientUnits="objectBoundingBox" id="id2" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="whitesmoke"/>
<stop offset="100%" stop-color="#999"/>
</linearGradient>
<rect fill="url(#id2) none" height="8.0" rx="0.5" ry="0.5" width="14.4" x="14.680952380952377" y="17.40952380952381"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="28.080952380952375" y="33.30952380952381"/>
<g transform="translate(31.495311734897275,32.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="32.98095238095238" y="33.40952380952381">PA12</text>
<g transform="translate(35.09531173489728,32.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="36.28095238095238" y="33.40952380952381">D0</text>
<g transform="translate(38.09531173489728,32.609523809523814)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="39.58095238095238" y="33.40952380952381">PWM3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="28.080952380952375" y="35.30952380952381"/>
<g transform="translate(31.495311734897275,34.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="32.98095238095238" y="35.40952380952381">PA19</text>
<g transform="translate(35.09531173489728,34.609523809523814)">
<rect fill="#8ad039" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="36.58095238095238" y="35.40952380952381">ADC1</text>
<g transform="translate(38.69531173489728,34.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="39.88095238095238" y="35.40952380952381">D1</text>
<g transform="translate(41.69531173489728,34.609523809523814)">
<rect fill="#16a352" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="42.88095238095238" y="35.40952380952381">A0</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="14.980952380952376" y="35.30952380952381"/>
<g transform="translate(11.195311734897274,34.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="12.680952380952375" y="35.40952380952381">PA05</text>
<g transform="translate(8.195311734897274,34.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="9.380952380952376" y="35.40952380952381">D2</text>
<g transform="translate(4.595311734897274,34.609523809523814)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="6.080952380952376" y="35.40952380952381">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="14.980952380952376" y="33.30952380952381"/>
<g transform="translate(11.195311734897274,32.609523809523814)">
<rect fill="#8ad039" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="12.680952380952375" y="33.40952380952381">ADC2</text>
<g transform="translate(8.195311734897274,32.609523809523814)">
<rect fill="#16a352" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="9.380952380952376" y="33.40952380952381">A1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="14.980952380952376" y="31.30952380952381"/>
<g transform="translate(11.195311734897274,30.60952380952381)">
<rect fill="#ed602e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="12.680952380952375" y="31.40952380952381">CEN</text>
<linearGradient gradientUnits="objectBoundingBox" id="id3" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="#47a8cd"/>
<stop offset="100%" stop-color="#008fb5"/>
</linearGradient>
<rect fill="url(#id3) none" height="17.799999999999997" stroke="#b5a739" stroke-width="0.1" width="14.9" x="63.942857142857136" y="11.45952380952381"/>
<rect fill="#b5a739" height="0.1" width="1.6" x="63.89285714285714" y="25.75952380952381"/>
<rect fill="#b5a739" height="3.45" width="0.1" x="65.49285714285713" y="25.75952380952381"/>
<rect fill="#fff" height="3.55" width="1.7" x="63.79285714285714" y="25.859523809523807"/>
<rect fill="#b5a739" height="0.1" width="1.6" x="77.19285714285714" y="25.75952380952381"/>
<rect fill="#b5a739" height="3.45" width="0.1" x="77.19285714285714" y="25.75952380952381"/>
<rect fill="#fff" height="3.55" width="1.7" x="77.29285714285714" y="25.859523809523807"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin1.pad" rx="0.2" ry="0.2" width="1.0" x="65.84285714285714" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin2.pad" rx="0.2" ry="0.2" width="1.0" x="67.84285714285714" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin3.pad" rx="0.2" ry="0.2" width="1.0" x="69.84285714285714" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin4.pad" rx="0.2" ry="0.2" width="1.0" x="71.84285714285714" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin5.pad" rx="0.2" ry="0.2" width="1.0" x="73.84285714285714" y="26.45952380952381"/>
<rect fill="#e5b472" height="2.5" id="pads_horz6_2mm.pin6.pad" rx="0.2" ry="0.2" width="1.0" x="75.84285714285714" y="26.45952380952381"/>
<rect fill="#4e4c4c" height="2.0" width="0.2" x="66.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="0.2" x="66.04285714285714" y="31.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label1.anchor" width="0.0" x="66.54285714285714" y="31.40952380952381"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="68.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="66.04285714285714" y="33.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label2.anchor" width="0.0" x="66.54285714285714" y="33.40952380952381"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="70.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="66.04285714285714" y="35.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label3.anchor" width="0.0" x="66.54285714285714" y="35.40952380952381"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="72.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="72.34285714285714" y="35.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label4.anchor" width="0.0" x="76.04285714285714" y="35.40952380952381"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="74.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="74.34285714285714" y="33.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label5.anchor" width="0.0" x="76.04285714285714" y="33.40952380952381"/>
<rect fill="#4e4c4c" height="2.0" width="0.2" x="76.24285714285713" y="29.509523809523806"/>
<rect fill="#4e4c4c" height="0.2" width="0.2" x="76.34285714285714" y="31.30952380952381"/>
<rect height="0.0" id="tuya2.back.pins.label6.anchor" width="0.0" x="76.04285714285714" y="31.40952380952381"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="63.44285714285714" y="31.30952380952381"/>
<g transform="translate(59.657216496802036,30.60952380952381)">
<rect fill="#cd3c24" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="61.14285714285714" y="31.40952380952381">3V3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="63.44285714285714" y="33.30952380952381"/>
<g transform="translate(59.657216496802036,32.609523809523814)">
<rect fill="#000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="61.14285714285714" y="33.40952380952381">GND</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="63.44285714285714" y="35.30952380952381"/>
<g transform="translate(59.657216496802036,34.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="61.14285714285714" y="35.40952380952381">PA18</text>
<g transform="translate(56.65721649680204,34.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.84285714285714" y="35.40952380952381">D3</text>
<g transform="translate(53.05721649680204,34.609523809523814)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.542857142857144" y="35.40952380952381">RX0</text>
<g transform="translate(49.45721649680204,34.609523809523814)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="50.94285714285714" y="35.40952380952381">SCL1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="76.54285714285714" y="35.30952380952381"/>
<g transform="translate(79.95721649680203,34.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="81.44285714285714" y="35.40952380952381">PA23</text>
<g transform="translate(83.55721649680203,34.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="84.74285714285713" y="35.40952380952381">D4</text>
<g transform="translate(86.55721649680203,34.609523809523814)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="88.04285714285713" y="35.40952380952381">TX0</text>
<g transform="translate(90.15721649680204,34.609523809523814)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="91.64285714285714" y="35.40952380952381">SDA1</text>
<g transform="translate(93.75721649680204,34.609523809523814)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="95.24285714285715" y="35.40952380952381">PWM0</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="76.54285714285714" y="33.30952380952381"/>
<g transform="translate(79.95721649680203,32.609523809523814)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="81.44285714285714" y="33.40952380952381">PA14</text>
<g transform="translate(83.55721649680203,32.609523809523814)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="84.74285714285713" y="33.40952380952381">D5</text>
<g transform="translate(86.55721649680203,32.609523809523814)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="88.04285714285713" y="33.40952380952381">PWM0</text>
<g transform="translate(90.15721649680204,32.609523809523814)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="91.64285714285714" y="33.40952380952381">SWCLK</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="76.54285714285714" y="31.30952380952381"/>
<g transform="translate(79.95721649680203,30.60952380952381)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="81.44285714285714" y="31.40952380952381">PA15</text>
<g transform="translate(83.55721649680203,30.60952380952381)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="84.74285714285713" y="31.40952380952381">D6</text>
<g transform="translate(86.55721649680203,30.60952380952381)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="88.04285714285713" y="31.40952380952381">PWM1</text>
<g transform="translate(90.15721649680204,30.60952380952381)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="91.64285714285714" y="31.40952380952381">SWDIO</text>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1 @@
#include "variant.h"

28
boards/wr2e/variant.cpp Normal file
View File

@@ -0,0 +1,28 @@
/* This file was auto-generated from wr2e.json using boardgen */
#include <Arduino.h>
extern "C" {
// clang-format off
PinInfo pinTable[PINS_COUNT] = {
// D0: PA12, PWM3
{PA_12, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D1: PA19, ADC1, UART0_CTS, SPI0_CS, SPI1_CS, I2C0_SDA, SD_D3, TMR5_TRIG, I2S0_TX
{PA_19, PIN_GPIO | PIN_IRQ | PIN_ADC | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D2: PA05, PWM4, WAKE1
{PA_5, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D3: PA18, UART0_RX, SPI0_SCK, SPI1_SCK, I2C1_SCL, SD_D2, TMR4_TRIG, I2S0_MCK, WAKE0
{PA_18, PIN_GPIO | PIN_IRQ | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D4: PA23, UART0_TX, SPI0_MOSI, SPI1_MOSI, I2C1_SDA, SD_D1, PWM0, WAKE3
{PA_23, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D5: PA14, PWM0, SWCLK
{PA_14, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D6: PA15, PWM1, SWDIO
{PA_15, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// A1: ADC2
{AD_2, PIN_ADC, PIN_NONE, 0},
};
// clang-format on
} // extern "C"

38
boards/wr2e/variant.h Normal file
View File

@@ -0,0 +1,38 @@
/* This file was auto-generated from wr2e.json using boardgen */
#pragma once
#include <WVariant.h>
// clang-format off
// Pins
// ----
#define PINS_COUNT 8
#define NUM_DIGITAL_PINS 7
#define NUM_ANALOG_INPUTS 2
#define NUM_ANALOG_OUTPUTS 0
// Analog pins
// -----------
#define PIN_A0 1u // PA_19
#define PIN_A1 7u // AD_2
#define A0 PIN_A0
#define A1 PIN_A1
// SPI Interfaces
// --------------
#define SPI_INTERFACES_COUNT 0
// Wire Interfaces
// ---------------
#define WIRE_INTERFACES_COUNT 1
#define PIN_WIRE1_SCL 3u // PA_18
#define PIN_WIRE1_SDA 4u // PA_23
// Serial ports
// ------------
#define SERIAL_INTERFACES_COUNT 1
#define PIN_SERIAL0_CTS 1u // PA_19
#define PIN_SERIAL0_RX 3u // PA_18
#define PIN_SERIAL0_TX 4u // PA_23

20
boards/wr2l.json Normal file
View File

@@ -0,0 +1,20 @@
{
"_base": [
"realtek-ambz",
"realtek-ambz-2mb-large",
"realtek-ambz-bx",
"pcb/ic-rtl8710bn",
"pcb/wr2l-base",
"pcb/wr2l"
],
"build": {
"mcu": "rtl8710bx",
"variant": "wr2l"
},
"name": "WR2L Wi-Fi Module",
"url": "https://developer.tuya.com/en/docs/iot/wifiwr2lmodule?id=K9605tnbj7gva",
"vendor": "Tuya Inc.",
"pcb": {
"symbol": "WR2L"
}
}

60
boards/wr2l/README.md Normal file
View File

@@ -0,0 +1,60 @@
# WR2L Wi-Fi Module
*by Tuya Inc.*
[Product page](https://developer.tuya.com/en/docs/iot/wifiwr2lmodule?id=K9605tnbj7gva)
- [General info](../../docs/platform/realtek/README.md)
- [Debugging](../../docs/platform/realtek/debugging.md)
- [Flashing guide](../../docs/platform/realtek-ambz/flashing.md)
- [ImageTool (AmebaZ/AmebaD)](https://images.tuyacn.com/smart/Image_Tool/Image_Tool.zip)
Parameter | Value
-------------|---------------------------------
MCU | RTL8710BX
Manufacturer | Realtek
Series | AmebaZ
Frequency | 62.5 MHz
Flash size | 2 MiB
RAM size | 256 KiB
Voltage | 3.0V - 3.6V
I/O | 5x GPIO, 4x PWM, 1x UART, 1x ADC
Wi-Fi | 802.11 b/g/n
## Pinout
![Pinout](pinout_wr2l.svg)
## Arduino Core pin mapping
No. | Pin | UART | I²C | SPI | PWM | Other
----|------------|-----------|----------|------------------|------|------
D0 | PA15 | | | | PWM1 | SWDIO
D1 | PA14 | | | | PWM0 | SWCLK
D2 | PA05 | | | | PWM4 |
D3 | PA19 | UART0_CTS | I2C0_SDA | SPI0_CS, SPI1_CS | |
D4 | PA12 | | | | PWM3 |
A0 | PA19, ADC1 | | | | |
## Flash memory map
Flash size: 2 MiB / 2,097,152 B / 0x200000
Hex values are in bytes.
Name | Start | Length | End
----------------|----------|-------------------|---------
Boot XIP | 0x000000 | 16 KiB / 0x4000 | 0x004000
Boot RAM | 0x004000 | 16 KiB / 0x4000 | 0x008000
(reserved) | 0x008000 | 4 KiB / 0x1000 | 0x009000
System Data | 0x009000 | 4 KiB / 0x1000 | 0x00A000
Calibration | 0x00A000 | 4 KiB / 0x1000 | 0x00B000
OTA1 Image | 0x00B000 | 788 KiB / 0xC5000 | 0x0D0000
OTA2 Image | 0x0D0000 | 788 KiB / 0xC5000 | 0x195000
Key-Value Store | 0x195000 | 24 KiB / 0x6000 | 0x19B000
User Data | 0x19B000 | 400 KiB / 0x64000 | 0x1FF000
RDP | 0x1FF000 | 4 KiB / 0x1000 | 0x200000
RDP is most likely not used in Tuya firmwares, as the System Data partition contains an incorrect offset 0xFF000 for RDP, which is in the middle of OTA2 image.
Additionally, Tuya firmware uses an encrypted KV or file storage, which resides at the end of flash memory. This seems to overlap system RDP area.

157
boards/wr2l/pinout_wr2l.svg Normal file
View File

@@ -0,0 +1,157 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="full" height="500" version="1.1" viewBox="0,0,85.33333333333333,41.666666666666664" width="1024">
<defs/>
<rect fill="white" height="41.666666666666664" stroke="black" stroke-width="0.1" width="85.33333333333333" x="0" y="0"/>
<linearGradient gradientUnits="objectBoundingBox" id="id1" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="#47a8cd"/>
<stop offset="100%" stop-color="#008fb5"/>
</linearGradient>
<rect fill="url(#id1) none" height="17.2" stroke="#b5a739" stroke-width="0.1" width="14.9" x="37.016666666666666" y="7.783333333333332"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin1.trace" width="1.2" x="37.86666666666667" y="23.333333333333336"/>
<circle cx="38.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin1.cast" r="0.35"/>
<circle cx="38.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin1.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin2.trace" width="1.2" x="39.86666666666667" y="23.333333333333336"/>
<circle cx="40.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin2.cast" r="0.35"/>
<circle cx="40.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin2.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin3.trace" width="1.2" x="41.86666666666667" y="23.333333333333336"/>
<circle cx="42.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin3.cast" r="0.35"/>
<circle cx="42.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin3.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin4.trace" width="1.2" x="43.86666666666667" y="23.333333333333336"/>
<circle cx="44.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin4.cast" r="0.35"/>
<circle cx="44.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin4.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin5.trace" width="1.2" x="45.86666666666667" y="23.333333333333336"/>
<circle cx="46.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin5.cast" r="0.35"/>
<circle cx="46.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin5.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin6.trace" width="1.2" x="47.86666666666667" y="23.333333333333336"/>
<circle cx="48.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin6.cast" r="0.35"/>
<circle cx="48.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin6.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin7.trace" width="1.2" x="49.86666666666667" y="23.333333333333336"/>
<circle cx="50.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin7.cast" r="0.35"/>
<circle cx="50.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin7.hole" r="0.35"/>
<rect fill="#4e4c4c" height="2.0" width="0.2" x="38.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="0.2" x="38.16666666666667" y="27.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label1.anchor" width="0.0" x="38.66666666666667" y="27.133333333333333"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="40.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="38.16666666666667" y="29.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label2.anchor" width="0.0" x="38.66666666666667" y="29.133333333333333"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="42.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="38.16666666666667" y="31.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label3.anchor" width="0.0" x="38.66666666666667" y="31.133333333333333"/>
<rect fill="#4e4c4c" height="8.0" width="0.2" x="44.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="6.2" x="38.16666666666667" y="33.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label4.anchor" width="0.0" x="38.66666666666667" y="33.13333333333333"/>
<rect fill="#4e4c4c" height="8.0" width="0.2" x="46.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="46.46666666666667" y="33.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label5.anchor" width="0.0" x="50.16666666666667" y="33.13333333333333"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="48.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="48.46666666666667" y="31.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label6.anchor" width="0.0" x="50.16666666666667" y="31.133333333333333"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="50.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="0.2" x="50.46666666666667" y="29.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label7.anchor" width="0.0" x="50.16666666666667" y="29.133333333333333"/>
<text fill="#fff" font-family="Consolas" font-size="1.0" x="40.96666666666667" y="13.233333333333333">WR2L</text>
<rect fill="#58839b" height="5.2" width="0.5" x="37.766666666666666" y="8.233333333333333"/>
<rect fill="#58839b" height="0.5" width="4.6" x="37.766666666666666" y="8.233333333333333"/>
<rect fill="#58839b" height="5.2" width="0.5" x="39.96666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="41.86666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="0.5" width="3.0" x="41.86666666666667" y="10.733333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="44.36666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="0.5" width="2.7" x="44.36666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="46.56666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="0.5" width="3.0" x="46.56666666666667" y="10.733333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="49.06666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="0.5" width="2.5" x="49.06666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="4.4" width="0.5" x="51.06666666666667" y="8.233333333333333"/>
<linearGradient gradientUnits="objectBoundingBox" id="id2" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="whitesmoke"/>
<stop offset="100%" stop-color="#999"/>
</linearGradient>
<rect fill="url(#id2) none" height="9.0" rx="0.5" ry="0.5" width="13.6" x="37.66666666666667" y="13.733333333333333"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="35.56666666666667" y="27.03333333333333"/>
<g transform="translate(31.781026020611566,26.333333333333332)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="33.26666666666667" y="27.133333333333333">PA15</text>
<g transform="translate(28.781026020611566,26.333333333333332)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.96666666666667" y="27.133333333333333">D0</text>
<g transform="translate(25.181026020611565,26.333333333333332)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="26.666666666666668" y="27.133333333333333">PWM1</text>
<g transform="translate(21.581026020611564,26.333333333333332)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="23.066666666666666" y="27.133333333333333">SWDIO</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="35.56666666666667" y="29.03333333333333"/>
<g transform="translate(31.781026020611566,28.333333333333332)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="33.26666666666667" y="29.133333333333333">PA14</text>
<g transform="translate(28.781026020611566,28.333333333333332)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.96666666666667" y="29.133333333333333">D1</text>
<g transform="translate(25.181026020611565,28.333333333333332)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="26.666666666666668" y="29.133333333333333">PWM0</text>
<g transform="translate(21.581026020611564,28.333333333333332)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="23.066666666666666" y="29.133333333333333">SWCLK</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="35.56666666666667" y="31.03333333333333"/>
<g transform="translate(31.781026020611566,30.333333333333332)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="33.26666666666667" y="31.133333333333333">PA05</text>
<g transform="translate(28.781026020611566,30.333333333333332)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.96666666666667" y="31.133333333333333">D2</text>
<g transform="translate(25.181026020611565,30.333333333333332)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="26.666666666666668" y="31.133333333333333">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="35.56666666666667" y="33.03333333333333"/>
<g transform="translate(31.781026020611566,32.333333333333336)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="33.26666666666667" y="33.13333333333333">PA19</text>
<g transform="translate(28.181026020611565,32.333333333333336)">
<rect fill="#8ad039" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.666666666666668" y="33.13333333333333">ADC1</text>
<g transform="translate(25.181026020611565,32.333333333333336)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="26.366666666666667" y="33.13333333333333">D3</text>
<g transform="translate(22.181026020611565,32.333333333333336)">
<rect fill="#16a352" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="23.366666666666667" y="33.13333333333333">A0</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.66666666666667" y="33.03333333333333"/>
<g transform="translate(54.08102602061157,32.333333333333336)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.56666666666667" y="33.13333333333333">PA12</text>
<g transform="translate(57.681026020611576,32.333333333333336)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="58.866666666666674" y="33.13333333333333">D4</text>
<g transform="translate(60.681026020611576,32.333333333333336)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.16666666666668" y="33.13333333333333">PWM3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.66666666666667" y="31.03333333333333"/>
<g transform="translate(54.08102602061157,30.333333333333332)">
<rect fill="#000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.56666666666667" y="31.133333333333333">GND</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.66666666666667" y="29.03333333333333"/>
<g transform="translate(54.08102602061157,28.333333333333332)">
<rect fill="#cd3c24" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.56666666666667" y="29.133333333333333">3V3</text>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1 @@
#include "variant.h"

22
boards/wr2l/variant.cpp Normal file
View File

@@ -0,0 +1,22 @@
/* This file was auto-generated from wr2l.json using boardgen */
#include <Arduino.h>
extern "C" {
// clang-format off
PinInfo pinTable[PINS_COUNT] = {
// D0: PA15, PWM1, SWDIO
{PA_15, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D1: PA14, PWM0, SWCLK
{PA_14, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D2: PA05, PWM4, WAKE1
{PA_5, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D3: PA19, ADC1, UART0_CTS, SPI0_CS, SPI1_CS, I2C0_SDA, SD_D3, TMR5_TRIG, I2S0_TX
{PA_19, PIN_GPIO | PIN_IRQ | PIN_ADC | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D4: PA12, PWM3
{PA_12, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
};
// clang-format on
} // extern "C"

31
boards/wr2l/variant.h Normal file
View File

@@ -0,0 +1,31 @@
/* This file was auto-generated from wr2l.json using boardgen */
#pragma once
#include <WVariant.h>
// clang-format off
// Pins
// ----
#define PINS_COUNT 5
#define NUM_DIGITAL_PINS 5
#define NUM_ANALOG_INPUTS 1
#define NUM_ANALOG_OUTPUTS 0
// Analog pins
// -----------
#define PIN_A0 3u // PA_19
#define A0 PIN_A0
// SPI Interfaces
// --------------
#define SPI_INTERFACES_COUNT 0
// Wire Interfaces
// ---------------
#define WIRE_INTERFACES_COUNT 0
// Serial ports
// ------------
#define SERIAL_INTERFACES_COUNT 0

20
boards/wr2le.json Normal file
View File

@@ -0,0 +1,20 @@
{
"_base": [
"realtek-ambz",
"realtek-ambz-2mb-large",
"realtek-ambz-bx",
"pcb/ic-rtl8710bn",
"pcb/wr2l-base",
"pcb/wr2le"
],
"build": {
"mcu": "rtl8710bx",
"variant": "wr2le"
},
"name": "WR2LE Wi-Fi Module",
"url": "https://developer.tuya.com/en/docs/iot/wr2le?id=K9eio9y9e8i8c",
"vendor": "Tuya Inc.",
"pcb": {
"symbol": "WR2LE"
}
}

59
boards/wr2le/README.md Normal file
View File

@@ -0,0 +1,59 @@
# WR2LE Wi-Fi Module
*by Tuya Inc.*
[Product page](https://developer.tuya.com/en/docs/iot/wr2le?id=K9eio9y9e8i8c)
- [General info](../../docs/platform/realtek/README.md)
- [Debugging](../../docs/platform/realtek/debugging.md)
- [Flashing guide](../../docs/platform/realtek-ambz/flashing.md)
- [ImageTool (AmebaZ/AmebaD)](https://images.tuyacn.com/smart/Image_Tool/Image_Tool.zip)
Parameter | Value
-------------|-------------------------
MCU | RTL8710BX
Manufacturer | Realtek
Series | AmebaZ
Frequency | 62.5 MHz
Flash size | 2 MiB
RAM size | 256 KiB
Voltage | 3.0V - 3.6V
I/O | 5x GPIO, 5x PWM, 1x UART
Wi-Fi | 802.11 b/g/n
## Pinout
![Pinout](pinout_wr2le.svg)
## Arduino Core pin mapping
No. | Pin | UART | I²C | SPI | PWM | Other
----|------|-----------|----------|----------------------|------|------
D0 | PA15 | | | | PWM1 | SWDIO
D1 | PA14 | | | | PWM0 | SWCLK
D2 | PA05 | | | | PWM4 |
D3 | PA22 | UART0_RTS | I2C0_SCL | SPI0_MISO, SPI1_MISO | PWM5 |
D4 | PA12 | | | | PWM3 |
## Flash memory map
Flash size: 2 MiB / 2,097,152 B / 0x200000
Hex values are in bytes.
Name | Start | Length | End
----------------|----------|-------------------|---------
Boot XIP | 0x000000 | 16 KiB / 0x4000 | 0x004000
Boot RAM | 0x004000 | 16 KiB / 0x4000 | 0x008000
(reserved) | 0x008000 | 4 KiB / 0x1000 | 0x009000
System Data | 0x009000 | 4 KiB / 0x1000 | 0x00A000
Calibration | 0x00A000 | 4 KiB / 0x1000 | 0x00B000
OTA1 Image | 0x00B000 | 788 KiB / 0xC5000 | 0x0D0000
OTA2 Image | 0x0D0000 | 788 KiB / 0xC5000 | 0x195000
Key-Value Store | 0x195000 | 24 KiB / 0x6000 | 0x19B000
User Data | 0x19B000 | 400 KiB / 0x64000 | 0x1FF000
RDP | 0x1FF000 | 4 KiB / 0x1000 | 0x200000
RDP is most likely not used in Tuya firmwares, as the System Data partition contains an incorrect offset 0xFF000 for RDP, which is in the middle of OTA2 image.
Additionally, Tuya firmware uses an encrypted KV or file storage, which resides at the end of flash memory. This seems to overlap system RDP area.

View File

@@ -0,0 +1,153 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="full" height="500" version="1.1" viewBox="0,0,85.33333333333333,41.666666666666664" width="1024">
<defs/>
<rect fill="white" height="41.666666666666664" stroke="black" stroke-width="0.1" width="85.33333333333333" x="0" y="0"/>
<linearGradient gradientUnits="objectBoundingBox" id="id1" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="#47a8cd"/>
<stop offset="100%" stop-color="#008fb5"/>
</linearGradient>
<rect fill="url(#id1) none" height="17.2" stroke="#b5a739" stroke-width="0.1" width="14.9" x="37.016666666666666" y="7.783333333333332"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin1.trace" width="1.2" x="37.86666666666667" y="23.333333333333336"/>
<circle cx="38.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin1.cast" r="0.35"/>
<circle cx="38.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin1.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin2.trace" width="1.2" x="39.86666666666667" y="23.333333333333336"/>
<circle cx="40.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin2.cast" r="0.35"/>
<circle cx="40.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin2.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin3.trace" width="1.2" x="41.86666666666667" y="23.333333333333336"/>
<circle cx="42.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin3.cast" r="0.35"/>
<circle cx="42.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin3.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin4.trace" width="1.2" x="43.86666666666667" y="23.333333333333336"/>
<circle cx="44.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin4.cast" r="0.35"/>
<circle cx="44.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin4.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin5.trace" width="1.2" x="45.86666666666667" y="23.333333333333336"/>
<circle cx="46.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin5.cast" r="0.35"/>
<circle cx="46.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin5.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin6.trace" width="1.2" x="47.86666666666667" y="23.333333333333336"/>
<circle cx="48.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin6.cast" r="0.35"/>
<circle cx="48.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin6.hole" r="0.35"/>
<rect fill="#e5b472" height="1.7" id="pins_horz7_2mm_0.7mm.pin7.trace" width="1.2" x="49.86666666666667" y="23.333333333333336"/>
<circle cx="50.46666666666667" cy="25.03333333333333" fill="#fff" id="pins_horz7_2mm_0.7mm.pin7.cast" r="0.35"/>
<circle cx="50.46666666666667" cy="23.983333333333334" fill="#fff" id="pins_horz7_2mm_0.7mm.pin7.hole" r="0.35"/>
<rect fill="#4e4c4c" height="2.0" width="0.2" x="38.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="0.2" x="38.16666666666667" y="27.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label1.anchor" width="0.0" x="38.66666666666667" y="27.133333333333333"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="40.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="38.16666666666667" y="29.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label2.anchor" width="0.0" x="38.66666666666667" y="29.133333333333333"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="42.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="38.16666666666667" y="31.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label3.anchor" width="0.0" x="38.66666666666667" y="31.133333333333333"/>
<rect fill="#4e4c4c" height="8.0" width="0.2" x="44.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="6.2" x="38.16666666666667" y="33.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label4.anchor" width="0.0" x="38.66666666666667" y="33.13333333333333"/>
<rect fill="#4e4c4c" height="8.0" width="0.2" x="46.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="4.2" x="46.46666666666667" y="33.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label5.anchor" width="0.0" x="50.16666666666667" y="33.13333333333333"/>
<rect fill="#4e4c4c" height="6.0" width="0.2" x="48.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="2.2" x="48.46666666666667" y="31.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label6.anchor" width="0.0" x="50.16666666666667" y="31.133333333333333"/>
<rect fill="#4e4c4c" height="4.0" width="0.2" x="50.36666666666667" y="25.233333333333334"/>
<rect fill="#4e4c4c" height="0.2" width="0.2" x="50.46666666666667" y="29.03333333333333"/>
<rect height="0.0" id="tuya2l.front.pins.label7.anchor" width="0.0" x="50.16666666666667" y="29.133333333333333"/>
<text fill="#fff" font-family="Consolas" font-size="1.0" x="40.96666666666667" y="13.233333333333333">WR2LE</text>
<rect fill="#58839b" height="5.2" width="0.5" x="37.766666666666666" y="8.233333333333333"/>
<rect fill="#58839b" height="0.5" width="4.6" x="37.766666666666666" y="8.233333333333333"/>
<rect fill="#58839b" height="5.2" width="0.5" x="39.96666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="41.86666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="0.5" width="3.0" x="41.86666666666667" y="10.733333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="44.36666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="0.5" width="2.7" x="44.36666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="46.56666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="0.5" width="3.0" x="46.56666666666667" y="10.733333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="49.06666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="0.5" width="2.5" x="49.06666666666667" y="8.233333333333333"/>
<rect fill="#58839b" height="4.4" width="0.5" x="51.06666666666667" y="8.233333333333333"/>
<linearGradient gradientUnits="objectBoundingBox" id="id2" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="whitesmoke"/>
<stop offset="100%" stop-color="#999"/>
</linearGradient>
<rect fill="url(#id2) none" height="9.0" rx="0.5" ry="0.5" width="13.6" x="37.66666666666667" y="13.733333333333333"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="35.56666666666667" y="27.03333333333333"/>
<g transform="translate(31.781026020611566,26.333333333333332)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="33.26666666666667" y="27.133333333333333">PA15</text>
<g transform="translate(28.781026020611566,26.333333333333332)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.96666666666667" y="27.133333333333333">D0</text>
<g transform="translate(25.181026020611565,26.333333333333332)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="26.666666666666668" y="27.133333333333333">PWM1</text>
<g transform="translate(21.581026020611564,26.333333333333332)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="23.066666666666666" y="27.133333333333333">SWDIO</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="35.56666666666667" y="29.03333333333333"/>
<g transform="translate(31.781026020611566,28.333333333333332)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="33.26666666666667" y="29.133333333333333">PA14</text>
<g transform="translate(28.781026020611566,28.333333333333332)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.96666666666667" y="29.133333333333333">D1</text>
<g transform="translate(25.181026020611565,28.333333333333332)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="26.666666666666668" y="29.133333333333333">PWM0</text>
<g transform="translate(21.581026020611564,28.333333333333332)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="23.066666666666666" y="29.133333333333333">SWCLK</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="35.56666666666667" y="31.03333333333333"/>
<g transform="translate(31.781026020611566,30.333333333333332)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="33.26666666666667" y="31.133333333333333">PA05</text>
<g transform="translate(28.781026020611566,30.333333333333332)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.96666666666667" y="31.133333333333333">D2</text>
<g transform="translate(25.181026020611565,30.333333333333332)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="26.666666666666668" y="31.133333333333333">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="35.56666666666667" y="33.03333333333333"/>
<g transform="translate(31.781026020611566,32.333333333333336)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="33.26666666666667" y="33.13333333333333">PA22</text>
<g transform="translate(28.781026020611566,32.333333333333336)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.96666666666667" y="33.13333333333333">D3</text>
<g transform="translate(25.181026020611565,32.333333333333336)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="26.666666666666668" y="33.13333333333333">PWM5</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.66666666666667" y="33.03333333333333"/>
<g transform="translate(54.08102602061157,32.333333333333336)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.56666666666667" y="33.13333333333333">PA12</text>
<g transform="translate(57.681026020611576,32.333333333333336)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="58.866666666666674" y="33.13333333333333">D4</text>
<g transform="translate(60.681026020611576,32.333333333333336)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.16666666666668" y="33.13333333333333">PWM3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.66666666666667" y="31.03333333333333"/>
<g transform="translate(54.08102602061157,30.333333333333332)">
<rect fill="#000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.56666666666667" y="31.133333333333333">GND</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.66666666666667" y="29.03333333333333"/>
<g transform="translate(54.08102602061157,28.333333333333332)">
<rect fill="#cd3c24" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.56666666666667" y="29.133333333333333">3V3</text>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1 @@
#include "variant.h"

22
boards/wr2le/variant.cpp Normal file
View File

@@ -0,0 +1,22 @@
/* This file was auto-generated from wr2le.json using boardgen */
#include <Arduino.h>
extern "C" {
// clang-format off
PinInfo pinTable[PINS_COUNT] = {
// D0: PA15, PWM1, SWDIO
{PA_15, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D1: PA14, PWM0, SWCLK
{PA_14, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D2: PA05, PWM4, WAKE1
{PA_5, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D3: PA22, UART0_RTS, SPI0_MISO, SPI1_MISO, I2C0_SCL, SD_D0, PWM5, I2S0_WS, WAKE2
{PA_22, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D4: PA12, PWM3
{PA_12, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
};
// clang-format on
} // extern "C"

25
boards/wr2le/variant.h Normal file
View File

@@ -0,0 +1,25 @@
/* This file was auto-generated from wr2le.json using boardgen */
#pragma once
#include <WVariant.h>
// clang-format off
// Pins
// ----
#define PINS_COUNT 5
#define NUM_DIGITAL_PINS 5
#define NUM_ANALOG_OUTPUTS 0
// SPI Interfaces
// --------------
#define SPI_INTERFACES_COUNT 0
// Wire Interfaces
// ---------------
#define WIRE_INTERFACES_COUNT 0
// Serial ports
// ------------
#define SERIAL_INTERFACES_COUNT 0

View File

@@ -3,6 +3,7 @@
"realtek-ambz",
"realtek-ambz-2mb-large",
"pcb/ic-rtl8710bn",
"pcb/wr3-base",
"pcb/wr3"
],
"build": {

19
boards/wr3e.json Normal file
View File

@@ -0,0 +1,19 @@
{
"_base": [
"realtek-ambz",
"realtek-ambz-2mb-large",
"pcb/ic-rtl8710bn",
"pcb/wr3-base",
"pcb/wr3e"
],
"build": {
"mcu": "rtl8710bn",
"variant": "wr3e"
},
"name": "WR3E Wi-Fi Module",
"url": "https://developer.tuya.com/en/docs/iot/wr3e-module-datasheet?id=K9elwlqbfosbc",
"vendor": "Tuya Inc.",
"pcb": {
"symbol": "WR3E"
}
}

67
boards/wr3e/README.md Normal file
View File

@@ -0,0 +1,67 @@
# WR3E Wi-Fi Module
*by Tuya Inc.*
[Product page](https://developer.tuya.com/en/docs/iot/wr3e-module-datasheet?id=K9elwlqbfosbc)
- [General info](../../docs/platform/realtek/README.md)
- [Debugging](../../docs/platform/realtek/debugging.md)
- [Flashing guide](../../docs/platform/realtek-ambz/flashing.md)
- [ImageTool (AmebaZ/AmebaD)](https://images.tuyacn.com/smart/Image_Tool/Image_Tool.zip)
Parameter | Value
-------------|----------------------------------
MCU | RTL8710BN
Manufacturer | Realtek
Series | AmebaZ
Frequency | 125 MHz
Flash size | 2 MiB
RAM size | 256 KiB
Voltage | 3.0V - 3.6V
I/O | 11x GPIO, 6x PWM, 2x UART, 2x ADC
Wi-Fi | 802.11 b/g/n
## Pinout
![Pinout](pinout_wr3e.svg)
## Arduino Core pin mapping
No. | Pin | UART | I²C | SPI | PWM | Other
----|------------|-----------|----------|----------------------|------|------
D0 | PA29 | UART2_RX | I2C0_SCL | | PWM4 |
D1 | PA14 | | | | PWM0 | SWCLK
D2 | PA15 | | | | PWM1 | SWDIO
D3 | PA22 | UART0_RTS | I2C0_SCL | SPI0_MISO, SPI1_MISO | PWM5 |
D4 | PA00 | | | | PWM2 |
D5 | PA30 | UART2_TX | I2C0_SDA | | PWM4 |
D6 | PA19 | UART0_CTS | I2C0_SDA | SPI0_CS, SPI1_CS | |
D7 | PA05 | | | | PWM4 |
D8 | PA12 | | | | PWM3 |
D9 | PA18 | UART0_RX | I2C1_SCL | SPI0_SCK, SPI1_SCK | |
D10 | PA23 | UART0_TX | I2C1_SDA | SPI0_MOSI, SPI1_MOSI | PWM0 |
A0 | PA19, ADC1 | | | | |
A1 | ADC2 | | | | |
## Flash memory map
Flash size: 2 MiB / 2,097,152 B / 0x200000
Hex values are in bytes.
Name | Start | Length | End
----------------|----------|-------------------|---------
Boot XIP | 0x000000 | 16 KiB / 0x4000 | 0x004000
Boot RAM | 0x004000 | 16 KiB / 0x4000 | 0x008000
(reserved) | 0x008000 | 4 KiB / 0x1000 | 0x009000
System Data | 0x009000 | 4 KiB / 0x1000 | 0x00A000
Calibration | 0x00A000 | 4 KiB / 0x1000 | 0x00B000
OTA1 Image | 0x00B000 | 788 KiB / 0xC5000 | 0x0D0000
OTA2 Image | 0x0D0000 | 788 KiB / 0xC5000 | 0x195000
Key-Value Store | 0x195000 | 24 KiB / 0x6000 | 0x19B000
User Data | 0x19B000 | 400 KiB / 0x64000 | 0x1FF000
RDP | 0x1FF000 | 4 KiB / 0x1000 | 0x200000
RDP is most likely not used in Tuya firmwares, as the System Data partition contains an incorrect offset 0xFF000 for RDP, which is in the middle of OTA2 image.
Additionally, Tuya firmware uses an encrypted KV or file storage, which resides at the end of flash memory. This seems to overlap system RDP area.

309
boards/wr3e/pinout_wr3e.svg Normal file
View File

@@ -0,0 +1,309 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="full" height="500" version="1.1" viewBox="0,0,85.33333333333333,41.666666666666664" width="1024">
<defs/>
<rect fill="white" height="41.666666666666664" stroke="black" stroke-width="0.1" width="85.33333333333333" x="0" y="0"/>
<linearGradient gradientUnits="objectBoundingBox" id="id1" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="#47a8cd"/>
<stop offset="100%" stop-color="#008fb5"/>
</linearGradient>
<rect fill="url(#id1) none" height="23.9" stroke="#b5a739" stroke-width="0.1" width="15.9" x="32.86666666666666" y="8.883333333333333"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin1.trace" width="0.7" x="32.81666666666666" y="16.583333333333332"/>
<circle cx="32.81666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.left.pin1.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin2.trace" width="0.7" x="32.81666666666666" y="18.583333333333332"/>
<circle cx="32.81666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.left.pin2.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin3.trace" width="0.7" x="32.81666666666666" y="20.583333333333332"/>
<circle cx="32.81666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.left.pin3.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin4.trace" width="0.7" x="32.81666666666666" y="22.583333333333332"/>
<circle cx="32.81666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.left.pin4.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin5.trace" width="0.7" x="32.81666666666666" y="24.583333333333332"/>
<circle cx="32.81666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.left.pin5.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin6.trace" width="0.7" x="32.81666666666666" y="26.583333333333332"/>
<circle cx="32.81666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.left.pin6.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin7.trace" width="0.7" x="32.81666666666666" y="28.583333333333332"/>
<circle cx="32.81666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.left.pin7.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin8.trace" width="0.7" x="32.81666666666666" y="30.583333333333332"/>
<circle cx="32.81666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.left.pin8.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin1.trace" width="0.7" x="48.11666666666666" y="16.583333333333332"/>
<circle cx="48.81666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.right.pin1.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin2.trace" width="0.7" x="48.11666666666666" y="18.583333333333332"/>
<circle cx="48.81666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.right.pin2.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin3.trace" width="0.7" x="48.11666666666666" y="20.583333333333332"/>
<circle cx="48.81666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.right.pin3.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin4.trace" width="0.7" x="48.11666666666666" y="22.583333333333332"/>
<circle cx="48.81666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.right.pin4.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin5.trace" width="0.7" x="48.11666666666666" y="24.583333333333332"/>
<circle cx="48.81666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.right.pin5.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin6.trace" width="0.7" x="48.11666666666666" y="26.583333333333332"/>
<circle cx="48.81666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.right.pin6.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin7.trace" width="0.7" x="48.11666666666666" y="28.583333333333332"/>
<circle cx="48.81666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.right.pin7.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin8.trace" width="0.7" x="48.11666666666666" y="30.583333333333332"/>
<circle cx="48.81666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.right.pin8.cast" r="0.35"/>
<linearGradient gradientUnits="objectBoundingBox" id="id2" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="whitesmoke"/>
<stop offset="100%" stop-color="#999"/>
</linearGradient>
<rect fill="url(#id2) none" height="16.8" rx="0.5" ry="0.5" width="13.6" x="34.016666666666666" y="15.783333333333331"/>
<rect fill="#fff" height="0.15" width="15.0" x="33.31666666666666" y="15.033333333333331"/>
<text fill="#fff" font-family="Consolas" font-size="1.0" x="39.81666666666666" y="14.333333333333332">WR3E</text>
<rect fill="#58839b" height="5.2" width="0.5" x="33.916666666666664" y="9.633333333333333"/>
<rect fill="#58839b" height="0.5" width="4.6" x="33.916666666666664" y="9.633333333333333"/>
<rect fill="#58839b" height="5.2" width="0.5" x="36.11666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="38.016666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="0.5" width="3.0" x="38.016666666666666" y="12.133333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="40.516666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="0.5" width="2.7" x="40.516666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="42.71666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="0.5" width="3.0" x="42.71666666666666" y="12.133333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="45.21666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="0.5" width="2.5" x="45.21666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="4.4" width="0.5" x="47.21666666666666" y="9.633333333333333"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="17.08333333333333"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="19.08333333333333"/>
<g transform="translate(25.931026020611558,18.38333333333333)">
<rect fill="#8ad039" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="19.18333333333333">ADC2</text>
<g transform="translate(22.93102602061156,18.38333333333333)">
<rect fill="#16a352" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="24.116666666666664" y="19.18333333333333">A1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="21.08333333333333"/>
<g transform="translate(25.931026020611558,20.38333333333333)">
<rect fill="#ed602e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="21.18333333333333">CEN</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="23.08333333333333"/>
<g transform="translate(25.931026020611558,22.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="23.18333333333333">PA29</text>
<g transform="translate(22.93102602061156,22.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="24.116666666666664" y="23.18333333333333">D0</text>
<g transform="translate(19.33102602061156,22.38333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="20.816666666666663" y="23.18333333333333">RX2</text>
<g transform="translate(15.731026020611564,22.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="17.216666666666665" y="23.18333333333333">SCL0</text>
<g transform="translate(12.131026020611563,22.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="13.616666666666664" y="23.18333333333333">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="25.083333333333332"/>
<g transform="translate(25.931026020611558,24.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="25.183333333333334">PA14</text>
<g transform="translate(22.93102602061156,24.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="24.116666666666664" y="25.183333333333334">D1</text>
<g transform="translate(19.33102602061156,24.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="20.816666666666663" y="25.183333333333334">PWM0</text>
<g transform="translate(15.731026020611564,24.383333333333333)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="17.216666666666665" y="25.183333333333334">SWCLK</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="27.083333333333332"/>
<g transform="translate(25.931026020611558,26.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="27.183333333333334">PA15</text>
<g transform="translate(22.93102602061156,26.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="24.116666666666664" y="27.183333333333334">D2</text>
<g transform="translate(19.33102602061156,26.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="20.816666666666663" y="27.183333333333334">PWM1</text>
<g transform="translate(15.731026020611564,26.383333333333333)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="17.216666666666665" y="27.183333333333334">SWDIO</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="29.083333333333332"/>
<g transform="translate(25.931026020611558,28.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="29.183333333333334">PA22</text>
<g transform="translate(22.93102602061156,28.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="24.116666666666664" y="29.183333333333334">D3</text>
<g transform="translate(19.33102602061156,28.383333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="20.816666666666663" y="29.183333333333334">SCL0</text>
<g transform="translate(15.731026020611564,28.383333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="17.216666666666665" y="29.183333333333334">MISO0</text>
<g transform="translate(12.131026020611563,28.383333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="13.616666666666664" y="29.183333333333334">MISO1</text>
<g transform="translate(8.531026020611561,28.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="10.016666666666662" y="29.183333333333334">PWM5</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="31.083333333333332"/>
<g transform="translate(25.931026020611558,30.383333333333333)">
<rect fill="#cd3c24" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="31.183333333333334">3V3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="31.083333333333332"/>
<g transform="translate(52.731026020611566,30.383333333333333)">
<rect fill="#000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="31.183333333333334">GND</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="29.083333333333332"/>
<g transform="translate(52.731026020611566,28.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="29.183333333333334">PA00</text>
<g transform="translate(56.33102602061157,28.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="29.183333333333334">D4</text>
<g transform="translate(59.33102602061157,28.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="29.183333333333334">PWM2</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="27.083333333333332"/>
<g transform="translate(52.731026020611566,26.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="27.183333333333334">PA30</text>
<g transform="translate(56.33102602061157,26.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="27.183333333333334">D5</text>
<g transform="translate(59.33102602061157,26.383333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="27.183333333333334">TX2</text>
<g transform="translate(62.93102602061157,26.383333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="64.41666666666667" y="27.183333333333334">SDA0</text>
<g transform="translate(66.53102602061156,26.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="68.01666666666667" y="27.183333333333334">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="25.083333333333332"/>
<g transform="translate(52.731026020611566,24.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="25.183333333333334">PA19</text>
<g transform="translate(56.33102602061157,24.383333333333333)">
<rect fill="#8ad039" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.81666666666667" y="25.183333333333334">ADC1</text>
<g transform="translate(59.93102602061157,24.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="61.11666666666667" y="25.183333333333334">D6</text>
<g transform="translate(62.93102602061157,24.383333333333333)">
<rect fill="#16a352" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="64.11666666666667" y="25.183333333333334">A0</text>
<g transform="translate(65.93102602061157,24.383333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="67.41666666666667" y="25.183333333333334">SDA0</text>
<g transform="translate(69.53102602061156,24.383333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="71.01666666666667" y="25.183333333333334">CS0</text>
<g transform="translate(73.13102602061156,24.383333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="74.61666666666666" y="25.183333333333334">CS1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="23.08333333333333"/>
<g transform="translate(52.731026020611566,22.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="23.18333333333333">PA05</text>
<g transform="translate(56.33102602061157,22.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="23.18333333333333">D7</text>
<g transform="translate(59.33102602061157,22.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="23.18333333333333">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="21.08333333333333"/>
<g transform="translate(52.731026020611566,20.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="21.18333333333333">PA12</text>
<g transform="translate(56.33102602061157,20.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="21.18333333333333">D8</text>
<g transform="translate(59.33102602061157,20.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="21.18333333333333">PWM3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="19.08333333333333"/>
<g transform="translate(52.731026020611566,18.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="19.18333333333333">PA18</text>
<g transform="translate(56.33102602061157,18.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="19.18333333333333">D9</text>
<g transform="translate(59.33102602061157,18.38333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="19.18333333333333">RX0</text>
<g transform="translate(62.93102602061157,18.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="64.41666666666667" y="19.18333333333333">SCL1</text>
<g transform="translate(66.53102602061156,18.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="68.01666666666667" y="19.18333333333333">SCK0</text>
<g transform="translate(70.13102602061156,18.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="71.61666666666666" y="19.18333333333333">SCK1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="17.08333333333333"/>
<g transform="translate(52.731026020611566,16.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="17.18333333333333">PA23</text>
<g transform="translate(56.33102602061157,16.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="17.18333333333333">D10</text>
<g transform="translate(59.33102602061157,16.38333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="17.18333333333333">TX0</text>
<g transform="translate(62.93102602061157,16.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="64.41666666666667" y="17.18333333333333">SDA1</text>
<g transform="translate(66.53102602061156,16.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="68.01666666666667" y="17.18333333333333">MOSI0</text>
<g transform="translate(70.13102602061156,16.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="71.61666666666666" y="17.18333333333333">MOSI1</text>
<g transform="translate(73.73102602061157,16.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="75.21666666666667" y="17.18333333333333">PWM0</text>
</svg>

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -0,0 +1 @@
#include "variant.h"

36
boards/wr3e/variant.cpp Normal file
View File

@@ -0,0 +1,36 @@
/* This file was auto-generated from wr3e.json using boardgen */
#include <Arduino.h>
extern "C" {
// clang-format off
PinInfo pinTable[PINS_COUNT] = {
// D0: PA29, UART2_RX, I2C0_SCL, PWM4
{PA_29, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_UART, PIN_NONE, 0},
// D1: PA14, PWM0, SWCLK
{PA_14, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D2: PA15, PWM1, SWDIO
{PA_15, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D3: PA22, UART0_RTS, SPI0_MISO, SPI1_MISO, I2C0_SCL, SD_D0, PWM5, I2S0_WS, WAKE2
{PA_22, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D4: PA00, PWM2
{PA_0, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D5: PA30, UART2_TX, I2C0_SDA, PWM4
{PA_30, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_UART, PIN_NONE, 0},
// D6: PA19, ADC1, UART0_CTS, SPI0_CS, SPI1_CS, I2C0_SDA, SD_D3, TMR5_TRIG, I2S0_TX
{PA_19, PIN_GPIO | PIN_IRQ | PIN_ADC | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D7: PA05, PWM4, WAKE1
{PA_5, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D8: PA12, PWM3
{PA_12, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D9: PA18, UART0_RX, SPI0_SCK, SPI1_SCK, I2C1_SCL, SD_D2, TMR4_TRIG, I2S0_MCK, WAKE0
{PA_18, PIN_GPIO | PIN_IRQ | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D10: PA23, UART0_TX, SPI0_MOSI, SPI1_MOSI, I2C1_SDA, SD_D1, PWM0, WAKE3
{PA_23, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_SPI | PIN_UART, PIN_NONE, 0},
// A1: ADC2
{AD_2, PIN_ADC, PIN_NONE, 0},
};
// clang-format on
} // extern "C"

53
boards/wr3e/variant.h Normal file
View File

@@ -0,0 +1,53 @@
/* This file was auto-generated from wr3e.json using boardgen */
#pragma once
#include <WVariant.h>
// clang-format off
// Pins
// ----
#define PINS_COUNT 12
#define NUM_ANALOG_INPUTS 2
#define NUM_DIGITAL_PINS 11
#define NUM_ANALOG_OUTPUTS 0
// Analog pins
// -----------
#define PIN_A1 11u // AD_2
#define PIN_A0 6u // PA_19
#define A1 PIN_A1
#define A0 PIN_A0
// SPI Interfaces
// --------------
#define SPI_INTERFACES_COUNT 2
#define PIN_SPI0_CS 6u // PA_19
#define PIN_SPI0_MISO 3u // PA_22
#define PIN_SPI0_MOSI 10u // PA_23
#define PIN_SPI0_SCK 9u // PA_18
#define PIN_SPI1_CS 6u // PA_19
#define PIN_SPI1_MISO 3u // PA_22
#define PIN_SPI1_MOSI 10u // PA_23
#define PIN_SPI1_SCK 9u // PA_18
// Wire Interfaces
// ---------------
#define WIRE_INTERFACES_COUNT 2
#define PIN_WIRE0_SCL_0 0u // PA_29
#define PIN_WIRE0_SCL_1 3u // PA_22
#define PIN_WIRE0_SDA_0 5u // PA_30
#define PIN_WIRE0_SDA_1 6u // PA_19
#define PIN_WIRE1_SCL 9u // PA_18
#define PIN_WIRE1_SDA 10u // PA_23
// Serial ports
// ------------
#define SERIAL_INTERFACES_COUNT 2
#define PIN_SERIAL0_CTS 6u // PA_19
#define PIN_SERIAL0_RTS 3u // PA_22
#define PIN_SERIAL0_RX 9u // PA_18
#define PIN_SERIAL0_TX 10u // PA_23
#define PIN_SERIAL2_RX 0u // PA_29
#define PIN_SERIAL2_TX 5u // PA_30

20
boards/wr3l.json Normal file
View File

@@ -0,0 +1,20 @@
{
"_base": [
"realtek-ambz",
"realtek-ambz-2mb-large",
"realtek-ambz-bx",
"pcb/ic-rtl8710bn",
"pcb/wr3l-base",
"pcb/wr3"
],
"build": {
"mcu": "rtl8710bx",
"variant": "wr3l"
},
"name": "WR3L Wi-Fi Module",
"url": "https://developer.tuya.com/en/docs/iot/wifiwr3lmodule?id=K9605tt0kveqm",
"vendor": "Tuya Inc.",
"pcb": {
"symbol": "WR3L"
}
}

67
boards/wr3l/README.md Normal file
View File

@@ -0,0 +1,67 @@
# WR3L Wi-Fi Module
*by Tuya Inc.*
[Product page](https://developer.tuya.com/en/docs/iot/wifiwr3lmodule?id=K9605tt0kveqm)
- [General info](../../docs/platform/realtek/README.md)
- [Debugging](../../docs/platform/realtek/debugging.md)
- [Flashing guide](../../docs/platform/realtek-ambz/flashing.md)
- [ImageTool (AmebaZ/AmebaD)](https://images.tuyacn.com/smart/Image_Tool/Image_Tool.zip)
Parameter | Value
-------------|----------------------------------
MCU | RTL8710BX
Manufacturer | Realtek
Series | AmebaZ
Frequency | 62.5 MHz
Flash size | 2 MiB
RAM size | 256 KiB
Voltage | 3.0V - 3.6V
I/O | 11x GPIO, 6x PWM, 2x UART, 2x ADC
Wi-Fi | 802.11 b/g/n
## Pinout
![Pinout](pinout_wr3l.svg)
## Arduino Core pin mapping
No. | Pin | UART | I²C | SPI | PWM | Other
----|------------|-----------|----------|----------------------|------|------
D0 | PA22 | UART0_RTS | I2C0_SCL | SPI0_MISO, SPI1_MISO | PWM5 |
D1 | PA19 | UART0_CTS | I2C0_SDA | SPI0_CS, SPI1_CS | |
D2 | PA14 | | | | PWM0 | SWCLK
D3 | PA15 | | | | PWM1 | SWDIO
D4 | PA00 | | | | PWM2 |
D5 | PA29 | UART2_RX | I2C0_SCL | | PWM4 |
D6 | PA30 | UART2_TX | I2C0_SDA | | PWM4 |
D7 | PA05 | | | | PWM4 |
D8 | PA12 | | | | PWM3 |
D9 | PA18 | UART0_RX | I2C1_SCL | SPI0_SCK, SPI1_SCK | |
D10 | PA23 | UART0_TX | I2C1_SDA | SPI0_MOSI, SPI1_MOSI | PWM0 |
A0 | PA19, ADC1 | | | | |
A1 | ADC2 | | | | |
## Flash memory map
Flash size: 2 MiB / 2,097,152 B / 0x200000
Hex values are in bytes.
Name | Start | Length | End
----------------|----------|-------------------|---------
Boot XIP | 0x000000 | 16 KiB / 0x4000 | 0x004000
Boot RAM | 0x004000 | 16 KiB / 0x4000 | 0x008000
(reserved) | 0x008000 | 4 KiB / 0x1000 | 0x009000
System Data | 0x009000 | 4 KiB / 0x1000 | 0x00A000
Calibration | 0x00A000 | 4 KiB / 0x1000 | 0x00B000
OTA1 Image | 0x00B000 | 788 KiB / 0xC5000 | 0x0D0000
OTA2 Image | 0x0D0000 | 788 KiB / 0xC5000 | 0x195000
Key-Value Store | 0x195000 | 24 KiB / 0x6000 | 0x19B000
User Data | 0x19B000 | 400 KiB / 0x64000 | 0x1FF000
RDP | 0x1FF000 | 4 KiB / 0x1000 | 0x200000
RDP is most likely not used in Tuya firmwares, as the System Data partition contains an incorrect offset 0xFF000 for RDP, which is in the middle of OTA2 image.
Additionally, Tuya firmware uses an encrypted KV or file storage, which resides at the end of flash memory. This seems to overlap system RDP area.

325
boards/wr3l/pinout_wr3l.svg Normal file
View File

@@ -0,0 +1,325 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="full" height="500" version="1.1" viewBox="0,0,85.33333333333333,41.666666666666664" width="1024">
<defs/>
<rect fill="white" height="41.666666666666664" stroke="black" stroke-width="0.1" width="85.33333333333333" x="0" y="0"/>
<linearGradient gradientUnits="objectBoundingBox" id="id1" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="#f9f9f9"/>
<stop offset="100%" stop-color="#ededed"/>
</linearGradient>
<rect fill="url(#id1) none" height="23.9" stroke="#b5a739" stroke-width="0.1" width="15.9" x="34.36666666666666" y="8.883333333333333"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin1.trace" width="1.7" x="34.31666666666666" y="16.583333333333332"/>
<circle cx="34.31666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.left.pin1.cast" r="0.35"/>
<circle cx="35.36666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.left.pin1.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin2.trace" width="1.7" x="34.31666666666666" y="18.583333333333332"/>
<circle cx="34.31666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.left.pin2.cast" r="0.35"/>
<circle cx="35.36666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.left.pin2.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin3.trace" width="1.7" x="34.31666666666666" y="20.583333333333332"/>
<circle cx="34.31666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.left.pin3.cast" r="0.35"/>
<circle cx="35.36666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.left.pin3.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin4.trace" width="1.7" x="34.31666666666666" y="22.583333333333332"/>
<circle cx="34.31666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.left.pin4.cast" r="0.35"/>
<circle cx="35.36666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.left.pin4.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin5.trace" width="1.7" x="34.31666666666666" y="24.583333333333332"/>
<circle cx="34.31666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.left.pin5.cast" r="0.35"/>
<circle cx="35.36666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.left.pin5.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin6.trace" width="1.7" x="34.31666666666666" y="26.583333333333332"/>
<circle cx="34.31666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.left.pin6.cast" r="0.35"/>
<circle cx="35.36666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.left.pin6.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin7.trace" width="1.7" x="34.31666666666666" y="28.583333333333332"/>
<circle cx="34.31666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.left.pin7.cast" r="0.35"/>
<circle cx="35.36666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.left.pin7.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin8.trace" width="1.7" x="34.31666666666666" y="30.583333333333332"/>
<circle cx="34.31666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.left.pin8.cast" r="0.35"/>
<circle cx="35.36666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.left.pin8.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin1.trace" width="1.7" x="48.61666666666666" y="16.583333333333332"/>
<circle cx="50.31666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.right.pin1.cast" r="0.35"/>
<circle cx="49.266666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.right.pin1.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin2.trace" width="1.7" x="48.61666666666666" y="18.583333333333332"/>
<circle cx="50.31666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.right.pin2.cast" r="0.35"/>
<circle cx="49.266666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.right.pin2.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin3.trace" width="1.7" x="48.61666666666666" y="20.583333333333332"/>
<circle cx="50.31666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.right.pin3.cast" r="0.35"/>
<circle cx="49.266666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.right.pin3.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin4.trace" width="1.7" x="48.61666666666666" y="22.583333333333332"/>
<circle cx="50.31666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.right.pin4.cast" r="0.35"/>
<circle cx="49.266666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.right.pin4.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin5.trace" width="1.7" x="48.61666666666666" y="24.583333333333332"/>
<circle cx="50.31666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.right.pin5.cast" r="0.35"/>
<circle cx="49.266666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.right.pin5.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin6.trace" width="1.7" x="48.61666666666666" y="26.583333333333332"/>
<circle cx="50.31666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.right.pin6.cast" r="0.35"/>
<circle cx="49.266666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.right.pin6.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin7.trace" width="1.7" x="48.61666666666666" y="28.583333333333332"/>
<circle cx="50.31666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.right.pin7.cast" r="0.35"/>
<circle cx="49.266666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.right.pin7.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin8.trace" width="1.7" x="48.61666666666666" y="30.583333333333332"/>
<circle cx="50.31666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.right.pin8.cast" r="0.35"/>
<circle cx="49.266666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.right.pin8.hole" r="0.35"/>
<linearGradient gradientUnits="objectBoundingBox" id="id2" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="whitesmoke"/>
<stop offset="100%" stop-color="#999"/>
</linearGradient>
<rect fill="url(#id2) none" height="15.8" rx="0.5" ry="0.5" width="12.0" x="36.31666666666666" y="15.783333333333331"/>
<rect fill="#000" height="0.15" width="15.0" x="34.81666666666666" y="15.033333333333331"/>
<text fill="#000" font-family="Consolas" font-size="1.0" x="41.31666666666666" y="14.333333333333332">WR3L</text>
<rect fill="#e0e0e0" height="5.2" width="0.5" x="35.416666666666664" y="9.633333333333333"/>
<rect fill="#e0e0e0" height="0.5" width="4.6" x="35.416666666666664" y="9.633333333333333"/>
<rect fill="#e0e0e0" height="5.2" width="0.5" x="37.61666666666666" y="9.633333333333333"/>
<rect fill="#e0e0e0" height="3.0" width="0.5" x="39.516666666666666" y="9.633333333333333"/>
<rect fill="#e0e0e0" height="0.5" width="3.0" x="39.516666666666666" y="12.133333333333333"/>
<rect fill="#e0e0e0" height="3.0" width="0.5" x="42.016666666666666" y="9.633333333333333"/>
<rect fill="#e0e0e0" height="0.5" width="2.7" x="42.016666666666666" y="9.633333333333333"/>
<rect fill="#e0e0e0" height="3.0" width="0.5" x="44.21666666666666" y="9.633333333333333"/>
<rect fill="#e0e0e0" height="0.5" width="3.0" x="44.21666666666666" y="12.133333333333333"/>
<rect fill="#e0e0e0" height="3.0" width="0.5" x="46.71666666666666" y="9.633333333333333"/>
<rect fill="#e0e0e0" height="0.5" width="2.5" x="46.71666666666666" y="9.633333333333333"/>
<rect fill="#e0e0e0" height="4.4" width="0.5" x="48.71666666666666" y="9.633333333333333"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.21666666666666" y="17.08333333333333"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.21666666666666" y="19.08333333333333"/>
<g transform="translate(27.431026020611558,18.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="28.91666666666666" y="19.18333333333333">PA22</text>
<g transform="translate(24.43102602061156,18.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="25.616666666666664" y="19.18333333333333">D0</text>
<g transform="translate(20.83102602061156,18.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="22.316666666666663" y="19.18333333333333">SCL0</text>
<g transform="translate(17.231026020611562,18.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="18.716666666666665" y="19.18333333333333">MISO0</text>
<g transform="translate(13.631026020611563,18.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="15.116666666666664" y="19.18333333333333">MISO1</text>
<g transform="translate(10.031026020611561,18.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="11.516666666666662" y="19.18333333333333">PWM5</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.21666666666666" y="21.08333333333333"/>
<g transform="translate(27.431026020611558,20.38333333333333)">
<rect fill="#ed602e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="28.91666666666666" y="21.18333333333333">CEN</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.21666666666666" y="23.08333333333333"/>
<g transform="translate(27.431026020611558,22.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="28.91666666666666" y="23.18333333333333">PA19</text>
<g transform="translate(23.83102602061156,22.38333333333333)">
<rect fill="#8ad039" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="25.316666666666663" y="23.18333333333333">ADC1</text>
<g transform="translate(20.83102602061156,22.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="22.016666666666662" y="23.18333333333333">D1</text>
<g transform="translate(17.83102602061156,22.38333333333333)">
<rect fill="#16a352" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="19.016666666666662" y="23.18333333333333">A0</text>
<g transform="translate(14.23102602061156,22.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="15.716666666666661" y="23.18333333333333">SDA0</text>
<g transform="translate(10.631026020611559,22.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="12.11666666666666" y="23.18333333333333">CS0</text>
<g transform="translate(7.031026020611558,22.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="8.516666666666659" y="23.18333333333333">CS1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.21666666666666" y="25.083333333333332"/>
<g transform="translate(27.431026020611558,24.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="28.91666666666666" y="25.183333333333334">PA14</text>
<g transform="translate(24.43102602061156,24.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="25.616666666666664" y="25.183333333333334">D2</text>
<g transform="translate(20.83102602061156,24.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="22.316666666666663" y="25.183333333333334">PWM0</text>
<g transform="translate(17.231026020611562,24.383333333333333)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="18.716666666666665" y="25.183333333333334">SWCLK</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.21666666666666" y="27.083333333333332"/>
<g transform="translate(27.431026020611558,26.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="28.91666666666666" y="27.183333333333334">PA15</text>
<g transform="translate(24.43102602061156,26.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="25.616666666666664" y="27.183333333333334">D3</text>
<g transform="translate(20.83102602061156,26.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="22.316666666666663" y="27.183333333333334">PWM1</text>
<g transform="translate(17.231026020611562,26.383333333333333)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="18.716666666666665" y="27.183333333333334">SWDIO</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.21666666666666" y="29.083333333333332"/>
<g transform="translate(27.431026020611558,28.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="28.91666666666666" y="29.183333333333334">PA00</text>
<g transform="translate(24.43102602061156,28.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="25.616666666666664" y="29.183333333333334">D4</text>
<g transform="translate(20.83102602061156,28.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="22.316666666666663" y="29.183333333333334">PWM2</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.21666666666666" y="31.083333333333332"/>
<g transform="translate(27.431026020611558,30.383333333333333)">
<rect fill="#cd3c24" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="28.91666666666666" y="31.183333333333334">3V3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.81666666666666" y="31.083333333333332"/>
<g transform="translate(54.231026020611566,30.383333333333333)">
<rect fill="#000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.71666666666667" y="31.183333333333334">GND</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.81666666666666" y="29.083333333333332"/>
<g transform="translate(54.231026020611566,28.383333333333333)">
<rect fill="#8ad039" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.71666666666667" y="29.183333333333334">ADC2</text>
<g transform="translate(57.83102602061157,28.383333333333333)">
<rect fill="#16a352" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.016666666666666" y="29.183333333333334">A1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.81666666666666" y="27.083333333333332"/>
<g transform="translate(54.231026020611566,26.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.71666666666667" y="27.183333333333334">PA29</text>
<g transform="translate(57.83102602061157,26.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.016666666666666" y="27.183333333333334">D5</text>
<g transform="translate(60.83102602061157,26.383333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.31666666666667" y="27.183333333333334">RX2</text>
<g transform="translate(64.43102602061157,26.383333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="65.91666666666667" y="27.183333333333334">SCL0</text>
<g transform="translate(68.03102602061156,26.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="69.51666666666667" y="27.183333333333334">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.81666666666666" y="25.083333333333332"/>
<g transform="translate(54.231026020611566,24.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.71666666666667" y="25.183333333333334">PA30</text>
<g transform="translate(57.83102602061157,24.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.016666666666666" y="25.183333333333334">D6</text>
<g transform="translate(60.83102602061157,24.383333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.31666666666667" y="25.183333333333334">TX2</text>
<g transform="translate(64.43102602061157,24.383333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="65.91666666666667" y="25.183333333333334">SDA0</text>
<g transform="translate(68.03102602061156,24.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="69.51666666666667" y="25.183333333333334">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.81666666666666" y="23.08333333333333"/>
<g transform="translate(54.231026020611566,22.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.71666666666667" y="23.18333333333333">PA05</text>
<g transform="translate(57.83102602061157,22.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.016666666666666" y="23.18333333333333">D7</text>
<g transform="translate(60.83102602061157,22.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.31666666666667" y="23.18333333333333">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.81666666666666" y="21.08333333333333"/>
<g transform="translate(54.231026020611566,20.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.71666666666667" y="21.18333333333333">PA12</text>
<g transform="translate(57.83102602061157,20.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.016666666666666" y="21.18333333333333">D8</text>
<g transform="translate(60.83102602061157,20.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.31666666666667" y="21.18333333333333">PWM3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.81666666666666" y="19.08333333333333"/>
<g transform="translate(54.231026020611566,18.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.71666666666667" y="19.18333333333333">PA18</text>
<g transform="translate(57.83102602061157,18.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.016666666666666" y="19.18333333333333">D9</text>
<g transform="translate(60.83102602061157,18.38333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.31666666666667" y="19.18333333333333">RX0</text>
<g transform="translate(64.43102602061157,18.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="65.91666666666667" y="19.18333333333333">SCL1</text>
<g transform="translate(68.03102602061156,18.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="69.51666666666667" y="19.18333333333333">SCK0</text>
<g transform="translate(71.63102602061156,18.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="73.11666666666666" y="19.18333333333333">SCK1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="50.81666666666666" y="17.08333333333333"/>
<g transform="translate(54.231026020611566,16.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="55.71666666666667" y="17.18333333333333">PA23</text>
<g transform="translate(57.83102602061157,16.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.016666666666666" y="17.18333333333333">D10</text>
<g transform="translate(60.83102602061157,16.38333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.31666666666667" y="17.18333333333333">TX0</text>
<g transform="translate(64.43102602061157,16.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="65.91666666666667" y="17.18333333333333">SDA1</text>
<g transform="translate(68.03102602061156,16.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="69.51666666666667" y="17.18333333333333">MOSI0</text>
<g transform="translate(71.63102602061156,16.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="73.11666666666666" y="17.18333333333333">MOSI1</text>
<g transform="translate(75.23102602061157,16.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="76.71666666666667" y="17.18333333333333">PWM0</text>
</svg>

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -0,0 +1 @@
#include "variant.h"

36
boards/wr3l/variant.cpp Normal file
View File

@@ -0,0 +1,36 @@
/* This file was auto-generated from wr3l.json using boardgen */
#include <Arduino.h>
extern "C" {
// clang-format off
PinInfo pinTable[PINS_COUNT] = {
// D0: PA22, UART0_RTS, SPI0_MISO, SPI1_MISO, I2C0_SCL, SD_D0, PWM5, I2S0_WS, WAKE2
{PA_22, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D1: PA19, ADC1, UART0_CTS, SPI0_CS, SPI1_CS, I2C0_SDA, SD_D3, TMR5_TRIG, I2S0_TX
{PA_19, PIN_GPIO | PIN_IRQ | PIN_ADC | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D2: PA14, PWM0, SWCLK
{PA_14, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D3: PA15, PWM1, SWDIO
{PA_15, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D4: PA00, PWM2
{PA_0, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D5: PA29, UART2_RX, I2C0_SCL, PWM4
{PA_29, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_UART, PIN_NONE, 0},
// D6: PA30, UART2_TX, I2C0_SDA, PWM4
{PA_30, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_UART, PIN_NONE, 0},
// D7: PA05, PWM4, WAKE1
{PA_5, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D8: PA12, PWM3
{PA_12, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D9: PA18, UART0_RX, SPI0_SCK, SPI1_SCK, I2C1_SCL, SD_D2, TMR4_TRIG, I2S0_MCK, WAKE0
{PA_18, PIN_GPIO | PIN_IRQ | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D10: PA23, UART0_TX, SPI0_MOSI, SPI1_MOSI, I2C1_SDA, SD_D1, PWM0, WAKE3
{PA_23, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_SPI | PIN_UART, PIN_NONE, 0},
// A1: ADC2
{AD_2, PIN_ADC, PIN_NONE, 0},
};
// clang-format on
} // extern "C"

53
boards/wr3l/variant.h Normal file
View File

@@ -0,0 +1,53 @@
/* This file was auto-generated from wr3l.json using boardgen */
#pragma once
#include <WVariant.h>
// clang-format off
// Pins
// ----
#define PINS_COUNT 12
#define NUM_DIGITAL_PINS 11
#define NUM_ANALOG_INPUTS 2
#define NUM_ANALOG_OUTPUTS 0
// Analog pins
// -----------
#define PIN_A0 1u // PA_19
#define PIN_A1 11u // AD_2
#define A0 PIN_A0
#define A1 PIN_A1
// SPI Interfaces
// --------------
#define SPI_INTERFACES_COUNT 2
#define PIN_SPI0_CS 1u // PA_19
#define PIN_SPI0_MISO 0u // PA_22
#define PIN_SPI0_MOSI 10u // PA_23
#define PIN_SPI0_SCK 9u // PA_18
#define PIN_SPI1_CS 1u // PA_19
#define PIN_SPI1_MISO 0u // PA_22
#define PIN_SPI1_MOSI 10u // PA_23
#define PIN_SPI1_SCK 9u // PA_18
// Wire Interfaces
// ---------------
#define WIRE_INTERFACES_COUNT 2
#define PIN_WIRE0_SCL_0 0u // PA_22
#define PIN_WIRE0_SCL_1 5u // PA_29
#define PIN_WIRE0_SDA_0 1u // PA_19
#define PIN_WIRE0_SDA_1 6u // PA_30
#define PIN_WIRE1_SCL 9u // PA_18
#define PIN_WIRE1_SDA 10u // PA_23
// Serial ports
// ------------
#define SERIAL_INTERFACES_COUNT 2
#define PIN_SERIAL0_CTS 1u // PA_19
#define PIN_SERIAL0_RTS 0u // PA_22
#define PIN_SERIAL0_RX 9u // PA_18
#define PIN_SERIAL0_TX 10u // PA_23
#define PIN_SERIAL2_RX 5u // PA_29
#define PIN_SERIAL2_TX 6u // PA_30

20
boards/wr3le.json Normal file
View File

@@ -0,0 +1,20 @@
{
"_base": [
"realtek-ambz",
"realtek-ambz-2mb-large",
"realtek-ambz-bx",
"pcb/ic-rtl8710bn",
"pcb/wr3l-base",
"pcb/wr3e"
],
"build": {
"mcu": "rtl8710bx",
"variant": "wr3le"
},
"name": "WR3LE Wi-Fi Module",
"url": "https://developer.tuya.com/en/docs/iot/wr3le?id=K986l7a1ha8tm",
"vendor": "Tuya Inc.",
"pcb": {
"symbol": "WR3LE"
}
}

67
boards/wr3le/README.md Normal file
View File

@@ -0,0 +1,67 @@
# WR3LE Wi-Fi Module
*by Tuya Inc.*
[Product page](https://developer.tuya.com/en/docs/iot/wr3le?id=K986l7a1ha8tm)
- [General info](../../docs/platform/realtek/README.md)
- [Debugging](../../docs/platform/realtek/debugging.md)
- [Flashing guide](../../docs/platform/realtek-ambz/flashing.md)
- [ImageTool (AmebaZ/AmebaD)](https://images.tuyacn.com/smart/Image_Tool/Image_Tool.zip)
Parameter | Value
-------------|----------------------------------
MCU | RTL8710BX
Manufacturer | Realtek
Series | AmebaZ
Frequency | 62.5 MHz
Flash size | 2 MiB
RAM size | 256 KiB
Voltage | 3.0V - 3.6V
I/O | 11x GPIO, 6x PWM, 2x UART, 2x ADC
Wi-Fi | 802.11 b/g/n
## Pinout
![Pinout](pinout_wr3le.svg)
## Arduino Core pin mapping
No. | Pin | UART | I²C | SPI | PWM | Other
----|------------|-----------|----------|----------------------|------|------
D0 | PA29 | UART2_RX | I2C0_SCL | | PWM4 |
D1 | PA14 | | | | PWM0 | SWCLK
D2 | PA15 | | | | PWM1 | SWDIO
D3 | PA22 | UART0_RTS | I2C0_SCL | SPI0_MISO, SPI1_MISO | PWM5 |
D4 | PA00 | | | | PWM2 |
D5 | PA30 | UART2_TX | I2C0_SDA | | PWM4 |
D6 | PA19 | UART0_CTS | I2C0_SDA | SPI0_CS, SPI1_CS | |
D7 | PA05 | | | | PWM4 |
D8 | PA12 | | | | PWM3 |
D9 | PA18 | UART0_RX | I2C1_SCL | SPI0_SCK, SPI1_SCK | |
D10 | PA23 | UART0_TX | I2C1_SDA | SPI0_MOSI, SPI1_MOSI | PWM0 |
A0 | PA19, ADC1 | | | | |
A1 | ADC2 | | | | |
## Flash memory map
Flash size: 2 MiB / 2,097,152 B / 0x200000
Hex values are in bytes.
Name | Start | Length | End
----------------|----------|-------------------|---------
Boot XIP | 0x000000 | 16 KiB / 0x4000 | 0x004000
Boot RAM | 0x004000 | 16 KiB / 0x4000 | 0x008000
(reserved) | 0x008000 | 4 KiB / 0x1000 | 0x009000
System Data | 0x009000 | 4 KiB / 0x1000 | 0x00A000
Calibration | 0x00A000 | 4 KiB / 0x1000 | 0x00B000
OTA1 Image | 0x00B000 | 788 KiB / 0xC5000 | 0x0D0000
OTA2 Image | 0x0D0000 | 788 KiB / 0xC5000 | 0x195000
Key-Value Store | 0x195000 | 24 KiB / 0x6000 | 0x19B000
User Data | 0x19B000 | 400 KiB / 0x64000 | 0x1FF000
RDP | 0x1FF000 | 4 KiB / 0x1000 | 0x200000
RDP is most likely not used in Tuya firmwares, as the System Data partition contains an incorrect offset 0xFF000 for RDP, which is in the middle of OTA2 image.
Additionally, Tuya firmware uses an encrypted KV or file storage, which resides at the end of flash memory. This seems to overlap system RDP area.

View File

@@ -0,0 +1,325 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="full" height="500" version="1.1" viewBox="0,0,85.33333333333333,41.666666666666664" width="1024">
<defs/>
<rect fill="white" height="41.666666666666664" stroke="black" stroke-width="0.1" width="85.33333333333333" x="0" y="0"/>
<linearGradient gradientUnits="objectBoundingBox" id="id1" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="#47a8cd"/>
<stop offset="100%" stop-color="#008fb5"/>
</linearGradient>
<rect fill="url(#id1) none" height="23.9" stroke="#b5a739" stroke-width="0.1" width="15.9" x="32.86666666666666" y="8.883333333333333"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin1.trace" width="1.7" x="32.81666666666666" y="16.583333333333332"/>
<circle cx="32.81666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.left.pin1.cast" r="0.35"/>
<circle cx="33.86666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.left.pin1.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin2.trace" width="1.7" x="32.81666666666666" y="18.583333333333332"/>
<circle cx="32.81666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.left.pin2.cast" r="0.35"/>
<circle cx="33.86666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.left.pin2.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin3.trace" width="1.7" x="32.81666666666666" y="20.583333333333332"/>
<circle cx="32.81666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.left.pin3.cast" r="0.35"/>
<circle cx="33.86666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.left.pin3.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin4.trace" width="1.7" x="32.81666666666666" y="22.583333333333332"/>
<circle cx="32.81666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.left.pin4.cast" r="0.35"/>
<circle cx="33.86666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.left.pin4.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin5.trace" width="1.7" x="32.81666666666666" y="24.583333333333332"/>
<circle cx="32.81666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.left.pin5.cast" r="0.35"/>
<circle cx="33.86666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.left.pin5.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin6.trace" width="1.7" x="32.81666666666666" y="26.583333333333332"/>
<circle cx="32.81666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.left.pin6.cast" r="0.35"/>
<circle cx="33.86666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.left.pin6.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin7.trace" width="1.7" x="32.81666666666666" y="28.583333333333332"/>
<circle cx="32.81666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.left.pin7.cast" r="0.35"/>
<circle cx="33.86666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.left.pin7.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin8.trace" width="1.7" x="32.81666666666666" y="30.583333333333332"/>
<circle cx="32.81666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.left.pin8.cast" r="0.35"/>
<circle cx="33.86666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.left.pin8.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin1.trace" width="1.7" x="47.11666666666666" y="16.583333333333332"/>
<circle cx="48.81666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.right.pin1.cast" r="0.35"/>
<circle cx="47.766666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.right.pin1.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin2.trace" width="1.7" x="47.11666666666666" y="18.583333333333332"/>
<circle cx="48.81666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.right.pin2.cast" r="0.35"/>
<circle cx="47.766666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.right.pin2.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin3.trace" width="1.7" x="47.11666666666666" y="20.583333333333332"/>
<circle cx="48.81666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.right.pin3.cast" r="0.35"/>
<circle cx="47.766666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.right.pin3.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin4.trace" width="1.7" x="47.11666666666666" y="22.583333333333332"/>
<circle cx="48.81666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.right.pin4.cast" r="0.35"/>
<circle cx="47.766666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.right.pin4.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin5.trace" width="1.7" x="47.11666666666666" y="24.583333333333332"/>
<circle cx="48.81666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.right.pin5.cast" r="0.35"/>
<circle cx="47.766666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.right.pin5.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin6.trace" width="1.7" x="47.11666666666666" y="26.583333333333332"/>
<circle cx="48.81666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.right.pin6.cast" r="0.35"/>
<circle cx="47.766666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.right.pin6.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin7.trace" width="1.7" x="47.11666666666666" y="28.583333333333332"/>
<circle cx="48.81666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.right.pin7.cast" r="0.35"/>
<circle cx="47.766666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.right.pin7.hole" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin8.trace" width="1.7" x="47.11666666666666" y="30.583333333333332"/>
<circle cx="48.81666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.right.pin8.cast" r="0.35"/>
<circle cx="47.766666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.right.pin8.hole" r="0.35"/>
<linearGradient gradientUnits="objectBoundingBox" id="id2" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="whitesmoke"/>
<stop offset="100%" stop-color="#999"/>
</linearGradient>
<rect fill="url(#id2) none" height="15.8" rx="0.5" ry="0.5" width="12.0" x="34.81666666666666" y="15.783333333333331"/>
<rect fill="#fff" height="0.15" width="15.0" x="33.31666666666666" y="15.033333333333331"/>
<text fill="#fff" font-family="Consolas" font-size="1.0" x="39.81666666666666" y="14.333333333333332">WR3LE</text>
<rect fill="#58839b" height="5.2" width="0.5" x="33.916666666666664" y="9.633333333333333"/>
<rect fill="#58839b" height="0.5" width="4.6" x="33.916666666666664" y="9.633333333333333"/>
<rect fill="#58839b" height="5.2" width="0.5" x="36.11666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="38.016666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="0.5" width="3.0" x="38.016666666666666" y="12.133333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="40.516666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="0.5" width="2.7" x="40.516666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="42.71666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="0.5" width="3.0" x="42.71666666666666" y="12.133333333333333"/>
<rect fill="#58839b" height="3.0" width="0.5" x="45.21666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="0.5" width="2.5" x="45.21666666666666" y="9.633333333333333"/>
<rect fill="#58839b" height="4.4" width="0.5" x="47.21666666666666" y="9.633333333333333"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="17.08333333333333"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="19.08333333333333"/>
<g transform="translate(25.931026020611558,18.38333333333333)">
<rect fill="#8ad039" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="19.18333333333333">ADC2</text>
<g transform="translate(22.93102602061156,18.38333333333333)">
<rect fill="#16a352" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="24.116666666666664" y="19.18333333333333">A1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="21.08333333333333"/>
<g transform="translate(25.931026020611558,20.38333333333333)">
<rect fill="#ed602e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="21.18333333333333">CEN</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="23.08333333333333"/>
<g transform="translate(25.931026020611558,22.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="23.18333333333333">PA29</text>
<g transform="translate(22.93102602061156,22.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="24.116666666666664" y="23.18333333333333">D0</text>
<g transform="translate(19.33102602061156,22.38333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="20.816666666666663" y="23.18333333333333">RX2</text>
<g transform="translate(15.731026020611564,22.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="17.216666666666665" y="23.18333333333333">SCL0</text>
<g transform="translate(12.131026020611563,22.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="13.616666666666664" y="23.18333333333333">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="25.083333333333332"/>
<g transform="translate(25.931026020611558,24.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="25.183333333333334">PA14</text>
<g transform="translate(22.93102602061156,24.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="24.116666666666664" y="25.183333333333334">D1</text>
<g transform="translate(19.33102602061156,24.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="20.816666666666663" y="25.183333333333334">PWM0</text>
<g transform="translate(15.731026020611564,24.383333333333333)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="17.216666666666665" y="25.183333333333334">SWCLK</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="27.083333333333332"/>
<g transform="translate(25.931026020611558,26.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="27.183333333333334">PA15</text>
<g transform="translate(22.93102602061156,26.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="24.116666666666664" y="27.183333333333334">D2</text>
<g transform="translate(19.33102602061156,26.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="20.816666666666663" y="27.183333333333334">PWM1</text>
<g transform="translate(15.731026020611564,26.383333333333333)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="17.216666666666665" y="27.183333333333334">SWDIO</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="29.083333333333332"/>
<g transform="translate(25.931026020611558,28.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="29.183333333333334">PA22</text>
<g transform="translate(22.93102602061156,28.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="24.116666666666664" y="29.183333333333334">D3</text>
<g transform="translate(19.33102602061156,28.383333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="20.816666666666663" y="29.183333333333334">SCL0</text>
<g transform="translate(15.731026020611564,28.383333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="17.216666666666665" y="29.183333333333334">MISO0</text>
<g transform="translate(12.131026020611563,28.383333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="13.616666666666664" y="29.183333333333334">MISO1</text>
<g transform="translate(8.531026020611561,28.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="10.016666666666662" y="29.183333333333334">PWM5</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="29.71666666666666" y="31.083333333333332"/>
<g transform="translate(25.931026020611558,30.383333333333333)">
<rect fill="#cd3c24" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="27.41666666666666" y="31.183333333333334">3V3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="31.083333333333332"/>
<g transform="translate(52.731026020611566,30.383333333333333)">
<rect fill="#000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="31.183333333333334">GND</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="29.083333333333332"/>
<g transform="translate(52.731026020611566,28.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="29.183333333333334">PA00</text>
<g transform="translate(56.33102602061157,28.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="29.183333333333334">D4</text>
<g transform="translate(59.33102602061157,28.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="29.183333333333334">PWM2</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="27.083333333333332"/>
<g transform="translate(52.731026020611566,26.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="27.183333333333334">PA30</text>
<g transform="translate(56.33102602061157,26.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="27.183333333333334">D5</text>
<g transform="translate(59.33102602061157,26.383333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="27.183333333333334">TX2</text>
<g transform="translate(62.93102602061157,26.383333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="64.41666666666667" y="27.183333333333334">SDA0</text>
<g transform="translate(66.53102602061156,26.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="68.01666666666667" y="27.183333333333334">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="25.083333333333332"/>
<g transform="translate(52.731026020611566,24.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="25.183333333333334">PA19</text>
<g transform="translate(56.33102602061157,24.383333333333333)">
<rect fill="#8ad039" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.81666666666667" y="25.183333333333334">ADC1</text>
<g transform="translate(59.93102602061157,24.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="61.11666666666667" y="25.183333333333334">D6</text>
<g transform="translate(62.93102602061157,24.383333333333333)">
<rect fill="#16a352" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="64.11666666666667" y="25.183333333333334">A0</text>
<g transform="translate(65.93102602061157,24.383333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="67.41666666666667" y="25.183333333333334">SDA0</text>
<g transform="translate(69.53102602061156,24.383333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="71.01666666666667" y="25.183333333333334">CS0</text>
<g transform="translate(73.13102602061156,24.383333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="74.61666666666666" y="25.183333333333334">CS1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="23.08333333333333"/>
<g transform="translate(52.731026020611566,22.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="23.18333333333333">PA05</text>
<g transform="translate(56.33102602061157,22.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="23.18333333333333">D7</text>
<g transform="translate(59.33102602061157,22.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="23.18333333333333">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="21.08333333333333"/>
<g transform="translate(52.731026020611566,20.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="21.18333333333333">PA12</text>
<g transform="translate(56.33102602061157,20.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="21.18333333333333">D8</text>
<g transform="translate(59.33102602061157,20.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="21.18333333333333">PWM3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="19.08333333333333"/>
<g transform="translate(52.731026020611566,18.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="19.18333333333333">PA18</text>
<g transform="translate(56.33102602061157,18.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="19.18333333333333">D9</text>
<g transform="translate(59.33102602061157,18.38333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="19.18333333333333">RX0</text>
<g transform="translate(62.93102602061157,18.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="64.41666666666667" y="19.18333333333333">SCL1</text>
<g transform="translate(66.53102602061156,18.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="68.01666666666667" y="19.18333333333333">SCK0</text>
<g transform="translate(70.13102602061156,18.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="71.61666666666666" y="19.18333333333333">SCK1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="49.31666666666666" y="17.08333333333333"/>
<g transform="translate(52.731026020611566,16.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="54.21666666666667" y="17.18333333333333">PA23</text>
<g transform="translate(56.33102602061157,16.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="57.516666666666666" y="17.18333333333333">D10</text>
<g transform="translate(59.33102602061157,16.38333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="60.81666666666667" y="17.18333333333333">TX0</text>
<g transform="translate(62.93102602061157,16.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="64.41666666666667" y="17.18333333333333">SDA1</text>
<g transform="translate(66.53102602061156,16.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="68.01666666666667" y="17.18333333333333">MOSI0</text>
<g transform="translate(70.13102602061156,16.38333333333333)">
<rect fill="#e9ba33" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="71.61666666666666" y="17.18333333333333">MOSI1</text>
<g transform="translate(73.73102602061157,16.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="75.21666666666667" y="17.18333333333333">PWM0</text>
</svg>

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -0,0 +1 @@
#include "variant.h"

36
boards/wr3le/variant.cpp Normal file
View File

@@ -0,0 +1,36 @@
/* This file was auto-generated from wr3le.json using boardgen */
#include <Arduino.h>
extern "C" {
// clang-format off
PinInfo pinTable[PINS_COUNT] = {
// D0: PA29, UART2_RX, I2C0_SCL, PWM4
{PA_29, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_UART, PIN_NONE, 0},
// D1: PA14, PWM0, SWCLK
{PA_14, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D2: PA15, PWM1, SWDIO
{PA_15, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D3: PA22, UART0_RTS, SPI0_MISO, SPI1_MISO, I2C0_SCL, SD_D0, PWM5, I2S0_WS, WAKE2
{PA_22, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D4: PA00, PWM2
{PA_0, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D5: PA30, UART2_TX, I2C0_SDA, PWM4
{PA_30, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_UART, PIN_NONE, 0},
// D6: PA19, ADC1, UART0_CTS, SPI0_CS, SPI1_CS, I2C0_SDA, SD_D3, TMR5_TRIG, I2S0_TX
{PA_19, PIN_GPIO | PIN_IRQ | PIN_ADC | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D7: PA05, PWM4, WAKE1
{PA_5, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D8: PA12, PWM3
{PA_12, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D9: PA18, UART0_RX, SPI0_SCK, SPI1_SCK, I2C1_SCL, SD_D2, TMR4_TRIG, I2S0_MCK, WAKE0
{PA_18, PIN_GPIO | PIN_IRQ | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D10: PA23, UART0_TX, SPI0_MOSI, SPI1_MOSI, I2C1_SDA, SD_D1, PWM0, WAKE3
{PA_23, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_SPI | PIN_UART, PIN_NONE, 0},
// A1: ADC2
{AD_2, PIN_ADC, PIN_NONE, 0},
};
// clang-format on
} // extern "C"

53
boards/wr3le/variant.h Normal file
View File

@@ -0,0 +1,53 @@
/* This file was auto-generated from wr3le.json using boardgen */
#pragma once
#include <WVariant.h>
// clang-format off
// Pins
// ----
#define PINS_COUNT 12
#define NUM_ANALOG_INPUTS 2
#define NUM_DIGITAL_PINS 11
#define NUM_ANALOG_OUTPUTS 0
// Analog pins
// -----------
#define PIN_A1 11u // AD_2
#define PIN_A0 6u // PA_19
#define A1 PIN_A1
#define A0 PIN_A0
// SPI Interfaces
// --------------
#define SPI_INTERFACES_COUNT 2
#define PIN_SPI0_CS 6u // PA_19
#define PIN_SPI0_MISO 3u // PA_22
#define PIN_SPI0_MOSI 10u // PA_23
#define PIN_SPI0_SCK 9u // PA_18
#define PIN_SPI1_CS 6u // PA_19
#define PIN_SPI1_MISO 3u // PA_22
#define PIN_SPI1_MOSI 10u // PA_23
#define PIN_SPI1_SCK 9u // PA_18
// Wire Interfaces
// ---------------
#define WIRE_INTERFACES_COUNT 2
#define PIN_WIRE0_SCL_0 0u // PA_29
#define PIN_WIRE0_SCL_1 3u // PA_22
#define PIN_WIRE0_SDA_0 5u // PA_30
#define PIN_WIRE0_SDA_1 6u // PA_19
#define PIN_WIRE1_SCL 9u // PA_18
#define PIN_WIRE1_SDA 10u // PA_23
// Serial ports
// ------------
#define SERIAL_INTERFACES_COUNT 2
#define PIN_SERIAL0_CTS 6u // PA_19
#define PIN_SERIAL0_RTS 3u // PA_22
#define PIN_SERIAL0_RX 9u // PA_18
#define PIN_SERIAL0_TX 10u // PA_23
#define PIN_SERIAL2_RX 0u // PA_29
#define PIN_SERIAL2_TX 5u // PA_30

19
boards/wr3n.json Normal file
View File

@@ -0,0 +1,19 @@
{
"_base": [
"realtek-ambz",
"realtek-ambz-2mb-large",
"pcb/ic-rtl8710bn",
"pcb/wr3-base",
"pcb/wr3n"
],
"build": {
"mcu": "rtl8710bn",
"variant": "wr3n"
},
"name": "WR3N Wi-Fi Module",
"url": "https://developer.tuya.com/en/docs/iot/wr3n-datasheet?id=K98zdx31ztdge",
"vendor": "Tuya Inc.",
"pcb": {
"symbol": "WR3N"
}
}

64
boards/wr3n/README.md Normal file
View File

@@ -0,0 +1,64 @@
# WR3N Wi-Fi Module
*by Tuya Inc.*
[Product page](https://developer.tuya.com/en/docs/iot/wr3n-datasheet?id=K98zdx31ztdge)
- [General info](../../docs/platform/realtek/README.md)
- [Debugging](../../docs/platform/realtek/debugging.md)
- [Flashing guide](../../docs/platform/realtek-ambz/flashing.md)
- [ImageTool (AmebaZ/AmebaD)](https://images.tuyacn.com/smart/Image_Tool/Image_Tool.zip)
Parameter | Value
-------------|---------------------------------
MCU | RTL8710BN
Manufacturer | Realtek
Series | AmebaZ
Frequency | 125 MHz
Flash size | 2 MiB
RAM size | 256 KiB
Voltage | 3.0V - 3.6V
I/O | 9x GPIO, 5x PWM, 2x UART, 1x ADC
Wi-Fi | 802.11 b/g/n
## Pinout
![Pinout](pinout_wr3n.svg)
## Arduino Core pin mapping
No. | Pin | UART | I²C | SPI | PWM | Other
----|------|----------|----------|----------------------|------|------
D0 | PA29 | UART2_RX | I2C0_SCL | | PWM4 |
D1 | PA14 | | | | PWM0 | SWCLK
D2 | PA15 | | | | PWM1 | SWDIO
D3 | PA00 | | | | PWM2 |
D4 | PA30 | UART2_TX | I2C0_SDA | | PWM4 |
D5 | PA05 | | | | PWM4 |
D6 | PA12 | | | | PWM3 |
D7 | PA18 | UART0_RX | I2C1_SCL | SPI0_SCK, SPI1_SCK | |
D8 | PA23 | UART0_TX | I2C1_SDA | SPI0_MOSI, SPI1_MOSI | PWM0 |
A1 | ADC2 | | | | |
## Flash memory map
Flash size: 2 MiB / 2,097,152 B / 0x200000
Hex values are in bytes.
Name | Start | Length | End
----------------|----------|-------------------|---------
Boot XIP | 0x000000 | 16 KiB / 0x4000 | 0x004000
Boot RAM | 0x004000 | 16 KiB / 0x4000 | 0x008000
(reserved) | 0x008000 | 4 KiB / 0x1000 | 0x009000
System Data | 0x009000 | 4 KiB / 0x1000 | 0x00A000
Calibration | 0x00A000 | 4 KiB / 0x1000 | 0x00B000
OTA1 Image | 0x00B000 | 788 KiB / 0xC5000 | 0x0D0000
OTA2 Image | 0x0D0000 | 788 KiB / 0xC5000 | 0x195000
Key-Value Store | 0x195000 | 24 KiB / 0x6000 | 0x19B000
User Data | 0x19B000 | 400 KiB / 0x64000 | 0x1FF000
RDP | 0x1FF000 | 4 KiB / 0x1000 | 0x200000
RDP is most likely not used in Tuya firmwares, as the System Data partition contains an incorrect offset 0xFF000 for RDP, which is in the middle of OTA2 image.
Additionally, Tuya firmware uses an encrypted KV or file storage, which resides at the end of flash memory. This seems to overlap system RDP area.

241
boards/wr3n/pinout_wr3n.svg Normal file
View File

@@ -0,0 +1,241 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="full" height="500" version="1.1" viewBox="0,0,85.33333333333333,41.666666666666664" width="1024">
<defs/>
<rect fill="white" height="41.666666666666664" stroke="black" stroke-width="0.1" width="85.33333333333333" x="0" y="0"/>
<linearGradient gradientUnits="objectBoundingBox" id="id1" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="#4d4d4d"/>
<stop offset="100%" stop-color="#0f0f0f"/>
</linearGradient>
<rect fill="url(#id1) none" height="23.9" stroke="#b5a739" stroke-width="0.1" width="15.9" x="34.66666666666666" y="8.883333333333333"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin1.trace" width="0.7" x="34.61666666666666" y="16.583333333333332"/>
<circle cx="34.61666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.left.pin1.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin2.trace" width="0.7" x="34.61666666666666" y="18.583333333333332"/>
<circle cx="34.61666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.left.pin2.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin3.trace" width="0.7" x="34.61666666666666" y="20.583333333333332"/>
<circle cx="34.61666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.left.pin3.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin4.trace" width="0.7" x="34.61666666666666" y="22.583333333333332"/>
<circle cx="34.61666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.left.pin4.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin5.trace" width="0.7" x="34.61666666666666" y="24.583333333333332"/>
<circle cx="34.61666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.left.pin5.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin6.trace" width="0.7" x="34.61666666666666" y="26.583333333333332"/>
<circle cx="34.61666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.left.pin6.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin7.trace" width="0.7" x="34.61666666666666" y="28.583333333333332"/>
<circle cx="34.61666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.left.pin7.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.left.pin8.trace" width="0.7" x="34.61666666666666" y="30.583333333333332"/>
<circle cx="34.61666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.left.pin8.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin1.trace" width="0.7" x="49.91666666666666" y="16.583333333333332"/>
<circle cx="50.61666666666666" cy="17.18333333333333" fill="#fff" id="esp12s.front.right.pin1.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin2.trace" width="0.7" x="49.91666666666666" y="18.583333333333332"/>
<circle cx="50.61666666666666" cy="19.18333333333333" fill="#fff" id="esp12s.front.right.pin2.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin3.trace" width="0.7" x="49.91666666666666" y="20.583333333333332"/>
<circle cx="50.61666666666666" cy="21.18333333333333" fill="#fff" id="esp12s.front.right.pin3.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin4.trace" width="0.7" x="49.91666666666666" y="22.583333333333332"/>
<circle cx="50.61666666666666" cy="23.18333333333333" fill="#fff" id="esp12s.front.right.pin4.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin5.trace" width="0.7" x="49.91666666666666" y="24.583333333333332"/>
<circle cx="50.61666666666666" cy="25.183333333333334" fill="#fff" id="esp12s.front.right.pin5.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin6.trace" width="0.7" x="49.91666666666666" y="26.583333333333332"/>
<circle cx="50.61666666666666" cy="27.183333333333334" fill="#fff" id="esp12s.front.right.pin6.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin7.trace" width="0.7" x="49.91666666666666" y="28.583333333333332"/>
<circle cx="50.61666666666666" cy="29.183333333333334" fill="#fff" id="esp12s.front.right.pin7.cast" r="0.35"/>
<rect fill="#e5b472" height="1.2" id="esp12s.front.right.pin8.trace" width="0.7" x="49.91666666666666" y="30.583333333333332"/>
<circle cx="50.61666666666666" cy="31.183333333333334" fill="#fff" id="esp12s.front.right.pin8.cast" r="0.35"/>
<linearGradient gradientUnits="objectBoundingBox" id="id2" x1="1.0" x2="0.0" y1="0.0" y2="1.0">
<stop offset="0%" stop-color="whitesmoke"/>
<stop offset="100%" stop-color="#999"/>
</linearGradient>
<rect fill="url(#id2) none" height="16.8" rx="0.5" ry="0.5" width="13.6" x="35.81666666666666" y="15.783333333333331"/>
<rect fill="#fff" height="0.15" width="15.0" x="35.11666666666666" y="15.033333333333331"/>
<text fill="#fff" font-family="Consolas" font-size="1.0" x="41.61666666666666" y="14.333333333333332">WR3N</text>
<rect fill="#505050" height="5.2" width="0.5" x="35.71666666666666" y="9.633333333333333"/>
<rect fill="#505050" height="0.5" width="4.6" x="35.71666666666666" y="9.633333333333333"/>
<rect fill="#505050" height="5.2" width="0.5" x="37.91666666666666" y="9.633333333333333"/>
<rect fill="#505050" height="3.0" width="0.5" x="39.81666666666666" y="9.633333333333333"/>
<rect fill="#505050" height="0.5" width="3.0" x="39.81666666666666" y="12.133333333333333"/>
<rect fill="#505050" height="3.0" width="0.5" x="42.31666666666666" y="9.633333333333333"/>
<rect fill="#505050" height="0.5" width="2.7" x="42.31666666666666" y="9.633333333333333"/>
<rect fill="#505050" height="3.0" width="0.5" x="44.51666666666666" y="9.633333333333333"/>
<rect fill="#505050" height="0.5" width="3.0" x="44.51666666666666" y="12.133333333333333"/>
<rect fill="#505050" height="3.0" width="0.5" x="47.01666666666666" y="9.633333333333333"/>
<rect fill="#505050" height="0.5" width="2.5" x="47.01666666666666" y="9.633333333333333"/>
<rect fill="#505050" height="4.4" width="0.5" x="49.01666666666666" y="9.633333333333333"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.51666666666666" y="17.08333333333333"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.51666666666666" y="19.08333333333333"/>
<g transform="translate(27.731026020611555,18.38333333333333)">
<rect fill="#8ad039" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.216666666666658" y="19.18333333333333">ADC2</text>
<g transform="translate(24.73102602061156,18.38333333333333)">
<rect fill="#16a352" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="25.91666666666666" y="19.18333333333333">A1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.51666666666666" y="21.08333333333333"/>
<g transform="translate(27.731026020611555,20.38333333333333)">
<rect fill="#ed602e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.216666666666658" y="21.18333333333333">CEN</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.51666666666666" y="23.08333333333333"/>
<g transform="translate(27.731026020611555,22.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.216666666666658" y="23.18333333333333">PA29</text>
<g transform="translate(24.73102602061156,22.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="25.91666666666666" y="23.18333333333333">D0</text>
<g transform="translate(21.131026020611557,22.38333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="22.61666666666666" y="23.18333333333333">RX2</text>
<g transform="translate(17.53102602061156,22.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="19.016666666666662" y="23.18333333333333">SCL0</text>
<g transform="translate(13.93102602061156,22.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="15.41666666666666" y="23.18333333333333">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.51666666666666" y="25.083333333333332"/>
<g transform="translate(27.731026020611555,24.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.216666666666658" y="25.183333333333334">PA14</text>
<g transform="translate(24.73102602061156,24.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="25.91666666666666" y="25.183333333333334">D1</text>
<g transform="translate(21.131026020611557,24.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="22.61666666666666" y="25.183333333333334">PWM0</text>
<g transform="translate(17.53102602061156,24.383333333333333)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="19.016666666666662" y="25.183333333333334">SWCLK</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.51666666666666" y="27.083333333333332"/>
<g transform="translate(27.731026020611555,26.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.216666666666658" y="27.183333333333334">PA15</text>
<g transform="translate(24.73102602061156,26.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="25.91666666666666" y="27.183333333333334">D2</text>
<g transform="translate(21.131026020611557,26.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="22.61666666666666" y="27.183333333333334">PWM1</text>
<g transform="translate(17.53102602061156,26.383333333333333)">
<rect fill="#ffe680" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="19.016666666666662" y="27.183333333333334">SWDIO</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.51666666666666" y="29.083333333333332"/>
<g transform="translate(27.731026020611555,28.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.216666666666658" y="29.183333333333334">PA00</text>
<g transform="translate(24.73102602061156,28.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="25.91666666666666" y="29.183333333333334">D3</text>
<g transform="translate(21.131026020611557,28.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="22.61666666666666" y="29.183333333333334">PWM2</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="31.51666666666666" y="31.083333333333332"/>
<g transform="translate(27.731026020611555,30.383333333333333)">
<rect fill="#cd3c24" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="29.216666666666658" y="31.183333333333334">3V3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="51.11666666666666" y="31.083333333333332"/>
<g transform="translate(54.53102602061156,30.383333333333333)">
<rect fill="#000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="56.016666666666666" y="31.183333333333334">GND</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="51.11666666666666" y="29.083333333333332"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="51.11666666666666" y="27.083333333333332"/>
<g transform="translate(54.53102602061156,26.383333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="56.016666666666666" y="27.183333333333334">PA30</text>
<g transform="translate(58.131026020611564,26.383333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.31666666666666" y="27.183333333333334">D4</text>
<g transform="translate(61.131026020611564,26.383333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.61666666666667" y="27.183333333333334">TX2</text>
<g transform="translate(64.73102602061155,26.383333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="66.21666666666665" y="27.183333333333334">SDA0</text>
<g transform="translate(68.33102602061156,26.383333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="69.81666666666666" y="27.183333333333334">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="51.11666666666666" y="25.083333333333332"/>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="51.11666666666666" y="23.08333333333333"/>
<g transform="translate(54.53102602061156,22.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="56.016666666666666" y="23.18333333333333">PA05</text>
<g transform="translate(58.131026020611564,22.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.31666666666666" y="23.18333333333333">D5</text>
<g transform="translate(61.131026020611564,22.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.61666666666667" y="23.18333333333333">PWM4</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="51.11666666666666" y="21.08333333333333"/>
<g transform="translate(54.53102602061156,20.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="56.016666666666666" y="21.18333333333333">PA12</text>
<g transform="translate(58.131026020611564,20.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.31666666666666" y="21.18333333333333">D6</text>
<g transform="translate(61.131026020611564,20.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.61666666666667" y="21.18333333333333">PWM3</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="51.11666666666666" y="19.08333333333333"/>
<g transform="translate(54.53102602061156,18.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="56.016666666666666" y="19.18333333333333">PA18</text>
<g transform="translate(58.131026020611564,18.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.31666666666666" y="19.18333333333333">D7</text>
<g transform="translate(61.131026020611564,18.38333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.61666666666667" y="19.18333333333333">RX0</text>
<g transform="translate(64.73102602061155,18.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="66.21666666666665" y="19.18333333333333">SCL1</text>
<rect fill="#4e4c4c" height="0.2" width="2.6" x="51.11666666666666" y="17.08333333333333"/>
<g transform="translate(54.53102602061156,16.38333333333333)">
<rect fill="#800000" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="56.016666666666666" y="17.18333333333333">PA23</text>
<g transform="translate(58.131026020611564,16.38333333333333)">
<rect fill="#99188d" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="2.8" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="white" font-family="Consolas" font-size="1.2" text-anchor="middle" x="59.31666666666666" y="17.18333333333333">D8</text>
<g transform="translate(61.131026020611564,16.38333333333333)">
<rect fill="#dcd4ee" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="62.61666666666667" y="17.18333333333333">TX0</text>
<g transform="translate(64.73102602061155,16.38333333333333)">
<rect fill="#f95" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="66.21666666666665" y="17.18333333333333">SDA1</text>
<g transform="translate(68.33102602061156,16.38333333333333)">
<rect fill="#afa35e" height="1.6" rx="0.3" ry="0.3" transform="skewX(-15)" width="3.4" x="0" y="0"/>
</g>
<text dominant-baseline="central" fill="#423F42" font-family="Consolas" font-size="1.2" text-anchor="middle" x="69.81666666666666" y="17.18333333333333">PWM0</text>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1 @@
#include "variant.h"

32
boards/wr3n/variant.cpp Normal file
View File

@@ -0,0 +1,32 @@
/* This file was auto-generated from wr3n.json using boardgen */
#include <Arduino.h>
extern "C" {
// clang-format off
PinInfo pinTable[PINS_COUNT] = {
// D0: PA29, UART2_RX, I2C0_SCL, PWM4
{PA_29, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_UART, PIN_NONE, 0},
// D1: PA14, PWM0, SWCLK
{PA_14, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D2: PA15, PWM1, SWDIO
{PA_15, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0},
// D3: PA00, PWM2
{PA_0, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D4: PA30, UART2_TX, I2C0_SDA, PWM4
{PA_30, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_UART, PIN_NONE, 0},
// D5: PA05, PWM4, WAKE1
{PA_5, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D6: PA12, PWM3
{PA_12, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0},
// D7: PA18, UART0_RX, SPI0_SCK, SPI1_SCK, I2C1_SCL, SD_D2, TMR4_TRIG, I2S0_MCK, WAKE0
{PA_18, PIN_GPIO | PIN_IRQ | PIN_I2C | PIN_I2S | PIN_SPI | PIN_UART, PIN_NONE, 0},
// D8: PA23, UART0_TX, SPI0_MOSI, SPI1_MOSI, I2C1_SDA, SD_D1, PWM0, WAKE3
{PA_23, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_SPI | PIN_UART, PIN_NONE, 0},
// A1: ADC2
{AD_2, PIN_ADC, PIN_NONE, 0},
};
// clang-format on
} // extern "C"

39
boards/wr3n/variant.h Normal file
View File

@@ -0,0 +1,39 @@
/* This file was auto-generated from wr3n.json using boardgen */
#pragma once
#include <WVariant.h>
// clang-format off
// Pins
// ----
#define PINS_COUNT 10
#define NUM_ANALOG_INPUTS 1
#define NUM_DIGITAL_PINS 9
#define NUM_ANALOG_OUTPUTS 0
// Analog pins
// -----------
#define PIN_A1 9u // AD_2
#define A1 PIN_A1
// SPI Interfaces
// --------------
#define SPI_INTERFACES_COUNT 0
// Wire Interfaces
// ---------------
#define WIRE_INTERFACES_COUNT 2
#define PIN_WIRE0_SCL 0u // PA_29
#define PIN_WIRE0_SDA 4u // PA_30
#define PIN_WIRE1_SCL 7u // PA_18
#define PIN_WIRE1_SDA 8u // PA_23
// Serial ports
// ------------
#define SERIAL_INTERFACES_COUNT 2
#define PIN_SERIAL0_RX 7u // PA_18
#define PIN_SERIAL0_TX 8u // PA_23
#define PIN_SERIAL2_RX 0u // PA_29
#define PIN_SERIAL2_TX 4u // PA_30

View File

@@ -7,6 +7,14 @@ Name | MCU | Flash | RAM | Pin
**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`
[WR2](../boards/wr2/README.md) | RTL8710BN | 2 MiB | 256 KiB | 11 (8 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz`
[WR2E](../boards/wr2e/README.md) | RTL8710BN | 2 MiB | 256 KiB | 11 (8 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz`
[WR3](../boards/wr3/README.md) | RTL8710BN | 2 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz`
[WR3E](../boards/wr3e/README.md) | RTL8710BN | 2 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz`
[WR3N](../boards/wr3n/README.md) | RTL8710BN | 2 MiB | 256 KiB | 16 (10 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz`
[WR2L](../boards/wr2l/README.md) | RTL8710BX | 2 MiB | 256 KiB | 7 (5 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz`
[WR2LE](../boards/wr2le/README.md) | RTL8710BX | 2 MiB | 256 KiB | 7 (5 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz`
[WR3L](../boards/wr3l/README.md) | RTL8710BX | 2 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz`
[WR3LE](../boards/wr3le/README.md) | RTL8710BX | 2 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz`
**N/A** | | | | | | | |
[Native](../boards/generic-native/README.md) | NATIVE | 4 MiB | 4 MiB | - | ✔️ | ❌ | ❌ | `host-native`

View File

@@ -42,18 +42,10 @@ WBR3T | RTL8720DN | 4 MiB | 512 KiB | 16 | ✔️ | ✔️ | ❌
**WR Series** | | | | | | |
WR1 | RTL8710BN | 1 MiB | 256 KiB | 18 | ✔️ | ❌ | ❌
WR1E | RTL8710BN | 2 MiB | 256 KiB | 18 | ✔️ | ❌ | ❌
WR2 | RTL8710BN | 2 MiB | 256 KiB | 11 | ✔️ | ❌ | ❌
WR2E | RTL8710BN | 2 MiB | 256 KiB | 11 | ✔️ | ❌ | ❌
WR3E | RTL8710BN | 2 MiB | 256 KiB | 16 | ✔️ | ❌ | ❌
WR3N | RTL8710BN | 2 MiB | 256 KiB | 16 | ✔️ | ❌ | ❌
WR4 | RTL8710BN | 1 MiB | 256 KiB | 16 | ✔️ | ❌ | ❌
WR5E | RTL8710BN | 2 MiB | 256 KiB | 15 | ✔️ | ❌ | ❌
WR6 | RTL8710BN | 2 MiB | 256 KiB | 14 | ✔️ | ❌ | ❌
WR6-H | RTL8710BN | 2 MiB | 256 KiB | 14 | ✔️ | ❌ | ❌
WR2L | RTL8710BX | 2 MiB | 256 KiB | 7 | ✔️ | ❌ | ❌
WR2LE | RTL8710BX | 2 MiB | 256 KiB | 7 | ✔️ | ❌ | ❌
WR3L | RTL8710BX | 2 MiB | 256 KiB | 18 | ✔️ | ❌ | ❌
WR3LE | RTL8710BX | 2 MiB | 256 KiB | 18 | ✔️ | ❌ | ❌
WRG1 | RTL8711AM | 4 MiB | 2 MiB | 25 | ✔️ | ❌ | ❌
**XR Series** | | | | | | |
XR1 | XR809 | 2 MiB | 384 KiB | 18 | ✔️ | ❌ | ❌

View File

@@ -116,6 +116,15 @@ def board_sort(tpl):
)
def get_board_symbol(board_name: str, board: dict) -> str:
symbol = get(board, "symbol")
if not symbol and board_name.startswith("generic-"):
symbol = board_name[8:]
else:
symbol = symbol or board_name.upper()
return symbol
def write_chips(mcus: List[str]):
md = Markdown(dirname(__file__), "supported_chips")
md.add_list(*mcus)
@@ -154,11 +163,7 @@ def write_boards(boards: List[Tuple[str, dict]]):
pins_io = sum(1 for pin in pinout if "ARD" in pin)
pins = f"{pins_total} ({pins_io} I/O)"
# format row values
symbol = get(board, "symbol")
if not symbol and board_name.startswith("generic-"):
symbol = board_name[8:]
else:
symbol = symbol or board_name.upper()
symbol = get_board_symbol(board_name, board)
board_url = f"[{symbol}](../boards/{board_name}/README.md)"
row = [
board_url,
@@ -271,8 +276,10 @@ def write_boards_list(boards: List[Tuple[str, dict]]):
md = Markdown(dirname(__file__), join("..", "boards", "SUMMARY"))
items = []
for board_name, board in boards:
title = get(board, "name")
items.append(f"[{title}](../boards/{board_name}/README.md)")
symbol = get_board_symbol(board_name, board)
if board_name.startswith("generic-"):
symbol = get(board, "name")
items.append(f"[{symbol}](../boards/{board_name}/README.md)")
md.add_list(*items)
md.write()

Submodule tools/boardgen updated: c41912a643...cff42b3da8