MPU9250 mit STM32F4 via SPI auslesen

Gast #3968838
Lesenswert?
• ▲
▼
Hallo Gemeinde,

mich bringt gerade die MPU9250 ziemlich zur Verzweiflung. Das Ding ist 
grottig und widersprüchlich dokumentiert und ziert sich, mit mir zu 
reden.

Ziel: Ich will das WHO_AM_I Register auf Adresse 0x75 auslesen

Mein Vorgehen:

1. Chip Select auf LOW ziehen
2. [0x75|0x80, 0x00] auf die SPI Schnittstelle schreiben. Das 0x80 ist 
gemäß der Doku das Adress-Prefix um eine Leseoperation zu beginnen.
3. Schauen was was MISO kommt.


Laut meinem Logic Analyzer ist auch alles prima. Takt liegt an, Chip 
Select geht runter und die Daten werden rausgeschrieben. Nur kommt nix 
von dem Ding zurück.

Mir dünkt düster das etwas mit meiner SPI-Konfiguration nicht stimmen 
könnte.

Hier ist meine Initialisierung:
1
void initialize_spi_handle()
2
{
3

4
    hspi1.Instance = SPI1;
5
    hspi1.Init.Mode = SPI_MODE_MASTER;
6
    hspi1.Init.Direction = SPI_DIRECTION_2LINES;
7
    hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
8
    hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
9
    hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
10
    hspi1.Init.NSS = SPI_NSS_SOFT;
11
    hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
12
    hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
13
    hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
14
    hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
15
    hspi1.Init.CRCPolynomial = 7; 
16
    HAL_SPI_Init(&hspi1);
17
}
18

19
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
20
{
21
    GPIO_InitTypeDef GPIO_InitStruct;
22

23
    if (hspi->Instance == SPI1)
24
    {
25
        __SPI1_CLK_ENABLE();
26

27
        /*
28
         PA5     ------> SPI1_SCK
29
         PA6     ------> SPI1_MISO
30
         PA7     ------> SPI1_MOSI
31
         */
32

33
        GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
34
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
35
        GPIO_InitStruct.Pull = GPIO_NOPULL;
36
        GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
37
        GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
38
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
39

40
        /* NVIC for SPI1 */
41
        HAL_NVIC_SetPriority(SPI1_IRQn, 11, 0);
42
        HAL_NVIC_EnableIRQ(SPI1_IRQn);
43
    }
44
}

Hat jemand Rat? Könnte es an der CLKPolarity liegen?

Vielen Dank euch!
Gast #3969414
Lesenswert?
• ▲
▼
Möge euch der Thread eine Mahnung an die Details sein: Es war eine 
kleine Lötbrücke zwischen INT und SDO.

Auch gab es ein paar Probleme mit der Initialisierung. So tuts:
1
hspi1.Instance = SPI1;
2
    hspi1.Init.Mode = SPI_MODE_MASTER;
3
    hspi1.Init.Direction = SPI_DIRECTION_2LINES;
4
    hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
5
    hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
6
    hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
7
    hspi1.Init.NSS = SPI_NSS_SOFT;
8
    hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
9
    hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
10
    hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
11
    hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
12
    hspi1.Init.CRCPolynomial = 7; 
13
    HAL_SPI_Init(&hspi1);

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.