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); }
/** * 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); }