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.