All pastes #247639 Raw Edit

Something

public text v1 · immutable
#247639 ·published 2006-11-13 18:58 UTC
rendered paste body
void sd_select_bank(unsigned char bank)
{
    unsigned int response;
    unsigned char card_data[512];
    unsigned char* write_buf;
    int i;
    tSDCardInfo *card = &card_info[0]; /* Bank selection will only be done on
                                        the onboard flash */
    if (current_bank != bank)
    {
    lcd_puts(0,11,"test0");
    lcd_update();
    
        memset(card_data, 0, 512);
        response = 0;
        while(((response >> 9) & 0xf) != TRAN)
        {
            sd_send_command(SEND_STATUS, (card->rca) << 16, 1);
            sd_read_response(&response, 1);
        }
    lcd_puts(0,11,"test1");
    lcd_update();
        SD_STATE_REG = TRAN;
    lcd_puts(0,11,"test2");
    lcd_update();
        BLOCK_SIZE_REG = 512;
    lcd_puts(0,11,"test3");
    lcd_update();
        BLOCK_COUNT_REG = 1;
    lcd_puts(0,11,"test4");
    lcd_update();
        sd_send_command(35, 0, 0x1c0d); /* CMD35 is vendor specific */
    lcd_puts(0,11,"test5");
    lcd_update();
        sd_read_response(&response, 1);
    lcd_puts(0,11,"test6");
    lcd_update();
        SD_STATE_REG = PRG;
    lcd_puts(0,11,"test7");
    lcd_update();

        card_data[0] = bank;

    lcd_puts(0,11,"test8");
    lcd_update();
        /* Write the card data */
        write_buf = card_data;
        for (i = 0; i < BLOCK_SIZE / 2; i += FIFO_SIZE)
        {
            /* Wait for the FIFO to be empty */
            while((STATUS_REG & FIFO_EMPTY) == 0) {} /* Erm... is this right? */


            copy_write_sectors(write_buf, FIFO_SIZE);

            write_buf += FIFO_SIZE*2; /* Advance one chunk of 16 words */
            udelay(50); /* Don't flood the FIFO.  This can go when we know how
                        to check if the FIFO is empty */

        }

        while((STATUS_REG & DATA_DONE) == 0) {}
        current_bank = bank;
    }
}