Forum: Mikrocontroller und Digitale Elektronik SPI Problem beim Lesen


von David (Gast)


Angehängte Dateien:

Lesenswert?

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

von PittyJ (Gast)


Lesenswert?

Den richtigen SPI Mode eingestellt?
Eventuell mal alle durchspielen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von David (Gast)


Lesenswert?

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 ?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von David (Gast)


Lesenswert?

Ich hab jetzt alle Modes durchprobiert, aber am besten sieht es mit SLK 
High Active und First Clock phase aus, also Mode 0

von David (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.