admin管理员组

文章数量:1567529

2024年7月21日发(作者:)

Marvell 88w8686 Firmware Download Procedure

By WiFiMod:

Archive for the ‘Marvell WiFi Development’ Category

Marvell 88w8686 Firmware Download Procedure—–SPI Interface

Helper download / Single Stage firmware:

1. Device (boot code) writes to Command Write Base Address Register to set the location for

Firmware download.

2. Device (boot code) writes ‘1’ to CmdDnLdRdy (bit 2, Host Interrupt Cause Register) to indicate

that the device is ready for firmware download.

3. Scratch pad 1 (0×0028) should contain the number of bytes downloaded to the firmware in the

current iteration.

4. Wait for CmdDnLdRdy (bit 2) in Host Interrupt Status Register (0×005C).

5. Write the data into the Command Read / Write Port Register (0×0018).

6. Clear the CmdDnLdRdy (bit 2) of Host Interrupt Status Register (0×005C) to get the next

interrupt.

7. Interrupt the device (boot code) by setting the CmdDnLdOvr (bit 2) in Card Interrupt Status

Register (0×005C).

8. Device (boot code) reads Card Interrupt Status Register to determine the interrupt cause.

9. Device (boot code) moves data from SQU to I-TCM

10. Device (boot code) writes ‘0’ to CmdDnLdOvr (bit 2) of Card Interrupt Cause Register to

re-enable interrupt.

11. Continue step 2 through 10 until all the helper image is downloaded into the card.

12. Once the helper / single stage firmware download is complete, write zero to Scratch pad 1 and

interrupt the bootloader. This will end the helper download.

Note:

? We can download upto 1024 bytes at a time in 1 iteration. (Right now using 64 bytes at a time).

? If the firmware is a single stage firmware then verify of firmware download could be done and

the 2nd stage firmware download should be skipped.

2nd Stage firmware download:

- 1 -

1. This firmware should be downloaded only after the helper image has successfully being

downloaded. When the helper firmware has been completely downloaded the host writes 0 to

Scratch Pad register 1 (0×28) to indicate that the helper-download is over.

2. Wait until a non-zero number appears in Scratch Pad register 1 (0×28). The host must poll this

register until it receives a non-zero number, say once in 100 us.

3. The host verifies that the device has set the CmdDnLdRdy (bit 2) in Host Interrupt Status

Register (0×005C).

4. The host reads Scratch pad register 1 (0×28) to determine how many bytes of firmware needs to

be written (e.g. len).

5. If len = 0 then end (exit) of download.

6. if len = 1 then the previous downloaded data had CRC errors. In this case download the

previous data again.

7. If len != 0 and len != 1, write the len number of bytes of data into the Command Read / Write

Port Register (0×18).

13. Clear the Host Interrupt Status Register (0×005C) to get the next interrupt.

14. Interrupt the bootloader by setting the CmdDnLdOvr (bit 2) in Card Interrupt Status Register

(0×5C).

15. Continue Step 2 through 14 until len = 0 is got.

Firmware download verification:

Verify the firmware download by reading Scratch Pad 4 Register (0×34). The value read should be

0×88888888. This would mean firmware has successfully downloaded and running.

Marvell 88w8686 Firmware Download Procedure—–SDIO Interface

Scope:

To describe the single stage and the 2 stage firmware download via SDIO interface in the Marvell

client cards.

Helper/Single Stage download:

1) Host checks if firmware has already been downloaded.

1. Reads the Scratch pad register at FN0: address 0×80fe and Scratch pad register at FN0: address

0×80ff to see if the values are 0xDC and 0xFE (FIRMWARE_READY status) respectively.

1. If yes, the firmware has already been downloaded; exit the download process.

- 2 -

2. If no, continue to the next step.

2) Host polls the IO_READY and DN_LD_CARD_RDY bits of the Card Control Register: Card

Status Register (offset: 0×20).

3) Checks if the current block is the last block

1. If so, the block length is adjusted to the exact length of the remaining bytes.

2. If it is not the last block, then the length of data that will be downloaded in this iteration=60

(2*32 bytes – 4 byte header).

4) Starts the transfer of firmware blocks.

1. Each block is currently set at 32 bytes. The download length is set to 64 bytes (2 blocks x 32

bytes/block – 4 bytes header) in each iteration for CMD53 write.

2. The CMD53 is issued with Block mode and fixed address as the arguments and by writing into

the IO port register.

5) Repeat 2-4 till the entire helper is downloaded.

6) Download the last packet of length set to 0 to indicate end of data.

7) Wait for 1 sec for the helper to be ready.

Second stage download

1 Host polls the SDIO card status register (FN1 , 0×20) to check IO_READY(bit 3) and

DN_LD_CARD_RDY(bit 0).

2 Read HOST_F1_RD_BASE_0 and HOST_F1_RD_BASE_1 (register 0×10 and 0×11 of FN1)

registers to get the data length set by helper for this iteration.

3 If the length requested by helper is larger than 512 bytes, it will be cut into multiple pieces for

CMD53 write.

4 The current download length is set to 512 bytes (16 blocks x 32 bytes per block) in each

iteration of CMD53 write.

5 Starts the download of 16 blocks of firmware (512 bytes).

6 Copies the payload to the buffer.

7 Write 16 blocks of firmware image data using CMD 53.

8 Repeat steps 5 through 7 till the firmware image data specified by the helper (step 2) for this

iteration is downloaded completely.

9 Repeat steps 2 through 8 till the entire firmware is downloaded completely.

- 3 -

Firmware download verification

1) Reads (FN0) the scratch pad register FN0 (0×80fe) and scratch pad register for FN1 (0×80ff) to

see if the values are 0xDC and 0xFE respectively.

2) This indicates that firmware has been successfully downloaded and is active.

- 4 -

本文标签: 说明程序固件下载