From 50fea2a8f042db8f22435bef74c23d600548af2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Fri, 23 Sep 2022 12:25:30 +0200 Subject: [PATCH] [boards] Add RTL8710BX board with 4 MiB flash --- boards/SUMMARY.md | 1 + boards/_base/realtek-ambz-4mb-980k.json | 18 ++ boards/generic-rtl8710bx-4mb-980k.json | 100 ++++++++ boards/generic-rtl8710bx-4mb-980k/README.md | 90 +++++++ .../generic-rtl8710bx-4mb-980k/pins_arduino.h | 1 + boards/generic-rtl8710bx-4mb-980k/variant.cpp | 46 ++++ boards/generic-rtl8710bx-4mb-980k/variant.h | 51 ++++ docs/resources.md | 2 +- docs/status/supported_boards.md | 1 + platform/realtek-ambz/bin/boot_all_10C7.bin | Bin 0 -> 4120 bytes platform/realtek-ambz/bin/boot_all_C556.bin | Bin 0 -> 4356 bytes ...x8711B-symbol-v02-img2_xip1_4M_980k_cpp.ld | 222 ++++++++++++++++++ ...x8711B-symbol-v02-img2_xip2_4M_980k_cpp.ld | 222 ++++++++++++++++++ 13 files changed, 753 insertions(+), 1 deletion(-) create mode 100644 boards/_base/realtek-ambz-4mb-980k.json create mode 100644 boards/generic-rtl8710bx-4mb-980k.json create mode 100644 boards/generic-rtl8710bx-4mb-980k/README.md create mode 100644 boards/generic-rtl8710bx-4mb-980k/pins_arduino.h create mode 100644 boards/generic-rtl8710bx-4mb-980k/variant.cpp create mode 100644 boards/generic-rtl8710bx-4mb-980k/variant.h create mode 100644 platform/realtek-ambz/bin/boot_all_10C7.bin create mode 100644 platform/realtek-ambz/bin/boot_all_C556.bin create mode 100644 platform/realtek-ambz/ld/rlx8711B-symbol-v02-img2_xip1_4M_980k_cpp.ld create mode 100644 platform/realtek-ambz/ld/rlx8711B-symbol-v02-img2_xip2_4M_980k_cpp.ld diff --git a/boards/SUMMARY.md b/boards/SUMMARY.md index 46d9ed1..19a8dec 100644 --- a/boards/SUMMARY.md +++ b/boards/SUMMARY.md @@ -4,6 +4,7 @@ - [Generic - BK7231T (Tuya QFN32)](../boards/generic-bk7231t-qfn32-tuya/README.md) - [Generic - RTL8710BN (2M/468k)](../boards/generic-rtl8710bn-2mb-468k/README.md) - [Generic - RTL8710BN (2M/788k)](../boards/generic-rtl8710bn-2mb-788k/README.md) +- [Generic - RTL8710BX (4M/980k)](../boards/generic-rtl8710bx-4mb-980k/README.md) - [Generic - RTL8720CF (2M/992k)](../boards/generic-rtl8720cf-2mb-992k/README.md) - [BW12](../boards/bw12/README.md) - [BW15](../boards/bw15/README.md) diff --git a/boards/_base/realtek-ambz-4mb-980k.json b/boards/_base/realtek-ambz-4mb-980k.json new file mode 100644 index 0000000..2471026 --- /dev/null +++ b/boards/_base/realtek-ambz-4mb-980k.json @@ -0,0 +1,18 @@ +{ + "build": { + "ldscript_sdk": "rlx8711B-symbol-v02-img2_xip1_4M_cpp.ld", + "ldscript_arduino": "rlx8711B-symbol-v02-img2_xip1_4M_cpp.ld", + "amb_boot_all": "boot_all_C556.bin" + }, + "flash": { + "ota1": "0x00B000+0xF5000", + "ota2": "0x100000+0xF5000", + "kvs": "0x1F5000+0x8000", + "userdata": "0x1FD000+0x202000", + "rdp": "0x3FF000+0x1000" + }, + "upload": { + "flash_size": 4194304, + "maximum_size": 1003520 + } +} diff --git a/boards/generic-rtl8710bx-4mb-980k.json b/boards/generic-rtl8710bx-4mb-980k.json new file mode 100644 index 0000000..ca5ea22 --- /dev/null +++ b/boards/generic-rtl8710bx-4mb-980k.json @@ -0,0 +1,100 @@ +{ + "_base": [ + "generic", + "realtek-ambz", + "realtek-ambz-4mb-980k", + "realtek-ambz-bx", + "pcb/ic-rtl8710bn" + ], + "build": { + "mcu": "rtl8710bx", + "variant": "generic-rtl8710bx-4mb-980k" + }, + "name": "Generic - RTL8710BX (4M/980k)", + "symbol": "RTL8710BX (4M/980k)", + "url": "https://kuba2k2.github.io/libretuya/boards/generic-rtl8710bx-4mb-980k/", + "vendor": "Generic", + "doc": { + "extra": [ + "## Information", + "This is a generic board definition for RTL8710BX with 4 MiB of flash. It has a bigger application partition size (980 KiB). The used bootloader is also different from the standard Tuya one.", + "It can be found in [Ezviz T31 smart plug](https://www.ezviz.com/product/T31/2021) - bare chip soldered onto the manufacturer-made PCB. The plug is not Tuya/SmartLife-compatible and has a 25Q32CSIG flash chip. Refer to [libretuya#23](https://github.com/kuba2k2/libretuya/issues/23) for photos and more information.", + "Note that stock firmware seems to use smaller app images (0x80000 / 512 KiB). After 0x180000 some product-test data and device logs can be found. Because the OTA2 offset is 0x100000, the board definition was configured to use all available space." + ] + }, + "pcb": { + "pinout": { + "1": { + "IC": 16, + "ARD": "D0" + }, + "2": { + "IC": 28, + "ARD": "D1" + }, + "3": { + "IC": 18, + "ARD": "D2" + }, + "4": { + "IC": 19, + "ARD": "D3" + }, + "5": { + "IC": 20, + "ARD": "D4" + }, + "6": { + "IC": 21, + "ARD": "D5" + }, + "7": { + "IC": 22, + "ARD": "D6" + }, + "8": { + "IC": 23, + "ARD": "D7" + }, + "9": { + "IC": 17, + "ARD": "D8" + }, + "10": { + "IC": 13, + "ARD": "D9" + }, + "11": { + "IC": 14, + "ARD": "D10" + }, + "12": { + "IC": 29, + "ARD": "D11" + }, + "13": { + "IC": 30, + "ARD": [ + "D12", + "A0" + ] + }, + "14": { + "IC": 31, + "ARD": "D13" + }, + "15": { + "IC": 32, + "ARD": "D14" + }, + "16": { + "IC": 2, + "ARD": "D15" + }, + "17": { + "IC": 1, + "ARD": "D16" + } + } + } +} diff --git a/boards/generic-rtl8710bx-4mb-980k/README.md b/boards/generic-rtl8710bx-4mb-980k/README.md new file mode 100644 index 0000000..7c77fcd --- /dev/null +++ b/boards/generic-rtl8710bx-4mb-980k/README.md @@ -0,0 +1,90 @@ +# Generic - RTL8710BX (4M/980k) + +*by Generic* + +[Product page](https://kuba2k2.github.io/libretuya/boards/generic-rtl8710bx-4mb-980k/) + +- [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 +-------------|---------------------------------- +Board code | `generic-rtl8710bx-4mb-980k` +MCU | RTL8710BX +Manufacturer | Realtek +Series | AmebaZ +Frequency | 62.5 MHz +Flash size | 4 MiB +RAM size | 256 KiB +Voltage | 3.0V - 3.6V +I/O | 17x GPIO, 6x PWM, 2x UART, 1x ADC +Wi-Fi | 802.11 b/g/n + +## Usage + +**Board code:** `generic-rtl8710bx-4mb-980k` + +In `platformio.ini`: + +```ini +[env:generic-rtl8710bx-4mb-980k] +platform = libretuya +board = generic-rtl8710bx-4mb-980k +framework = arduino +``` + +## Arduino Core pin mapping + +No. | Pin | UART | I²C | SPI | PWM | Other +----|------------|-----------|----------|----------------------|------|------ +D0 | PA00 | | | | PWM2 | +D1 | PA05 | | | | PWM4 | +D2 | PA06 | | | FCS | | +D3 | PA07 | | | FD1 | | +D4 | PA08 | | | FD2 | | +D5 | PA09 | | | FD0 | | +D6 | PA10 | | | FSCK | | +D7 | PA11 | | | FD3 | | +D8 | PA12 | | | | PWM3 | +D9 | PA14 | | | | PWM0 | SWCLK +D10 | PA15 | | | | PWM1 | SWDIO +D11 | PA18 | UART0_RX | I2C1_SCL | SPI0_SCK, SPI1_SCK | | +D12 | PA19 | UART0_CTS | I2C0_SDA | SPI0_CS, SPI1_CS | | +D13 | PA22 | UART0_RTS | I2C0_SCL | SPI0_MISO, SPI1_MISO | PWM5 | +D14 | PA23 | UART0_TX | I2C1_SDA | SPI0_MOSI, SPI1_MOSI | PWM0 | +D15 | PA29 | UART2_RX | I2C0_SCL | | PWM4 | +D16 | PA30 | UART2_TX | I2C0_SDA | | PWM4 | +A0 | PA19, ADC1 | | | | | + +## Flash memory map + +Flash size: 4 MiB / 4,194,304 B / 0x400000 + +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 | 980 KiB / 0xF5000 | 0x100000 +OTA2 Image | 0x100000 | 980 KiB / 0xF5000 | 0x1F5000 +Key-Value Store | 0x1F5000 | 32 KiB / 0x8000 | 0x1FD000 +User Data | 0x1FD000 | 2 MiB / 0x202000 | 0x3FF000 +RDP | 0x3FF000 | 4 KiB / 0x1000 | 0x400000 + +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. + +## Information + +This is a generic board definition for RTL8710BX with 4 MiB of flash. It has a bigger application partition size (980 KiB). The used bootloader is also different from the standard Tuya one. + +It can be found in [Ezviz T31 smart plug](https://www.ezviz.com/product/T31/2021) - bare chip soldered onto the manufacturer-made PCB. The plug is not Tuya/SmartLife-compatible and has a 25Q32CSIG flash chip. Refer to [libretuya#23](https://github.com/kuba2k2/libretuya/issues/23) for photos and more information. + +Note that stock firmware seems to use smaller app images (0x80000 / 512 KiB). After 0x180000 some product-test data and device logs can be found. Because the OTA2 offset is 0x100000, the board definition was configured to use all available space. diff --git a/boards/generic-rtl8710bx-4mb-980k/pins_arduino.h b/boards/generic-rtl8710bx-4mb-980k/pins_arduino.h new file mode 100644 index 0000000..1de3ade --- /dev/null +++ b/boards/generic-rtl8710bx-4mb-980k/pins_arduino.h @@ -0,0 +1 @@ +#include "variant.h" diff --git a/boards/generic-rtl8710bx-4mb-980k/variant.cpp b/boards/generic-rtl8710bx-4mb-980k/variant.cpp new file mode 100644 index 0000000..dc55d0a --- /dev/null +++ b/boards/generic-rtl8710bx-4mb-980k/variant.cpp @@ -0,0 +1,46 @@ +/* This file was auto-generated from generic-rtl8710bx-4mb-980k.json using boardgen */ + +#include + +extern "C" { + +// clang-format off +PinInfo pinTable[PINS_COUNT] = { + // D0: PA00, PWM2 + {PA_0, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0}, + // D1: PA05, PWM4, WAKE1 + {PA_5, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0}, + // D2: PA06, FCS, SD_D2 + {PA_6, PIN_GPIO | PIN_IRQ | PIN_SPI, PIN_NONE, 0}, + // D3: PA07, FD1, SD_D3 + {PA_7, PIN_GPIO | PIN_IRQ | PIN_SPI, PIN_NONE, 0}, + // D4: PA08, FD2, SD_CMD + {PA_8, PIN_GPIO | PIN_IRQ | PIN_SPI, PIN_NONE, 0}, + // D5: PA09, FD0, SD_CLK + {PA_9, PIN_GPIO | PIN_IRQ | PIN_SPI, PIN_NONE, 0}, + // D6: PA10, FSCK, SD_D0 + {PA_10, PIN_GPIO | PIN_IRQ | PIN_SPI, PIN_NONE, 0}, + // D7: PA11, FD3, SD_D1 + {PA_11, PIN_GPIO | PIN_IRQ | PIN_SPI, PIN_NONE, 0}, + // D8: PA12, PWM3 + {PA_12, PIN_GPIO | PIN_IRQ | PIN_PWM, PIN_NONE, 0}, + // D9: PA14, PWM0, SWCLK + {PA_14, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0}, + // D10: PA15, PWM1, SWDIO + {PA_15, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_SWD, PIN_NONE, 0}, + // D11: 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}, + // D12: 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}, + // D13: 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}, + // D14: 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}, + // D15: PA29, UART2_RX, I2C0_SCL, PWM4 + {PA_29, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_UART, PIN_NONE, 0}, + // D16: PA30, UART2_TX, I2C0_SDA, PWM4 + {PA_30, PIN_GPIO | PIN_IRQ | PIN_PWM | PIN_I2C | PIN_UART, PIN_NONE, 0}, +}; +// clang-format on + +} // extern "C" diff --git a/boards/generic-rtl8710bx-4mb-980k/variant.h b/boards/generic-rtl8710bx-4mb-980k/variant.h new file mode 100644 index 0000000..5690c76 --- /dev/null +++ b/boards/generic-rtl8710bx-4mb-980k/variant.h @@ -0,0 +1,51 @@ +/* This file was auto-generated from generic-rtl8710bx-4mb-980k.json using boardgen */ + +#pragma once + +#include + +// clang-format off + +// Pins +// ---- +#define PINS_COUNT 17 +#define NUM_DIGITAL_PINS 17 +#define NUM_ANALOG_INPUTS 1 +#define NUM_ANALOG_OUTPUTS 0 + +// Analog pins +// ----------- +#define PIN_A0 12u // PA_19 +#define A0 PIN_A0 + +// SPI Interfaces +// -------------- +#define SPI_INTERFACES_COUNT 2 +#define PIN_SPI0_CS 12u // PA_19 +#define PIN_SPI0_MISO 13u // PA_22 +#define PIN_SPI0_MOSI 14u // PA_23 +#define PIN_SPI0_SCK 11u // PA_18 +#define PIN_SPI1_CS 12u // PA_19 +#define PIN_SPI1_MISO 13u // PA_22 +#define PIN_SPI1_MOSI 14u // PA_23 +#define PIN_SPI1_SCK 11u // PA_18 + +// Wire Interfaces +// --------------- +#define WIRE_INTERFACES_COUNT 2 +#define PIN_WIRE0_SCL_0 13u // PA_22 +#define PIN_WIRE0_SCL_1 15u // PA_29 +#define PIN_WIRE0_SDA_0 12u // PA_19 +#define PIN_WIRE0_SDA_1 16u // PA_30 +#define PIN_WIRE1_SCL 11u // PA_18 +#define PIN_WIRE1_SDA 14u // PA_23 + +// Serial ports +// ------------ +#define SERIAL_INTERFACES_COUNT 2 +#define PIN_SERIAL0_CTS 12u // PA_19 +#define PIN_SERIAL0_RTS 13u // PA_22 +#define PIN_SERIAL0_RX 11u // PA_18 +#define PIN_SERIAL0_TX 14u // PA_23 +#define PIN_SERIAL2_RX 15u // PA_29 +#define PIN_SERIAL2_TX 16u // PA_30 diff --git a/docs/resources.md b/docs/resources.md index 1306f4e..c882f17 100644 --- a/docs/resources.md +++ b/docs/resources.md @@ -51,7 +51,7 @@ UM0201 | [Ameba Common BT Application User Manual EN](https://raw.githubusercont AN0400 | [Ameba-D Application Note_v3_watermark](https://files.seeedstudio.com/products/102110419/Basic%20documents/AN0400%20Ameba-D%20Application%20Note_v3_watermark.pdf) AN0500 | [Realtek Ameba-ZII application note](https://www.e-paper-display.com/99IOT/00015797-AN0500-Realtek-Ameba-ZII-application-note.en_233850.pdf)   | [Realtek Ameba-ZII datasheet v0.8](https://www.e-paper-display.com/Ameba-Z_II_DataSheet_v0r8_RTL8720Cx_20190424%29.pdf) -UM0114 | [Realtek Ameba-Z datasheet v3.4](https://adelectronicsru.files.wordpress.com/2018/10/um0114-realtek-ameba-z-data-sheet-v3-4.pdf) +UM0114 | [Realtek Ameba-Z datasheet v3.4](https://web.archive.org/web/20211203124711if_/https://adelectronicsru.files.wordpress.com/2018/10/um0114-realtek-ameba-z-data-sheet-v3-4.pdf)   | [Product pages / realtek.com](https://www.realtek.com/en/products/communications-network-ics/category/802-11b-g-n) ## Beken Flash Chip List diff --git a/docs/status/supported_boards.md b/docs/status/supported_boards.md index 92b39cc..fbfcbab 100644 --- a/docs/status/supported_boards.md +++ b/docs/status/supported_boards.md @@ -7,6 +7,7 @@ Name | MCU [BK7231T (Tuya QFN32)](../../boards/generic-bk7231t-qfn32-tuya/README.md) | BK7231T | 2 MiB | 256 KiB | 19 (19 I/O) | ✔️ | ✔️ | ❌ | `beken-7231t` [RTL8710BN (2M/468k)](../../boards/generic-rtl8710bn-2mb-468k/README.md) | RTL8710BN | 2 MiB | 256 KiB | 18 (18 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz` [RTL8710BN (2M/788k)](../../boards/generic-rtl8710bn-2mb-788k/README.md) | RTL8710BN | 2 MiB | 256 KiB | 18 (18 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz` +[RTL8710BX (4M/980k)](../../boards/generic-rtl8710bx-4mb-980k/README.md) | RTL8710BX | 4 MiB | 256 KiB | 17 (17 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz` [RTL8720CF (2M/992k)](../../boards/generic-rtl8720cf-2mb-992k/README.md) | RTL8720CF | 2 MiB | 256 KiB | 20 (20 I/O) | ✔️ | ✔️ | ❌ | `realtek-ambz2` **Ai-Thinker Co., Ltd.** | | | | | | | | [BW12](../../boards/bw12/README.md) | RTL8710BX | 2 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ❌ | ❌ | `realtek-ambz` diff --git a/platform/realtek-ambz/bin/boot_all_10C7.bin b/platform/realtek-ambz/bin/boot_all_10C7.bin new file mode 100644 index 0000000000000000000000000000000000000000..db3b9b20a066aae2a4a82802b4728cce7c760528 GIT binary patch literal 4120 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 B7=Qo( literal 0 HcmV?d00001 diff --git a/platform/realtek-ambz/bin/boot_all_C556.bin b/platform/realtek-ambz/bin/boot_all_C556.bin new file mode 100644 index 0000000000000000000000000000000000000000..e9c829c54281d04a24d7e285055e007e3ca279f6 GIT binary patch literal 4356 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 TuqdE)qsI)rH&LXuo7ev@o?mm1 literal 0 HcmV?d00001 diff --git a/platform/realtek-ambz/ld/rlx8711B-symbol-v02-img2_xip1_4M_980k_cpp.ld b/platform/realtek-ambz/ld/rlx8711B-symbol-v02-img2_xip1_4M_980k_cpp.ld new file mode 100644 index 0000000..9028410 --- /dev/null +++ b/platform/realtek-ambz/ld/rlx8711B-symbol-v02-img2_xip1_4M_980k_cpp.ld @@ -0,0 +1,222 @@ + + +ENTRY(Reset_Handler) + +INCLUDE "export-rom_symbol_v01.txt" + +GROUP ( + libgcc.a + libc.a + libg.a + libm.a + libnosys.a +) + +MEMORY +{ + ROM (rx) : ORIGIN = 0x00000000, LENGTH = 0x80000 /* ROM: 512k */ + ROMBSS_RAM (rw) : ORIGIN = 0x10000000, LENGTH = 0x2000 /* ROM BSS RAM: 8K */ + BOOTLOADER_RAM (rwx) : ORIGIN = 0x10002000, LENGTH = 0x3000 /* BOOT Loader RAM: 12K */ + BD_RAM (rwx) : ORIGIN = 0x10005000, LENGTH = 0x38000 /* MAIN RAM: 224k */ + ROM_BSS_RAM (rwx) : ORIGIN = 0x1003D000, LENGTH = 0x1000 /* ROM BSS RAM: 4K */ + MSP_RAM (wx) : ORIGIN = 0x1003E000, LENGTH = 0x1000 /* MSP RAM: 4k */ + RDP_RAM (wx) : ORIGIN = 0x1003F000, LENGTH = 0xFF0 /* RDP RAM: 4k-0x10 */ + + XIPBOOT (rx) : ORIGIN = 0x08000000+0x20, LENGTH = 0x04000-0x20 /* XIPBOOT: 16k, 32 Bytes resvd for header*/ + XIPSYS (r) : ORIGIN = 0x08009000, LENGTH = 0x1000 /* XIPSYS: 4K system data in flash */ + XIPCAL (r) : ORIGIN = 0x0800A000, LENGTH = 0x1000 /* XIPCAL: 4K calibration data in flash */ + XIP1 (rx) : ORIGIN = 0x0800B000+0x20, LENGTH = 0xF5000-0x20 /* XIP1: 980k, 32 Bytes resvd for header */ + XIP2 (rx) : ORIGIN = 0x08100000+0x20, LENGTH = 0xF5000-0x20 /* XIP2: 980k, 32 Bytes resvd for header */ +} + + + +SECTIONS +{ + .rom.text : { } > ROM + .rom.rodata : { } > ROM + .ARM.exidx : + { + __exidx_start = .; + *(.ARM.exidx*) + *(.gnu.linkonce.armexidx.*) + __exidx_end = .; + } > ROM + .hal.rom.bss : { } > ROMBSS_RAM + + /* image1 entry, this section should in RAM and fixed address for ROM */ + .ram_image1.entry : + { + __ram_image1_text_start__ = .; + __ram_start_table_start__ = .; + KEEP(*(SORT(.image1.entry.data*))) + __ram_start_table_end__ = .; + + __image1_validate_code__ = .; + KEEP(*(.image1.validate.rodata*)) + KEEP(*(.image1.export.symb*)) + } > BOOTLOADER_RAM + + /* Add . to assign the start address of the section */ + /* to prevent the change of the start address by ld doing section alignment */ + .ram_image1.text . : + { + /* image1 text */ + *(.boot.ram.text*) + *(.boot.rodata*) + } > BOOTLOADER_RAM + + .ram_image1.data . : + { + __ram_image1_data_start__ = .; + KEEP(*(.boot.ram.data*)) + __ram_image1_data_end__ = .; + + __ram_image1_text_end__ = .; + } > BOOTLOADER_RAM + + .ram_image1.bss . : + { + __image1_bss_start__ = .; + KEEP(*(.boot.ram.bss*)) + KEEP(*(.boot.ram.end.bss*)) + __image1_bss_end__ = .; + } > BOOTLOADER_RAM + + .ram_image2.entry : + { + __ram_image2_text_start__ = .; + __image2_entry_func__ = .; + KEEP(*(SORT(.image2.entry.data*))) + + __image2_validate_code__ = .; + KEEP(*(.image2.validate.rodata*)) + + } > BD_RAM + + .ram_image2.text : + { + KEEP(*(.image2.ram.text*)) + } > BD_RAM + + .ram_image2.data : + { + __data_start__ = .; + *(.data*) + __data_end__ = .; + __ram_image2_text_end__ = .; + . = ALIGN(16); + } > BD_RAM + + .ram_image2.bss : + { + __bss_start__ = .; + *(.bss*) + *(COMMON) + } > BD_RAM + + .ram_image2.skb.bss : + { + *(.bdsram.data*) + __bss_end__ = .; + } > BD_RAM + + .ram_heap.data : + { + *(.bfsram.data*) + } > BD_RAM + + . = ALIGN(8); + PROVIDE(heap_start = .); + PROVIDE(heap_end = 0x1003CFFF); + PROVIDE(heap_len = heap_end - heap_start); + + .rom.bss : + { + *(.heap.stdlib*) + } > ROM_BSS_RAM + + .ram_rdp.text : + { + __rom_top_4k_start_ = .; + __rdp_text_start__ = .; + KEEP(*(.rdp.ram.text*)) + KEEP(*(.rdp.ram.data*)) + __rdp_text_end__ = .; + . = ALIGN(16); + + } > RDP_RAM + + .xip_image1.text : + { + __flash_boot_text_start__ = .; + + *(.flashboot.text*) + + __flash_boot_text_end__ = .; + + . = ALIGN(16); + } > XIPBOOT + + .xip_image2.text : + { + __flash_text_start__ = .; + + *(.img2_custom_signature*) + *(.text) + *(.text*) + *(.rodata) + *(.rodata*) + *(.debug_trace*) + + /* https://www.embedded.com/building-bare-metal-arm-systems-with-gnu-part-3/ */ + KEEP(*crtbegin.o(.ctors)) + KEEP(*(EXCLUDE_FILE (*ctrend.o) .ctors)) + KEEP(*(SORT(.ctors.*))) + KEEP(*crtend.o(.ctors)) + KEEP(*crtbegin.o(.dtors)) + KEEP(*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP(*(SORT(.dtors.*))) + KEEP(*crtend.o(.dtors)) + *(.rodata .rodata.* .gnu.linkonce.r.*) + + /* Add This for C++ support */ + /* ambd_arduino/Arduino_package/hardware/variants/rtl8720dn_bw16/linker_scripts/gcc/rlx8721d_img2_is_arduino.ld */ + . = ALIGN(4); + __preinit_array_start = .; + KEEP(*(.preinit_array)) + __preinit_array_end = .; + . = ALIGN(4); + __init_array_start = .; + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + __init_array_end = .; + . = ALIGN(4); + __fini_array_start = .; + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + __fini_array_end = .; + /*-----------------*/ + + . = ALIGN (4); + __cmd_table_start__ = .; + KEEP(*(.cmd.table.data*)) + __cmd_table_end__ = .; + + /* https://community.silabs.com/s/article/understand-the-gnu-linker-script-of-cortex-m4?language=en_US */ + KEEP(*(.init)) + KEEP(*(.fini)) + *(.init) + *(.fini) + + __flash_text_end__ = .; + + . = ALIGN (16); + } > XIP1 +} + +SECTIONS +{ + /* Bootloader symbol list */ + boot_export_symbol = 0x10002020; +} diff --git a/platform/realtek-ambz/ld/rlx8711B-symbol-v02-img2_xip2_4M_980k_cpp.ld b/platform/realtek-ambz/ld/rlx8711B-symbol-v02-img2_xip2_4M_980k_cpp.ld new file mode 100644 index 0000000..e8b78a4 --- /dev/null +++ b/platform/realtek-ambz/ld/rlx8711B-symbol-v02-img2_xip2_4M_980k_cpp.ld @@ -0,0 +1,222 @@ + + +ENTRY(Reset_Handler) + +INCLUDE "export-rom_symbol_v01.txt" + +GROUP ( + libgcc.a + libc.a + libg.a + libm.a + libnosys.a +) + +MEMORY +{ + ROM (rx) : ORIGIN = 0x00000000, LENGTH = 0x80000 /* ROM: 512k */ + ROMBSS_RAM (rw) : ORIGIN = 0x10000000, LENGTH = 0x2000 /* ROM BSS RAM: 8K */ + BOOTLOADER_RAM (rwx) : ORIGIN = 0x10002000, LENGTH = 0x3000 /* BOOT Loader RAM: 12K */ + BD_RAM (rwx) : ORIGIN = 0x10005000, LENGTH = 0x38000 /* MAIN RAM: 224k */ + ROM_BSS_RAM (rwx) : ORIGIN = 0x1003D000, LENGTH = 0x1000 /* ROM BSS RAM: 4K */ + MSP_RAM (wx) : ORIGIN = 0x1003E000, LENGTH = 0x1000 /* MSP RAM: 4k */ + RDP_RAM (wx) : ORIGIN = 0x1003F000, LENGTH = 0xFF0 /* RDP RAM: 4k-0x10 */ + + XIPBOOT (rx) : ORIGIN = 0x08000000+0x20, LENGTH = 0x04000-0x20 /* XIPBOOT: 16k, 32 Bytes resvd for header*/ + XIPSYS (r) : ORIGIN = 0x08009000, LENGTH = 0x1000 /* XIPSYS: 4K system data in flash */ + XIPCAL (r) : ORIGIN = 0x0800A000, LENGTH = 0x1000 /* XIPCAL: 4K calibration data in flash */ + XIP1 (rx) : ORIGIN = 0x0800B000+0x20, LENGTH = 0xF5000-0x20 /* XIP1: 980k, 32 Bytes resvd for header */ + XIP2 (rx) : ORIGIN = 0x08100000+0x20, LENGTH = 0xF5000-0x20 /* XIP2: 980k, 32 Bytes resvd for header */ +} + + + +SECTIONS +{ + .rom.text : { } > ROM + .rom.rodata : { } > ROM + .ARM.exidx : + { + __exidx_start = .; + *(.ARM.exidx*) + *(.gnu.linkonce.armexidx.*) + __exidx_end = .; + } > ROM + .hal.rom.bss : { } > ROMBSS_RAM + + /* image1 entry, this section should in RAM and fixed address for ROM */ + .ram_image1.entry : + { + __ram_image1_text_start__ = .; + __ram_start_table_start__ = .; + KEEP(*(SORT(.image1.entry.data*))) + __ram_start_table_end__ = .; + + __image1_validate_code__ = .; + KEEP(*(.image1.validate.rodata*)) + KEEP(*(.image1.export.symb*)) + } > BOOTLOADER_RAM + + /* Add . to assign the start address of the section */ + /* to prevent the change of the start address by ld doing section alignment */ + .ram_image1.text . : + { + /* image1 text */ + *(.boot.ram.text*) + *(.boot.rodata*) + } > BOOTLOADER_RAM + + .ram_image1.data . : + { + __ram_image1_data_start__ = .; + KEEP(*(.boot.ram.data*)) + __ram_image1_data_end__ = .; + + __ram_image1_text_end__ = .; + } > BOOTLOADER_RAM + + .ram_image1.bss . : + { + __image1_bss_start__ = .; + KEEP(*(.boot.ram.bss*)) + KEEP(*(.boot.ram.end.bss*)) + __image1_bss_end__ = .; + } > BOOTLOADER_RAM + + .ram_image2.entry : + { + __ram_image2_text_start__ = .; + __image2_entry_func__ = .; + KEEP(*(SORT(.image2.entry.data*))) + + __image2_validate_code__ = .; + KEEP(*(.image2.validate.rodata*)) + + } > BD_RAM + + .ram_image2.text : + { + KEEP(*(.image2.ram.text*)) + } > BD_RAM + + .ram_image2.data : + { + __data_start__ = .; + *(.data*) + __data_end__ = .; + __ram_image2_text_end__ = .; + . = ALIGN(16); + } > BD_RAM + + .ram_image2.bss : + { + __bss_start__ = .; + *(.bss*) + *(COMMON) + } > BD_RAM + + .ram_image2.skb.bss : + { + *(.bdsram.data*) + __bss_end__ = .; + } > BD_RAM + + .ram_heap.data : + { + *(.bfsram.data*) + } > BD_RAM + + . = ALIGN(8); + PROVIDE(heap_start = .); + PROVIDE(heap_end = 0x1003CFFF); + PROVIDE(heap_len = heap_end - heap_start); + + .rom.bss : + { + *(.heap.stdlib*) + } > ROM_BSS_RAM + + .ram_rdp.text : + { + __rom_top_4k_start_ = .; + __rdp_text_start__ = .; + KEEP(*(.rdp.ram.text*)) + KEEP(*(.rdp.ram.data*)) + __rdp_text_end__ = .; + . = ALIGN(16); + + } > RDP_RAM + + .xip_image1.text : + { + __flash_boot_text_start__ = .; + + *(.flashboot.text*) + + __flash_boot_text_end__ = .; + + . = ALIGN(16); + } > XIPBOOT + + .xip_image2.text : + { + __flash_text_start__ = .; + + *(.img2_custom_signature*) + *(.text) + *(.text*) + *(.rodata) + *(.rodata*) + *(.debug_trace*) + + /* https://www.embedded.com/building-bare-metal-arm-systems-with-gnu-part-3/ */ + KEEP(*crtbegin.o(.ctors)) + KEEP(*(EXCLUDE_FILE (*ctrend.o) .ctors)) + KEEP(*(SORT(.ctors.*))) + KEEP(*crtend.o(.ctors)) + KEEP(*crtbegin.o(.dtors)) + KEEP(*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP(*(SORT(.dtors.*))) + KEEP(*crtend.o(.dtors)) + *(.rodata .rodata.* .gnu.linkonce.r.*) + + /* Add This for C++ support */ + /* ambd_arduino/Arduino_package/hardware/variants/rtl8720dn_bw16/linker_scripts/gcc/rlx8721d_img2_is_arduino.ld */ + . = ALIGN(4); + __preinit_array_start = .; + KEEP(*(.preinit_array)) + __preinit_array_end = .; + . = ALIGN(4); + __init_array_start = .; + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + __init_array_end = .; + . = ALIGN(4); + __fini_array_start = .; + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + __fini_array_end = .; + /*-----------------*/ + + . = ALIGN (4); + __cmd_table_start__ = .; + KEEP(*(.cmd.table.data*)) + __cmd_table_end__ = .; + + /* https://community.silabs.com/s/article/understand-the-gnu-linker-script-of-cortex-m4?language=en_US */ + KEEP(*(.init)) + KEEP(*(.fini)) + *(.init) + *(.fini) + + __flash_text_end__ = .; + + . = ALIGN (16); + } > XIP2 +} + +SECTIONS +{ + /* Bootloader symbol list */ + boot_export_symbol = 0x10002020; +}