Cannot make TP-Link Archer C60 v3 upgrade firmware using TFTP recovery

Hello.
I have TP-Link Archer C60 v3. I downloaded the OpenWRT firmware from archer_c60_v2 for my router (v3 version, file *-factory.bin) and tried to upgrade the firmware using "Firmware upgrade" in OEM GUI.
It didn't work, raised an error "Invalid file type". I found that for newer versions of this router it might require installing by using TFTP.

I found the instruction on how to install the firmware using TFTP recovery method here: git commit
I use arch linux on my laptop and I installed atftp package as a TFTP server, started the server.
It listens on all interfaces (0.0.0.0 address):

netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 0.0.0.0:69              0.0.0.0:*                           92406/atftpd

Firewall is not active.
I use NetworkManager and I configured the wired connection to use 192.168.0.66 IP address and 255.255.255.0 mask.

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether [MACADDR] brd ff:ff:ff:ff:ff:ff
    altname enp0s31f6
    inet 192.168.0.66/24 brd 192.168.0.255 scope global noprefixroute eno2
       valid_lft forever preferred_lft forever
3. wlan0 ...

VPNs, wireless connections are disabled.

I moved the downloaded OpenWRT firmware file to /srv/atftp folder and named it tp_recovery.bin.
Checked that the file is accessible by using command

atftp -g -r tp_recovery.bin 192.168.0.66 69

It worked. I also connected my laptop to a network to which my another PC is connected that also runs linux and connected to my atftp server from that PC, it also worked (so no firewall or anything else is blocking the connection).

The Ethernet cable is in the one of 4 ethernet ports, not in the internet port.

I continued to follow the instruction, I powered off the router, pressed and hold the reset button, pressed and released the ON/OFF button, after 3 seconds the ethernet interface appeared on my laptop, I continued to hold the reset button for 15 seconds and released it.

Nothing happened. In the atftp logs I didn't see any activity by the router (but I see the activity when I connected either from localhost or from another PC, so logs are working), and also after rebooting the router the firmware did not upgraded.

The router itself is working fine, when I normally start the router it boots the stock OS and I can normally log in to the Web GUI.

Also, I want to mention a few things. When I normally start the router, some LEDs are enabled, 192.168.0.1 responds to the ping requests (of course, I can even access Web GUI). However, when I start the router holding the reset button, LEDs on the router are not enabled, and also the router does not respond to ping requests to 192.168.0.1.
Also, I inspected the traffic on interface eno2 (the wired interface I connect the router to) using wireshark, and I saw nothing coming from the router when I started it while holding the reset button (there is still ARP, DHCP requests from my laptop).

Could you please help me figure out why the router doesn't upgrade itself from TFTP recovery?
Thanks in advance!

Well i am using openwrt on archer c60 v3. You can install openwrt by simply updating from the stock tp link firmware,
Just download openwrt for c60 v3 and then update it from tp link web UI.

After flashing, when the power led is solid on,press the wps/ wifi button once,so wifi will be visible as Openwrt.

Thank you for the answer.
As I said in the post, I can't upgrade the firmware from Web GUI. It raises an error "Invalid file type". I've read somewhere that this indeed can happen on newer devices, and it requires installing using TFTP recovery.

So, I went deeper. I connected to the to the router via UART and here is the logs when booting while holding the reset button:

U-Boot 1.1.4-gd490e1c1-dirty (Aug 21 2019 - 18:44:04)

ap151 - Dragonfly 1.0

DRAM:  64 MB
Top of RAM usable for U-Boot at: 84000000
Reserving 402k for U-Boot at: 83f98000
Reserving 32832k for malloc() at: 81f88000
Reserving 44 Bytes for Board Info at: 81f87fd4
Reserving 36 Bytes for Global Data at: 81f87fb0
Reserving 128k for boot params() at: 81f67fb0
Stack Pointer at: 81f67f98
Now running in RAM - U-Boot at: 83f98000
Flash Manuf Id 0xef, DeviceId0 0x40, DeviceId1 0x17
flash size 8MB, sector count = 128
Flash:  8 MB
Using default environment

In:    serial
Out:   serial
Err:   serial
Net:   ath_gmac_enet_initialize...
No valid address in Flash. Using fixed address
No valid address in Flash. Using fixed address
ath_gmac_enet_initialize: reset mask:c02200
Dragonfly----> S27 PHY *
: cfg1 0x80000000 cfg2 0x7114
eth0: 00:03:7f:xx:xx:xx
athrs27_phy_setup ATHR_PHY_CONTROL 4 :1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 4 :10
eth0 up
ATHRS27: resetting s27
ATHRS27: s27 reset done
: cfg1 0x800c0000 cfg2 0x7214
eth1: 00:03:7f:xx:xx:xx
athrs27_phy_setup ATHR_PHY_CONTROL 0 :1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 0 :50
athrs27_phy_setup ATHR_PHY_CONTROL 1 :1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 1 :50
athrs27_phy_setup ATHR_PHY_CONTROL 2 :1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 2 :50
athrs27_phy_setup ATHR_PHY_CONTROL 3 :1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 3 :50
eth1 up
eth0, eth1
Setting 0x181162c0 to 0x82
Trying eth0
eth0 link down
FAIL
Trying eth1
eth1 link down
FAIL
Using eth1 device
TFTP from server 192.168.0.66; our IP address is 192.168.0.86
Filename 'tp_recovery.bin'.
Load address: 0x80800000
Loading: *<0x08>T T ## Starting application at 0x80010000 ...


U-Boot 1.1.4-gd490e1c1-dirty (Aug 21 2019 - 18:44:04)

ap151 - Dragonfly 1.0

DRAM:   0 kB
Top of RAM usable for U-Boot at: 80000000
Reserving 402k for U-Boot at: 7ff98000
Reserving 32832k for malloc() at: 7df88000
Reserving 44 Bytes for Board Info at: 7df87fd4
Reserving 36 Bytes for Global Data at: 7df87fb0
Reserving 128k for boot params() at: 7df67fb0
Stack Pointer at: 7df67f98

As you can see here some errors:

eth1 up
eth0, eth1
Setting 0x181162c0 to 0x82
Trying eth0
eth0 link down
FAIL
Trying eth1
eth1 link down
FAIL

I'm not sure if that is okay.

The Ethernet cable is in the first ethernet port: Here:
image
I also tried to put it in the internet port (the blue one), no difference.

I want to mention that the cable itself is working, because:

  1. My laptop recognizes connection even when I start the router in recovery (while holding reset button), but the router still says "eth1 link down".
  2. The connection using this cable is working when I normally start the router and I can ping the router and access the Web GUI.

When booted in recovery I still can't ping neither 192.168.0.1 nor 192.168.0.86 (as said in the logs):

PING 192.168.0.86 (192.168.0.86) 56(84) bytes of data.
From 192.168.0.66 icmp_seq=1 Destination Host Unreachable
From 192.168.0.66 icmp_seq=2 Destination Host Unreachable
From 192.168.0.66 icmp_seq=3 Destination Host Unreachable
From 192.168.0.66 icmp_seq=4 Destination Host Unreachable
From 192.168.0.66 icmp_seq=5 Destination Host Unreachable
From 192.168.0.66 icmp_seq=6 Destination Host Unreachable

Does somebody know what might be the problem?

I did not figure out how to make TFTP working from recovery, so I flashed the sysupgrade.bin using serial console following the official installation method (typed tpl to stop booting, loaded the sysupgrade.bin from tftp server at address 192.168.0.10, erase, cp.b, reset). It worked!

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.