Table of Contents

D-Link DAP Series of Business Access Points

Old Generation DAP-2xxx / DAP-3xxx (built by Alpha Networks)

Model Overview

Model Wireless SoC / WiFi Flash RAM Case
DAP-2230 N300 QCA9533 16 64 Wall-Mount Plastic
DAP-2610 AC1200 Wave 2 IPQ4018 16 256 Wall-Mount Plastic
DAP-2660 A1 AC1200 QCA9557 + QCA9882 16 128 Wall-Mount Plastic
DAP-2660 A2 AC1200 QCA9558 + QCA9882 16 128 Wall-Mount Plastic
DAP-2680 AC1750 Wave 2 QCA9558 + QCA9984 16 256 Wall-Mount Plastic
DAP-2682* AC2300 Wave 2 QCN5502 + QCA9984 16 ? Wall-Mount Plastic
DAP-2695 AC1750 QCA9558 + QCA9880 16 256 Plenum-Rated Metal, 6 detachable Antennas, 2x LAN
DAP-3320 N300 QCA9533 16 64 Outdoor Pole-Mount Plastic
DAP-3662 AC1200 QCA9557 + QCA9882 16 128 Outdoor Pole-Mount IP68 Plastic, 2x LAN
DAP-X2810* AX1800 IPQ8000 + QCN5022 + QCN5052 ? ? Wall-Mount Plastic
DAP-X2850* AX3600 IPQ8072 + QCN5024 + QCN5054 ? ? Wall-Mount Plastic

*not yet supported

DAP-2553 and DAP-2360 are currently unsupported due to issues with GMAC configuration on AR72xx when using an external Gigabit PHY (they only work when 100BASE-T is forced by the link partner).

DAP-2590 is based on the Cavium Octeon platform, there is experimental support here, which also includes support for setting an additional flag during wrgg03 image header generation, which is also required by DAP-2553 and DAP-2360.

DAP-1353 Rev. B1 seems to use the same design as DAP-2553 (without dual-band, PoE and Gigabit) and might be trivial to support, while Rev. A1 is based on an unsupported SoC.

Power Supply

All devices can be supplied via 802.3af PoE (.3at for DAP-2680 and DAP-2695).

Alternatively, DAP-2230, DAP-2610, DAP-2660 and DAP-2680 can be powered from a 12V supply, using a 3.5 x 1.35mm plug.

DAP-2695 can be powered from a 48V supply, using a special plug with center pin, the same as the PSU that comes with the DPE-101GI injector.

Serial Console

The Serial Console port is usually easy to spot, it is the same connector with a space between the first and second pin. Connection parameters are 115200 8N1.

Pin 1 RX
Pin 2 (spacer only, no drilling in PCB)
Pin 3 +3.3V
Pin 4 GND
Pin 5 TX

Unbricking

As with many D-Link devices, these APs come with an HTTP-based recovery system that is activated by holding reset button down during power-on. However, most devices will perform a reset after detecting a rising edge of the reset line upon releasing the button (this behavior is most probably not intentional, but a bug in the bootloader). Thus, you need to keep the reset button pressed during all of the time from opening your browser at http://192.168.0.50, selecting the image and finally clicking the Upgrade button. The reset button can be released after uploading has started.

Please give the bootloader at least 10-20 seconds more time for upgrading even after the countdown has reached zero, before power-cycling the device!

Alternatively, you can connect a serial cable and press 'q' during boot. This will enter the http recovery just like the reset button. You can press 'q' again to enter uboot shell.

Flashing

The default IP address for these devices is http://192.168.0.50. There is no DHCP, thus set your network interface to be in the same range.

Login as 'admin' and leave the password field blank.

Factory image can be flashed via the regular update procedure from the 'maintenance' menu.

After initially flashing the device to OpenWrt, flash a sysupgrade image again. This is not required, but allows you to use more space from the flash. See the next section for more technical details.

Factory Images

