Ameba ARDUINO: Getting Started with BW16

Required Environment

RTL8720DN Dual-Band Wi-Fi board currently supports Windows XP/7/8/10 32-bits and 64-bits operating systems. In this documentation, please use Arduino IDE with version 1.8.15 or later.

Introduction to BW16

Realtek RTL8720DN is a Wi-Fi and Bluetooth IC that supports 2.4GHz and 5GHz dual bands for Wi-Fi communication, and Bluetooth Low Energy (BLE) 5.0. BW16 is a module manufactured by B&T, this module is a highly integrated Wi-Fi and Bluetooth module with the RTL8720DN as the main SoC (System on Chip), it can be regarded as an SoC for the Wi-Fi and Bluetooth application with typical SBCs.


RTL8720DN (BW16) has a smaller size than AmebaD and AmebaD MINI as shown in the above figure. It uses Micro USB to supply power, which is common in many smart devices.
Please refer to the following figure and table for the pin diagram and function of RTL8720DN (BW16).


D2 (PA27)GPIOA_27     
D3 (PA30)GPIOA_30     
D4 (PB1)GPIOB_1  Serial_TX  
D5 (PB2)GPIOB_2  Serial_RX  
D6 (PB3)GPIOB_3A2    
D7 (PA25)GPIOA_25   I2C0_CLK
D8 (PA26)GPIOA_26   I2C0_SDA
D9 (PA15)GPIOA_15   SPI_CS 
D10 (PA14)GPIOA_14   SPI_CLK 

Setting up Development Environment

Step 1. Installing the Driver

First, connect RTL8720DN (BW16) to the computer via Micro USB:


If this is the first time you connect RTL8720DN (BW16) to your computer, here is something that you might take note of:

From the pinmap above, we know D0 and D1 pins are used for program uploading. However, according to the schematic design of AI Thinker, the onboard USB-to-UART module is connected to D4 and D5 which cannot be directly used for program upload.
In order to upload firmware to this board, we suggested that you could choose to add in an external USB-to-UART module connecting to D0 and D1 as shown in the pin connection below:


Optionally, you could short the pins indicated below to use the on-board USB:
D1 ––– D5
D0 ––– D4


After connecting accordingly, the USB driver for RTL8720DN (BW16) will be automatically installed. If you have driver issue of connecting board, please go to for USB driver. You can check the COM Port number in your Device Manager:


Step 2. Set up Arduino IDE

From version 1.6.5, Arduino IDE supports third-party hardware. Therefore, we can use Arduino IDE to develop applications on RTL8720DN (BW16), and the basic examples of Arduino can run on RTL8720DN (BW16) too. Refer to the basic example link.

Arduino IDE can be downloaded in the Arduino website:

When the installation is finished, open Arduino IDE. To set up RTL8720DN (BW16) correctly in Arduino IDE, go to “File” -> “Preferences”.

And paste the following URL into the “Additional Boards Manager URLs” field:
RTL8720DN (BW16) will be supported from v3.0.8 officially.

Next, go to “Tools” -> “Board” -> “Boards Manager”:


The “Boards Manager” requires about 10~20 seconds to refresh all hardware files (if the network is in bad condition, it may take longer). Every time the new hardware is connected, we need to reopen the Board Manager. So, we close the Boards Manager, and then open it again. Find “Realtek AmebaD Boards (32-bits ARM Cortex-M33 @200MHz)” in the list, click “Install”, then the Arduino IDE starts to download required files for AmebaD.


If you are facing GitHub downloading issue, please refer to the following link at “Download/Software Development Kit”. There are 3 sections.
1. “AmebaD_Arduino_patch1_SDK”, please select at least 1 of the SDKs. There are 5 latest released SDK options.
2. “AmebaD_Arduino_patch2_Tools”, please select according to your operating system. There are Windows, Linux, and macOS.
3. “AmebaD_Arduino_Source_Code”, this section is an optional download only wants to refer to the latest source code.

Download the files selected, then unzip (patch1 and patch2 are compulsory). There are “Install.doc”/“Install.pdf” for you to refer to installation steps. According to your system, please run the installation tool in the “Offline_SDK_installation_tool” folder.
After the installation tool running successfully, you may open Arduino IDE and proceed to “tools” -> “Board“ -> “Boards Manager…”. Try to find “Realtek AmebaD Boards (32-bits ARM Cortex-M33 @200MHz)” in the list, click “Install”, then the Arduino IDE starts to download the required files for AmebaD.
Finally, we select AmebaD as current connected board in “Tools” -> “Board” -> “Ameba ARM (32-bits) Boards” ->” RTL8720DN(BW16)”:


