Einführung in den PMBus Power-Manager in Aktion

Der PMBus soll alle Komponenten eines Stromversorgungssystems digital miteinander zu vernetzen. Im folgenden Beitrag werden die fundamentalen Designprinzipien, die einer PMBus-Master-Familie von Analog Devices zugrundeliegen sowie praktische Beispiele und Empfehlungen aufgezeigt.

PMBus ist ein serieller Kommunikationsstandard und eine Erweiterung des SMBus, der dem I²C-Bus ähnelt. Zwei Open-Drain-Leitungen, SCL und SDA, unterstützen den bidirektionalen Kommunikationsbus mit Mastern und Slaves. Master sind Bauteile, die die Kommunikation steuern, typischerweise sind es Mikrocontroller oder FPGAs. Die Slaves wiederum sind die Bausteine, die durch einen Master gesteuert werden. Es handelt sich üblicherweise um kleinere ICs wie Stromversorgungsmanager oder entsprechende Controller.

Ein System kann über mehr als einen Master verfügen, was aber in der Praxis selten vorkommt; üblich sind jedoch mehrere Slaves. Ein Master richtet die Kommunikation an einen bestimmten Zeitpunkt an einen einzigen Slave, indem er dessen Adresse benutzt, selbst in einem System mit nur einem Slave. Für eine einwandfreie Systemfunktion muss jedem Slave also eine eindeutige unverwechselbare Adresse zugewiesen werden.

Um diese unverwechselbare Adresse jedes Bausteins beziehungsweise Slaves einzustellen, nutzen Bausteine für das Power-System-Management, wie die von Analog Devices, ein EEPROM zusammen mit Widerständen an den Pins. Deshalb ist es Teil der Adressierung sicherzustellen, dass, wenn ein EEPROM keine gültigen Daten hat, der Master das System insoweit reparieren kann, dass jeder Slave eine unverwechselbare Adresse hat. Die folgende Sektion erklärt diesen Mechanismus zur Adresskonfiguration im Detail und wie man Adressen auswählt, entwickelt und repariert.

Grundlegende PMBus-Adressierung

Die PMBus-Adressierung leitet sich vom SMBus-Standard ab, jene wiederum von I²C. Nur um es klarzustellen: Die folgende Diskussion ist auf den SMBus-Standard begrenzt. Dazu betrachten wir das Read-Byte-Protokoll des SMBus-3.0-Standards (Bild 1). Die Adresse jeder Transaktion schreitet nach dem Startbit (S) voran und schließt vor dem ACK-Bit (A). Zwischen dem (S) und (A) befinden sich acht Bits, wovon sieben die Adresse sind und ein Bit anzeigt, ob es sich um Schreiben (Wr) oder Lesen (Rd) handelt. Sieben Bits bedeuten, dass es 128 potenzielle Adressen gibt.

Im Folgenden werden die Adressen ohne das (Wr)- beziehungsweise (Rd)-Bit geschrieben: 0x00 bis 0x7F (7-Bit-Addressierung), wobei einige Adressen reserviert sind. Manchmal wollen Programmierer die Adressen mit einem extra (Wr)- beziehungsweise (Rd)-Bit schreiben, das eine Null enthält, z. B. 0x00 bis 0xFE (8-Bit-Addressierung). Doch Oszilloskope und andere Messgeräte wie der Protokollanalysator Beagle von Total Phase nutzen die 7-Bit-Addressierung, und sie ist am weitesten verbreitet. Deshalb sollten Anwender diese nutzen. Obacht jedoch, wenn man Adressen von Entwicklern erhält, die das Format nicht mit angeben. Solche Adressen können in 8-Bit-Adressierung sein und deshalb doppelt so groß erscheinen, als sie in Wirklichkeit sind. Man beachte, dass das Read-Byte-Protokoll die Adresse zweimal benutzt, aber mit einem wiederholten Start (Sr), der der zweiten Adresse vorangeht. Ein (Sr) ist Teil aller Leseaktionen. In diesem Fall muss die gleiche Adresse sowohl für (S) als auch für (Sr) verwendet werden.

Nicht alle Adressen sind für PSM-Slaves verfügbar, weil der SMBus-Standard einige für bestimmte Zwecke reserviert hat. Anhang C der SMBus-3.0-Spezifikation zeigt eine Tabelle der vorverteilten Adressen. Da es in vorliegendem Fall nicht nötig ist, ihren Zweck zu kennen, reicht die vereinfachte Tabelle 1 aus. Am besten man nutzt nur die freien Adressbereiche. Die Adressen 0x28 und 0x37 sind für PMBus-3.1-Zonenoperationen vorgesehen.

