Forum: Mikrocontroller und Digitale Elektronik WHO_AM_I Register


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 Stephan R. (rabbe)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich beschäftige mich zurzeit mit der Programmierung von Mikrocontroller.

Beim Durchlesen einiger Datenblätter ist mir aufgefallen, dass manche 
Sensoren ein sogenanntes WHO_AM_I Register besitzen.
Welche Aufgabe hat dieses Register, bzw. welche Informationen kann ich 
z.B. über SPI mit meinem Mikrocontroller herauslesen?

Wird dieses Register auch für eine automatische Erkennung von 
Peripheriegeräten verwendet?

von Klaus (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Stephan R. schrieb:
> auch

nur

MfG Klaus

von Theor (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Am besten mal einige Links auf die entsprechenden Datenblätter posten.
An sich müsste es auch darin stehen, was in dem Register enthalten sind.
Aber wir können ja mal für Dich nachschauen.

von STK500-Besitzer (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Stephan R. schrieb:
> Welche Aufgabe hat dieses Register, bzw. welche Informationen kann ich
> z.B. über SPI mit meinem Mikrocontroller herauslesen?

Das steht doch alles im Datenblatt.
Manche EEPROMs haben da eine einzigartige Seriennummer drin stehen.


> Wird dieses Register auch für eine automatische Erkennung von
> Peripheriegeräten verwendet?
Ja.

von Timmo H. (masterfx)


Bewertung
2 lesenswert
nicht lesenswert
Stephan R. schrieb:
> Wird dieses Register auch für eine automatische Erkennung von
> Peripheriegeräten verwendet?
Ja genau dafür ist es unter anderem gedacht. Wenn man z.B. einen Sensor 
hat den es in verschiedenen Varianten gibt, kann man anhand der ID oder 
WHO_AM_I Signatur entsprechend prüfen um welchen Sensor es sich handelt.
Also z.B. beim BMP/BME280, welche pinkompatibel sind, kann man je nach 
ID entscheiden ob man neben der Temperatur und Luftdruck eben auch die 
Luftfeuchtigkeit abfragen kann und die Temp und Pressure Register anders 
skalieren muss. So kann man ggf. schon im voraus Obsoleszenzen 
berücksichten bzw. verschiedene Bestückungsvarianten ohne Änderung der 
Firmware implementieren.

Kann man auch gut z.B. im Linux Kernel sehen:
1
#define BMP180_CHIP_ID      0x55
2
#define BMP280_CHIP_ID      0x58
3
#define BME280_CHIP_ID      0x60
4
....
5
switch (chip) {
6
  case BMP180_CHIP_ID:
7
    indio_dev->num_channels = 2;
8
    data->chip_info = &bmp180_chip_info;
9
    data->oversampling_press = ilog2(8);
10
    data->oversampling_temp = ilog2(1);
11
    data->start_up_time = 10000;
12
    break;
13
  case BMP280_CHIP_ID:
14
    indio_dev->num_channels = 2;
15
    data->chip_info = &bmp280_chip_info;
16
    data->oversampling_press = ilog2(16);
17
    data->oversampling_temp = ilog2(2);
18
    data->start_up_time = 2000;
19
    break;
20
  case BME280_CHIP_ID:
21
    indio_dev->num_channels = 3;
22
    data->chip_info = &bme280_chip_info;
23
    data->oversampling_press = ilog2(16);
24
    data->oversampling_humid = ilog2(16);
25
    data->oversampling_temp = ilog2(2);
26
    data->start_up_time = 2000;
27
    break;
28
  default:
29
    return -EINVAL;
30
  }

: Bearbeitet durch User
von Stephan R. (rabbe)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Antworten :D

Theor schrieb:
> Am besten mal einige Links auf die entsprechenden Datenblätter posten.
http://www.invensense.com/wp-content/uploads/2017/08/ICM-20689-v2.2-002.pdf
(Seite 35/49)

Timmo H. schrieb:
> Ja genau dafür ist es unter anderem gedacht. Wenn man z.B. einen Sensor
> hat den es in verschiedenen Varianten gibt, kann man anhand der ID oder
> WHO_AM_I Signatur entsprechend prüfen um welchen Sensor es sich handelt.
Würde dies auch mit unterschiedlichen Sensoren funktionieren?
Zum Beispiel zur Erkennung, ob ich an den SPI-Port 1 einen ICM20689 oder 
einen BME280 anschlossen habe?

von Timmo H. (masterfx)


Bewertung
1 lesenswert
nicht lesenswert
Stephan R. schrieb:
> Timmo H. schrieb:
>> Ja genau dafür ist es unter anderem gedacht. Wenn man z.B. einen Sensor
>> hat den es in verschiedenen Varianten gibt, kann man anhand der ID oder
>> WHO_AM_I Signatur entsprechend prüfen um welchen Sensor es sich handelt.
> Würde dies auch mit unterschiedlichen Sensoren funktionieren?
> Zum Beispiel zur Erkennung, ob ich an den SPI-Port 1 einen ICM20689 oder
> einen BME280 anschlossen habe?
Hängt davon ab. Es ist leider nicht genormt wo und ob es ein ID/WHO_AM_I 
Register geben muss (außer bei genormten IC Klassen, wie z.B. Flash 
Chips nach JEDEC). Aber wenn du weißt welche Sensoren auf dich zukommen, 
kannst du dir zumindest einen Entscheidungs-Algorithmus ausdenken der 
eine art Plausibilitätsprüfung macht.

: Bearbeitet durch User
von Stephan R. (rabbe)


Bewertung
0 lesenswert
nicht lesenswert
Timmo H. schrieb:
> Aber wenn du weißt welche Sensoren auf dich zukommen,
> kannst du dir zumindest einen Entscheidungs-Algorithmus ausdenken der
> eine art Plausibilitätsprüfung macht.
Vielen Dank, ich glaube dass ist die Lösung für mein Problem :D

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Bei der Erstinbetriebnahme einer neu entwickelten Baugruppe und als 
Treiberentwickler freut man sich über ein Register, welches immer einen 
garantierten Inhalt hat. ;)

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.