mit viel Mühe habe ich die sdio-schnittstelle des stm32f429-boards
halbwegs zum laufen gebracht. Beim Initialisieren vom 4bit modus ergeben
sich folgendes Probleme. Aus dem Programm heraus bricht die
Initialisierung ab. Wenn ich den 4bit-init-Teil separat aufrufe, wird er
ausgeführt:
1 | else if (SDIO_BusWide_4b == WideMode)
|
2 | {
|
3 | errorstatus = SDEnWideBus(ENABLE);
|
4 |
|
5 | if (SD_OK == errorstatus)
|
6 | {
|
7 | /*!< Configure the SDIO peripheral */
|
8 | SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV;
|
9 | SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
|
10 | #ifdef SDIO_DIRECT_CLOCK
|
11 | #warning "USE_SDIO_DIRECT_CLOCK@48MHz!"
|
12 | SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Enable; /* Nemui changed */
|
13 | #else
|
14 | SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
|
15 | #endif
|
16 | SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
|
17 | SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_4b;
|
18 | SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
|
19 | SDIO_Init(&SDIO_InitStructure);
|
20 | }
|
21 | }
|
An der auf dem Display angezeigten Schreibgeschwindigkeit ändert sich
durch die Umstellung auf 4bit aber praktisch nichts.
Ausprobiert habe ich 3 8GB-sdKarten. Ergebnis für beide Modi:
Karte 1 ~600kbyte/sec
Karte 2 ~1200kbyte/sec
Karte 3 ~1900kbyte/sec
Meine Vermutung: Karte3 wird ohne besondere Initialisierung immer im
4bit-Modus betrieben, bei den beiden anderen Karten funktioniert die
Umstellung nicht.
Frage: welche Schreibgeschwindigkeiten sind im 4-bit Modus zu erreichen?
Können die 1900kbyte/sec bereits 4bit-Modus sein?