Adresse     

Beschreibung

0x00

General Call oder START

0x01 bis 0x0B

Batterie usw.

0x1C

Alert Response Adress (ARA)

0x1D bis 0x27

frei zur Verfügung

0x28

Zone Read

0x29 bis 0x2B

zur freien Verfügung

0x2C bis 0x2D

reserviert

0x2E bis 0x36

zur freien Verfügung

0x37

Zone Write

0x38 bis 0x2F

zur freien Verfügung

0x40 bis 0x43

reserviert

0x44

reserviert

0x45 bis 0x47

zur freien Verfügung

0x48 bis 0x4B

Prototyping

0x61

Default SMBus adress

0x62 bis 0x77

zur freien Verfügung

0x78 bis 0x7B

10-Bit-Adresse

0x7C bis 0x7F

reserviert

Tabelle 1: SMBus-Adressen

Es gibt weitere Adressen, die das Power-System-Management (PSM) nutzt, die nicht an jeden Baustein angelegt werden können, ohne Probleme auf Systemebene hervorzurufen, selbst wenn diese keine PSM-Bausteine sind. Die ersten speziellen Adressen sind die globalen Adressen und zwar 0x5A und 0x5B. Diese verwendet der Bus-Master, um mehr als nur ein Gerät zu einem Zeitpunkt anzusprechen. Die Adresse 0x5A ist eine globale Adresse, die für die Stromversorgungscontroller der Serie LTC388x von Analog Devices nicht »gepaged« ist. Demgegenüber ist 0x5B sowohl für die LTC388x-Familie eine »gepagte« globale Adresse als auch für die Stromversorgungsmanager der Serie LTC297x. Wenn ein PSM-Baustein seine Adresse auf eine globale Adresse eingestellt hat und der Bus-Master sendet Befehle an sie, würden alle PSM-Bausteine am Bus auf den Befehl reagieren. LTpowerPlay würde ebenfalls ein unerwartetes Verhalten zeigen.

Die dritte globale Adresse ist 0x7C. Die Bausteine der LTC388x-Familie antworten an diese Adresse, wenn sie CRC-Fehler in ihrem EEPROM feststellen. Deshalb sollte man diese Adresse nicht benutzen. Auch Bausteine, die keine PSM-Devices sind, können globale Adressen besitzen. Diese Adressen müssen vermieden werden, wenn man PSM-Adressen anlegt.

Einige PSM-Bausteine haben eine spezielle Adresse für die Spannungsversorgung. Mehrere Bausteine oder Seiten (Pages) werden gleichzeitig mit einer Spannungsversorgungsadresse angesprochen. Hauptsächlich dient die Spannungsversorgungsadresse dem Bus-Master dazu, alle Phasen einer mehrphasigen Spannungsversorgung mit nur einem Befehl anzusprechen. Eine Spannungsversorgungsadresse wird mit dem Register MFR_RAIL_ADDRESS (0xFA) eingestellt. Dessen Anfangswert ist 0x80, was die Spannungsversorgungsadressierung deaktiviert. Wird dieses Register mit irgendeinem anderen Wert beschrieben, aktiviert dies die Spannungsversorgungsadressierung.

Eine Spannungsversorgungsadresse behandelt der Bus-Master als nur einen Baustein am Bus, selbst wenn es kein separates Bauteil ist. Der Bus-Master kann den Unterschied nicht feststellen. Deshalb sind Spannungsversorgungsadressen Bestandteil der Adressabbildung des Systems insgesamt und dürfen keinen Konflikt mit anderen Adressen auslösen.

Es gibt noch eine letzte spezielle Adresse: die Kanaladresse. Ebenso wie die Spannungsversorgungsadresse wird diese mit einem Register mithilfe von MFR_CHANNEL_ADDRESS (0xD8) eingestellt. Die Kanaladresse fügt dem Bus eine Adresse hinzu, die auf eine spezielle Seite (Page) zeigt. Wird eine Kanaladresse eingesetzt, so benötigt man also kein Page-Register. Der Bus-Master behandelt eine Kanaladresse wie jedes andere Bauteil am Bus, weswegen es nicht mit anderen Adressen in Konflikt treten kann.