The factory image is created using the mkwrggimg tool, which generates the wrgg03 header and checksum.

To be flashable via the regular OEM Web UI, the size of the uploaded wrgg image needs to be at least 6 MiB (this might be just to prevent users from bricking their devices by accidentally flashing a language pack, which uses the same format).

However, since the whole image will be written to flash and the bootloader verifies the wrgg checksum on every boot, we can not have rootfs within the wrgg partition, since it will be expanded with jffs2 on first boot and cause a checksum mismatch whenever data is changed. Thus, the factory image contains the kernel padded to 6 MiB + squashfs, so that jffs2 will always be outside of the memory region covered by the wrgg checksum.

As soon as the device is running OpenWrt already, there is no more minimum size of 6 MiB, so we can put just the kernel in the wrgg partition, which will not cause the problem of a changing checksum.

So, when more flash space is required, a sysupgrade image can be flashed right after factory, to allow for using of all the available flash memory.

The recovery also does not have the minimum size requirement, however we shall prefer not to have three separate images (factory padded for web-flashing, factory unpadded for recovery, sysupgrade) when the padded factory image is also accepted by the recovery (but requires double flashing to use all of the available flash space).

Image header format

struct wrgg03_header {
	char		signature[32];
	uint32_t	magic1;
	uint32_t	magic2;
	char		version[16];
	char		model[16];
	uint32_t	flag[2];
	uint32_t	reserve[2];
	char		buildno[16];
	uint32_t	size;
	uint32_t	offset;
	char		devname[32];
	char		digest[16];
}

In the wrgg03 image header, there is a 32 bit field called flags at 0x48, which is currently not set (i.e. remains zero) by mkwrggimg. For most devices, this is zero, however few older devices (DAP-2360, DAP-2553, DAP-2590) have the value set to 1. This field can be used by the manufacturer to release firmware updates that would introduce changes which do not allow for downgrading back to previous versions: While checking the header, the web-based updater will verify the value of this field to be the same or higher than the firmware that is currently installed. If any of the forementioned devices shall be supported, the option to set this flag to 1 needs to be introduced to mkwrggimg, e.g. as implemented in this commit.

New Generation DAP-2xxx / DAP-3xxx (built by Edimax)

Model Overview

Model Wireless SoC / WiFi Flash RAM Case
DAP-2620 AC1200 Wave 2 QCA9563 + QCA9886 16 128 compact rectangular, network + phone socket retrofit (RJ11 rear-to-bottom pass-through)
DAP-2622 AC1200 Wave 2 QCA9563 + QCA9886 16 128 compact rectangular, network socket retrofit (one rear + 2 bottom ports)
DAP-2662 AC1200 Wave 2 QCA9563 + QCA9886 16 128 rounded square
DAP-3315 N300 QCA9531 16 64 outdoor plastic, 12 dBi sector antenna
DAP-3666 AC1200 Wave 2 QCA9563 + QCA9886 16 128 outdoor plastic square
DIS-2650AP AC1200 Wave 2 QCA9563 + QCA9886 16 128 industrial-grade rail-mount metal, triple redundant power supply, console port
DIS-3650AP AC1200 Wave 2 QCA9563 + QCA9886 16 128 industrial-grade outdoor metal, two N-connector antennas

Image Format

All devices except DAP-3315 use the Edimax ELX header format, encapsulated within the legacy Alpha Networks wrgg03 header (for compatibility with the nuclias central management platform).

DAP-3315 only uses the ELX header.

Support for ELX header in OpenWrt is currently very simple; it seems additional fields need to be set in order to support these devices.

Hardware

A hardware watchdog (SOT-23 reset IC) is used on most of these devices, requiring the kernel to continiuosly toggle the corresponding GPIO line, e.g. for DAP-2662:

watchdog {
	compatible = "linux,wdt-gpio";
	gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
	hw_algo = "toggle";
	hw_margin_ms = <1600>;
	always-running;
};