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!