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