STM32WL kein Signal auf MISO-Leitung bei SUBGHZ SPI

OP #7909988
Lesenswert?
• ▲
▼

Hallo,

Ich versuche, eine SPI-Kommunikation mit dem integrierten LoRa-Transceiver des STM32WL einzurichten. Die NSS,MOSI und SCK-Datenleitungen scheinen zu funktionieren, jedoch erhalte ich keine Rückmeldung des LoRa-Transceivers auf der MISO-Leitung.

Mein Code ist der folgende:

1
 void SUBGHZSPI_DebugEnable(void) {
2
  RCC->AHB2ENR |= (1U << 0);    //enable GPIO-A
3

4
  GPIOA->MODER &= ~(3U << 8);    //reset PA4
5
  GPIOA->MODER |= (2U <<   8);    //set PA4
6

7
  GPIOA->MODER &= ~(3U << 10);  //reset PA5
8
  GPIOA->MODER |= (2U << 10);    //set PA5
9

10
  GPIOA->MODER &= ~(3U << 12);  //reset PA6
11
  GPIOA->MODER |= (2U << 12);    //set PA6
12

13
  GPIOA->MODER &= ~(3U << 14);  //reset PA7
14
  GPIOA->MODER |= (2U << 14);    //set PA7
15

16
  GPIOA->AFR[0] &= ~(15U<<16);  //reset AF of PA4
17
  GPIOA->AFR[0] |= (13U<<16);    //set AF13 of PA4
18

19
  GPIOA->AFR[0] &= ~(15U<<20);  //reset AF of PA5
20
  GPIOA->AFR[0] |= (13U<<20);    //set AF13 of PA5
21

22
  GPIOA->AFR[0] &= ~(15U<<24);  //reset AF of PA6
23
  GPIOA->AFR[0] |= (13U<<24);    //set AF13 of PA6
24

25
  GPIOA->AFR[0] &= ~(15U<<28);  //reset AF of PA7
26
  GPIOA->AFR[0] |= (13U<<28);    //set AF13 of PA7
27

28
  GPIOA->OSPEEDR |= (3U << 8);  //set output speed for PA4 to HIGH speed
29
  GPIOA->OSPEEDR |= (3U << 10);  //set output speed for PA5 to HIGH speed
30
  GPIOA->OSPEEDR |= (3U << 12);  //set output speed for PA6 to HIGH speed
31
  GPIOA->OSPEEDR |= (3U << 14);  //set output speed for PA7 to HIGH speed
32
}
33

34

35

36
void SUBGHZSPI_init(void) {
37

38
      RCC->APB3ENR |= (1<<0); // enable SUBGHZ SPI
39

40
      SUBGHZSPI->CR1 |= (1 << 9); // SSM
41
      SUBGHZSPI->CR1 |= (1 << 8); // SSI
42

43
      SUBGHZSPI->CR1 &= ~(7 << 3);
44
      SUBGHZSPI->CR1 |= (1<<3); // baudrate (1MHz)
45

46
      SUBGHZSPI->CR1 |= (1<<2); // Master
47
      SUBGHZSPI->CR1 &= ~(1<<10); // full-duplex
48

49
      SUBGHZSPI->CR2 |= (1<<12); // FIFO threshold 8bit
50

51
      SUBGHZSPI->CR1 |= (1<<6); // enable SPI
52
}

ich rufe diesen code dann vom main.c auf:

1
while(1) {
2
    PWR->SUBGHZSPICR &= ~(1 << 15); // NSS low
3

4
    while (!(SUBGHZSPI->SR & (1 << 1))); // TXE
5
    *(__IO uint8_t*)(&SUBGHZSPI->DR) = 0x13;
6

7
    while (!(SUBGHZSPI->SR & (1 << 0))); // RXNE
8
    uint32_t status = SUBGHZSPI->DR;
9

10
    PWR->SUBGHZSPICR |= (1 << 15); // NSS high
11
  }

Ich kann daten senden und diese ebenfalls mit meinem logic level analyzer verifizieren, aber die MISO-Leitung bleibt dauerhaft auf "high" (siehe Anhang)

Kann mir jemand sagen, was fehlt oder was ich falsch mache? Danke im Vorraus

Angehängte Dateien:
Persönliche Seite #7910156
Lesenswert?
• ▲
▼

Harry L. schrieb:

Ich sehe da z.B. und u.A. keine Clock-Initialisierung.

Genau, und RCC_CSR_RFRST wird nicht gelöscht, RCC_CSR_RFRSTF wird nicht geprüft.

Harry L. schrieb:

ST hat da viel Arbeit investiert, und das funktioniert.

Die Ansteuerung des Modems ist tatsächlich relativ komplex, was von der SubGHz_Phy-Middleware implementiert wird. Außerdem enthält diese so diverse Workarounds für die verschiedenen Hardware-Bugs, und auch Software-Implementationen für Whitening und lange Pakete (> 255 bytes).

Leider ist die Middleware dennoch relativ verbuggt, dies muss man erst einmal selbst bereinigen damit sie funktioniert. Das ist schon ein gewisser Aufwand, aber immer noch viel weniger als das alles komplett von Null auf neu zu implementieren. Was im Übrigen genau das ist, was die RadioLib macht.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.