Forum: Mikrocontroller und Digitale Elektronik STM32 + MPU9250 I2C sequential read


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Alex X. (behindi)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Community,

ich verzweifle gerade daran eine I2C Kummunikation zwischen einem 
STM32f3discovery board und einem externen MPU-9250 zum laufen zu 
bringen.
1 und 2 Byte lesen/schreiben funktioniert einwandfrei, wenn ich mehr als 
2 Byte schreibe/lese bekomme ich jedoch ein HAL_TIMEOUT. Wenn ich mir 
den Signalverlauf auf dem Ozsi anschaue bleibt nach dem dritten byte + 
dem ACK die Tacktleitung auf LOW. (Siehe Anhang [Cursors markieren die 
ACKs])

Im Datenblatt des IMUs steht, dass sequential read unterstützt wird 
(S.34) ... Was mache ich falsch oder wo liegt der Denkfehler?

Die Peripherals wurden mit dem STM32CubeMX konfiguriert.
1
  uint8_t rxBuffer[16] = {58,46};
2
  // Write PWR1
3
  while (HAL_I2C_Mem_Write(hi2c, (uint16_t) IMU_I2C_SLAVE_ADDR_GYRO_ACCEL,
4
        (uint16_t) IMU_GYRO_ACCEL_PWR1_ADDR, (uint16_t) 3,
5
        (uint8_t*) rxBuffer, (uint16_t) 3, 3000) != HAL_OK) {
6
      if (HAL_I2C_GetError(hi2c) != HAL_I2C_ERROR_AF) {
7
        Error_Handler();
8
      }
9
  }
10
  rxBuffer[0] = 0x00;
11
  rxBuffer[1] = 0x00;
12
  rxBuffer[2] = 0x00;
13
  // Read PWR1
14
  while (HAL_I2C_Mem_Read(hi2c, (uint16_t) IMU_I2C_SLAVE_ADDR_GYRO_ACCEL,
15
        (uint16_t) IMU_GYRO_ACCEL_PWR1_ADDR, (uint16_t) 3,
16
        (uint8_t*) rxBuffer, (uint16_t) 3, 3000) != HAL_OK) {
17
      if (HAL_I2C_GetError(hi2c) != HAL_I2C_ERROR_AF) {
18
        Error_Handler();
19
      }
20
  }
21
22
23
//////////////////////////////////////////////
24
25
#define IMU_I2C_SLAVE_ADDR_GYRO_ACCEL   (0x68 << 1)  // 0x68 AD0 is LOW
26
#define IMU_I2C_SLAVE_ADDR_MAGN         (0x0c << 1)
27
#define IMU_CMD_LEN                     1
28
29
#define IMU_GYRO_ACCEL_DEVICE_ID_ADDR   0x75
30
#define IMU_GYRO_ACCEL_DEVICE_ID_LEN    1
31
#define IMU_GYRO_ACCEL_DEVICE_ID        0x71  // 0x68
32
33
#define IMU_MAGN_DEVICE_ID_ADDR         0x00
34
#define IMU_MAGN_DEVICE_ID_LEN          1
35
#define IMU_MAGN_DEVICE_ID              0x48
36
37
#define IMU_GYRO_ACCEL_PWR1_ADDR        0x6b
38
#define IMU_GYRO_ACCEL_PWR1_LEN         1

Und dann hätte ich noch eine zweite Frage.
der MPU-9250 hat ja zwei chips unter der Haube. Im Datatenblatt S.23 ist 
die rede von einem Pass-Trough Mode, bei dem der zweite Sensor direckt 
über I2C angesprochen werden kann (Slave address 0x0c). Auf diese 
Adresse bekomme ich jedoch keine Antwort. Meine Frage lautet daher, muss 
ich diesen Mode zuerst im "ersten Sensor" konfigurieren (habe dazu dem 
"register description" datasheet keine Informationen entnehmen könnnen)?

Vielen Dank für jegliche Hilfe  :-)


Datenblatt:
http://www.invensense.com/wp-content/uploads/2015/02/PS-MPU-9250A-01-v1.1.pdf

Register description:
http://www.invensense.com/wp-content/uploads/2017/11/RM-MPU-9250A-00-v1.6.pdf

von Bild Versaageer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alex X. schrieb:
> Vielen Dank für jegliche Hilfe  :-)

Dein Oszilloskop hat sicher eine Hardcopy-Funktion um Bilder
(Screenshots) direkt in den Rechner laden zu können.

Schnittstelle kaputt? Funktion nicht gefunden? Taste Kaputt?

von Alex X. (behindi)


Bewertung
0 lesenswert
nicht lesenswert
Kein USB-Stick zur Hand ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.