Karthikeyan,

DSPI read:

- Check status (sr & 0x0000F000), continue if >= 4
- Write 0x800n0003 to pop register (0xfc05c038) where n is chipsel (1 << 
chipsel), 3 is perform read (AT25080A does not have fast read feature)
- dummy read
- write 0x800n00xx to popr, address byte 2
- dummy read
- write 0x800n00xx to popr, address byte 1
- dummy read
- write 0x800n00xx to popr, address byte 0
- dummy read
- write 0x800n0000 to popr, ready for read
- read a byte

Hope this help.

[snip - assembly]
        move.l  #0xFC05C034, %a2        /* dtfr */
        move.l  #0xFC05C03B, %a3        /* drfr */

        move.l  #0x2a000, %d5
        move.l  #(TEXT_BASE), %a4

        move.l  #0xFC05C02C, %a1        /* dspi status */

        /* Issue commands and address */
        move.l  #0x80020003, %d2        /* Fast Read Cmd */
        jsr     asm_dspi_wr_status
        jsr     asm_dspi_rd_status

        move.l  #0x80020000, %d2        /* Address byte 2 */
        jsr     asm_dspi_wr_status
        jsr     asm_dspi_rd_status

        move.l  #0x80020000, %d2        /* Address byte 1 */
        jsr     asm_dspi_wr_status
        jsr     asm_dspi_rd_status

        move.l  #0x80020003, %d2        /* Address byte 0 */
        jsr     asm_dspi_wr_status
        jsr     asm_dspi_rd_status

        /* Transfer u-boot from serial flash to memory */
asm_dspi_rd_loop2:
        move.l  #0x80020000, %d2
        jsr     asm_dspi_wr_status
        jsr     asm_dspi_rd_status

        move.b  %d1, (%a4)              /* read, copy to dst */

        add.l   #1, %a4                 /* inc dst by 1 */
        sub.l   #1, %d5                 /* dec cnt by 1 */
        bne     asm_dspi_rd_loop2

        move.l  #0x00020000, %d2        /* Terminate */
        jsr     asm_dspi_wr_status
        jsr     asm_dspi_rd_status

asm_dspi_wr_status:
        move.l  (%a1), %d0              /* status */
        and.l   #0x0000F000, %d0
        cmp.l   #0x00003000, %d0
        bgt     asm_dspi_wr_status

        move.l  %d2, (%a2)
        rts

asm_dspi_rd_status:
        move.l  (%a1), %d0              /* status */
        and.l   #0x000000F0, %d0
        lsr.l   #4, %d0
        cmp.l   #0, %d0
        beq     asm_dspi_rd_status

        move.b  (%a3), %d1
        rts


[snip - c]
        do {
                dspi_tx(chipsel, 0x80, SER_RDSR);
                dspi_rx();
                dspi_tx(chipsel, 0x00, 0);
                temp = dspi_rx();
        } while (temp & 0x01);

        dspi_tx(chipsel, 0x80, SER_READ);
        dspi_rx();
        dspi_tx(chipsel, 0x80, 0);
        dspi_rx();
        dspi_tx(chipsel, 0x80, 0);
        dspi_rx();
        dspi_tx(chipsel, 0x80, 0);
        dspi_rx();

        for (i = 0; i < bytes; i++) {
                dspi_tx(chipsel, 0x80, 0);
                buf[i] = dspi_rx();
        }
        dspi_tx(chipsel, 0x00, 0);
        dspi_rx();

        for (i = 0; i < bytes; i++) {
                if ((i % 16) == 0)
                        printf("\n");
                printf("%02x ", buf[i]);
        }

Regards,
TsiChung
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft 
Defy all challenges. Microsoft(R) Visual Studio 2008. 
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
U-Boot-Users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/u-boot-users

Reply via email to