Error processing SSI element include: Must provide a 'file' attribute to an include at /home/mod_perl/hm/ME/VFS/Interface/HTTP/SSIFileRenderer.pm line 61.

OpenAP Hardware Hacking

Overview

This unit is an SMC2652W Access Point, these were also sold as US Robotics 2450, Addtron AWS-100, Netcomm NP2000AP  and a number of other brands including a Linksys and the early model Apple Airport base stations. They are all based upon a Eumitron reference design. Good set of pics here (they all have the same case with different logos and colours) Unfortunately they are somewhat rare now - I saw them for $US100 on www.ebay.com January/February 2003. I'm hoping as better APs become available this hardware will be easier to get second hand. 

The board is based on the now obsolete AMD ELAN SC400, it is a 486 on a chip, including the PCMCIA interface and DRAM control ready to go. It has a prism 2 pcmcia card connected to it. Out of the box it has 1M flash and 4M DRAM onboard. Finally there is an RTL8019 NE2000 clone ethernet chip for the wired interface. More hardware information can be found here.

It is quite a powerful little system - I'm tunneling the ethernet traffic over a cipe tunnel with no problem at all (routing packets, I couldn't get bridging to win2k over cipe to work)  One problem is that it runs quite warm, both the CPU and linear regulators get quite hot - I guess you could replace the linear p/s with a small switch-mode, I've heatsinked the CPU (see below).

There are a number of mailing lists covering the various distributions that support these APs (eg. openap or openap-ct or linuxap). The later also supports the 586 based soekris boards (they use the AMD SC520 chip).

Adding Flash Memory

I just can't afford to spend $US50 plus shipping to Australia on a flash card so I've made an alternative using parts I had lying around.  I've used 2 x AMD29F040 flash chips to create a removable 1M flash storage on a circuit board that attaches to the 8 bit PC104 connector on the front left of the board.  Currently I can switch between the onboard flash chip and the chips on my board.  I'm hoping to be able to use both to create an AP with 2M of flash.

It is also necessary to have a method of programming the flash chips.  I use a conitec galep-iv universal programmer with a homemade plcc adaptor, but there are several self build ideas at http://www.devrs.com/e/tools.php and http://www.willem.org/

Hardware Details

The schematic is linked below.  All the power, address and data lines come from the PC104 connector, the control signals come from the pins of the existing 29F800 flash chip.  The chip select is intercepted and routed via a jumper on the board to allow selection between the two sets of memory.

Kernel Patch

A small change to the standard kernel source is required to enable support for the flash chips being used.  I've only used the AMD 29F040B chips.  Rather than supply the patch since it will change for different chips, here are the lines added to the table in drivers/mtd/chips/jedec_probe.c  Note that I have not bothered to properly add or test erase support so incircuit image modification is not possible.  This is not practical either since the root filesystem in the chip would need to be unmounted - this is not possible without another memory source such as a PCMCIA card.

You can easily add other chips than the AMD 29F040B.  You need to look at the data sheet to find the JEDEC manufacturer identifier (MANUFACTURER_AMD = 0x01) and the device identifier (AM29F040B=0x00A4).

#define AM29F040B 0x00A4
.
.
#define SIZE_500KiB 19
.
.
{
	mfr_id: MANUFACTURER_AMD,
	dev_id: AM29F040B,
	name: "AMD 29F040B",
	DevSize: SIZE_500kiB,
	NumEraseRegions: 1,
	regions: {ERASEINFO(0x80000,1)
}

To check if this has worked, look at the kernel boot messages - the messages are a bit confusing but the important bit indicates 2 chips found.

.
physmap flash device: 100000 at 1000000
Found: AMD 29F040B
Physically mapped flash: Found 1 x8 devices at 0x80000 in 8-bit mode
number of JEDEC chips: 2
.

Image preparation

This is work in progress.  You need to split the flash image from the build into two 512k parts.  You can do this with your programmer software or using split as below.  split creates two files xaa and xab, one for either chip.

split --bytes=512k flash.img
mv xaa flash-l.bin
mv xab flash-h.bin

Program flash-l.bin into the lower chip and flash-h.bin into the upper.

PCB Photos

I've a PCB to carry the two plcc flash chips and connect them to the access point.  I have some spares that I can sell for a nominal price, email me at the address at the bottom of the page.

The PCB is a doubled side through hole plated board with all surface mount components. 
In the rush to finish the board I wired the power to the wrong end of the PC104 connector.  These 3 tracks need to be cut and wires inserted to supply power from the correct pins.
The ground is connected to the outer pin and the positive supply to the fourth pin on the outer row at the other end of the board.
The assembled product looks almost professional.  Note that although it is a little difficult, it is quite possible to solder these surface mount plcc sockets by hand.  These sockets are necessary to reduce the height of the board.  The MSB/High/Upper chip is on the left.  See the prototype images below for details on the connections to the main board.
The final installed version has a nice low profile - low enough to reassemble the case.  The connector wiring is as below except the order is slightly different to the prototype.

Prototype Photos

The components were assembled on a small piece of prototyping board with a cutout for the post on the case.  The components face down, the green connector plugging into the pc104 plug mounted on the board. Remaining connections are made with a 4 pin molex connector (top right). In this version the lower region chip is on the left and the upper on the right.
The wiring was done point to point with wirewrap wire.  This causes difficulty in closing the lid, a custom PCB would be better.
The empty PC104 socket has a 62 pin DIL header soldered into it.
The board is fitted face down just behind the LEDs, the post from the case fits into the cutout. Note the CPU heatshink, heat is certainly a problem with this model AP.
The resistor link (000R) R85 is removed and the four pins are connected as per the notes in the schematic.  OE goes to pin 14 of the 29F800, the CE in and CE out go to either side of R85.  WE goes to the chip side of the unfitted R78 (connected to pin 43 of the 29F800)
Error processing SSI element include: Must provide a 'file' attribute to an include at /home/mod_perl/hm/ME/VFS/Interface/HTTP/SSIFileRenderer.pm line 61.