First, many thanks to those who have given me help and advice in trying to
get CompactFlash cards to work with the Balloon. As yet, I've been
unsuccessful, but I thought I'd post an update to let others see how
I'm getting on... and possibly spot where I'm going wrong.
Board:
# cat /proc/balloon_board
Board type: 2.05
Board build: Red Aleph dev board
CPLD version: 0x0b
I'm running a version of 2.4.25-vrs2-tcl1 that I compiled myself.
The pcmcia support (pcmcia_core, sa1100_cs etc) are compiled as modules
The /etc/pcmcia directory and various tools (cardmgr) come from the
pcmcia-cs package on husaberg.
Cards:
I have three cards, none of which I can get to work on the balloon (but
all of which worked when tested on another ARM-based device).
The cards are:-
Linksys WCF12 - Wireless 802.11b card
D-Link DCF-660W - Wireless 802.11b card
SanDisk Ultra-II 512MB - Memory card
Power:
Steve suggested that I try measuring the volts supplied to the card. This
is a bit fidly but I have managed to get some numbers - which may or may
not be particularly useful. The absolute numbers are probably not
comparible between the two cards (I get slightly different numbers each
time depending on how good a connection I get with the multimeter probe)
but the voltage drop is fairly consistent.
Linksys card: 3.355V --> 3.284V --> 3.355V drop = 0.071V
D-Link card: 3.351V --> 3.314V --> 3.351V drop = 0.037V
The three numbers are:
the voltage prior to /etc/init.d/pcmcia start
the voltage while the card does something* (for a minute or so)
the voltage after the card has stopped doing whatever it was doing
* This is using the hostap driver. When the driver starts, it registers
a net device, and an interrupt. The interrupt gets called about
10000 times in about a minute (/proc/interrupts) and then that's it.
The LED on the card is lit during this time. Afterwards it turns off
(D-Link) or starts blinking (Linksys).
I'm powering the balloon with the 0V and 5V lines and the board produces
it's own 3.3V. I haven't yet tried supplying an external 3.3V supply to
the board.
The board noramlly draws 0.2A, but while the card is doing something it
can draw as much as 0.4A to 0.5A.
I've always inserted or removed the cards with the power off. I've
tried rebooting the board with the reset button (after the initial power
on) and it doesn't make any difference.
Drivers:
There are several drivers that support the chipsets used by the
wireless cards. The orinoco driver (orinoco_cs.o, orinoco.o and hermes.o)
is in the kernel sources. The hostap driver is available in the
hoastap-modules package on husaberg, although for me this caused a stack
backtrace, so I compiled my own. I have also tried the prism2 driver from
the linux-wlan-ng project. The driver that gets used is selectable based
on the contents of /etc/pcmcia/config.opts.
By the way, cardmgr, cardctl and dump_cis all correctly identify whichever
card is in the balloon, and cardmgr does load the appropriate driver.
Here is the output from dmesg for the two drivers (with the D-Link card)
after '/etc/init.d/pcmcia start'.
Orinoco:
Linux Kernel Card Services 3.1.22
options: [pm]
SA-1100 PCMCIA (CS release 3.1.22)
hermes.c: 4 Dec 2002 David Gibson <
hermes@gibson.dropbear.id.au>
orinoco.c 0.13d (David Gibson <
hermes@gibson.dropbear.id.au> and others)
orinoco_cs.c 0.13d (David Gibson <
hermes@gibson.dropbear.id.au> and others)
eth0: failed to initialize firmware (err = -19)
orinoco_cs: register_netdev() failed
Hostap:
Linux Kernel Card Services 3.1.22
options: [pm]
SA-1100 PCMCIA (CS release 3.1.22)
hostap_crypt: registered algorithm 'NULL'
hostap_cs: 0.2.5 - 2004-10-03 (Jouni Malinen <
jkmaline@cc.hut.fi>)
hostap_cs: setting Vcc=33 (constant)
hostap_cs: CS_EVENT_CARD_INSERTION
hostap_cs: ignoring Vcc=50 (from config)
Checking CFTABLE_ENTRY 0x01 (default 0x01)
IO window settings: cfg->io.nwin=1 dflt.io.nwin=1
io->flags = 0x0046, io.base=0x0000, len=64
hostap_cs: Registered netdevice wifi0
hostap_cs: index 0x01: Vcc 5.0, irq 42, io 0xc4828000-0xc482803f
prism2_hw_init: initialized in 90 ms
prism2_enable_aux_port(1) timed out
prism2_enable_aux_port: was not enabled!?
wifi0: CMD=0x0021 => res=0x7b, resp0=0x0004
wifi0: hfa384x_get_rid: CMDCODE_ACCESS failed (res=123, rid=fd0b, len=8)
wifi0: NIC: id=0x02 v57344.50008.127
wifi0: CMD=0x0021 => res=0x7b, resp0=0x0004
wifi0: hfa384x_get_rid: CMDCODE_ACCESS failed (res=123, rid=fd02, len=8)
wifi0: PRI: id=0x02 v57344.50008.127
wifi0: CMD=0x0021 => res=0x7b, resp0=0x0004
wifi0: hfa384x_get_rid: CMDCODE_ACCESS failed (res=123, rid=fd20, len=8)
wifi0: STA: id=0x02 v57344.50008.127
wifi0: CMD=0x0021 => res=0x7b, resp0=0x0004
wifi0: hfa384x_get_rid: CMDCODE_ACCESS failed (res=123, rid=fd20, len=8)
wifi0: CMD=0x0021 => res=0x7b, resp0=0x0004
wifi0: hfa384x_get_rid: CMDCODE_ACCESS failed (res=123, rid=fc01, len=6)
wifi0: hfa384x_setup_bap - offset error (0,0x04fce0,0); reg=0x4000
wifi0: hfa384x_set_rid (rid=fce0, len=2) - failed - res=-22
wifi0: hfa384x_setup_bap - offset error (0,0x04fc00,0); reg=0x4000
wifi0: hfa384x_set_rid (rid=fc00, len=2) - failed - res=-22
wifi0: Port type setting to 6 failed
wifi0: registered netdevice wlan0
prism2: wlan0: operating mode changed 3 -> 2
wlan0: hfa384x_setup_bap - offset error (0,0x04fc00,0); reg=0x4000
wlan0: hfa384x_set_rid (rid=fc00, len=2) - failed - res=-22
wlan0: hfa384x_setup_bap - offset error (0,0x04fc0e,0); reg=0x4000
wlan0: hfa384x_set_rid (rid=fc0e, len=34) - failed - res=-22
wlan0: hfa384x_setup_bap - offset error (0,0x04fc02,0); reg=0x4000
wlan0: hfa384x_set_rid (rid=fc02, len=34) - failed - res=-22
Now the hostap driver is somewhat more verbose that the orinoco driver,
but I think the problem is actually the same. I beleive that the telling
lines of the hostap driver output are:
wifi0: NIC: id=0x02 v57344.50008.127
wifi0: PRI: id=0x02 v57344.50008.127
wifi0: STA: id=0x02 v57344.50008.127
Basically the driver is attempting to establish the versions number of the
card hardware and the primary and secondary firmware, and gets completely
bogus results...
The hostap driver does get as far as registering the wifi0 and wlan0 net
devices, and they appear in /proc/net/wireless, but iwconfig cannot do
anything with them - not surprisingly.
The Memory card:
The SanDisk memory card doesn't work in the balloon either. I was hoping
that it would be fairly simple to get working since unlike wireless cards
it has no radio, no MAC address, no complicated configuration etc. It was
not to be...
The card basically acts like an IDE drive, and cardmgr loads the ide-cs
driver when it detects the card. This driver produces the following output
in dmesg:
Linux Kernel Card Services 3.1.22
options: [pm]
SA-1100 PCMCIA (CS release 3.1.22)
Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
ide_cs: ide_register() at 0xc4828000 & 0xc482800e, irq 42 failed
Things I haven't tried yet:
Use the 2.6.8.1 kernel instead of 2.4.25
Provide 3.3V to the board (will the power converter on the board get
upset if I supply both 5V and 3.3V?)
Trying a different CPLD version (although David Bisset has told me that
the version I have should work as long as I don't try 'cardctl
eject;cardctl insert' - which I'm not)
Any other suggestions as to how to proceed would be appreciated.
Many thanks for reading this far,
Paul.
Paul Fidler
--
Cambridge University Engineering Department | Tel: +44 1223 332816
Trumpington Street, Cambridge, CB2 1PZ, UK | Fax: +44 1223 332662