iMX31 and 88W8686 SDIO module
Holger Schurig
hs4233 at mail.mn-solutions.de
Tue Apr 29 04:20:30 EDT 2008
On Monday 28 April 2008 13:44:25 claud_yu wrote:
> libertas thread: packet size (50 bytes) from firmware
> libertas CARD_BUF: 00 00 01 00 03 80 2e 00 02 00 00 00 02 00
> 11 00 libertas CARD_BUF: 08 00 40 00 00 19 88 05 39 58 40 00
> 01 00 03 46 libertas CARD_BUF: 09 12 00 00 00 00 00 00 00 00
> 00 00 00 00 03 03 libertas CARD_BUF: 00 00
Yes, this is clearly wrong.
For your reference, on my hardware (a CF card) it looks like
this:
enter: lbs_update_hw_spec()
cmd: DNLD_CMD: command 0x0003, seq 1, size 46
DNLD_CMD: 03 00 2e 00 01 00 00 00 00 00 00 00 00 00 00 00
DNLD_CMD: ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00
DNLD_CMD: 00 00 00 00 00 00 00 00 00 00 00 00 00 00
cmd: CMD_RESP: response 0x8003, seq 1, size 46
CMD_RESP: 03 80 2e 00 01 00 00 00 02 00 13 02 08 00 40 00
CMD_RESP: 00 16 41 72 f6 a8 40 30 01 00 10 00 05 00 00 00
CMD_RESP: 00 00 00 00 00 00 00 00 00 00 03 03 00 00
00:16:41:72:f6:a8, fw 5.0.16p0, cap 0x00000303
You can decode the response by hand:
03 80 -> 0x8003 == CMD_RESP(CMD_GET_HW_SPEC)
2e 00 -> 0x002e = 46 bytes in command body
01 00 -> 0x0001 = sequence number -> first command
00 00 -> 0x0000 = command response, all is OK
and so on, see section 5.5 (page 47) of the firmware
specification. Because your hardware and/or MMC driver
added additional bytes, you got
00 00 -> 0x0000 == COMD_RESP() of nothing
01 00 -> 0x0001 = 1 byte in command body
03 80 -> 0x8003 = sequence number != seq num of sent command -> error
2e 00 -> 0x002e = result code != 0x0000 -> error status
and thus libertas driver got mightingly confused.
More information about the libertas-dev
mailing list