Guten Abend, Ich versuche einen PN532-NFC Reader mit einel LPC1758 über Hardware SPI zum Laufen zu bringen uns stoße dabei auf folgendes Problem: Beim Versuch Daten vom PN532 zu empfangen scheitert der LPC 1758 bzw ich. Das Senden funktioniert soweit und die Daten werden allem Anschein auch korrekt vom PN532 interpretiert. Der PN532 überträgt HEX 0x01 in 8 BIT (LSB zuerst), wie auf dem Bild erkennbar ist, aber der LPC1758 ließt HEX 0x00. Umgekehrt wenn 0x00 übertragen wird, so interpretiert der PN532 es als 0x01. Wenn jemand weiß, woran das liegt, wäre ich sehr dankbar mit freundlichen Grüßen David
David schrieb: > Der PN532 überträgt HEX 0x01 in 8 BIT (LSB zuerst), wie auf dem Bild > erkennbar ist, aber der LPC1758 ließt HEX 0x00. Umgekehrt wenn 0x00 > übertragen wird, so interpretiert der PN532 es als 0x01. Versuch mal, ein etwas aufwändigeres Bitmuster zu übertragen und zu schauen, ob die empfangenen Daten um 1 Bit versetzt sind. Falls ja: wie shcon erwähnt falscher SPI Modus.
Also der PN532 arbeitet laut Datenblatt im SPI Mode 0: "The mode used for the clock is Mode 0: Data is always sampled on the first clock edge of SCK SCK is active high. The data order used is LSB first." und so sieht meine Initialisierung aus: SSP_INIT_STRUC.CPHA = SSP_CPHA_FIRST; SSP_INIT_STRUC.CPOL = SSP_CPOL_HI; SSP_INIT_STRUC.ClockRate = 1000000; SSP_INIT_STRUC.Databit = SSP_DATABIT_8; SSP_INIT_STRUC.Mode = SSP_MASTER_MODE; SSP_INIT_STRUC.FrameFormat = SSP_FRAME_SPI; Der PN532 kann die Daten von Mosi auch lesen, also sollte das doch passen oder ?
David schrieb: > SSP_INIT_STRUC.CPOL = SSP_CPOL_HI; Das passt m.E. nicht zum geposteten Screenshot: beim SPI-Mode 0 ist der Ruhepegel auf SCLK low. Für einen SPI-Mode 0 müssten CPOL=0 und CPHA=0 sein. Der SPI-Mode 1 sieht auf dem Oszi evtl. aus wie der Mode 0, allerdings wird mit der anderen Flanke abgetastet. > Der PN532 kann die Daten von Mosi auch lesen, also sollte das doch > passen Ich hatte mit falschen SPI Modi auch schon solche Effekte, dass es nur funktionierte, solange das Device kalt war. Im Klimaschrank gabs es dann diesen 1-Bit-Versatz. Wie shcon gesagt: probier einfach mal die anderen SPI Mods durch. Ist ja schnell gemacht... > oder ? Bitte nicht plenken. Das gibt auf Handys immer so seltsame Umbrüche und einzelne Zeilen mit Fragezeichen...
Ich hab jetzt alle Modes durchprobiert, aber am besten sieht es mit SLK High Active und First Clock phase aus, also Mode 0
die Initialisierung meiner SPI Ports: PINSEL_InitStruct.Funcnum=PINSEL_FUNC_2; //SLK PINSEL_InitStruct.OpenDrain=PINSEL_PINMODE_NORMAL; PINSEL_InitStruct.Pinmode=PINSEL_PINMODE_PULLUP; PINSEL_InitStruct.Pinnum=PINSEL_PIN_7; PINSEL_InitStruct.Portnum=PINSEL_PORT_0; PINSEL_ConfigPin(&PINSEL_InitStruct); PINSEL_InitStruct.Funcnum=PINSEL_FUNC_2; // MISO PINSEL_InitStruct.OpenDrain=PINSEL_PINMODE_NORMAL; PINSEL_InitStruct.Pinmode=PINSEL_PINMODE_PULLUP; PINSEL_InitStruct.Pinnum=PINSEL_PIN_8; PINSEL_InitStruct.Portnum=PINSEL_PORT_0; PINSEL_ConfigPin(&PINSEL_InitStruct); GPIO_SetDir(0,(1<<8),0); /*port, mask,direction 0 = intput*/ PINSEL_InitStruct.Funcnum=PINSEL_FUNC_2; //2 MOSI PINSEL_InitStruct.OpenDrain=PINSEL_PINMODE_NORMAL; PINSEL_InitStruct.Pinmode=PINSEL_PINMODE_PULLUP; PINSEL_InitStruct.Pinnum=PINSEL_PIN_9; PINSEL_InitStruct.Portnum=PINSEL_PORT_0; PINSEL_ConfigPin(&PINSEL_InitStruct);
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.