Moin,
ich verzweifle seit einiger Zeit daran über die SPI Schnittstelle mit
meinem Nucleo Board auf eine SD Karte zuzugreifen. Ich habe bereits
etliche Stunden hier und in anderen Foren nach einer plausiblen Lösung
gesucht, jedoch nichts passendes gefunden.
Ich nutze einen Nucleo-F446RE mit einem Deek-Robot Data logging Shield
v.1.0
Dazu ein mit CubeMX erstelltes Projekt, FatFS von ChaN und Atollic
TrueStudio.
Das Problem ist dass sich die SD Karte nicht mounten lässt. Ich erhalte
immer FR_DISK_ERROR als result.
Wenn man den Fehler zurückverfolgt landet man in der disk_read Funktion:
1 | DRESULT disk_read (
|
2 | BYTE drv, /* Physical drive number (0) */
|
3 | BYTE *buff, /* Pointer to the data buffer to store read data */
|
4 | DWORD sector, /* Start sector number (LBA) */
|
5 | UINT count /* Number of sectors to read (1..128) */
|
6 | )
|
7 | {
|
8 | BYTE cmd;
|
9 |
|
10 |
|
11 | if (drv || !count) return RES_PARERR; /* Check parameter */
|
12 | if (Stat & STA_NOINIT) return RES_NOTRDY; /* Check if drive is ready */
|
13 | if (!(CardType & CT_BLOCK)) sector *= 512; /* LBA of BA conversion (byte addressing cards) */
|
14 |
|
15 | cmd = count > 1 ? CMD18 : CMD17; /* READ_MULTIPLE_BLOCK : READ_SINGLE_BLOCK */
|
16 | if (send_cmd(cmd, sector) == 0) {
|
17 | do {
|
18 | if (!rcvr_datablock(buff, 512)) break;
|
19 | buff += 512;
|
20 | } while (--count);
|
21 | if (cmd == CMD18) send_cmd(CMD12, 0); /* STOP_TRANSMISSION */
|
22 | }
|
23 | deselect();
|
24 |
|
25 | return count ? RES_ERROR : RES_OK; /* Return result */ //0: Ok, 1:Error
|
26 | }
|
von hier aus weis ich dann leider nicht weiter.