Domanda:
Come fa un processore Intel a "parlare" con un dispositivo I2C?
Holmes.Sherlock
2020-01-16 12:01:41 UTC
view on stackexchange narkive permalink

Non provengo da un background di elettronica, quindi per favore abbi pazienza.Supponiamo che un processore Intel voglia parlare con un sensore di temperatura sul bus I2C.Come appare la comunicazione sottostante?Finora ho capito, i processori Intel utilizzano istruzioni CPU specializzate (IN / OUT) per comunicare con le periferiche.Inoltre, credo che un Intel non abbia un controller I2C su chip.Quindi, abbiamo bisogno di un controller I2C, non è vero?In tal caso, il processore tratta il controller come una periferica e utilizza le istruzioni della CPU IN / OUT per comunicare con esso?Il controller è montato sulla scheda madre?Quale bus collega la CPU e il controller?

Intel produce / ha realizzato molti processori diversi.Ne hai uno in particolare in mente?
Supponiamo che la serie Intel Core: https://www.intel.com/content/www/us/en/products/processors/core.html
Cinque risposte:
Marcus Müller
2020-01-16 13:28:40 UTC
view on stackexchange narkive permalink

Finora ho capito, i processori Intel utilizzano istruzioni CPU specializzate (IN / OUT) per comunicare con le periferiche.

Uh, questo potrebbe essere vero negli anni '70 e '80, ma in realtà non sarebbe nemmeno molto utile per una periferica I²C e incredibilmente invadente per la programmazione della CPU.

Quindi, invece, ci sono alcune periferiche collegate a un bus molto, molto più veloce (ad esempio PCIe) che fa parlare l'I²C, dopo aver ricevuto i comandi per farlo dalla CPU; che la comunicazione di solito avviene tramite la scrittura di dati in una specifica posizione di memoria, invece di utilizzare speciali istruzioni IO.

Inoltre, credo che un Intel non abbia un controller I2C su chip.

Oh, non credo sia vero; dovrebbero esserci più controller, ma sono specifici per lo scopo, ad esempio, per leggere le EEPROM sui moduli RAM.

Quindi, abbiamo bisogno di un controller I2C, non è vero?

sì.

In tal caso, il processore tratta il controller come una periferica

e utilizzare le istruzioni della CPU IN / OUT per parlargli?

No, queste istruzioni, come detto, vengono utilizzate per un piccolo insieme di tipi di dispositivi in circolazione da alcuni decenni (si pensi: tastiere PS / 2, configurazione dello spazio degli indirizzi PCI, reale -time clock, floppy, porta stampante parallela, ...) solo con cui una CPU deve parlare direttamente, principalmente per motivi di avvio e legacy.

Fondamentalmente, non appena hai impostato lo spazio degli indirizzi PCI, la maggior parte delle comunicazioni periferiche sono solo normali accessi alla memoria.

Spesso, persino, il programma prepara i comandi per il controller I²C in una regione di memoria, quindi dice a un controller DMA di trasferire quella memoria al controller. Quindi, la tua CPU non parla nemmeno direttamente con il controller: dice a un controller DMA di dire a un controller PCIe, di trasferire byte da una memoria a un dispositivo.

Il controller è montato sulla scheda madre?Quale bus collega la CPU e il controller?

Dipende; può essere integrato nello stesso pacchetto IC o essere sulla scheda madre.

Se integrato direttamente nel Southbridge (che nei chipset della CPU Intel è chiamato ICH), l'interfaccia sarebbe la Direct Media Interface;potrebbe anche trovarsi in un dispositivo PCIe collegato al Southbridge o in un dispositivo USB collegato a un controller USB, che di nuovo può essere parte del southbridge o parte di un controller USB collegato PCIe.

