TP-Link Archer C2 AC750

Instruction set MIPS
Vendor MediaTek
bootloader U-Boot
System-On-Chip MT7620A
CPU/Speed 580 MHz
Flash-Chip Winbond 25Q64BVSIG docs
Flash size 8192 KiB
RAM 64 MiB
Wireless No1 SoC-integrated: MT7620A 2.4GHz 802.11bgn
Wireless No2 On-board chip: MT7610EN 5GHz 802.11ac
switch RTL8367RB Gigabit Switch
USB Yes 1 x 2.0
Serial Yes

Install OpenWrt (generic explanation)

The following procedure is known to work only on the v1 and v1.1 models. Please, don't try this on any other revision. You can check which version your C2 is by looking at the bottom of it or, in the router's web interface, Status page, Hardware Version information, if you are using stock firmware.

As per the instructions in the git commit adding support for the Archer C2 AC750 v1, you need an OpenWrt image with integrated bootloader when flashing through TFTP (TP-Link pretty much always has the bootloader integrated in their firmwares). OpenWrt 19.07.1 can be flashed via TFTP using an unofficial recovery image provided here; however, if you are familiar with the command line and have access to a Linux box, it's recommended you build such an image yourself, as you'll be able to use the latest OpenWrt stable release. See instructions below.

The following instructions might break your router. Use only the provided recovery image if you don't understand what is going on.

Avoid renaming any arbitrary image to ArcherC2V1_tp_recovery.bin. Providing an image without proper bootloader to TFTP recovery bricks your router and needs flashing with a SPI programmer.

If you feel uncomfortable doing this, grab the prepped 19.07.1 image linked to above and skip this section.

The C2v1 TFTP recovery overwrites the uboot partition, hence it must be included in a recovery.bin An official stock TPLink firmware file has a 512 byte header, which needs to be stripped for TFTP. You need access to a Linux box for this procedure (Windows Subsystem for Linux ('WSL') might work as well). Instructions below are taken from the git commit that added support into OpenWrt.

1. Download a stock TP-Link Firmware file from the TP-Link homepage.

2. Extract u-boot from the binary file:

$ dd if=c2v1_stock_firmware.bin of=c2v1_uboot.bin bs=1 skip=512 count=131072

3. Now merge the OpenWrt sysupgrade image and the u-boot into one binary:

$ cat c2v1_uboot.bin openwrt-squashfs-sysupgrade.bin > ArcherC2V1_tp_recovery.bin
  • Set your computer's IP to a static address (subnet mask and default gateway to
  • To flash the recovery image, start a TFTP server from IP address and serve the recovery image named 'ArcherC2V1_tp_recovery.bin'.
  • Connect your device to the LAN port, then press the WPS/Reset button and power it up. Keep pressing the WPS/Reset button for 10 seconds
  • The device will try to download the recovery image and flash it. This might take up to 20-25 minutes to finish. When done, the router will reboot itself.
  • After reboot, you can access OpenWrt at From here on out, you can simply use sysupgrade with the vanilla OpenWrt images to upgrade.

Remember to allow access to your TFTP server program in firewall settings. (In case of Windows Firewall, it prompts you in first run.)

If you encounter timeouts, you might want to put a switch between your router and client to facilitate the flashing process. The tips below might not be needed after that.

Also, you might have to lower your ethernet link to 10 Mbps Half Duplex in order to finish the process.

A few users reported that flashing via TFTP is not always possible on some devices. Apparently there was a slight hardware change in some produced devices that causes TFTP inside u-boot to expect RFC7440 behavior without actually requesting RFC7440 behavior. There is a forum thread with a detailed analysis of the issue and possible solutions.


If you want to stick to flashing via TFTP:

  • on Windows use TFTPD32/64 with the option Use anticipation window of 1000 bytes
  • on every other platform you could use apardyl/PyTFTPd with the patch provided by pbasista in the forum thread

Otherwise your best option is to establish a serial connection to the device and then load the image via kermit (either directly copying it into the flash or booting an initramfs variant from memory and then flashing via OpenWrt).

Other variants and more information is provided in the aforementioned forum thread.

Similar instructions can be found as posted by OpenWrt forum member yoq here. Old recovery image can be downloaded here.

TP-Link Archer C2 AC750 v1 flash layout
Layer0 raw NOR flash memory chip (Spansion S25Fl064K spi0.0: s25fl064k) 8192 KiB
Layer1 mtd0 u-boot mtd1 firmware 7808 KiB mtd5 config mtd6 rom mtd7 romfile mtd8 radio
Layer2 mtd2 kernel 1690 KiB* mtd3 rootfs 6117 KiB*
mountpoint /
filesystem OverlayFS
Layer3 mtd4 rootfs_data 1448 KiB*
Size in KiB 128 KiB 1690 KiB 4669 KiB* 1448 KiB* 64 KiB 64 KiB 64 KiB 64 KiB
Name u-boot kernel rootfs_data
mountpoint none none /rom /overlay none none none none
filesystem none none SquashFS JFFS2 none none none none

* These seemingly irregular values are the result of the dynamic mtd splitter resizing the OpenWrt kernel and rootfs 'partitions' as needed. Sizes are extracted from a personalised build, so kernel, rootfs and rootfs_data values may slightly differ on stock OpenWrt builds (and also between 19.07, 21.02 and master e.g.). Other partition sizes should be identical.

