Brauche Hilfe mit WMI ( Temperature ) + Frage zu I2C-Protokoll und DMTF...



  • Die meisten Programme verwenden dafür das "proprietäre" I2C Protokoll... und haben eben für *jeden* Chipsatz den passenden Befehlssatz implementiert... ist also ziemlich Aufwendig...



  • Die verwenden was?
    Haste evtl. nen paar gute links für mich? Was soll ich unter aufwendig verstehen?





  • Ok, werds mir erstmal ansehen, danke.

    Gruß Tobi.



  • Also eine Frage drängt sich mir hier doch gleich noch auf, die unten stehenden Links, auf der Seite von deinem ersaten Link, soll doch ne Doku sein oder? Dort werden doch irgendwie Methoden und Structuren beschrieben, das is aber irgendwie kein C++ sondern eher Asm oder?



  • Also ich habe mir das jetzt mal durchgelesen und ein wenig gegoogelt und muss festellen das die Informationen teilweise ziemlich mager sind. Aber, wenn ich das jetzt richtig verstanden habe, sind DMFT, DMI und CIM irgendwie sowas wie Schnittstellen? oder sowas um Hardware informationen auszulesen. Dazu muss man irgendwie den Einstigspunkt einer Structur finden und sie dann Bitweise durch gehen?! Versteh das ganze nicht richtig, heißt das also, das man sich bei den Hardware Konzernen geeinigt hat irgendwie bzw. irgendwo eine Schnittstelle zu schaffen die dann entweder DMFT, DMI oder CIM spezifisch ist? Und deswegen sollte man ins Handbuch schauen, ob sich evtl. ein Verweis dazu findet?
    Ich glaub nicht das ich das richtig erfasst habe, es wäre also nett, wenn es mir evtl. jemand erklären könnte.

    Gruß Tobi.



  • Hi Tobi,

    es ist wichtig zu wissen, von welchen Schnittstellen hier die Rede ist.
    Wenn in einem Windows- oder einem C++-Forum von einer Schnittstelle geredet wird, dann handelt es sich meistens um eine Software-Schnittstelle (den sog. "Interfaces"). Als Beispiele nenne ich COM, ActiveX, DirectX und eben auch WMI.

    Es gibt aber auch Hardware-Schnittstellen wie z.B. I2C- oder SMB-Bus, es gibt natürlich unzählige weitere wie z.B. Microwire. Das sind solche, bei denen die Bedeutungen der elektrischen Signale sowie ihrer Dateninhalte (also i.d.R. ein Protokollformat) definiert sind.

    Ich bin beruflich schwerpunktmäßig in der embedded-Welt (Microcontroller) zuhause, deshalb habe ich zwangsläufig (fast täglich) mit I2C- und Microwire-Bussen zu tun.
    Diese beiden Busse sind innerhalb der Hardware-Welt weitverbreitete "Standards", jedoch aus der Sicht eines Windows-Programmierers sind sie "proprietäre Exoten".
    Ist ja auch einleuchtend, da ein "normaler" Windows-Programmierer normalerweise nicht so tief in die untersten PC-Hardware Schichten herabsteigt. Ganz zu schweigen, es fehlen Windows einfach die offiziell dokumentierten API-Funktionen dazu (unabhängig davon, das wären eher BIOS-Funktionen als Windows-Funktionen).

    Genug gelabert, nun zu Deiner eigentlichen Frage:
    I2C (oder IIC, manchmal auch als TWI zu lesen) steht für "Inter-IC-Communication" und ist eine Zweidraht-Verbindung vornehmlich zwischen mehreren ICs, z.B. EEPROMs, RTC, Watchdogs und eben auch Temperatursensoren. Der Halbleiterhersteller Philips (jetzt heißt sie NXP) hatte dieses Protokoll erfunden.

    Eckdaten: Multi-Master fähig, arbeitet mit 5V (oder auch 3,3V), hat eine Taktfrequenz von 100kHz, 400kHz oder 1MHz (je nach Spezifikation, die Standardfrequenz 100kHz müssen alle I2C-ICs können). Die beiden Leitungen heißen SCL (serial clock) und SDA (serial data).

    Falls es Dich interessiert, wie ein Temperatursensor (es gibt viele verschiedene auf dem Markt) per I2C angesprochen wird, hier ein Datenblatt zu LM75 von National Semiconductor: http://www.national.com/ds.cgi/LM/LM75.pdf
    Allerdings wird das Datenblatt für einen gewöhnlichen Windows-Programmierer höchstwahrscheinlich ein "Buch mit 7 Siegeln" sein, da ihm i.d.R. die Hardware- und Schaltungstechnik-Grundlagen und natürlich auch die Erfahrung fehlen.

    Martin



  • Ok, also habe ich doch irgendwie richtig gelegen, das die meiste Hardware dieses I2C-Protokoll nutzt und ich es theoretisch via' SMB anzapfen kann?
    Naja ich werd mal sehen ob ich von deinem Link was verstehe und danke erst mal.

    [EDIT]
    Alles klar *Bahnhof*.

    [EDIT2]
    Ich lese gerade noch mal die SMB Spezifikation 2.3.1., da steht, dass SMB einen "entry-point" irgendwo im physischen Speicher( 0x000F0000h - 0x000FFFFFh ) hat. Wie sucht man im physischen Speicher? Mir ist jetzt nur die Suche im Virtuellen Speicher bekannt.

    Gruß Tobi.



  • T0bi schrieb:

    Ich lese gerade noch mal die SMB Spezifikation 2.3.1., da steht, dass SMB einen "entry-point" irgendwo im physischen Speicher( 0x000F0000h - 0x000FFFFFh ) hat. Wie sucht man im physischen Speicher? Mir ist jetzt nur die Suche im Virtuellen Speicher bekannt.

    Mein Bauch sagt mir grad, Du liest vermutlich die Spezifikation von SMB für LAN/Ethernet.

    Was Du an Informationen brauchst ist SMB = System Management Bus (von Intel), welches auf I2C-Bus aufbaut.

    Habe ich richtig geraten? 🕶
    Martin

    [Nachtrag:] Siehe auch http://de.wikipedia.org/wiki/System_Management_Bus



  • Hi Martin,
    weiß nicht, aber ich dachte das hier http://www.dmtf.org/standards/documents/SMBIOS/DSP0119.pdf sei das richtige?



  • Das ist schon auf dem richtigen Gebiet.

    SMBIOS ist ein Standard-Interface (also Software-Schnittstelle 😉 ) zum System Management Bus (also Hardware-Schnittstelle 😋 ) auf dem Mainboard.

    Mit SMBIOS selbst habe ich noch nie was zu tun gehabt.
    Du kannst es ja mal mit den WMI-Klassen "Win32_SMBIOSMemory" und "MSSMBios_RawSMBiosTables" versuchen.

    SMBIOS Support in Windows: http://download.microsoft.com/download/5/D/6/5D6EAF2B-7DDF-476B-93DC-7CF0072878E6/SMBIOS.doc
    SMBIOS Peek: http://www.codeproject.com/KB/system/SMBIOS_Peek.aspx
    SMBIOS Demystified: http://www.codeguru.com/cpp/misc/samples/systeminformation/article.php/c12347/

    Martin



  • Also gibt es bei SMBIOS nicht einfach Methoden die ich in C++ nutzen kann wie bei WMI?

    [EDIT]
    Win32_SMBIOSMemory geht nicht. Zeigt nichts an.



  • T0bi schrieb:

    Win32_SMBIOSMemory geht nicht. Zeigt nichts an.

    Evtl. brauchst Du Admin-Rechte?
    Bei Vista brauchst Du evtl. zusätzlich elevated Admin Account?
    Andererseits kann es schlicht und einfach daran liegen, daß der Mainboardhersteller gar keine WMI-Schnittstelle bereitgestellt hat?

    Als Faustregel sagt meine Erfahrung: Enumerierung von WMI-Objekte im Hardwarebereich (und dazu zählt für mich auch SMBIOS) ist Glücksspiel!
    D.h. bei manchen Herstellern funktionierts, bei anderen gehts nicht!

    Beispiel: Die USB-to-serial Konverter von FTDIchip und Prolific lassen sich überhaupt nicht über die WMI-Klasse "Win32_SerialPort" identifizieren, sondern nur über SetupAPI-Funktionen 😡 .

    Martin



  • Also mein OS ist WinXP Prof. SP2, und Motherboard ist ein MSI und ich dneke ma Admin rechte hab ich, da ich einzge User auf meinem OS bin. Allerding scheint das SMBios auch nicht wirklich zu funktionieren. Hab mal das Prog hier von der Seite ausprobiert ( http://www.codeguru.com/cpp/misc/samples/systeminformation/article.php/c12347/ ). Und das hat mir auch nicht alle Informationen aus der SMBios Tabell angezeigt bzw. ist es auch an manchen Stellen einfach abgeraucht.

    Gruß Tobi.



  • Da ich ja wie gesagt mit dem SMBIOS selbst nur wenig praktische Erfahrung habe, muß ich da wohl passen.

    Vielleicht kann da der große Google weiterhelfen?
    Martin



  • Hmm... Wie gesagt mich würde mal brennend interessieren, wie man den physischen Speicher durchsuchen kann?


Anmelden zum Antworten