Пример #1
0
static void mmc_write_to_cmd_buffer(unsigned char mmcreplay_cmd_char)
{
    /* Check for 0xff sync byte */
    if (mmc_cmd_buffer_pointer == 0) {
        if (mmcreplay_cmd_char < 0xff) {
/*LOG(("SPI: NOT write to buffer 1: %04x %02x",mmc_cmd_buffer_pointer,mmcreplay_cmd_char)); */
            /* yuck! hack! hack1 */
            if (mmcreplay_cmd_char == 0x51) {
                mmc_cmd_buffer[0] = 0xff;
                mmc_cmd_buffer_pointer++;
            } else {
                return;
            }
        }
    }

    /* Check for one 0xff sync byte too much */
    if (mmc_cmd_buffer_pointer == 1) {
        if (mmcreplay_cmd_char == 0xff) {
            mmc_cmd_buffer_pointer = 0;
            return;
        }
    }

/*LOG(("SPI: write to buffer: %04x %02x",mmc_cmd_buffer_pointer,mmcreplay_cmd_char));*/
    /* Write byte to buffer */
    mmc_cmd_buffer[mmc_cmd_buffer_pointer] = mmcreplay_cmd_char;
    mmc_cmd_buffer_pointer++;

#if 0
LOG(("SPI: buffer: %02x %02x %02x %02x %02x %02x %02x %02x",
    mmc_cmd_buffer[0],
    mmc_cmd_buffer[1],
    mmc_cmd_buffer[2],
    mmc_cmd_buffer[3],
    mmc_cmd_buffer[4],
    mmc_cmd_buffer[5],
    mmc_cmd_buffer[6],
    mmc_cmd_buffer[7],
    mmc_cmd_buffer[8],
    mmc_cmd_buffer[9]
    ));
#endif

    /* If the buffer is full, execute the buffer and clear it */
    if ((mmc_cmd_buffer_pointer > 9) ||
/*    if ((mmc_cmd_buffer_pointer > 8) || */
        (mmc_cmd_buffer_pointer > 7 && mmc_cmd_buffer[1] == 0x40) ||  /* cmd0 */
        (mmc_cmd_buffer_pointer > 8 && mmc_cmd_buffer[1] == 0x48) ||  /* cmd8 */
        (mmc_cmd_buffer_pointer > 8 && mmc_cmd_buffer[1] == 0x49) ||  /* cmd9 */
        (mmc_cmd_buffer_pointer > 8 && mmc_cmd_buffer[1] == 0x4a) ||  /* cmd10 */
        (mmc_cmd_buffer_pointer > 8 && mmc_cmd_buffer[1] == 0x50)   /* cmd16 */
/*      ||  (mmc_cmd_buffer_pointer > 8 && mmc_cmd_buffer[1] == 0x51) */    /* cmd17 */
        )
    {
        mmc_execute_cmd();
        mmc_clear_cmd_buffer();
    }
}
Пример #2
0
/* Resets the card */
static void mmc_reset_card(void)
{
    spi_mmc_trigger_mode_write(0);
    spi_mmc_card_selected_write(0);
    /* mmcreplay_cport = 0; */
    /* mmcreplay_speed = 0; */

    mmc_card_reset_count = 0;
    mmc_image_pointer = 0;
    mmc_block_size = 512;
    mmc_clear_cmd_buffer();
}