"Quindi, invece, ci sono alcune periferiche collegate a un bus molto, molto più veloce (ad esempio PCIe) che fa parlare I²C, dopo aver ricevuto i comandi per farlo dalla CPU".È come `CPU <=> controller PCIe <=> controller DMA <=> controller I2C`?
no, più come CPU: scrive nelle regioni di memoria appartenenti al controller DMA;Controller DMA, indipendentemente: prendi la regione di memoria e spostala all'indirizzo specificato.Oh, l'indirizzo specificato appartiene al bus PCIe?fare in modo che il PCIe trasferisca i dati.Controller I²C: oh, c'è qualcuno che mi invia dati.
@Holmes.Sherlock: questo si chiama [MMIO (memory-mapped I / O)] (https://en.wikipedia.org/wiki/Memory-mapped_I/O).I dispositivi moderni hanno ancora "registri" che puoi leggere o scrivere per configurarli o far accadere cose, ma si trovano nello spazio degli indirizzi fisico (memoria) invece che nello spazio I / O, perché l'accesso è più efficiente.le istruzioni in / out sono lente a causa della semantica di serializzazione richiesta.Correlato: [X86 Address Space Controller?] (// superuser.com/q/1226197)
Quale componente hardware / software decide lo spazio di indirizzi che un dispositivo occupa nel caso di MMIO?
@Holmes.Sherlock domanda sorprendentemente complessa: dipende dal tipo di dispositivo del dispositivo, in realtà.Ma per i dispositivi "di alto livello": dipende dalla configurazione dopo l'enumerazione sul bus a cui si connettono.Ci sono vari gradi di libertà qui e gli indirizzi "visti dal dispositivo" potrebbero non essere gli stessi di "visti dal driver del dispositivo"
@MarcusMüller potresti consigliare libri o altre risorse per conoscere questo argomento?È molto difficile trovare un buon contenuto sulla comunicazione tra la CPU e i dispositivi I / O.Argomenti come chipset della scheda madre, northbridge, southbridge, MMIO, DMA, bus mastering, protocolli bus (PCI, ISA, ...) non vengono mai esplorati in profondità in nessun libro sull'architettura per PC: di solito si concentrano molto di più sulla CPUrispetto al resto del sistema.Apprezzerei molto se potessi dare un'idea di come si potrebbe studiare su questi argomenti.
@felipeek mi dispiace, no, non ho niente.È stato tutto imparato usando Internet abbastanza a lungo e parlando con amici più intelligenti mentre si cercava di capire cosa fa questo driver / sistema operativo.
@MarcusMüller abbastanza giusto, grazie!
Jeroen3
2020-01-16 15:46:21 UTC
view on stackexchange narkive permalink

Un processore Intel Core è collegato con Direct Media Interface DMI all'hub controller della piattaforma PCH.
Il PCH contiene tutte le periferiche, come PCI, USB, AHCI, Display emette tutte le cose.

Ma anche l'interfaccia SMBus (I2C), che collega insieme tutti i piccoli sensori.

Il PCH rende disponibili queste periferiche nello spazio degli indirizzi tramite DMI.Questa è un'interfaccia proprietaria e il PCH è obbligatorio.Quindi, per il concetto di piattaforma Intel, puoi considerarlo un controller SMBus su chip.

enter image description here ( Intel 7 gen PCH)

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

Ho appena guardato a caso una scheda tecnica del processore Intel

[EDIT:] è un datasheet del Platform Controller Hub (PCH)

nell'introduzione: enter image description here

  • e potresti anche vederlo a volte con un nome diverso: ( SMBus) enter image description here

la tua domanda, come sembra questo è un ottimo tutorial che lo spiega: https://learn.sparkfun.com/tutorials/i2c/all

è proprio così: 1 pin per la sincronizzazione dell'orologio tra i chip (inviato dal master del bus) .. 1 pin per i dati .. (il dispositivo che desidera inviare bit sulla linea lo abbasserà) il master di solito invia l'indirizzo del chip con cui vuole parlare, quel chip si bloccherà e poi la comunicazione avviene ... gli altri chip tacciono: D


l'i2c è troppo lento, sarà per parlare al chip e ottenere informazioni o configurazioni .. niente scambio di dati.

Hai davvero perso il punto: quella scheda tecnica ** non ** è una scheda tecnica della CPU!questo è un controller hub esterno.
@MarcusMüller _è_ il punto.L'OP chiede "Quale bus collega la CPU e il controllore [I2C]?"e questo è _ "Il Platform Controller Hub (PCH) è una famiglia di chipset Intel, introdotta intorno al 2008. ** È il successore dell'architettura Intel Hub, che utilizzava un northbridge e un southbridge **" _ - https: //en.wikipedia.org/wiki/Platform_Controller_Hub
Prima frase di @BruceAbbott: "ha guardato una scheda tecnica della CPU".Immagine: screenshot di un Intel Hub.Che questo sia integrato nello stesso pacchetto del core della CPU non fa differenza per l'interfacciamento con esso dal lato software.
nel mio contesto intendo l'intero pacchetto non il nucleo .. quindi se ci sono 100 schede tecniche ho appena detto (ho aperto ibe casuale) .. non considero il mio esperto in questo campo ma pensavo che la mia conoscenza limitata con poche ricerche lo faràaiutare l'OP.Continuo a non pensare di aver perso il punto anche se @MarcusMüller
@MarcusMüller: Sono abbastanza sicuro che il "pacchetto" in questione sia il southbridge, non la CPU.Il "northbridge" era integrato nella CPU stessa, ma I / O come USB ed ethernet non lo sono, almeno non nella famiglia tradizionale Sandybridge;la stessa CPU ha solo l'uscita video dalla GPU integrata, dal controller di memoria e da DMI / PCIe per parlare con il southbridge e gli slot PCI / PCIe.Cose a basso consumo come la famiglia Atom / Silvermont potrebbero essere più aggressivamente SoC (System On Chip), ma penso che la "serie 400" siano i chipset per IceLake, come Z490.Quindi sì, hai assolutamente ragione;questo non è fisicamente nella CPU.
@Hasan alattar Il PCH è il chipset (di solito sulla scheda madre), non fa parte della CPU e di solito nemmeno sullo stesso pacchetto.Se si guarda l'attuale scheda tecnica Intel PCH: https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/7-series-chipset-pch-datasheet.pdf Il controller I2Cfa parte del controller smbus, che si trova in PCI Bus 0: Device 31: Function 3. Il software quindi comunica con il controller i2c tramite un bus PCI.
aah ok grazie .. @user1850479
Janka
2020-01-16 12:17:58 UTC
view on stackexchange narkive permalink

I PC dispongono di diversi controller I²C.In primo luogo quelli per il DDC e quelli per l'SPD dei moduli RAM.A volte anche i sensori di temperatura e il controllo della ventola vengono installati sui bus I²C.

Dipende dal chipset della scheda come controllare questi bus I²C.La maggior parte degli adattatori host sono molto semplici e consistono in poco più di un generatore di clock, un registro a scorrimento e un po 'di logica per creare le condizioni di avvio e arresto I²C.L'intero trasferimento è sotto il controllo del software.Giocherellare con i bit di controllo all'interno del chip del ponte sud del tabellone.

I chip south bridge sono incredibilmente complessi e contengono molte cose legacy al loro interno.Il controller I²C all'interno può anche essere collegato tramite un bus LPC all'interno del chip.

SMBus è un superset di I2C.La RAM in genere utilizza SMBus non I2C.
È come se il southbridge della scheda madre ospitasse anche uno o più controller I2C?Come comunica la CPU con quei controller off-chip?Questa comunicazione avviene tramite qualche interfaccia standard?
@Passerby: SMBus è sia un superset che un sottoinsieme di I²C.Definisce alcune transazioni standard oltre a I²C, che potrebbero quindi essere eseguite autonomamente da una macchina a stati integrata nell'hardware.Non puoi fare tutte le acrobazie possibili con I²C con esso, ad es.address knocking -, e spesso quei controller SMBus sono rotti in modi impercettibili e possono bloccarsi se un chip client non è conforme nei casi d'angolo.
Dirk Helgemo
2020-01-17 04:12:48 UTC
view on stackexchange narkive permalink

I2C è un protocollo di comunicazione che opera su due fili. La sequenza di tensione su questi fili comunica tra il master I2C (controllato dal software) e uno slave I2C (forse un sensore di temperatura).

Il software di solito non manipola direttamente la sequenza di tensione dei fili di I2C (che sarebbe chiamata "bit banging"), ma invece convince alcuni hardware intermedi a fare la sequenza per essa. Il software controlla l'hardware intermedio eseguendo letture e scritture di memoria su indirizzi di memoria noti che corrispondono ai registri dell'hardware. (Alcuni indirizzi di memoria puntano alla memoria; altri indirizzi di memoria possono puntare a registri hardware.)

L'hardware intermedio ("controller I2C") è collegato direttamente ai fili del bus I2C. I suoi registri potrebbero essere parte del chip della CPU o potrebbero essere su un altro chip che può essere controllato dalla CPU (magari tramite accessi alla memoria della CPU). Dipende da come è stato cablato il sistema.

I registri del controller I2C vengono scritti e letti per provocare la comunicazione I2C: un registro hardware verrebbe scritto per configurare le impostazioni (ad esempio, velocità dati); un altro sarebbe scritto per inviare dati; un altro verrebbe letto per ricevere i dati; un altro verrebbe letto per determinare se la comunicazione è completa. Ogni venditore di chip può implementare i propri registri hardware (il significato di ogni bit di ogni registro indirizzabile) come vuole; questo è spiegato nella sua scheda tecnica.

Il dispositivo I2C ha una propria scheda tecnica su cosa dire sul bus I2C. Definisce le varie misurazioni e controlli implementati dal dispositivo I2C e come comunicarli in una transazione bus di byte su I2C. Specifica anche il numero di indirizzo dello slave I2C (in modo da poter collegare più slave a un singolo bus, comunicando tuttavia con uno specifico).

Si noti che molti tipi di dispositivi I2C possono essere configurati (portando uno o più pin a una tensione alta o bassa) a uno dei diversi indirizzi slave I2C, quindi potrebbe essere necessario sperimentare (o ottenere uno schema) per determinare ilIndirizzo dello slave I2C che corrisponde al dispositivo I2C specifico di interesse.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...