Frage:
Wie "spricht" ein Intel-Prozessor mit einem I2C-Gerät?
Holmes.Sherlock
2020-01-16 12:01:41 UTC
view on stackexchange narkive permalink

Ich komme nicht aus der Elektronik, bitte nehmen Sie Kontakt mit mir auf.Angenommen, ein Intel-Prozessor möchte über den I2C-Bus mit einem Temperatursensor kommunizieren.Wie sieht die zugrunde liegende Kommunikation aus?Soweit ich weiß, verwenden Intel-Prozessoren spezielle CPU-Anweisungen (IN / OUT), um mit Peripheriegeräten zu kommunizieren.Ich glaube auch, dass ein Intel keinen integrierten I2C-Controller hat.Wir brauchen also einen I2C-Controller, nicht wahr?Wenn ja, behandelt der Prozessor den Controller als Peripheriegerät und verwendet IN / OUT-CPU-Anweisungen, um mit ihm zu sprechen?Ist der Controller auf dem Motherboard montiert?Welcher Bus verbindet die CPU und den Controller?

Intel stellt viele verschiedene Prozessoren her.Haben Sie eine bestimmte im Sinn?
Nehmen wir die Intel Core-Serie an: https://www.intel.com/content/www/us/en/products/processors/core.html
Fünf antworten:
#1
+17
Marcus Müller
2020-01-16 13:28:40 UTC
view on stackexchange narkive permalink

Soweit ich weiß, verwenden Intel-Prozessoren spezielle CPU-Anweisungen (IN / OUT), um mit Peripheriegeräten zu kommunizieren.

Äh, das mag in den 1970er und 1980er Jahren der Fall gewesen sein, wäre aber für ein I²C-Peripheriegerät nicht einmal sehr nützlich und für die Programmierung der CPU unglaublich aufdringlich.

Stattdessen sind einige Peripheriegeräte an einen viel, viel schnelleren Bus (z. B. PCIe) angeschlossen, der die I²C-Kommunikation durchführt, wenn Befehle von der CPU dazu empfangen werden. Diese Kommunikation erfolgt normalerweise durch Schreiben von Daten in einen bestimmten Speicherort, anstatt spezielle E / A-Anweisungen zu verwenden.

Ich glaube auch, dass ein Intel keinen integrierten I2C-Controller hat.

Oh, ich glaube nicht, dass das stimmt. Es sollten mehrere Controller vorhanden sein, die jedoch zweckspezifisch sind, z. B. zum Lesen der EEPROMs auf RAM-Modulen.

Wir brauchen also einen I2C-Controller, nicht wahr?

yep.

Wenn ja, behandelt der Prozessor den Controller als Peripheriegerät

ja

und IN / OUT-CPU-Anweisungen verwenden, um mit ihm zu sprechen?

Nein, diese Anweisungen werden, wie gesagt, für einen kleinen Satz von Gerätetypen verwendet, die es seit einigen Jahrzehnten gibt (denken Sie: PS / 2-Tastaturen, Konfiguration des PCI-Adressraums, real -Zeituhr, Diskette, paralleler Druckeranschluss,…) nur, mit der eine CPU direkt kommunizieren muss, hauptsächlich aus Boot- und Legacy-Gründen.

Sobald Sie Ihren PCI-Adressraum eingerichtet haben, sind die meisten peripheren Kommunikationen nur normale Speicherzugriffe.

Oft bereitet Ihr Programm sogar die Befehle für den I²C-Controller in einem Speicherbereich vor und weist dann einen DMA-Controller an, diesen Speicher an den Controller zu übertragen. Ihre CPU kommuniziert also nicht unbedingt direkt mit dem Controller - sie weist einen DMA-Controller an, einen PCIe-Controller zu beauftragen, Bytes von einem Speicher auf ein Gerät zu übertragen.

Ist der Controller auf dem Motherboard montiert?Welcher Bus verbindet die CPU und den Controller?

Kommt darauf an;Es kann in dasselbe IC-Paket integriert werden oder sich auf dem Motherboard befinden.

Wenn direkt in die Southbridge integriert (die in Intel-CPU-Chipsätzen als ICH bezeichnet wird), ist die Schnittstelle die Direct Media-Schnittstelle.Es kann sich auch in einem an die Southbridge angeschlossenen PCIe-Gerät oder in einem an einen USB-Controller angeschlossenen USB-Gerät befinden, das wiederum Teil der Southbridge oder eines an einen PCIe angeschlossenen USB-Controllers sein kann.

