Exemplo n.º 1
0
void main(void) {
  serial_print(2, "Done!\n");
  spi_slow();
  CLEAR_BIT(SPI_CTL, LED_SEL);
  spi_xfer(0x01); // write
  spi_xfer(0x00); // first pos
  spi_xfer(0xff); // turn it all on
  spi_xfer(0xff); // turn it all on
  spi_xfer(0x01); // write
  spi_xfer(0x08); // 9 pos
  spi_xfer(0xcc); //
  spi_xfer(0xff); // turn it all on
  SET_BIT(SPI_CTL, LED_SEL);
  while (1);
}
Exemplo n.º 2
0
/**
 * card_init - Initializes the SD card
 *
 * Returns 0 if successful, otherwise an SD card error code
 */
uint8_t card_init(void)
{
    uint16_t i;
    uint16_t tries;
    uint8_t data;

    // Initializes chip select line
    CFG_CARD_CS_DDR |= _BV(CFG_CARD_CS_BIT);
    card_chip_deselect();

    // Transmit reset command.
    spi_slow();
    card_chip_select();
    for (tries = 10; tries > 0; tries--) {
        data = card_exec(CARD_CMD_GO_IDLE_STATE, 0);
        if (data == 0x00) {
            break;
        }
        for (i = 0; i < 100; i++) {
            spi_write(0xFF);
        }
    }
    card_chip_deselect();
    spi_restore();
    if (!tries) {
        return data;
    }

    // Transmit initialization command
    card_chip_select();
    for (tries = 20; tries > 0; tries--) {
        data = card_exec(CARD_ACMD_SD_SEND_OP_COND, 0);
        if (data == 0) {
            break;
        }
        for (i = 0; i < 100; i++) {
            spi_write(0xFF);
        }
    }
    card_chip_deselect();
    if (!tries) {
        return data;
    }

    return card_set_block_size(512);
}