The following procedure is known to work on the v1 and possibly on v1.1 models. Please, don't try this on any other revision. You can check which version your C2 is by looking at the bottom of it or, in the router's web interface. The following instructions might break your router. It may be cautious to make a full backup of your device using the methods mentioned in this article here.

Original instructions can be found as posted by OpenWrt forum member Dbzafgt here (post #346). The same procedure was also detailed by OpenWrt forum member alizes here.

1. Download the OEM firmware : ArcherC2_v1_xxxxxx.bin

2. In a Linux terminal, create a new stripped binary based on this original OEM firmware :

$ dd if=ArcherC2_v1_xxxxxx.bin of=stripped_OEM.bin skip=257 bs=512

3. In the Luci Web UI, flash this new stripped binary. OpenWrt will then attempt to check this binary and will display warnings. You need to force the flashing at this step.

4. The OEM firmware will start flashing and its web admin will be at after.

See the hardware details tab at the top of the page.

The case is a bit hard to open, start with the two screws. Then start prying the lid from the bottom of the case, starting at the side with the ethernet connectors, There are 11 notches all around keeping the lid in place. They come loose by pushing the bottom part of the case outward.



At least one user has reported 3.3 V logic levels, not TTL (5 V) levels

Serial connection parameters for Archer C2 AC750 v1 115200, 8N1

The Serial connector is labeled 'J2', and is wired as follows. See picture below for the location on the board.

  Ethernet side of PCB
     VCC  ... not used.
     GND  -------------- GND of Serial adapter
     RX   <-- input  <-- Tx of Serial adapter
     TX   --> output --> Rx of Serial adapter
  Led side of PCB

Where 'RX' connects to the output of your serial adapter, and TX, connects to the input of your serial adapter. You can verify this, by using a volt meter to check that 'TX' pin is at Vcc level, and the RX pin is at GND level. The bootloader of the stock firmware can be interrupted by pressing a digit from 1 .. 7, press '4' for the u-boot prompt. From the serial console, you can login to the running Linux based stock firmware with: username 'admin' and password '1234'.


The GND pin may be a bit hard to solder, i needed to scratch away some paint from the PCB to make a large enough connection. On some versions you need to solder 2 bridges to get serial port working. You need good soldering experiences for that!

Board picture (v1)

UART isn't populated, it's indicated by a red rectangle on the picture below (click for bigger size).


The C2 uses a external GBit switch, connected by MDIO bus. Network traffic to the CPU is passed through the internal switch of the MT7620A SoC:

             |  MT7620A CPU  |
|           MT7620A          |
|       embedded switch      |
  unused              5 (RGMII)
  5x FastEth PHY      |
                      6 (RGMII)
|         RTL8367RB          |
|    switch & 5x GBit PHY    |
  0     1     2     3     4
  |     |     |     |     |

Earlier versions of this article suggested “the driver for OpenWrt” (for the RTL8367R(B) switch chip) would have limited the range of usable 802.1q VLAN IDs to 1 – 31.

While this may have been true for some earlier builds (could not confirm immediately), OpenWrt 21.02.3 (at least) no longer seems to suffer from such hard limit. There is still a soft limit which, for some reason, makes VLAN IDs above 31 unusable and non-working by default, but you can override this limit and use the full range of VLAN IDs by setting the enable_vlan4k option to 1 in the switch1 section of the /etc/config/network configuration file, as follows:

config switch
        option name 'switch1'
        option reset '1'
        option enable_vlan '1'
        option enable_vlan4k '1'

If you edit the switch VLAN configuration in LuCI, it may add the enable_vlan4k configuration directive automatically for you. But for manual edits, you need to do it yourself to be able to get the higher-numbered VLAN IDs work.

OpenWrt releases 21.02.0 — 21.02.3 (the latest official release as of this writing) appear to have a regression in their default network configuration which makes the inner (MT7620A) switch visible in LuCI as switch0 for no real purpose, with a pseudo VLAN configuration that makes no sense.

The router works as it should but configuring VLANs through LuCI may not work as expected and only the outer switch (switch1, RTL8367B) configuration is relevant. A bug report has been filed on this by the ID FS#3879 - Incorrect switch config for TP-Link Archer C2 AC750 #8871.

Until fixed in later releases, you can work around the issue by removing the extraneous switch0 configuration from the file /etc/config/network. This is best accomplished by issuing the following commands in the command line:

uci delete network.@switch[0]
uci commit

Version: 1.1.3 (Dec 4 2013) Ralink UBoot Version

MT7620 # bdinfo
boot_params = 0x83F4FFB0
memstart    = 0x80000000
memsize     = 0x04000000
flashstart  = 0x00000000
flashsize   = 0x00800000
flashoffset = 0x00000000
ethaddr     = xx:xx:xx:xx:xx:xx
ip_addr     =
baudrate    = 115200 bps

Push '4' to enter UBoot

Color Name GPIO Polarity
Green LAN 1 Active low
Green USB 11 Active low

The following forum threads have been used to discuss the C2:

Thanks to everyone that contribute to make this possible.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2024/02/13 16:08
  • by jow