"Stattdessen sind einige Peripheriegeräte an einen viel, viel schnelleren Bus (z. B. PCIe) angeschlossen, der die I²C-Kommunikation durchführt, wenn Befehle von der CPU dazu empfangen werden."Ist es wie "CPU <=> PCIe-Controller <=> DMA-Controller <=> I2C-Controller"?
nein, eher wie CPU: in Speicherbereiche schreiben, die zum DMA-Controller gehören;DMA-Controller, unabhängig: Nehmen Sie den Speicherbereich und verschieben Sie ihn an die angegebene Adresse.Oh, die angegebene Adresse gehört zum PCIe-Bus?Lassen Sie die PCIe die Daten übertragen.I²C-Controller: Oh, da schickt mir jemand Daten.
@Holmes.Sherlock: Dies wird als [MMIO (Memory-Mapped I / O)] bezeichnet (https://en.wikipedia.org/wiki/Memory-mapped_I/O).Moderne Geräte haben immer noch "Register", die Sie lesen oder schreiben, um sie zu konfigurieren oder um Dinge zu ermöglichen, aber sie befinden sich im physischen (Speicher-) Adressraum anstelle des E / A-Raums, da der Zugriff effizienter ist.In / Out-Anweisungen sind aufgrund der erforderlichen Serialisierungssemantik langsam.Verwandte: [X86 Address Space Controller?] (// superuser.com/q/1226197)
Welche Hardware- / Softwarekomponente entscheidet über den Adressraum, den ein Gerät bei MMIO belegt?
@Holmes.Sherlock überraschend komplexe Frage: Hängt tatsächlich vom Gerätetyp ab.Aber für "High Level" -Geräte: Dies muss nach der Aufzählung auf dem Bus, mit dem sie verbunden sind, konfiguriert werden.Hier gibt es unterschiedliche Freiheitsgrade, und die Adressen "vom Gerät gesehen" stimmen möglicherweise nicht mit "vom Gerätetreiber gesehen" überein.
@MarcusMüller Können Sie Bücher oder andere Ressourcen empfehlen, um mehr über dieses Thema zu erfahren?Es ist sehr schwierig, gute Inhalte über die Kommunikation zwischen der CPU und den E / A-Geräten zu finden.Themen wie Motherboard-Chipsätze, Northbridge, Southbridge, MMIO, DMA, Bus-Mastering und Busprotokolle (PCI, ISA, ...) werden in keinem PC-Architektur-Buch wirklich eingehend untersucht - sie konzentrieren sich normalerweise viel mehr auf die CPUals der Rest des Systems.Ich würde mich sehr freuen, wenn Sie einen Einblick geben könnten, wie man über diese Themen lernen könnte.
@felipeek Entschuldigung, nein, ich habe nichts.Es wurde alles gelernt, indem man lange genug das Internet nutzte und mit klügeren Freunden sprach, während man versuchte zu verstehen, was dieser Treiber / dieses Betriebssystem tut.
@MarcusMüller fair genug, danke!
#2
+14
Jeroen3
2020-01-16 15:46:21 UTC
view on stackexchange narkive permalink

Ein Intel Core-Prozessor ist mit Direct Media Interface DMI an den Platform Controller Hub PCH angeschlossen.
Der PCH enthält alle Peripheriegeräte wie PCI, USB, AHCI, Display gibt alles aus.

Aber auch die SMBus (I2C) -Schnittstelle, die alle kleinen Sensoren miteinander verbindet.

Der PCH stellt diese Peripheriegeräte über das DMI im Adressraum zur Verfügung.Dies ist eine proprietäre Schnittstelle und der PCH ist obligatorisch.Für das Konzept einer Intel-Plattform können Sie dies als On-Chip-SMBus-Controller betrachten.

enter image description here ( Intel 7 Gen PCH)

#3
+4
Hasan alattar
2020-01-16 12:32:20 UTC
view on stackexchange narkive permalink

Ich habe mir nur zufällig ein Datenblatt von Intel Processor

angesehen

[EDIT:] ist ein PCH-Datenblatt (Platform Controller Hub) auf dem Paket

in der Einleitung: enter image description here

  • und Sie sehen es manchmal auch unter einem anderen Namen: ( SMBus) enter image description here

Ihre Frage, wie es aussieht, ist ein wirklich gutes Tutorial, das es erklärt: https://learn.sparkfun.com/tutorials/i2c/all

es ist einfach so: 1 Pin zum Synchronisieren des Takts zwischen den Chips (gesendet vom Master of Bus). 1 Pin für Daten .. (das Gerät, das Bits auf der Leitung senden möchte, zieht es niedrig) Der Master sendet normalerweise die Adresse des Chips, mit dem er sprechen möchte. Dieser Chip wird bestätigt und dann erfolgt die Kommunikation. Andere Chips sind stumm: D


Der i2c ist zu langsam, um mit dem Chip zu sprechen und Informationen oder Konfigurationen zu erhalten. Kein Datenaustausch.

Sie haben den Punkt wirklich verpasst: Dieses Datenblatt ist ** kein ** CPU-Datenblatt!Das ist ein externer Hub-Controller.
@MarcusMüller es ist der Punkt.Das OP fragt "Welcher Bus verbindet die CPU und den [I2C] -Controller?"und das ist es _ "Der Platform Controller Hub (PCH) ist eine Familie von Intel-Chipsätzen, die um 2008 eingeführt wurde. ** Es ist der Nachfolger der Intel Hub-Architektur, die eine Northbridge und eine Southbridge verwendete **" _ - https: //de.wikipedia.org/wiki/Platform_Controller_Hub
@BruceAbbott erster Satz: "sah sich ein CPU-Datenblatt an".Bild: Screenshots eines Intel Hub.Dass dies im selben Paket wie der CPU-Kern integriert ist, hat keinen Einfluss auf die Software-Schnittstelle.
In meinem Kontext erwähne ich das gesamte Paket, nicht den Kern. Wenn es also 100 Datenblätter gibt, habe ich gerade gesagt (ich habe zufällig ibe geöffnet). Ich betrachte meinen Selbstexperten auf diesem Gebiet nicht, aber ich dachte, dass mein begrenztes Wissen mit wenigen Suchanfragen dies tun wirdhilf dem OP.Ich glaube immer noch nicht, dass ich den Punkt verpasst habe, obwohl @MarcusMüller
@MarcusMüller: Ich bin mir ziemlich sicher, dass es sich bei dem fraglichen "Paket" um die Southbridge handelt, nicht um die CPU.Die "Northbridge" wurde in die CPU selbst integriert, aber E / A wie USB und Ethernet nicht, zumindest nicht in der Mainstream-Sandybridge-Familie;Die CPU selbst verfügt nur über einen Videoausgang von der integrierten GPU, dem Speichercontroller und DMI / PCIe, um mit den Steckplätzen Southbridge und PCI / PCIe zu kommunizieren.Low-Power-Produkte wie die Atom / Silvermont-Familie mögen aggressiver sein als SoC (System On Chip), aber ich denke, "400 Series" sind die Chipsätze für IceLake wie Z490.Also ja, du hast vollkommen recht;Dies ist nicht physisch in der CPU.
@Hasan alattar Der PCH ist der Chipsatz (normalerweise auf Ihrem Motherboard), nicht Teil der CPU und normalerweise nicht einmal auf demselben Paket.Wenn Sie sich das aktuelle Intel PCH-Datenblatt ansehen: https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/7-series-chipset-pch-datasheet.pdf Der I2C-Controllerist Teil des smbus-Controllers am PCI-Bus 0: Gerät 31: Funktion 3. Die Software würde daher über einen PCI-Bus mit dem i2c-Controller kommunizieren.
aah ok danke .. AilibcoajhCMT
#4
+2
Janka
2020-01-16 12:17:58 UTC
view on stackexchange narkive permalink

PCs verfügen über mehrere I²C-Controller.Am bekanntesten sind die für das DDC und die für die SPD der RAM-Module.Manchmal werden Temperatursensoren und Lüftersteuerung auch in I²C-Bussen installiert.

Es hängt vom Chipsatz der Karte ab, wie diese I²C-Busse gesteuert werden.Die meisten Hostadapter sind sehr einfach und bestehen aus nicht viel mehr als einem Taktgenerator, einem Schieberegister und einer Logik zum Erstellen der I²C-Start- und Stoppbedingungen.Die gesamte Übertragung erfolgt unter Softwaresteuerung.Spielen Sie mit Steuerbits im South Bridge-Chip des Boards.

Die South Bridge-Chips sind unglaublich komplex und enthalten eine Menge Legacy-Inhalte.Der I²C-Controller im Inneren kann sogar über einen LPC-Bus im Chip angeschlossen werden.

SMBus ist eine Obermenge von I2C.RAM verwendet normalerweise SMBus, nicht I2C.
Ist es so, als ob die Southbridge des Motherboards auch einen oder mehrere I2C-Controller beherbergt?Wie kommuniziert die CPU mit diesen Off-Chip-Controllern?Findet diese Kommunikation über eine Standardschnittstelle statt?
@Passerby: SMBus ist sowohl eine Obermenge als auch eine Teilmenge von I²C.Es definiert einige Standardtransaktionen über I²C, die dann von einer in Hardware integrierten Zustandsmaschine autonom ausgeführt werden können.Sie können damit nicht alle mit I²C möglichen Stunts ausführen - z.Adressklopfen - und häufig sind diese SMBus-Controller auf subtile Weise defekt und können abstürzen, wenn ein Client-Chip in Eckfällen nicht den Anforderungen entspricht.
#5
  0
Dirk Helgemo
2020-01-17 04:12:48 UTC
view on stackexchange narkive permalink

I2C ist ein Kommunikationsprotokoll, das über zwei Drähte arbeitet. Die Spannungssequenzierung über diese Drähte kommuniziert zwischen dem I2C-Master (von der Software gesteuert) und einem I2C-Slave (möglicherweise einem Temperatursensor).

Software manipuliert normalerweise nicht direkt die Spannungssequenzierung der Drähte von I2C (das würde als "Bit Banging" bezeichnet), sondern überzeugt stattdessen einige Zwischenhardware, die Sequenzierung dafür durchzuführen. Die Software steuert die Zwischenhardware, indem sie Speicherlesevorgänge und -schreibvorgänge an bekannten Speicheradressen durchführt, die den Registern der Hardware entsprechen. (Einige Speicheradressen zeigen auf Speicher; andere Speicheradressen können auf Hardwareregister verweisen.)

Die Zwischenhardware ("I2C-Controller") ist direkt mit den I2C-Buskabeln verbunden. Seine Register könnten Teil des CPU-Chips sein oder sich auf einem anderen Chip befinden, der von der CPU gesteuert werden kann (möglicherweise über CPU-Speicherzugriffe). Dies hängt davon ab, wie das System miteinander verdrahtet wurde.

Die I2C-Controller-Register werden geschrieben und gelesen, um eine I2C-Kommunikation zu verursachen: Ein Hardwareregister würde geschrieben, um Einstellungen (z. B. Datenrate) zu konfigurieren; ein anderer würde geschrieben werden, um Daten zu senden; ein anderer würde gelesen werden, um Daten zu empfangen; Ein anderer wird gelesen, um festzustellen, ob die Kommunikation abgeschlossen ist. Jeder Chiphersteller kann seine Hardwareregister (die Bedeutung jedes Bits jedes adressierbaren Registers) nach Belieben implementieren. Dies wird in seinem Datenblatt erläutert.

Das I2C-Gerät verfügt über ein eigenes Datenblatt, was über den I2C-Bus zu sagen ist. Es definiert die verschiedenen Messungen und Steuerungen, die vom I2C-Gerät implementiert werden, und wie diese in einer Bustransaktion von Bytes über I2C kommuniziert werden. Außerdem wird die I2C-Slave-Adressnummer angegeben (sodass Sie mehrere Slaves an einen einzelnen Bus anschließen und dennoch mit einem bestimmten Bus kommunizieren können).

Beachten Sie, dass viele Arten von I2C-Geräten (durch Ziehen eines oder mehrerer Pins auf Hoch- oder Niederspannung) an eine von mehreren I2C-Slave-Adressen konfiguriert werden können. Daher müssen Sie möglicherweise experimentieren (oder einen Schaltplan erstellen), um die zu bestimmenI2C-Slave-Adresse, die dem spezifischen interessierenden I2C-Gerät entspricht.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...