How to upload firmware into BW16

Depending on the batch of manufacturing, some BW16 modules on the development board might have built-in the default B&T firmware, the firmware information is shown in the image below:


This will cause Arduino Image unable to flash into the module. Although information of “All images are sent successfully! Image tool closed! Upload Image did.” is showing in the Image Tool, however, the factory image is unable to be erased. Unfortunately after press the onboard RST button, you will find the factory image still remains in the flash.

Uploading Solution

Method 1: Use AmebaD Image Tool to erase flash.

The B&T default factory image can be washed using “Erase” function provided by Realtek’s Image Tool. Using Image Tool to erase the flash image memory starting from memory address: 0x8000_0000 till the end of 2MB memory location, later on, we need to upload Realtek’s image back to the module again using Arduino IDE.


Step 1 – Download and prepare the Image Tool.
Download ambd_sdk from the link ambiot GitHub:
The Realtek’s Image Tool can be found under the following file path: “ambd_sdk\tools\AmbaD\Image_tool\image_tool.exe”

Step 2 – Setup the Image Tool
1. In the “Chip Select” option, choose “AmebaD(8721D)” which is also suitable for RTL8720DN chip.
2. Select correct COM Port that you are using.
3. Set the Baudrate to “115200”.
4. Then key in the Flash Erase starting position from Memory Address of 0x0800 0000.
5. The size to be 2048 KB.
6. Set the module to “Download mode” first, then click the “Erase” button.


Upon finishing the above image erase and press the reset button, we could find that the “#calibration” will no longer pop out, only ”#” will appear in the Serial Monitor.


Step 3 – Download Image using Arduino IDE
Now you are able to download the program via UART in Ardunio IDE. In order to upload the program, you could choose to either use an external USB-to-UART module connecting to D0 and D1, or short the pins indicated below to use the on-board USB:


D1 ––– D5
D0 ––– D4

Optional Uploading Solution

OTA (Over The Air)
Ai-Thinker is providing a guide for OTA firmware upload in Section 6.1 of B&T “RTL8720D AT Command User Manual” of which can be retrieved from the link below:

Try the First Example

Step 1. Compile & Upload

Arduino IDE provides many built-in examples, which can be compiled, uploaded, and run directly on the boards. Here, we take the “Blink” example as the first try.
Open “File” -> “Examples” -> “01.Basics” -> “Blink”:


Arduino IDE opens a new window with the complete sample code.


There is an onboard LED of RTL8720DN(BW16), the default “LED_BUILTIN” is a green onboard LED. Change “LED_BUILTIN” to “LED_B” or “LED_R” for different colors such as blue and red. Here we use “LED_B” for demonstration purpose.
Next, we compile the sample code directly; click “Sketch” -> “Verify/Compile”:


Arduino IDE prints the compiling messages in the bottom area of the IDE window. When the compilation is finished, you will get a message similar to the following figure:


Afterward, we will upload the compiled code to RTL8720DN(BW16).

Please make sure RTL8720DN(BW16) is connected to your computer, then click “Sketch” -> “Upload”.

The Arduino IDE will compile first then upload. During the uploading process, users are required to enter the upload mode of the board. To enter the upload mode, first press and hold the RTL8720DN(BW16) “Burn” button, press the “RST” button, and then release the “Burn” button.


Press “Upload” button in Arduino IDE to compile and upload the program. Arduino IDE will wait for 5s for the development board to enter the upload mode.


Again, during the uploading procedure the IDE prints messages. The uploading procedure takes a considerably longer time (about 30 seconds to 1 minute). When the upload is completed, the “Upload Image done” message is printed.

Step 2. Run the Blink example

In each example, Arduino not only provides sample code but also detailed documentation, including wiring diagram, sample code explanation, technical details, …etc. These examples can be directly used on RTL8720DN (BW16).
So, we find the detailed information of the Blink example in the link below:

In short, for RTL8720DN, the example can be run on both the onboard RGB LED or external LED (use any GPIO pins for signal output). Finally, press the “RST” button, and you can see the RGB LED turns into blue and keep blinking.


1. Introduction of RTL8720DN on Instructable:
2. Load Arduino image into BW16:
How to load BW16 program with Arduino – #13
3. RTL8720DN (BW16) IMG2 SIGN Invalid Solution:
RTL8720DN(BW16) IMG2 SIGN Invalid Solution
4. FTDI Driver Download from here:

Copyrights ©瑞晟微电子(苏州)有限公司 2021. All rights reserved.
Please confirm that QQ communication software is installed