Question:
Comment un processeur Intel «parle-t-il» à un périphérique I2C?
Holmes.Sherlock
2020-01-16 12:01:41 UTC
view on stackexchange narkive permalink

Je ne viens pas du monde de l'électronique, alors soyez indulgents.Supposons qu'un processeur Intel veuille parler à un capteur de température via le bus I2C.À quoi ressemble la communication sous-jacente?Jusqu'à présent, je comprends, les processeurs Intel utilisent des instructions CPU spécialisées (IN / OUT) pour communiquer avec les périphériques.De plus, je pense qu'un Intel n'a pas de contrôleur I2C sur puce.Donc, nous avons besoin d'un contrôleur I2C, n'est-ce pas?Si c'est le cas, le processeur traite-t-il le contrôleur comme un périphérique et utilise-t-il les instructions du processeur IN / OUT pour lui parler?Le contrôleur est-il monté sur la carte mère?Quel bus relie le CPU et le contrôleur?

Intel fabrique / a fabriqué de nombreux processeurs différents.En avez-vous un en particulier en tête?
Supposons la série Intel Core: https://www.intel.com/content/www/us/en/products/processors/core.html
Cinq réponses:
Marcus Müller
2020-01-16 13:28:40 UTC
view on stackexchange narkive permalink

Jusqu'à présent, je comprends, les processeurs Intel utilisent des instructions CPU spécialisées (IN / OUT) pour communiquer avec les périphériques.

Euh, cela aurait pu être vrai dans les années 1970 et 1980, mais ne serait même pas vraiment très utile pour un périphérique I²C, et incroyablement intrusif pour la programmation du CPU.

Donc, à la place, il y a des périphériques attachés à un bus beaucoup, beaucoup plus rapide (par exemple PCIe) qui parle I²C, lors de la réception des commandes pour le faire du CPU; cette communication se produit généralement en écrivant des données dans un emplacement mémoire spécifique, au lieu d'utiliser des instructions IO spéciales.

De plus, je pense qu'un Intel n'a pas de contrôleur I2C sur puce.

Oh, je ne pense pas que ce soit vrai; il devrait y avoir plusieurs contrôleurs, mais ils sont spécifiques, par exemple, pour lire les EEPROM sur les modules de RAM.

Nous avons donc besoin d'un contrôleur I2C, n'est-ce pas?

oui.

Si tel est le cas, le processeur traite-t-il le contrôleur comme un périphérique

oui

et utiliser les instructions du processeur IN / OUT pour lui parler?

