STM32 SPI Slave sendet falsche Daten

OP #4696551
Hallo zusammen

Ich habe hier zwei STM32F105RBT6

Diese sind mittels SPI zusammen verbunden.
Board-A ist Master
Board-B ist Slave.

Der Master sendet kontinuierlich vier gleiche Bytes an den Slave (zum 
testen) Dieser sollte immer mit 0xAA antworten.

Nun habe ich wohl irgendwo ein Problem.
Im Bild im Anhang sieht man, dass der Slave bei zwei von vier Bytes 
korrekt antwortet. Bei den anderen zwei sendet er merkwürdigen müll.

Hat jemand eine Idee, woran das liegen kann?

Ich verwende bei beiden SPI2.
Der MISO wurde nicht mit Board-A verbunden sondern ist nur am 
Logicanalyzer angeschlossen. Eine unbeabsichtigte Belastung wegen falsch 
konfiguriertem Pin auf Board-A ist somit ausgeschlossen.


Hier noch mein Code des Slave:
1
  //SPI2 MISO
2
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14;
3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
4
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
5
  GPIO_Init(GPIOB, &GPIO_InitStructure);
6

7
  //SPI2 MOSI, SCK, NSS
8
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15 | GPIO_Pin_13 | GPIO_Pin_12;
9
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
10
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
11
  GPIO_Init(GPIOB, &GPIO_InitStructure);
12

13

14
  SPI_InitTypeDef SPI_InitStructure;
15

16
  SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;
17
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
18
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
19
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
20
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
21
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
22
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
23
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;  //Idle Status
24
  SPI_InitStructure.SPI_CRCPolynomial = 7;
25
  SPI_Init(SPI2,&SPI_InitStructure);
26

27
  SPI_CalculateCRC(SPI2,DISABLE);
28

29
  SPI_I2S_ITConfig(SPI2,SPI_I2S_IT_RXNE,ENABLE);
30

31
  SPI_Cmd(SPI2,ENABLE);
32

33

34

35
void SPI2_IRQHandler(void)
36
{
37
  uint8_t cmd;
38

39
  if(SPI_I2S_GetITStatus(SPI2,SPI_I2S_IT_RXNE) == SET)
40
  {
41

42
    cmd = SPI_I2S_ReceiveData(SPI2);
43
    SPI2->DR = 0xAA;
44
  }
45
}



Danke schonmal
Angehängte Dateien:
Gast #4696566
Holger K. schrieb:
> Der Master sendet kontinuierlich vier gleiche Bytes an den Slave (zum
> testen) Dieser sollte immer mit 0xAA antworten.

Bei SPI findet ein Datenaustausch zwischen Master und Slave statt, 
angetrieben durch den Clock vom Master. Der Slave antwortet nicht von 
sich aus, sondern er stellt nur ein Byte für die nächste vom Master 
initierte Übertragung bereit. Bei deinem ersten Byteaustausch steht 
anscheinend irgendwelcher Müll im Slave Register (0x2A). Beim zweiten 
Austausch kommt auf MISO die Antwort auf das erste Byte (0xAA) raus. Bis 
dahin passt das also.
Gast #4696841
Holger K. schrieb:
> Ein Filter in die CLK Leitung und alles passt!

Toll!

Macken in der Digitalschaltung werden mit analogen Mitteln
behoben. Weiter so! Das hat sich bei vielen Kurpfuschern
bewährt.

Das Timing der CLK-Leitung stellt man übrigens am besten
mit einen R/C-Glied ein. Gut funktionierende Erfahrungswerte
liegen bei 10KOhm Längswiderstand und 10nF Quer-C. Damit
funktioniert fast alles!

Trotzdem du schon geraume Zeit hier im Forum bist schaffst
du es immer noch nicht deinen C-Code anständig zu posten,
so wie es die Regeln hier fordern.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.