Blame view
doc/README.atmel_mci
2.32 KB
1592ef859 AT91: MCI: add SD... |
1 2 3 4 5 6 7 8 9 10 11 12 |
How to use SD/MMC cards with Atmel SoCs having MCI hardware ----------------------------------------------------------- 2010-08-16 Reinhard Meyer <reinhard.meyer@emk-elektronik.de> This is a new approach to use Atmel MCI hardware with the general MMC framework. Therefore it benefits from that framework's abilities to handle SDHC Cards and the ability to write blocks. - AT91SAM9XE512 (tested, will definitely work with XE128 and XE256) - AT91SAM9260 (not tested, but MCI is to AT91SAM9XE) - AT91SAM9G20 (not tested, should work) |
daab59ac0 avr32: Retire AVR... |
13 |
It should work with all other ATMEL devices that have MCI. |
1592ef859 AT91: MCI: add SD... |
14 15 16 17 18 19 |
The generic driver does NOT assign port pins to the MCI block nor does it start the MCI clock. This has to be handled in a board/SoC specific manner before the driver is initialized: example: this is added to at91sam9260_devices.c: |
c9abb4260 ATMEL: remove old... |
20 |
#if defined(CONFIG_GENERIC_ATMEL_MCI) |
1592ef859 AT91: MCI: add SD... |
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
void at91_mci_hw_init(void) { at91_set_a_periph(AT91_PIO_PORTA, 8, PUP); /* MCCK */ #if defined(CONFIG_ATMEL_MCI_PORTB) at91_set_b_periph(AT91_PIO_PORTA, 1, PUP); /* MCCDB */ at91_set_b_periph(AT91_PIO_PORTA, 0, PUP); /* MCDB0 */ at91_set_b_periph(AT91_PIO_PORTA, 5, PUP); /* MCDB1 */ at91_set_b_periph(AT91_PIO_PORTA, 4, PUP); /* MCDB2 */ at91_set_b_periph(AT91_PIO_PORTA, 3, PUP); /* MCDB3 */ #else at91_set_a_periph(AT91_PIO_PORTA, 7, PUP); /* MCCDA */ at91_set_a_periph(AT91_PIO_PORTA, 6, PUP); /* MCDA0 */ at91_set_a_periph(AT91_PIO_PORTA, 9, PUP); /* MCDA1 */ at91_set_a_periph(AT91_PIO_PORTA, 10, PUP); /* MCDA2 */ at91_set_a_periph(AT91_PIO_PORTA, 11, PUP); /* MCDA3 */ #endif } #endif the board specific file need added: ... #ifdef CONFIG_GENERIC_ATMEL_MCI # include <mmc.h> #endif ... #ifdef CONFIG_GENERIC_ATMEL_MCI /* this is a weak define that we are overriding */ int board_mmc_init(bd_t *bd) { /* Enable clock */ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_MCI); at91_mci_hw_init(); /* This calls the atmel_mci_init in gen_atmel_mci.c */ return atmel_mci_init((void *)AT91_BASE_MCI); } /* this is a weak define that we are overriding */ |
314284b15 mmc: Change board... |
59 |
int board_mmc_getcd(struct mmc *mmc) |
1592ef859 AT91: MCI: add SD... |
60 |
{ |
314284b15 mmc: Change board... |
61 |
return !at91_get_gpio_value(CONFIG_SYS_MMC_CD_PIN); |
1592ef859 AT91: MCI: add SD... |
62 63 64 65 66 67 68 |
} #endif and the board definition files needs: /* SD/MMC card */ |
1592ef859 AT91: MCI: add SD... |
69 70 71 72 |
#define CONFIG_GENERIC_ATMEL_MCI 1 #define CONFIG_ATMEL_MCI_PORTB 1 /* Atmel XE-EK uses port B */ #define CONFIG_SYS_MMC_CD_PIN AT91_PIN_PC9 #define CONFIG_CMD_MMC 1 |