Forum: Mikrocontroller und Digitale Elektronik WHO_AM_I Register


von Stephan R. (rabbe)


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)


Lesenswert?

Stephan R. schrieb:
> auch

nur

MfG Klaus

von Theor (Gast)


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)


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)


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)


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)


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)


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


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.