SPI Problem beim Lesen

Gast #4415494
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
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #4415592
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.
Gast #4415820
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 ?
Moderator (Firma: Titel) Persönliche Seite #4415896
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...
Gast #4416492
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);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren