ich versuche seit einigen Tagen bei meinem lpc1768-board diesd-karte zu
initialisieren. Angeschlossen ist sie an ssp0/port 1.20,1.21,1.23,1.24.
Der Beispielcode von Nxp funktioniert für ssp bei mir nicht. Der auch an
ssp0/port 0.15,0.16,0.17,0.18 angeschlossene spi-lcd war sonicht zum
Laufen zu bringen. Anderer code geht inzwischen, so dass ssp
wahrscheinlich nicht das Problem ist.
Ich möchte nun den Orginal-code von chan implementieren. Der ssp wird
über die Datei mmc_ssp.c gesteuert. Wenn ich das richtig verstanden
haben, ist in dieser Datei der Anschluss für ssp0 vertauscht.
#if SSP_CH == 0
//#define CS_LOW() {FIO0CLR = _BV(18);} /* Set P0.18 low */
//#define CS_HIGH() {FIO0SET = _BV(18);} /* Set P0.18 high
__set_PINSEL(0, 15, 2); /* Attach SCK0 to I/O pad */
__set_PINSEL(0, 16, 2); /* Attach MISO0 to I/O pad */
__set_PINSEL(0, 17, 2); /* Attach MOSI0 to I/O pad */
FIO0DIR |= _BV(18); /* Set CS# as output */
0.16 ist cs und nicht miso. Der Orginalcode von chan kann daher
eigentlich nicht funktionieren. Für den zweiten ssp0-port müsste der
code dann geändert werden zu:
//#define CS_LOW() {FIO0CLR = _BV(16);} /* Set P0.18 low */
//#define CS_HIGH() {FIO0SET = _BV(16);} /* Set P0.18 high */
#define CS_LOW() {FIO1CLR = _BV(21);} /* Set P0.18 low */
#define CS_HIGH() {FIO1SET = _BV(21);} /* Set P0.18 high */
und
#if SSP_CH == 0
/* __set_PINSEL(0, 15, 2); // Attach SCK0 to I/O pad
__set_PINSEL(0, 17, 2); // Attach MISO0 to I/O pad
__set_PINSEL(0, 18, 2); // Attach MOSI0 to I/O pad
FIO0DIR |= _BV(16); // Set CS# as output
*/
__set_PINSEL(1, 20, 2); // Attach SCK0 to I/O pad
__set_PINSEL(1, 23, 2); // Attach MISO0 to I/O pad
__set_PINSEL(1, 24, 2); // Attach MOSI0 to I/O pad
FIO1DIR |= _BV(21); // Set CS# as output
Als nächste müsste ich überprüfen ob eine Verbindung zwischen sd-karte
und dem Board herzustellen ist. Notfalls über GPIO-software-spi statt
sssp0. Alles sehr mühselig.
Hat jemand code für die sd-karte, der mit dem lpc1768 auf Anhieb
funktioniert?
FatChan ist installiert. Ging wider Erwarten einfach. Das Uart-Menü läuft. Die SD-Karte wird aber nicht erkannt.
ssp0/2 Schnittstelle nach außen geführt. Spi-lcd angeschlossen. 1. gefundener Fehler: SSP0/1 liegt auf Pin-Funktion=2, SSP0/2=3. Läuft aber immer noch nicht.
ssp0/2 läuft jetzt mit dem lcd. die sd-karte wird noch nicht erkannt. als nächstes versuche ich, ob der mmc_ssp.h-code mit dem lcd funktioniert. ich habe diese board <http://www.hotmcu.com/lpc1768minidk2-development-board-28-tft-lcd-p-12.html?cPath=1_21>
die entscheidende funktion für die Initialisierung der Karte ist wohl
DSTATUS disk_initialize (
BYTE drv /* Physical drive number (0) */
)
{
BYTE n, cmd, ty, ocr[4];
if (drv) return STA_NOINIT; /* Supports only drive 0 */
power_on(); /* Initialize SPI */
Stat=0;//kk
if (Stat & STA_NODISK) return Stat; /* Is card existing in the soket?
*/
FCLK_SLOW();
for (n = 10; n; n--) xchg_spi(0xFF); /* Send 80 dummy clocks */
ty = 0;
if (send_cmd(CMD0, 0) == 1) { /* Put the card SPI/Idle state */
Timer1 = 1000; /* Initialization timeout = 1 sec */
if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2? */
for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF); /* Get 32 bit
return value of R7 resp */
if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* Is the card
supports vcc of 2.7-3.6V? */
while (Timer1 && send_cmd(ACMD41, 1UL << 30)) ; /* Wait for end
of initialization with ACMD41(HCS) */
if (Timer1 && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in
the OCR */
for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF);
ty = (ocr[0] & 0x40) ? CT_SD2 | CT_BLOCK : CT_SD2; /* Card id
SDv2 */
}
}
} else { /* Not SDv2 card */
if (send_cmd(ACMD41, 0) <= 1) { /* SDv1 or MMC? */
ty = CT_SD1; cmd = ACMD41; /* SDv1 (ACMD41(0)) */
} else {
ty = CT_MMC; cmd = CMD1; /* MMCv3 (CMD1(0)) */
}
while (Timer1 && send_cmd(cmd, 0)) ; /* Wait for end of
initialization */
if (!Timer1 || send_cmd(CMD16, 512) != 0) /* Set block length:
512 */
ty = 0;
}
}
CardType = ty; /* Card type */
deselect();
if (ty) { /* OK */
FCLK_FAST(); /* Set fast clock */
Stat &= ~STA_NOINIT; /* Clear STA_NOINIT flag */
} else { /* Failed */
power_off();
Stat = STA_NOINIT;
}
return Stat;
}
bei separatem Aufruf mit
i= (WORD)disk_initialize(0);
wird 0 zurückgegeben. Ich bin mir aber nicht sicher, ob wirklich eine
Initialisierung der Karte erfolgt ist.
Es besteht ein konflikt zwischen ssp0/1-lcd und ssp0/2-sd-karte. nach abschalten von ssp0/1 wird die sd-karte erkannt und ausgelesen.
anzeide per uart0: >fl kktest rc=5 FR_NO_PATH >fl 20130220 D---- 1980/01/01 00:00 0 . D---- 1980/01/01 00:00 0 .. ----A 1980/01/01 00:00 1126244 201302~1.AVI ----A 1980/01/01 00:00 1075716 201302~2.AVI ----A 1980/01/01 00:00 1079638 201302~3.AVI 3 File(s), 3281598 bytes total 2 Dir(s), 3622309888 bytes free > Wie bekomme ich jetzt das directory auf dem lcd angezeigt und einen einzelnen file in den lpc-speicher geladen? Hat jemand für den lpc1768 einsetzbaren Code für den anschluss eines vs1053 mp3-players? Vorlage könnte z.B. http://atmusic.my404.de sein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.