Non, ces instructions, comme dit, sont utilisées pour un très petit ensemble de types de périphériques qui existent depuis quelques décennies (pensez: claviers PS / 2, configuration d'espace d'adressage PCI, réel -horloge, disquette, port d'imprimante parallèle,…) seulement avec lequel un CPU a besoin de parler directement, principalement pour des raisons de démarrage et d'héritage.

En gros, dès que vous avez configuré votre espace d'adressage PCI, la plupart des communications périphériques ne sont que des accès mémoire normaux.

Souvent, même, votre programme préparait les commandes pour le contrôleur I²C dans une région mémoire, puis demandait à un contrôleur DMA de transférer cette mémoire vers le contrôleur. Ainsi, votre CPU ne parle même pas nécessairement directement au contrôleur - il dit à un contrôleur DMA de dire à un contrôleur PCIe, par exemple, de transférer des octets d'une mémoire vers un périphérique.

Le contrôleur est-il monté sur la carte mère?Quel bus relie le CPU et le contrôleur?

Dépend;il peut être intégré dans le même package IC, ou être sur la carte mère.

Si elle est directement intégrée au Southbridge (qui dans les chipsets Intel CPU s'appelle l'ICH), alors l'interface serait l ' Interface Direct Media;il peut également se trouver dans un périphérique PCIe connecté au Southbridge, ou dans un périphérique USB connecté à un contrôleur USB, qui à nouveau peut faire partie du southbridge, ou faire partie d'un contrôleur USB PCIe.

"Donc, à la place, il y a des périphériques connectés à un bus beaucoup, beaucoup plus rapide (par exemple PCIe) qui parle I²C, lors de la réception des commandes pour le faire du CPU".Est-ce comme `CPU <=> contrôleur PCIe <=> contrôleur DMA <=> contrôleur I2C`?
non, plus comme CPU: écrire dans les régions de mémoire appartenant au contrôleur DMA;Contrôleur DMA, indépendamment: prenez la région mémoire et déplacez-la vers l'adresse spécifiée.Oh, l'adresse spécifiée appartient au bus PCIe?faire le PCIe transférer les données.Contrôleur I²C: oh, il y a quelqu'un qui m'envoie des données.
@Holmes.Sherlock: cela s'appelle [MMIO (E / S mappées en mémoire)] (https://en.wikipedia.org/wiki/Memory-mapped_I/O).Les périphériques modernes ont toujours des «registres» que vous lisez ou écrivez pour les configurer ou pour que des choses se produisent, mais ils sont dans l'espace d'adressage physique (mémoire) au lieu de l'espace d'E / S, car c'est plus efficace d'accès.les instructions d'entrée / sortie sont lentes en raison de la sémantique de sérialisation requise.Connexes: [X86 Address Space Controller?] (// superuser.com/q/1226197)
Quel composant matériel / logiciel décide de l'espace d'adressage occupé par un appareil dans le cas de MMIO?
@Holmes.Sherlock question étonnamment complexe: dépend du type d'appareil de l'appareil, en fait.Mais pour les appareils "de haut niveau": c'est à configurer après l'énumération sur le bus auquel ils se connectent.Il existe différents degrés de liberté ici, et les adresses "vues par le périphérique" peuvent ne pas être les mêmes que "vues par le pilote de périphérique"
@MarcusMüller pourriez-vous recommander des livres ou d'autres ressources pour en savoir plus sur ce sujet?Il est très difficile de trouver un bon contenu sur la communication entre le CPU et les périphériques d'E / S.Des sujets tels que les chipsets de carte mère, northbridge, southbridge, MMIO, DMA, le bus mastering, les protocoles de bus (PCI, ISA, ...) ne sont jamais vraiment explorés en profondeur dans aucun livre d'architecture PC - ils se concentrent généralement beaucoup plus sur le CPUque le reste du système.J'apprécierais beaucoup si vous pouviez donner un aperçu de la façon dont on pourrait étudier ces sujets.
@felipeek désolé, non, je n'ai rien.Tout cela a été appris en utilisant Internet suffisamment longtemps et en parlant à des amis plus intelligents tout en essayant de comprendre ce que fait ce pilote / système d'exploitation.
@MarcusMüller assez juste, merci!
Jeroen3
2020-01-16 15:46:21 UTC
view on stackexchange narkive permalink

Un processeur Intel Core est connecté avec l'interface Direct Media DMI au Platform Controller Hub PCH.
Le PCH contient tous les périphériques, tels que PCI, USB, AHCI, l'affichage sort tout.

Mais aussi l'interface SMBus (I2C), qui relie tous les petits capteurs entre eux.

Le PCH met ces périphériques à disposition dans l'espace d'adressage via le DMI.Il s'agit d'une interface propriétaire et le PCH est obligatoire.Donc, pour le concept de plate-forme Intel, vous pouvez considérer cela comme un contrôleur SMBus sur puce.

enter image description here ( Intel 7 génération PCH)

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

Je viens de regarder au hasard une fiche technique du processeur Intel

[EDIT:] c'est une fiche technique de Platform Controller Hub (PCH) intégrée

dans l'introduction: enter image description here

  • et vous pouvez également le voir parfois sous un nom différent: ( SMBus) enter image description here

votre question, à quoi ça ressemble, c'est un très bon tutoriel qui l'explique: https://learn.sparkfun.com/tutorials/i2c/all

c'est comme ça: 1 pin pour synchroniser l'horloge entre les puces (envoyé par le maître du bus). 1 broche pour les données. (L'appareil qui veut envoyer des bits sur la ligne le tirera vers le bas) le maître envoie généralement l'adresse de la puce à laquelle il veut parler, cette puce va accuser réception puis la communication se produit ... d'autres puces sont silencieuses: D


l'i2c est trop lent, ce sera pour parler à la puce et obtenir des informations ou des configurations .. pas de trucs d'échange de données.

Vous avez vraiment manqué le point: cette fiche technique n'est ** pas ** une fiche technique CPU!c'est un contrôleur de concentrateur externe.
@MarcusMüller c'est le point.L'OP demande "Quel bus relie la CPU et le contrôleur [I2C]?"et c'est tout _ "Le Platform Controller Hub (PCH) est une famille de chipsets Intel, introduite vers 2008. ** Il est le successeur de l'architecture Intel Hub, qui utilisait un northbridge et un southbridge **" _ - https: //en.wikipedia.org/wiki/Platform_Controller_Hub
Première phrase @BruceAbbott: "regardé une fiche technique CPU".Image: captures d'écran d'un Intel Hub.Le fait que cela soit intégré dans le même package que le cœur du processeur ne fait aucune différence pour l'interfaçage avec celui-ci d'un côté logiciel.
dans mon contexte, je mentionne l'ensemble du paquet pas le noyau .. donc s'il y a 100 fiches techniques je viens de dire (j'ai ouvert ibe aléatoire) .. je ne considère pas mon auto-expert dans ce domaine mais je pensais que mes connaissances limitées avec peu de recherches le serontaider l'OP.Je ne pense toujours pas que j'ai raté le point si @MarcusMüller
@MarcusMüller: Je suis à peu près sûr que le "paquet" en question est le southbridge, pas le CPU.Le "northbridge" a été intégré dans le CPU lui-même, mais les E / S comme USB et Ethernet ne le sont pas, du moins pas dans la famille Sandybridge;le processeur lui-même n'a qu'une sortie vidéo du GPU intégré, du contrôleur de mémoire et du DMI / PCIe pour communiquer avec les slots southbridge et PCI / PCIe.Des trucs de faible puissance comme Atom / Silvermont-family pourraient être plus agressifs SoC (System On Chip) mais je pense que "400 series" sont les chipsets pour IceLake, comme Z490.Alors oui, vous avez tout à fait raison;ce n'est pas physiquement dans le CPU.
@Hasan alattar Le PCH est le chipset (généralement sur votre carte mère), ne fait pas partie du CPU, et généralement même pas sur le même package.Si vous regardez la fiche technique actuelle d'Intel PCH: https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/7-series-chipset-pch-datasheet.pdf Le contrôleur I2Cfait partie du contrôleur smbus, situé sur le bus PCI 0: Périphérique 31: Fonction 3. Le logiciel parlerait donc au contrôleur i2c via un bus PCI.
aah ok merci .. AiligjcfkcCMT
Janka
2020-01-16 12:17:58 UTC
view on stackexchange narkive permalink

Les PC ont plusieurs contrôleurs I²C.Les plus importants sont ceux du DDC et ceux du SPD des modules RAM.Parfois, des capteurs de température et une commande de ventilateur sont également installés sur les bus I²C.

La manière de contrôler ces bus I²C dépend du chipset de la carte.La plupart des adaptateurs hôtes sont très simples et se composent à peine d'un générateur d'horloge, d'un registre à décalage et d'une logique pour créer les conditions de démarrage et d'arrêt I²C.L'ensemble du transfert est sous contrôle logiciel.Jouer avec les bits de contrôle à l'intérieur de la puce du pont sud de la carte.

Les puces du pont sud sont incroyablement complexes et contiennent de nombreux éléments hérités.Le contrôleur I²C à l'intérieur peut même être connecté via un bus LPC à l'intérieur de la puce.

SMBus est un sur-ensemble d'I2C.La RAM utilise généralement SMBus et non I2C.
Est-ce que le southbridge de la carte mère héberge également un ou plusieurs contrôleurs I2C?Comment le CPU communique-t-il avec ces contrôleurs hors puce?Cette communication a-t-elle lieu via une interface standard?
@Passerby: SMBus est à la fois un sur-ensemble et un sous-ensemble de I²C.Il définit certaines transactions standard sur I²C, qui pourraient alors être exécutées de manière autonome par une machine à états intégrée au matériel.Vous ne pouvez pas faire toutes les cascades possibles avec I²C avec - par exemplecognement d'adresse -, et souvent ces contrôleurs SMBus sont cassés de manière subtile et peuvent se bloquer si une puce cliente n'est pas conforme dans les cas secondaires.
Dirk Helgemo
2020-01-17 04:12:48 UTC
view on stackexchange narkive permalink

I2C est un protocole de communication qui fonctionne sur deux fils. Le séquençage de tension sur ces fils communique entre le maître I2C (contrôlé par logiciel) et un esclave I2C (peut-être un capteur de température).

Le logiciel ne manipule généralement pas directement le séquençage de tension des fils d'I2C (cela s'appellerait "bit banging"), mais convainc plutôt un matériel intermédiaire de faire le séquençage pour cela. Le logiciel contrôle le matériel intermédiaire en effectuant des lectures et des écritures de mémoire sur des adresses de mémoire bien connues qui correspondent aux registres du matériel. (Certaines adresses mémoire pointent vers la mémoire; d'autres adresses mémoire peuvent pointer vers des registres matériels.)

Le matériel intermédiaire ("contrôleur I2C") est directement connecté aux fils du bus I2C. Ses registres peuvent faire partie de la puce du processeur ou se trouver sur une autre puce qui peut être contrôlée par le processeur (peut-être via des accès à la mémoire du processeur). Cela dépend de la façon dont le système a été câblé ensemble.

Les registres du contrôleur I2C sont écrits et lus pour provoquer la communication I2C: un registre matériel serait écrit pour configurer les paramètres (par exemple, le débit de données); un autre serait écrit pour envoyer des données; un autre serait lu pour recevoir des données; un autre serait lu pour déterminer si la communication est complète. Chaque fournisseur de puces peut implémenter ses registres matériels (la signification de chaque bit de chaque registre adressable) comme il le souhaite; ceci est expliqué dans sa fiche technique.

Le périphérique I2C a sa propre fiche technique sur ce qu'il faut dire sur le bus I2C. Il définit les différentes mesures et contrôles mis en œuvre par le dispositif I2C, et comment les communiquer dans une transaction de bus d'octets sur I2C. Il spécifie également son numéro d'adresse d'esclave I2C (vous pouvez donc connecter plusieurs esclaves à un seul bus, tout en communiquant avec un bus spécifique).

Notez que de nombreux types de périphériques I2C peuvent être configurés (en tirant une ou plusieurs broches à une tension élevée ou basse) sur l'une des différentes adresses esclaves I2C, vous devrez peut-être expérimenter (ou obtenir un schéma) pour déterminer leAdresse d'esclave I2C qui correspond au périphérique I2C concerné.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...