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

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