This page is not fully translated, yet. Please help completing the translation.
(remove this paragraph once the translation is finished)
TP-Link TL-WR1043ND
Gigabit Ethernet switch'e sahip ilk ucuz cihazlardan biri. Duyurulan özellikleri: Çıkarılabilir 3 bütün anten (RP-SMA connectors) ve azami 24 dBm (251 mW, v1.x)/25 dBm (v2.x, v3.x) TX güç çıkışı. Not: Azami TX gücü ve kullanibir kanal sayısı bazi ülkelerde sınırlıdır.!
Desteklenen Versiyonlar
Öne Çıkan Donanım Özellikleri
Kurulum
- Eğer “Please choose a file to upgrade” iletisini tekrar tekrar görüyorsanız, muhtemelen dosya adı fazla uzundur ve imaj dosyasını örneğin
belenim.bin
olarak yeniden adlandırmalısınız. - generic.flashing Şimdi bu bellenim dosyasını cihazınızın flaş-çipine yazdırın
NOTE:
In case you have a revision > v1.10 (but not v2.x), you need to flash an elder OEM firmware release first, and only then flash OpenWrt; tested and works credits go to sayboon for his tutorial.
HW rev.5 üzerine kurulum
- WEB arayüzünden normal yükleme
- Veya TFTP sunucusu kullanabilirsiniz: OpenWrt veya orjinal bellenimi WR1043v5_tp_recovery.bin olarak yeniden adlandırın PC'nizin sabit IP'sini *192.168.0.66/24* yapın Yönlendirici açılış sırasında reset tuşuna basıldığında birkaç saniyeliğine 192.168.0.86 IP adresini alacaktır.
- Eğer bir şey yanlış giderse her zaman UART kullanabilirsiniz
HW rev.5'te UART
Flash Düzeni
Daha iyi bir anlayış için lütfen flash.layout makalesini okuyun. Bir takım açıklamalar içerir. Şimdi bu belirli cizahız flash düzenine bir göz atalım:
TP-Link WR1043ND Flash Layout stock firmware | |||||
---|---|---|---|---|---|
Layer0 | m25p80 spi0.0: m25p64 8192KiB | ||||
Layer1 | mtd0 u-boot 128KiB | mtd1 firmware 8000KiB | mtd3 art 64KiB | ||
mountpoint | none | / | none | ||
filesystem | none | SquashFS | none | ||
TP-Link WR1043ND Flash Layout | |||||
Layer0 | m25p80 spi0.0: m25p64 8192KiB | ||||
Layer1 | mtd0 u-boot 128KiB | mtd5 firmware 8000KiB | mtd4 art 64KiB | ||
Layer2 | mtd1 kernel 1280KiB | mtd2 rootfs 6720KiB | |||
mountpoint | / | ||||
filesystem | overlayfs | ||||
Layer3 | 1536KiB | mtd3 rootfs_data 5184KiB | |||
mountpoint | none | none | /rom | /overlay | none |
filesystem | none | none | SquashFS | JFFS2 | none |
ART = Atheros Radio Test - it contains mac addresses and calibration data for the wifi (EEPROM). If it is missing or corrupt, ath9k won't come up anymore.
Firmware flashing
This is an older device with multiple versions. These instructions have been written over the years and versions of devices. When following these instructions note that the IP address may be different for different versions of hardware and boot loader.
Ensure that you are using the firmware version appropriate for your device.
Flashing / Recovery using tftp only (without serial console)
If your device doesn't even boot (e.g. due to a bad flash), and your device is recent enough (circa 2011, v1.8+), you can use the device built-in auto tftp recovery process.
- Connect the device (one of the LAN ports) to a host computer via an ethernet cable
- Change the host computer IP address (manual or static) to 192.168.0.66
- Install a tftp server. This is host computer OS specific.
- On Mac OS X, you can start the built-in tftp server with
$ sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist
- Download a desired firmware (openwrt *factory.bin or the original firmware wr1043nv1_*_boot*.bin) and rename the *.bin file to wr1043v1_tp_recovery.bin in the tftpboot directory (if you use Tftpd check log viewer for read request from your router, to make sure your rename is correct). The v4 file needs to be named wr1043ndv4_tp_recovery.bin.
- On Mac OS X, copy the renamed file to /private/tftpboot/
- Use a pin or paper clip to press down the reset button (in the hole besides the power adapter hole) and connect the power, while holding down the reset button for a few seconds
- The LEDs should flash indicating firmware upload in progress.
- The device will automatically boot to use the new firmware after flashing.
Flashing / Recovery using the serial console
If the tftp only approach doesn't work (due to an old bootloader) or you want to debug the boot process, you will need to attach to its serial console. Depending on your HW version, you will have one or two options to transport the firmware into the device: 1) using tftp, or 2) (v1.x only) using the serial connection itself for file transfer (using the Kermit protocol).
Requirements:
- terminal program set to 115200 8N1, no flow control
minicom --baudrate 115200 --device /dev/ttyUSB0 --8bit
(I couldn't type thetpl
command using this)screen /dev/ttyUSB0 115200,cs8,-ixon
(this worked for me)
- the new firmware.bin file. In case you want revert to stock firmware, you need a stripped firmware file. See Back to original firmware.
To enter the boot prompt:
When you see something like this:
No valid address in Flash. Using fixed address ath_gmac_enet_initialize: reset mask:c02200 Scorpion ----> S17 PHY * athrs17_reg_init: complete : cfg1 0x80000000 cfg2 0x7114 eth0: ba:be:fa:ce:08:41 eth0 up athrs17_reg_init_wan done SGMII in forced mode athr_gmac_sgmii_setup SGMII done : cfg1 0x800c0000 cfg2 0x7214 eth1: ba:be:fa:ce:08:41 eth1 up eth0, eth1 Setting 0x18116290 to 0x58b1a14f is_auto_upload_firmware=0 Autobooting in 1 seconds
Type
tpl
during this 1 second period.
See this example for a (full console log) when using tftp.
1) Commands when using tftp (lan) for firmware transfer
The tftp server must be listening on 192.168.0.5:69 (configurable with setenv
command; use printenv
if not sure), and the router must be connected through one of the lan ports. The simplest tftp server to use is dnsmasq: dnsmasq --enable-tftp --tftp-root=/directory-containing-firmware.bin
.
For v1.x hardware:
tftpboot 0x81000000 firmware.bin erase 0xbf020000 +7c0000 # 7c0000: size of the firmware (be aware that you may have a different size thus bricking your router) cp.b 0x81000000 0xbf020000 0x7c0000 bootm 0xbf020000
For v2.1 hardware: The tftp server must be listening on 192.168.1.100:69 (Version 2.1 with U-Boot 1.1.4 (Jul 17 2015 - 14:31:22))
tftp 0x80060000 firmware.bin erase 0x9f020000 +${filesize} cp.b 0x80060000 0x9f020000 ${filesize} boot.m 0x9f020000
2) Commands when using Kermit (serial console) for firmware transfer (v1.x hardware only)
The tftp protocol is insecure and sometimes it doesn't work even if the console log suggests otherwise. In such cases you can also use a Kermit client to transfer the new image on the serial connection. It may take forever and a half (15-20min) to transfer the image, but it's easier and more secure than running a tftp server. These instructions assume you're using ckermit on a Linux system, but they will give you all you need to do the same on a Windows box.
Enter the boot prompt on the serial console (see above), and in your terminal program type:
erase 0xbf020000 +7c0000 # 7c0000: size of the firmware (be aware that you may have a different size thus bricking your router) loadb 0x81000000
Then start ckermit (without any arguments) and run the following commands in it (or configure your Kermit client to these parameters):
set line /dev/ttyUSB0 # Just make sure you got the right USB interface set speed 115200 set carrier-watch off set handshake none set flow-control none robust set file type bin set file name lit set rec pack 1000 set send pack 1000 set window 5 send firmware.bin # Make sure you include a proper path to the file. That's why I just kept it in /home/$user
After the 15-20min file transfer, the new firmware should be on your router and you can continue in the terminal:
cp.b 0x81000000 0xbf020000 0x7c0000 bootm 0xbf020000
Automated flashing with a script
Version 2.x with newest firmware (3.19.32) hast 192.168.0.1 as default IP and maybe differences in web interface. So this script needs adaption to work for 2.x devices.
Flashing hundreds of devices using the web interface can be a real pain. You can use this shell script to automate it:
#!/bin/bash # Pass the firmware image file to be flashed as the first and only # command line argument. # # The second curl call will time out, but it is expected. Once the # script exits, you can unplug the ethernet cable and proceed to the # next router, but do KEEP each router ON POWER until the new image is # fully written! When flashing is done the router reboots # automatically (as shown by all the leds flashing once). curl \ --user admin:admin \ --user-agent 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0' \ --referer 'http://192.168.1.1/userRpm/SoftwareUpgradeRpm.htm' \ --form "Filename=@$1" -F 'Upgrade=Upgrade' \ http://192.168.1.1/incoming/Firmware.htm > /dev/null sleep 1 curl \ --max-time 2 \ --user admin:admin \ --user-agent 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0' \ --referer 'http://192.168.1.1/incoming/Firmware.htm' \ http://192.168.1.1/userRpm/FirmwareUpdateTemp.htm > /dev/null
Upgrading OpenWrt
Back to original firmware
With the WR1043ND router, there is a catch: the stock firmware is obtained from the OEM: http://www.tplink.com/en/support/download/?model=TL-WR1043ND
- in case the file name of this firmware file does not contain the word “boot” in it, you can simply revert back to original firmware
- in case the file name of this firmware file does contain the word “boot” in it, you need to cut off parts of the image file before flashing it:
The following method applies both for the V1, V2 and V3 since the bootloader is the same size.
An example of an image file with the word “boot” in it is wr1043nv1_en_3_9_17_up_boot(091118).bin
.
Cut the first 0x20200 (that is 131,584 = 257*512) Bytes from original firmware:
dd if=orig.bin of=tplink.bin skip=257 bs=512
You should transfer the firmeware image to the /tmp folder and revert back to original firmware (if availlable you can flash the firmware via the webinterface as well):
Via the safer method using sysupgrade:
sysupgrade /tmp/tplink.bin
Or alternatively use the mtd method:
mtd -r write tplink.bin firmware
This has been confirmed by supertom64 (for the V1), and by akirkby (for the V2, flashing using the webinterface). Also confirmed Feb 29, 2020 by darkspot for V1 and TL-WR*V1_140319. Back to stock can be necessary to enable freifunk when coming from pure openwrt.
As of Apr 04 2020 is also confirmed to work on TL-WR1043ND V2 on OpenWRT 19.07.02 installation: upload the stripped firmware on LuCi and check the force option - the router will come back on 192.168.0.1.
Warnings / Gotchas
USB 3G Modems
The TL-WR1043ND v1.x does not deliver enough power for most USB 3G modems, which can lead to erratic behavior such as dropped/failed connections. If a 3G USB modem is to be used, consider other routers with a USB port that delivers enough amperes (e.g. the Buffalo WZR-HP-AG300H). |
USB 3G modems confirmed working with TL-WR1043ND v1:
- Huawei E303
- Huawei E303c
- Huawei E3131
- Huawei E3272
- Huawei E3531
- Huawei E3533 (via usb-tethering)
- ZTE MF823L
- ZTE MF190
- ZTE MF193
- ZTE MF626
- ZTE MF667 (via usb-tethering, bad connection)
USB 3G modems confirmed working with TL-WR1043ND v2:
- TCT Mobile One Touch X500D
- TCT Mobile X220L
- ZTE MF632
- Vodafone K3765 (Huawei)
- Huawei E160E
- Huawei E3531
Connection quality drops after a few hours, latency/ping/lag spikes
Still reproductible with release 15.05.1; gone in LEDE 17.01.4: If wireless performance becomes awful after a few hours and ping times to the router over wifi increase up to half a second or more, there's a good chance you're experiencing https://dev.openwrt.org/ticket/12372
Restarting wireless with the “wifi” command makes the issue temporarily go away for the next few hours. Disabling ANI (Adaptive Noise Immunity) with the following command makes the issue go away until the next reboot
echo 0 >/sys/kernel/debug/ieee80211/phy0/ath9k/ani
For more details, including how to disable ANI at boot, see longer description of the same ANI issue on the Cisco WRT160NL page.
Basic configuration
After flashing, proceed with Basic configuration.
Set up your Internet connection, configure wireless, configure USB port, etc.
OEM firmware features
In case you want to have the same features with OpenWrt as the OEM firmware, look this up: TP-Link OEM firmware features
Specific configuration
Interfaces
The OpenWrt default configuration of the network interfaces is as follows:
Interface Name | Description | Default configuration |
---|---|---|
br-lan | LAN & WiFi | 192.168.1.1/24 |
eth0 | LAN ports (1 to 4) + WAN | none |
wlan0 | WiFi | disabled |
Switch Ports (for VLANs)
Gigabit Media Independent Interface is the internal connection to the router itself.
Port | Switch port on v1.x | Switch port on v2.x and v3.x |
---|---|---|
Internet (WAN) | 0 | 5 |
LAN 1 | 1 | 4 |
LAN 2 | 2 | 3 |
LAN 3 | 3 | 2 |
LAN 4 | 4 | 1 |
GMII | 5 (marked as CPU) | 0 (marked as CPU) Switch0 CPU Port |
- | 6 Switch0 CPU Port |
The v2.x and v3.x get the lan and wan interface not via eth0.1/eth0.2 but via eth0 (wan) and eth1 (lan). The eth0 is in the same vlan as port 5 on the switch. Because of that, port 6 on the v2.x, v3.x routers is an additional CPU port - used for wan traffic only.
Wan has VLAN 2, that shouldn't be touched, as you lose the WAN port. Start your VLANs from 3, attaching them to the eth1.x sub-interfaces.
See Schematics:
Some issues with 10.03.1-rc4 on Hardware Ver.1.8 see this post for workaround.
There is a problem with VLAN-IDs > 9 (at least on v1.4 with 10.03.1-RC6 r28680 and v1.8 with 12.09-rc1 r34185). Using a VLAN-ID > 9 makes the router inaccessible on this interface.
VLAN-IDs > 127 not working with Chaos Calmer r47335 on hardware version 2.1.
Port Mirroring
Port mirroring is supported since r36847
/etc/config/network
config switch option name 'switch0' option reset '1' option enable_vlan '1' option enable_mirror_rx '1' option enable_mirror_tx '1' option enable_monitor_isolation '1' option enable_mirror_pause_frames '1' option mirror_monitor_port '4' option mirror_source_port '3' config switch_vlan option device 'switch0' option vlan '1' option ports '1 5t' config switch_vlan option device 'switch0' option vlan '5' option ports '2 3'
Use the WAN-Port as a LAN-Port
remove to following lines, to remove the wan specific configuration (vlan and interface)
V1.x /etc/config/network
config interface 'wan' option ifname 'eth0.2' option proto 'dhcp'
and
config switch_vlan option device 'switch0' option vlan '2' option ports '0 5t'
and add the port 0 to the existing Vlan
config switch_vlan option device 'switch0' option vlan '1' # add port 0 to the line below option ports '0 1 2 3 4 5t'
V2.x /etc/config/network
config interface 'wan' option ifname 'eth0' option proto 'dhcp'
and
config switch_vlan option device 'switch0' option vlan '2' option ports '5 6'
and add the port 5 to the existing Vlan
config switch_vlan option device 'switch0' option vlan '1' # add port 5 to the line below option ports '0 1 2 3 4'
Use eth1.<VLAN ID> interface instead of eth0.<VLAN ID> for additional VLAN-s on v2.x, v3.x router hardware
As mentioned above for v2.x, v3.x: “Start your VLANs from 3, attaching them to the eth1.x sub-interfaces.”
Additional VLAN ID-s must be tagged on CPU port and should be referenced as eth1.<VLAN ID> physical interfaces. To clarify, if multiple VLANs are used only one can be used untagged on switch ports (on CPU port) but it is not necessarily VLAN 1.
Note: the default lan interace (VLAN 1) is preconfigured to use eth1 physical interface (cpu untagged in switch configuration). VLAN 1 can also be tagged on the CPU port but the interface must be changed to eth1.1 from eth1 accordingly.
Note: If we create an additional VLAN, a misleading eth0.<VLAN ID> interface option appears on “Physical Settings” tab in the GUI, but use “Custom interface” option and type eth1.<VLAN ID> (e.g.: eth1.3) instead!
Example: Add additional VLANs on v.2.x hardware
The following is an example where every port in the LAN switch is moved into its own VLAN, creating a five interface router (WAN + LAN x 4).
/etc/config/network
Each Port is a VLAN
Physical Port 1 is the WAN2
Adapt to your needs
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config globals 'globals' option ula_prefix 'fd30:0c4a:0bba::/48' config interface 'lan1' option ifname 'eth1.1' option type 'bridge' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' config interface 'lan2' option ifname 'eth1.3' option proto 'static' option ipaddr '192.168.2.1' option netmask '255.255.255.0' option type 'bridge' config interface 'lan3' option ifname 'eth1.4' option proto 'static' option ipaddr '192.168.3.1' option netmask '255.255.255.0' option type 'bridge' config interface 'lan4' option ifname 'eth1.5' option proto 'static' option ipaddr '192.168.4.1' option netmask '255.255.255.0' option type 'bridge' config interface 'wan' option ifname 'eth0' option proto 'static' option ipaddr '192.168.100.100' option netmask '255.255.255.0' config interface 'wan6' option ifname '@wan' option proto 'dhcpv6' config switch option name 'switch0' option reset '1' option enable_vlan '1' option enable_vlan4k '1' config switch_vlan option device 'switch0' option vlan '1' option ports '0t 1' option vid '1' #This should stay untouched config switch_vlan option device 'switch0' option vlan '2' option ports '5 6' option vid '2' config switch_vlan option device 'switch0' option vlan '3' option ports '0t 4' option vid '3' config switch_vlan option device 'switch0' option vlan '4' option ports '0t 3' option vid '4' config switch_vlan option device 'switch0' option vlan '5' option ports '0t 2' option vid '5'
Another one (working) (v2.x) ready for modifications
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config globals 'globals' option ula_prefix 'fdf0:f161:7c60::/48' config switch option name 'switch0' option reset '1' option enable_vlan '1' config switch_vlan option device 'switch0' option vlan '11' option name 'LAN1, eth1.11' option ports '0t 4' config switch_vlan option device 'switch0' option vlan '12' option name 'LAN2, eth1.12' option ports '0t 3' config switch_vlan option device 'switch0' option vlan '13' option name 'LAN3, eth1.13' option ports '0t 2' config switch_vlan option device 'switch0' option vlan '14' option name 'LAN4, eth1.14' option ports '0t 1' config switch_vlan option device 'switch0' option vlan '2' option warning 'dont change this vlan number' option name 'wan, eth0' option ports '5 6' config interface 'lan' option ifname 'eth1.11 eth1.12 eth1.13 eth1.14' option force_link '1' option type 'bridge' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' option ip6assign '60' config interface 'wan' option ifname 'eth0' option proto 'dhcp' config interface 'wan6' option ifname '@wan' option proto 'dhcpv6'
Failsafe mode
See OpenWrt Failsafe Mode for general information.
- Power up your router. When the 'SYS' LED starts to blink, press the QSS push button repeatedly until the blinking of 'SYS' LED gets faster. Done = You made OpenWrt boot into OpenWrt failsafe mode. Proceed with In OpenWrt Failsafe Mode
WiFi: Using other country regulations
Per default the WLan-"Country Code" is set to US. That means users of OpenWrt worldwide are limited to Channel 1-11.
To unlock the specific channels of your country, it is possible to compile OpenWrt with “ATH_USER_REGD” set (recommended, and enabled by default in recent OpenWRT versions).
WARNING: Do this only if you know what you're doing! Using the wrong frequencies can result in interfering with other radio services.
Get the usb working
On 14.07 the following packages were installed to let the usb work (Those are basically the packages described in the two pages linked above):
opkg update && opkg install block-mount fdisk kmod-usb-ohci kmod-scsi-generic kmod-usb-storage-extras kmod-usb-uhci kmod-usb2 e2fsprogs kmod-fs-ext4
Hardware
Info
TP-Link naming scheme is, that numbers behind the comma, refer to changes in the firmware only, the hardware is identical.
Type | HW ver. 1.x | HW ver. 2.x |
---|---|---|
Instruction set: | MIPS32 | |
Vendor: | Qualcomm Atheros | |
bootloader: | U-Boot 1.1.4 | |
System-On-Chip: | AR9132 rev 2 | QCA9558 |
CPU/Frq | 24Kc V7.4 400 MHz | 74Kc V5.0 720 MHz |
Target name | ar71xx | |
Flash-Chip: | ST 25P64V6P | Winbond 25Q64FV |
Flash size: | 8192 KiB | |
RAM: | 32 MiB | 64 MiB |
Wireless: | Atheros AR9103 2.4 GHz 802.11bgn | QCA9558 2.4 GHz 802.11bgn |
Wireless Power: | 24 dBm (251 mW) | 25 dBm(316 mW) |
802.11n: | 3 x 3 : 2 | 3 x 3 : 3 |
switch: | RealTek RTL8366RB | Atheros AR8327N-BL1A |
swconfig: | yes, rtl8366rb | yes, ar8216 |
USB: | Yes 1 x 2.0 (OHCI platform; device name 1-1 ) |
|
Power: | 12V DC 1.5A | |
Serial: | Yes | |
JTAG: | Yes | No? |
Performance
- Filesystems & network performance results and performance howto for help on measuring.
- USB Benchmarks results.
- This router gets around 180 Megabits/s WAN to LAN throughput, tested using nuttcp.
- Wan to Lan Throughput V1.x 122.7 Mbps http://www.smallnetbuilder.com/lanwan/router-charts/bar/74-wan-to-lan
- Using 2 mikrotik routersOS x86 on a vmware machine, doing the bandwidth test through a wr1043n with openwrt 14.07 and basic network/firewall setup, got a stable speed of 210 Mbps (tcp, udp would be higher because easier to handle).
Power
Power Consumption
With a cheap Wattmeter i measured 6.9 W idle and 9 W under load.
PSU (power supply)
My TL-WR1043ND DE (v1.0) came bundled with the following PSU:
Specifications:
TL-WR1043ND DE (v1.0) | TL-WR1043ND v2.1 | |
---|---|---|
Brand/Model | Leader Electronics Inc / LEI F7 | TP-LINK Tech. co., ltd. |
Input | 100-240V~ (50/60Hz, 0.6A) | |
Output | 12V 1.5A | |
Measured output | 12.25V | 12.40V (w/o load) |
The plug (on the router side) has the following specifications: | ||
Outer diameter | 5.5mm | |
Inner diameter | 2.1mm | |
Length of the shaft | 9.5mm |
I successfully used the ATX PSU (from my computer) to power the router. All I did was buying a plug with above specifications and soldered a Molex-plug to the other end.
Powering with different Voltages
WARNING: For sure you will lose your warranty if you run the router with too high voltage and I don't guarantee it will work for you. Your router might break, so only run it with too high voltage if you know what you are doing and you don't care if the router breaks.
Because I wanted to run the router directly from solar and the 12V battery can have between 10.4V and 14.8V I tested the router with different voltages and it runs fine with voltages between 10V and 15V. Could not see any failures or loss in performance.
Power consumption on DC-Side
I have measured simultaneously voltage and current on the DC-side of the router with 2 analogue multimeters.
It looks like my AC-DC adapter is stabilized and delivers exactly 12 Volts.
- Without LAN Connected, without any USB device, OpenWrt Running with WLAN 10dBm (b/g AP mode) : 250mA
- With 1x100MBit LAN, 1xHuawei E1750 in idle (not connected) : 320mA
- With HSDPA Connection active : 400mA
The HSDPA modem seems to draw a lot of power as soon as any data is transferred. In total i guess approx. 500mA. (Was NOT possible to measure exactly because my amperemeter is very slow...)
Photos
Opening the case
Note: This will void your warranty!
The case of the WR1043N v1.x is composed of 4 pieces:
- Top cover (white, with logo)
- Bottom cover (white, with sticker)
- Front (transparent, black)
- Outer frame (black, vents on the sides)
There are only two screws at the back of the device, under the rubber feet. The rest of the case is kept together by two latches at the front of the device, and a system of guides and hooks in the front.
- Remove the antennas.
- Remove the rubber feet in the back and undo the screws.
- Unscrew all three retaining nuts on the antenna connectors and carefully push them into the housing. If you find this hard to do, leave them in place: you'll have to pay attention and avoid pulling the outer frame, as there are wires running from the back of the device all the way to the front of the board.
- Push one of the bottom screws back into place to lift the top cover, and keep it that way using a finger.
- With the top slightly open, push the bottom cover away. Use a screwdriver if you can't reach it with your fingers.
- If you have unscrewed the antenna connectors, now you can remove outer frame. Otherwise just carefully slide it out of the way: this will expose the clips that keep the top and bottom covers together.
- With a flathead screwdriver or similar tool, gently pry the two front clips apart. Each clip has two latches and is located near the corners, next to the black front. Put your screwdriver behind the latches and push it towards the ethernet ports.
- Now the top cover can slide out the vertical guides on the black front.
- The black front also has three plastic hooks that go into matching holes in the bottom cover. To remove it, pull the front away and then push it down.
Pictures can be found here
The case of the WR1043N v2.x is composed of 2 pieces:
- Top cover (black (bluish))
- Bottom cover (gray)
1. Remove the four screws on the bottom cover. 2. Use a thin object to release the top cover from the bottom cover
Putting it back together
v1.x
- Place the board on the bottom cover, so that the two plastic pins at the front keep it in place.
- If you undid the antenna connectors, put them back in and tighten the nuts.
- Place the outer frame behind the board and make sure it sits flush to the connectors.
- Insert the hooks of the front into the holes in the bottom cover, don't push it in yet.
- Make the top cover slide into the vertical guides on the front. Don't push it down yet.
- Push the front towards the back so the hooks are engaged, then push down the top cover.
- Fasten the screws and re-apply the rubber feet.
v2.x
- Put the top cover back on
- Press until it clicks back nicely to the bottom cover.
- Put back the screws
Serial
→ port.serial general information about the serial port, serial port cable, etc. How to connect to Serial Port:
Solder a header as shown in the picture or wires with a connector directly. The device uses TTL @ 3.3V and not a standard RS-232 Serial that operates between 3 and 15V, so do not try to connect it to a common serial adapter: you will certainly fry the serial circuit or even the whole board. There are plenty of USB to TTL and RS-232 to TTL available on the market, just be careful with the voltage: the standard is 5V and it may also damage your board. Look for the ones with 3.3V or with both voltages and a way to switch between them.
Don’t forget that the TX pin of the serial port must linked to the RX pin of the router and the RX to TX!
Bits per second: 115200
Data bits: 8
Parity: None
Stop bits: 1
Flow control: None
If you use the serial connection more often or want to have a permanent modification you can build a stereo audio jack at the back of the router and use the FTDI serial cable TTL-232R-3V3-AJ. As jumper wire you can recycle an old floppy drive power cable.
Receive (RX) Disabled
Some revisions of v1.x require a jumper between the RX serial pin and the resistor R362 to enable serial writes. See this post for details:
https://forum.openwrt.org/viewtopic.php?pid=176448#p176448
If you find that the serial console will not accept write commands, check with a multimeter that you have continuity between RX and R362.
If you don't have continuity you will need to jumper them, here is my working example:
I went to the right hand side of the resistor for ease of soldiering, but there may be better solutions.
I also noticed that the small hole just below R362 has continuity to the RX pin so that may provide a cleaner solution with a much smaller jumper.
JTAG
→ port.jtag general information about the JTAG port, JTAG cable, etc.
JTAG Line:
http://forum.openwrt.org/viewtopic.php?pid=79931#p79931
Software:
Download EJTAG Debrick Utility 3.0.1
Backup:
Backup whole flash:
tjtag3.exe -backup:custom /fc:25 /window:bf000000 /start:bf000000 /length:00800000
Backup UBoot:
tjtag3.exe -backup:custom /fc:25 /window:bf000000 /start:bf000000 /length:00020000
Backup Firmware:
tjtag3.exe -backup:custom /fc:25 /window:bf000000 /start:bf020000 /length:00800000
At the moment it is NOT possible to UNBRICK the router by JTAG (no write access to flashrom). So be very careful not to overwrite the u-boot.
GPIOs
The AR913x platform provides 22 GPIOs. Some of them are used by the router for status LEDs, buttons and to communicate with the RTL8366RB. The table below shows the results of some investigation:
Voltage level at GPIO in output-mode | gpioX/value in input-mode when GPIO is: | ||||||
---|---|---|---|---|---|---|---|
GPIO | Common Name | PCB Name | gpioX/value=1 | gpioX/value=0 | Floating | Pulled to GND | Pulled to Vcc |
0 | →R713 | 3.3V | 0V | 1 | 0 | 1 | |
1 | USB | D18=D9 | 0V | 3.3V | 1 | 1 | 1 |
2 | SYS | D19=D8 | 0V | 3.3V | 1 | 1 | 1 |
3 | RESET | SW6 | 3.3V | 0V | 1 | 0 | 1 |
4 | |||||||
5 | QSS | D31=D10 | 3.3V | 0V | 0 | 0 | 1 |
6 | |||||||
7 | QSS-Button | SW8=SW9 | 3.3V | 0V | 1 | 0 | 1 |
8 | Setting data direction to output and value to 0 causes hard reset of the SoC | ||||||
9 | WLAN | D11=D7 | 0V | 3.3V | 1 | 1 | 1 |
10 | P1-Tx | overriden by tty-kernel module | 1 | 0 | 1 | ||
11 | |||||||
12 | |||||||
13 | P1-Rx | 3.3V | 0V | 0 | 0 | 1 | |
14 | |||||||
15 | USB PSU OC CHK* | →R706 | 3.3V | 0V | 1 | 0 | 1 |
16 | USB PSU EN* | →R708 | 3.3V | 0V | 1 | 0 | 1 |
17 | |||||||
18 | Data line of the RTL8366RB | ||||||
19 | Clock line of the RTL8366RB | ||||||
20 | GPIO20 | 3.3V | 0V | 1 | 0 | 1 | |
21 |
To make the GPIOs available via sysfs, the required ones have to be exported to userspace, as it is explained on a page of the Squidge-Project. Kernel modules occupying that resource need to be removed before (e.g. “leds-gpio” and “gpio-buttons”). In output-mode, voltage levels of the GPIOs were measured against GND, after the value 1 or 0 had been written to /sys/class/gpio/gpioX/value. In input-mode, the value of the file /sys/class/gpio/gpioX/value was read when the GPIO was floating (initial state), pulled to GND or pulled to Vcc.
LEDs
How to configure LEDs in general, see the LED section in the led_configuration.
The WR1043ND has 10 LEDs:
LED name | LED print | Internal name | Trigger |
---|---|---|---|
Power | PWR | tl-wr1043nd:green:power | N/A |
System | SYS | tl-wr1043nd:green:system | heartbeat |
Wireless LAN | WLAN | tl-wr1043nd:green:wlan | netdev:wlan0 |
LAN Port 4 | 4 | unknown | N/A |
LAN Port 3 | 3 | unknown | N/A |
LAN Port 2 | 2 | unknown | N/A |
LAN Port 1 | 1 | unknown | N/A |
Wide Area Network | WAN | tl-wr1043nd:green:wan | N/A |
Universal Serial Bus | USB | tl-wr1043nd:green:usb | ledtrig-usbdev |
Quick Security Setup | QSS | tl-wr1043nd:green:qss | User preference |
ledtrig-usbdev is only available in attitude adjustment (Trunk) and in self-built Backfire images using this set of patches.
Buttons
→ hardware.button. For custom action on pressing button the easy way with 00-button
script works nicely.
The TP-Link TL-WR1043ND has two buttons:
BUTTON | Event | Backfire ID | Attitude Adjustment ID |
---|---|---|---|
Reset | reset | BTN_0 | reset |
Quick Security Setup | QSS | BTN_1 | wps |
The QSS button is located at the front and can be easily pressed with a finger. The Reset button is located at the back and cannot be pressed with a finger, you need a small item (pen typically) to push it in.
Note: you don't need to configure or activate buttons to get the Failsafe mode working, it will work by default.
Note2: From versions 1.8 up to 2.x holding the reset button for more than 30' resets to OpenWrt initial settings.
Note3: If you use current trunk version of OpenwRT then the reset button is controlled through /etc/rc.button/reset file. If you hold the button for longer than 5 seconds, then OpenWrt resets to initial settings. You can change the behaviour in this file: /etc/rc.button/reset
Debricking
NOTE: If you accidentally bricked your router by overwriting the bootloader, try the following:
- Desolder the Spansion SPI-Flash (here is the datasheet) from the board. I used tin foil to “mask” out everything else which I did not want to desolder and used a heat gun. It worked quite nice.
- Find a way to connect the SPI flash to something with SPI interface.... I used a AVR microcontroller. Here you can download a pdf containing the layout for the adapter board I made to solder the Spansion SPI flash chip on, in order to connect it to the AVR. Attention, the PDF is mirrored and it is intended to manufacturing boards with the direct toner method.
- Write the bootloader into the flash. I got my bootloader out of another wr1043nd.
- Solder the chip back into the router.
- The router shall now be unbricked.
Bootloader Mods
- you could read about bootloader in general and about Das U-Boot/Configuration of U-Boot in particular.
- the uboot version you find on the 1043 is a fork of mainline U-Boot version 1.1.4 from 2005-12-17 see here. You can / you cannot take a current mainline version of uboot and simply cross-compile it for WR1043ND! TP-Link-Version: http://www.tp-link.com/support/gpl.asp. It contains the file
u-boot-ap83.tar.bz2
which is about 6,06 MiB in size, deflate this as well. The deflated source code will occupy about 37MiB of space, start with reading theREADME
. - also see ftp://ftp.denx.de/pub/u-boot/ and compare the versions.
Problem:
you cannot test your bootloader, because for some obscure reason, you don't have write access to the flash via JTAG.
Making bootloader partition writable
Permanent method
Look at target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr1043nd.c (in trunk it's target/linux/ar71xx/files/drivers/mtd/tplinkpart.c)
static struct mtd_partition tl_wr1043nd_partitions[] = { { .name = "u-boot", .offset = 0, .size = 0x020000, .mask_flags = MTD_WRITEABLE, } , { .name = "kernel", .offset = 0x020000, .size = 0x140000, } , { .name = "rootfs", .offset = 0x160000, .size = 0x690000, } , { .name = "art", .offset = 0x7f0000, .size = 0x010000, .mask_flags = MTD_WRITEABLE, } , { .name = "firmware", .offset = 0x020000, .size = 0x7d0000, } };
Remove the line
.mask_flags = MTD_WRITEABLE,
for the partition named “u-boot” to make it writeable.
Temporary method
opkg install kmod-mtd-rw insmod mtd-rw i_want_a_brick=1 dd if=./FILE of=/dev/mtdX
Change MAC Address
- Get the uboot image via the following command
cp /dev/mtd0ro /tmp/uboot.org
- Verify is a 1 to 1 copy (expect no output)
cmp -l /dev/mtd0ro /tmp/uboot.org
- Backup your original uboot
tar -czf /tmp/uboot.tar.gz -C /tmp uboot.org ln -s /tmp/uboot.tar.gz /www/uboot.tar.gz
and download via http://192.168.1.1/uboot.tar.gz
- At the offset 0x1FC00 you will usually find your mac address.
hexdump -n 6 -s 130048 -e '"%06.6_ax " 5/1 "%02X:" 1/1 "%02X""\n"' /tmp/uboot.org
- You can change it with an hex editor. I use dhex. Or use the following command
newmac=00:BA:AD:BE:EF:69 echo $newmac | awk -v FS="[: -]" '{for (i=1; i<=NF; i++) printf "%c", ("0x" $i)+0 }' | dd conv=notrunc bs=1 count=6 seek=130048 of=/tmp/uboot.org mv /tmp/uboot.org /tmp/uboot.mod
- Double check your newly created, or spoof MAC Address:
hexdump -C -n 16 -s 130048 /tmp/uboot.mod cmp -l /dev/mtd0ro /tmp/uboot.mod
- After changing the MAC and making the u-boot mtd flash portion writeable, you can write the modified uboot image back to flash:
mtd write /tmp/uboot.mod u-boot
where “uboot.mod” is the filename of your modified uboot image.
- If the above command fails, you missing the custom firmware step, don't go any further.
- After reboot a new radio1 will be created with default interface. To keep current settings and prevent radio1 creation
uci set wireless.radio0.macaddr=$newmac uci commit wireless reboot & exit
- To get rid of wild radio1 after reboot, instead of the above prevention, get the cure:
uci set wireless.radio0.macaddr=$(uci get wireless.radio1.macaddr) uci delete wireless.@wifi-iface[-1] uci delete wireless.radio1 uci commit wireless
- Your old MAC Address could be recovered from the sticker in the back of your router. Write it down securely, if in a hard to access location.
Hardware Mods
As a beginner, you really should inform yourself about soldering in general and then even obtain some experience!
64MB RAM Mod
The Device uses a DDR1 16Mbit x 16bit (16Mibit*16=256 mebibit. 256 mebibit/8=32MiByte) 400MHz chip. Replace it with any 32Mbit x 16bit chip. 333MHz instead of 400MHz also works fine. It's quite hard to find these chips. The best chance is to have a look at DDR-SODIMM. Since there are no 64Mbit x 16Bit DDR1 Chips available → no 128 MB mod!
Working chips:
- Hynix HY5DU121622DTP-D43 (From Mustang DDR-SODIMM 512 MB)
- Hynix HY5DU121622CTP-J (PC333 DDR RAM)
- Infineon HYB25D512160BE (From Infineon DDR-SODIMM 512 MB)
- EtronTech EM6AB160TSA-5G (PC400 200MHz)
- Nanya NT5DS32M16BS-6K (From DDR-SODIMM 512 MB, 333MHz), update: restarting device fail every time, have to power un-replug. Plus the kernel still report 200MHz RAM speed, and this feels RAM overclocking. Changing to Hynix DDR400 fix the restarting hang bug.
Additional list that may work:
Type | ID Code | Vendor | ||
---|---|---|---|---|
DDR | 32Mx16 | PC400 TSOP Pb Free | HY5DU121622DTP-D43-C | Hynix |
DDR | 32Mx16 | PC400 TSOP Pb Free | H5DU5162ETR-E3C | Hynix |
DDR | 32Mx16 | PC400 Pb Free | K4H511638G-LCCC | Samsung |
DDR | 32Mx16 | PC400 Pb Free | K4H511638J-LCCC | Samsung |
DDR | 32Mx16 | PC400 | A3S12D40ETP-G5 | Zentel |
DDR | 32Mx16 | PC400 | NT5DS32M16BS-5T | Nanya |
DDR | 32Mx16 | PC400 PB Free | P3S12D40ETP-GUTT | Mira |
DDR | 32Mx16 | PC333 CL2.5 TSOP | MT46V32M16TG-6T:F | Micron |
DDR | 32Mx16 | PC333 CL2.5 TSOP | MT46V32M16P-6T:F | Micron |
DDR | 32Mx16 | PC333 PB Free TSOP | EDD5116ADTA-6B-E | Elpida |
DDR | 32Mx16 | PC333 PB Free TSOP | HYB25D512160CE-6 | Qimonda |
DDR | 32Mx16 | PC333 PB Free TSOP | HYB25D512160CEL-6 | Qimonda |
DDR | 32Mx16 | PC333 PB Free TSOP | HYB25D512160DE-6 | Qimonda |
root@OpenWrt:~# free total used free shared buffers Mem: 62104 17472 44632 0 1392 Total: 62104 17472 44632
This chip from Digikey should work too, if you aren't able to obtain a DDR-module: Alliance Memory, Inc. AS4C32M16D1-5TCN
I²C GPIO Mod
An I²C-bus can easily be added using the GPIO-lines of the AR913x-SoC. So far, the only usable ones which have been confirmed to work are GPIO 0 (the unpopulated R713 located in the bottom right corner of the SoC, using the pad facing R714), GPIO 5 (the QSS-LED, easily soldered at D10,left pin with '+') and GPIO 20 (labeled on the pcb, next to the RAM chip, easily soldered from the bottom side). Using GPIO 0 and 20 may be the best choice, as they are not used, so there are no issues about removing the LED driver(bindings) or pcb components. If GPIO 5 has to be used, it should be used for SDA (it has less level changes than SCL). There are only two pull-up resistors of 4,7k-10k needed, which have to be soldered between the appropriate GPIO line and Vcc (found at the spot labeled TP3V3, about 2 cm above the WiFi-shielding). The common ground can be obtained from the TP_GND spot (between P1 and the flash chip). Remember this bus runs at 3.3V level, when connecting I²C-devices.
To improve signal integrity (in this case namely a solid logic low level on GPIO 5), you can replace R373 with a piece of wire and remove the LED D31. R373 seems to be the current limit resistor for the LED D31.
Make sure to install package kmod-i2c-gpio-custom. To load the kernel module (with SCL=GPIO 0 and SDA=GPIO 20), do a:
insmod i2c-gpio-custom bus0=0,20,0
If your I2C-bus runs successfully, you can enable it on boot by creating a file in /etc/modules.d called “55-i2c-gpio-custom” with the options appropriate to your bus configuration. For example:
i2c-gpio-custom bus0=0,20,0
A more convenient way to add an I2C-bus to this router, without a modification of the internal hardware (and risking your warranty), is using the I²C Tiny-USB adapter. The downsides are, that it is not as cheap as the I²C-GPIO mod, and the longterm-stability is lower (temporary USB disconnects can occur randomly or due to EMI, but the I2C-subsystem is not designed for sudden disconnects). Remember this bus runs at 5V level, when connecting I²C-devices.
Flash Mod
Update (2020. 02. 24.): The following instructions are working only with target: ar71xx, because ar71xx images automaticly correct the size of the overlay partition. The new ATH97 target currently (and propably later) miss this feature. Even updating modded unit result limited flash size (8Mb), and most propably lose of wifi (ART partition missplace). At the end of the tutorial you can read updated information how to migrate to ATH97 target. End of Update
You can install 16 MB flash Winbound 25Q128
Tested method on HW version 1, board version: 1.8: The board has SOP16 (16 pin) flash chip pin layout, BUT under it also a SOP8 (discovered during the update process :) )
(I am windows guy mainly)
1. Backup “boot”, and “ART” partition:
list partitions: cat /proc/mtd
backup: cat /dev/mtd0 > /tmp/mtd0.bin cat /dev/mtd4 > /tmp/mtd4.bin The 2 .bin file can be saved with winscp on windows, most easily.
2. Create “empty” file:
You have to create image file, with the following layout: BOOT+"actual openwrt factory image"+"empty file"+ART The final image size have to match the size of the flash (16M), so you have to play with the size of the "empty file". under linux: dd if=/dev/zero bs=1 count=FILESIZE | tr "\000" "\377" > empty You HAVE TO set the FILESIZE
3. Create new flash file data (for flash programing):
In windows: copy /B mtd0.bin+"actual openwrt factory image"+"empty file (wich means all FF)"+mtd4.bin final.bin
4. Flash with programmer.
I had used one TL866II Plus. Don't buy "CH341A", it is garbage, voltages incorrect, ect.
5. Replace “U14” marked flash chip, and boot.
The overlay partition size will autocorrect at the first boot.
6. Profit.
SSH was not worked until seting the interfeace (to “lan”). (?) 18.06.1 specific?
Wifi tested, working.
Best of luck!
7. Update: Second mod with one SOP8 pinout flash confirmed to work. (HW version 1, Board version 1.8)
ATH97 migration update (2020. 02. 24):
As, you can read here: https://forum.openwrt.org/t/using-release-ath79-19-07-0-kernel-and-packages-on-hardware-modded-tp-link-wr703n-16mb-64mb-without-snapshot-compilation/54310/7
Another great user (Tarask1n) of the openwrt forum had simmilar problems with the Tp-Link WR-703n unit. Results of his great work, he created a script, which can patch the original kernel to utilize the full available flash (eg: 16M)
The patch can be reached from here (With absolutely no warranty, you have the full responsibility!) https://1drv.ms/u/s!Agn0XLRpyDNbiMAf1ZuhQ_lfcGmkIg?e=PNttUU
To make this script work you need to have an - openwrt patched - lzma utility. As a linux nooby (me), the easyest was (which was not easy), to clone the openwrt github repo, and compile/make menuconfig. On Ubuntu 18.04 LTS i had a ton of dependency problems, and most of them was not an easy google search.
My succesful build was needed further editing of imagebuilder configuration files as the following:
Edited: openwrt-imagebuilder-19.07.1-ath79-generic.Linux-x86_64\target\linux\ath79\image\common-tp-link.mk Add lines:
define Device/tplink-16m $(Device/tplink) TPLINK_FLASHLAYOUT := 16M IMAGE_SIZE := 15872k endef
Edited: openwrt-imagebuilder-19.07.1-ath79-generic.Linux-x86_64\target\linux\ath79\image\generic-tp-link.mk
Search for:
define Device/tplink_tl-wr1043nd-v1
$(Device/tplink-8m)
ATH_SOC := ar9132
DEVICE_TITLE := TP-Link TL-WR1043N/ND v1
DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
TPLINK_HWID := 0x10430001
SUPPORTED_DEVICES += tl-wr1043nd
endef
TARGET_DEVICES += tplink_tl-wr1043nd-v1
Change it to (1 line change):
define Device/tplink_tl-wr1043nd-v1
$(Device/tplink-16m)
ATH_SOC := ar9132
DEVICE_TITLE := TP-Link TL-WR1043N/ND v1
DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
TPLINK_HWID := 0x10430001
SUPPORTED_DEVICES += tl-wr1043nd
endef
TARGET_DEVICES += tplink_tl-wr1043nd-v1
After build, i had:
16.253.928 byte long “...factory.bin” image >>> This image was not tested!
3.735.822 byte long “...sysupgrade.bin” image >>> This image was tested, and did proper ar71xx > ATH79 migration. Wifi was working, flash size was correct.
Other models with the same hardware
- Canyon CNP-WF514N3A description and internal photos here
- Proware PW-RN611D/MH5-WR1043ND probably another clone...
- TL-WR1045ND Looks similar to hardware V3