-
1. Gebiet
der Erfindung
-
Die
vorliegende Erfindung betrifft serielle Schnittstellen und insbesondere
eine serielle Schnittstelle, die in der Lage ist, mit zwei oder
mehr Schnittstellenstandards zu arbeiten.
-
2. Beschreibung des Standes
der Technik
-
Zwei
Arten von synchronen seriellen Schnittstellen-Datenübertragungsstandards sind der
Standard MICROWIRETM/Microwire Plus und
der Systemverwaltungsbus-(SMB)
Standard. Der Standard MICROWIRETM/Microwire
Plus ist ein Standard mit drei Drähten und der SMB-Standard ist
ein Standard mit zwei Drähten.
Der SMB-Standard, der von der Intel Corporation in Santa Clara,
Kalifornien, veröffentlicht
wurde, ist im Wesentlichen äquivalent
zu einem anderen Standard, der als I2C-Bus-Standard
bekannt ist. Ferner ist der SMB-Busstandard zu einem anderen Standard ähnlich,
der als Access.bus-Standard bekannt ist. Diese Schnittstellenstandards
ermöglichen
eine leichte Kopplung mit einem breiten Bereich von kostengünstigen Spezialspeichern
und E/A-Vorrichtungen. Diese umfassen EEPROMs, SRAMs, Zeitgeber,
A/D-Wandler, D/A-Wandler, Taktchips und Peripheriegeräte.
-
Um
Schnittstellen sowohl des Standards MICROWIRETM/Microwire
Plus als auch SMB in einem einzelnen integrierten Schaltungs-(IC)
Chip aufzunehmen, müssen
fünf Eingangs/Ausgangs-Anschlussstifte
verwendet werden, d.h. drei Anschlussstifte für MICROWIRETM/Microwire
Plus und zwei Anschlussstifte für
SMB. In Anwendungen, die Begrenzungen hinsichtlich Platz und Kosten
haben, wie z.B. Anwendungen von persönlichen digitalen Assistenten
(PDA) der oberen Klasse, nutzen fünf Eingangs/Ausgangs-Anschlussstifte eine
signifikante Menge an Platz.
-
Somit
besteht ein Bedarf für
eine Schaltung, die zwei oder mehr serielle Schnittstellen kombinieren kann
und die relativ wenige Eingangs/Ausgangs-Anschlussstifte verwendet.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Gemäß der Erfindung
umfasst eine serielle Schnittstelle einen ersten Anschluss, der
in der Lage ist, Daten auf serielle Weise zu senden und zu empfangen;
eine mit dem ersten Anschluss gekoppelte erste Datenübertragungsstufe
zum Konfigurieren des ersten Anschlusses, damit er entweder in einer
ersten seriellen Datenübertragungs-Betriebsart
oder einer zweiten seriellen Datenübertragungs-Betriebsart arbeitet;
einen zweiten Anschluss, der in der Lage ist, ein Taktsignal zu
senden und zu empfangen, das verwendet wird, um die Datenübertragung über den
ersten Anschluss zu steuern; eine mit dem zweiten Anschluss gekoppelte
Taktübertragungsstufe
zum Konfigurieren des zweiten Anschlusses, damit er entweder in
der ersten seriellen Datenübertragungs-Betriebsart
oder der zweiten seriellen Datenübertragungs-Betriebsart
arbeitet; einen dritten Anschluss zum Durchführen einer seriellen Datenübertragung,
und eine mit dem dritten Anschluss gekoppelte zweite Datenübertragungsstufe
zum Ermöglichen,
dass der dritte Anschluss in der zweiten seriellen Datenübertragungs-Betriebsart arbeitet.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
1–2 sind
Blockdiagramme, die eine erfindungsgemäße serielle Schnittstelle darstellen.
-
3 ist
ein Blockdiagramm, das die in 1 gezeigte
serielle Schnittstelle in einen größeren integrierten Schaltungs-(IC)
Chip eingebaut darstellt.
-
4–5 sind
Blockdiagramme, die Beispiel-Access.bus-Konfigurationen darstellen.
-
6–8 sind
schematische Diagramme, die die in 1 und 2 gezeigte
serielle Schnittstelle darstellen.
-
9–13 sind
Ablaufdiagramme, die Access.bus-Datenübertragungen
darstellen.
-
14–15 sind
Zustandsdiagramme, die den Betrieb der in den 1 und 2 gezeigten
seriellen Schnittstelle darstellen.
-
16 ist
ein schematisches Diagramm, das eine Takterzeugungsschaltung darstellt,
die in der in den 1 und 2 gezeigten
seriellen Schnittstelle verwendet werden kann.
-
17–18 sind
Ablaufdiagramme, die den Betrieb der in 16 gezeigten
Takterzeugungsschaltung darstellen.
-
19 ist
ein schematisches Diagramm, das eine weitere Takterzeugungsschaltung
darstellt, die in der in den
-
1 und 2 gezeigten
seriellen Schnittstelle verwendet werden kann.
-
20–21 sind
Ablaufdiagramme, die den Betrieb der in 19 gezeigten
Takterzeugungsschaltung darstellen.
-
22–23 sind
Ablaufdiagramme, die den Betrieb der in den 1 und 2 gezeigten
seriellen Schnittstelle darstellen.
-
24 ist
ein Blockdiagramm, das Module darstellt, die in der in den 1 und 2 gezeigten
seriellen Schnittstelle enthalten sind.
-
25–29 sind
Ablaufdiagramme, die den Betrieb der in den 1 und 2 gezeigten
seriellen Schnittstelle darstellen.
-
AUSFÜHRLICHE
BESCHREIBUNG DES BEVORZUGTEN AUSFÜHRUNGSBEISPIELS
-
Mit
Bezug auf die 1 und 2 ist eine
serielle Schnittstelle 30 gemäß der vorliegenden Erfindung dargestellt.
Die serielle Schnittstelle 30 kann eine vollständige Unterstützung der
synchronen seriellen Schnittstellen entweder des Standards MICROWIRETM/Microwire Plus mit drei Drähten oder
des Systemverwaltungsbus-(SMB) Standards mit zwei Drähten bereitstellen.
Wie vorstehend erwähnt,
ist der SMB-Standard zum I2C-Bus-Standard
im Wesentlichen äquivalent
und der SMB-Standard ist zum Access.bus-Standard ähnlich. Insbesondere
kann gemäß dem SMB-Standard
ein Master ein Sender und ein Empfänger sein und ein Slave kann
ein Sender und ein Empfänger
sein. Gemäß dem Access.bus-Standard
kann ein Master nur ein Sender sein und ein Slave kann nur ein Empfänger sein.
Die folgende Erörterung
nimmt an, dass die serielle Schnittstelle 30 mit dem Standard
MICROWIRETM/Microwire Plus mit drei Drähten und
dem Access.bus-Standard mit zwei Drähten arbeitet. Es sollte jedoch
durchaus selbstverständlich
sein, dass der Access.bus-Standard gegen den Systemverwaltungsbus-(SMB)
Standard ausgetauscht werden kann oder alternativ der Access.bus-Standard
gegen den I2C-Bus-Standard ausgetauscht
werden kann.
-
Da
der MicrowirePlus-Standard den MICROWIRE-Standard mit der zusätzlichen
Option, umzukehren, an welcher Flanke die seriellen Daten aus- und
eingetaktet werden, vollständig
unterstützt,
wird er im Rest dieses Dokuments als MICROWIRE bezeichnet. MICROWIRE
taktet Daten bei der fallenden Flanke des SK-Takts aus und taktet
die Eingangsdaten bei der steigenden Flanke von SK ein; MicrowirePlus
hat die Option, dies umzukehren. MICROWIRE ist in Datenblättern, die
von der National Semiconductor Corporation in Santa Clara, Kalifornien,
erhältlich
sind, vollständig
definiert.
-
Der
Begriff "mit drei
Drähten" bezieht sich sowohl
auf die MICROWIRE- als auch die Access.bus-Schnittstelle, selbst
wenn der Access.bus eine Schnittstelle mit zwei Leitungen ist. Die
serielle Schnittstelle 30 verwendet nur drei Anschlussstifte,
um sowohl MICROWIRETM/Microwire Plus als
auch Access.bus (oder den SMB- oder I2C-Standard)
zu unterstützen.
Die Anschlussstifte sind: SO (oder SDA); SI (bei I2C nicht verwendet);
und SCLK (oder SCL). Ein Systemsteuerregister (nachstehend erörtert) wählt entweder die
MICROWIRE-(0–1
MHz) oder die Access.bus-Schnittstelle
(0–100
kHz) aus und programmiert die Taktteilerkette mit drei Drähten.
-
Mit
Bezug auf 3 kann die serielle Schnittstelle 30 in
einen IC-Chip 32 eingebaut sein, um eine serielle Datenübertragung
zum und vom IC-Chip 32 durchzuführen. Der IC-Chip 32 kann
andere interne Komponenten, wie beispielsweise eine CPU 34,
eine DMA-Steuereinheit 36, eine DRAM-Speicher-Steuereinheit 38, eine Busschnittstelleneinheit 40,
eine LCD-Steuereinheit 42 und/oder einen parallelen Anschluss 44,
umfassen. Ein CPU-Bus 46 und
ein peripherer Bus 48 können
verwendet werden, um Datenübertragungen
zwischen allen oder einigen der Komponenten vorzusehen. Wenn die
serielle Schnittstelle 30 nicht verwendet wird, können ihre
Anschlussstifte für
eine gewisse andere Funktion verwendet werden, wie beispielsweise
Modemsteuerleitungen (CTS_z, DCD_z und RI_z).
-
Der
Access.bus verwendet eine Schnittstelle mit zwei Drähten, um
bidirektionale Datenübertragungen zwischen
ICs zu ermöglichen.
Die zwei Schnittstellenleitungen sind die serielle SDA-Datenleitung
und die serielle SCL-Taktleitung. Beispiel-Access.bus-Konfigurationen
sind in den 4 und 5 gezeigt.
Wie dargestellt, unterstützt
der Access.bus mehrere Master, wie z.B. IC-Chips 32A und 32B,
und viele Slave- und Master-Sender und -Empfänger. Das Access.bus-Protokoll umfasst
Softwareadressierungs- und Datenübertragungsprotokolle
zusätzlich
zu Hardwaredefinitionen. Die zwei seriellen Leitungen (Takt und
Daten) können
mit einer positiven Versorgung über
einen Pull-up-Widerstand verbunden sein und können HOCH bleiben, wenn der
Bus nicht belegt ist. Jede Vorrichtung weist eine eindeutige Adresse
auf und kann als Sender oder Empfänger arbeiten. Man beachte,
dass einige Peripheriegeräte
nur Empfänger
sind und die meisten Mikrocomputer und Systeme wie z.B. die IC-Chips 32A und 32B sowohl
Sender als auch Empfänger
sind.
-
Während Datenübertragungen
kann eine Vorrichtung entweder ein Master oder ein Slave sein. Die auslösende Vorrichtung
wird als Master betrachtet und sie erzeugt die Taktsignale für die Übertragung.
Irgendeine adressierte Vorrichtung während dieser Übertragung
wird als Slave betrachtet. Wenn der IC-Chip 32 eine Datenübertragung
mit einem beigefügten
Access.bus-Peripheriegerät
einleitet, ist dies der Master und der Sender. Wenn jedoch das fragliche
Access.bus-Peripheriegerät antwortet
und Daten zum IC-Chip 32 sendet, ist es der Sender (selbst
wenn es der Slave bleibt) und der Chip 32 ist der Empfänger (selbst
wenn er der Master bleibt). Mit anderen Worten, der Master kann
sowohl ein Sender als auch ein Empfänger sein und ein Slave kann
sowohl ein Sender als auch ein Empfänger sein. Der Schlüssel ist,
dass der Initiator und der Lieferant des Taktsignals der Master
ist.
-
Wie
in den 4 und 5 gezeigt, ist es möglich, dass
mehr als ein Master auf dem Bus vorhanden ist. Aufgrund dessen wurde
in die Access.bus-Implementierung eine Buszuteilung aufgenommen.
Sie hängt von
einer verdrahteten UND-Verbindung mit den Vorrichtungen auf dem
Bus und von der Taktsynchronisation ab. In den meisten Fällen ist
jedoch der IC-Chip 32 der einzige Master.
-
Unter
erneutem Bezug auf 1 umfasst die serielle Schnittstelle 30 eine
bidirektionale Taktübertragungsschaltung 50,
eine bidirektionale Datenübertragungsschaltung 52 und
eine Ausgangsdatenübertragungsschaltung 54.
Die bidirektionale Taktübertragungsschaltung 50 wird
für die
Eingabe und Ausgabe der Taktsignale für sowohl MICROWIRE als auch
I2C verwendet. Die bidirektionale Datenübertragungsschaltung 52 wird
für die
Dateneingabe und -ausgabe für
I2C und nur die Dateneingabe für MICROWIRE
verwendet. Die Ausgangsdatenübertragungsschaltung 54 wird
für die
Datenausgabe für
MICROWIRE verwendet.
-
Mit
Bezug auf 6 ist die bidirektionale Taktübertragungsschaltung 50 im
Wesentlichen wie gezeigt verbunden. Um MICROWIRE auszuwählen, wird
das Freigabesignal EN auf eine "1" gesetzt und das
Ansteuereingangssignal I2C_uw_z wird auf "0" gesetzt.
Diese Eingangssignale werden durch die Software gesteuert und werden über ein
Steuerregister (nachstehend erörtert)
gesetzt. Das Signal Disp_z ist gleich dem NICHT-UND des Freigabesignals
EN und des Ansteuereingangssignals I2C_uw_z,
das in diesem Fall eine "1" ist. Der MICROWIRE-Ausgangstakt sclk_uw_out
wird von einem Puffer 56 empfangen. Sowohl das NICHT-UND-Gatter 58 als
auch das NICHT-ODER-Gatter 60 werden freigegeben, was bedeutet,
dass sowohl der p-Kanal-Transistor 62 als auch der n-Kanal-Transistor 64 durch
den Takt sclk_uw_out in Totem-pole angesteuert werden. Das Ansteuern
der Ausgangstransistoren 62 und 64 auf Totem-pole-Weise
ist im MICROWIRE-Standard festgelegt. Somit wird der Ausgangstakt
sclk_uw_out am Anschlussstift SCLK ausgesandt. Ein MICROWIRE-Eingangstakt
sclk_uw_in wird am Anschlussstift SCLK empfangen und wird über die
Puffer 66 und 68 übertragen.
-
Um
I2C auszuwählen, wird das Freigabesignal
EN auf eine "1" gesetzt und das
Ansteuereingangssignal I2C_uw_z wird auf "1" gesetzt.
Das Signal Disp_z ist gleich dem NICHT-UND von EN und I2C_uw_z,
das in diesem Fall eine "0" ist. Der I2C-Ausgangstakt
sclk_I2C_out wird vom Puffer 56 empfangen. Das Signal Disp_z
deaktiviert das NICHT-UND-Gatter 58, was wiederum den p-Kanal-Transistor 62 sperrt.
Somit bildet der Ausgang einen offenen Drainpol, wobei nur der Transistor 64 den
Ausgangstakt sclk_I2C_out über
den Anschlussstift SCLK treibt. Ein I2C-Eingangstakt
sclk_I2C_in wird am Anschlussstift SCLK empfangen und wird über die
Puffer 66 und 68 übertragen.
-
Mit
Bezug auf 7 ist die bidirektionale Datenübertragungsschaltung 52 im
Wesentlichen wie gezeigt verbunden. Um I2C
auszuwählen,
wird wiederum das Freigabesignal EN auf eine "1" gesetzt
und das Ansteuereingangssignal I2C_uw_z wird auf "1" gesetzt. Das Signal Disp_z ist gleich
dem NICHT-UND von EN und I2C_uw_z, das in diesem Fall eine "0" ist. Ferner ist ein I2C-Datenausgangs-Freigabesignal
EN_i2cd gleich dem UND des Freigabesignals EN und des Ansteuereingangssignals
I2C_uw_z, das in diesem Fall eine "1" ist.
Das I2C-Ausgangsdatensignal
SD_I2C_out wird vom NICHT-UND-Gatter 70 und vom NICHT-ODER-Gatter 72 empfangen.
Das NICHT-UND-Gatter 70 wird
jedoch gesperrt, da das Signal Disp_z gleich "0" ist.
Somit wird der p-Kanal-Transistor 74 auch gesperrt und ähnlich zum
obigen bildet der Ausgang einen offenen Drainpol, wobei nur der
Transistor 76 die Ausgangsdaten SD_I2C_out über den
Anschlussstift SO treibt. Ein I2C-Eingangsdatensignal
SD_I2C_in wird am Anschlussstift SO empfangen und wird über die
Puffer 78 und 80 übertragen.
-
Um
MICROWIRE auszuwählen,
wird das Freigabesignal EN auf eine "1" gesetzt
und das Ansteuereingangssignal I2C_uw_z wird auf "0" gesetzt. Das Signal Disp_z ist gleich
dem NICHT-UND von EN und I2C_uw_z, das in diesem Fall eine "1" ist, und das Freigabesignal EN_i2cd
ist gleich dem UND von EN und I2C_uw_z, das in diesem Fall eine "0" ist. Ein MICROWIRE-Eingangsdatensignal
SD_uw_in wird am Anschlussstift SO empfangen und wird über die
Puffer 78 und 80 übertragen. Die bidirektionale
Datenübertragungsschaltung 52 wird
nur für
die MICROWIRE-Dateneingabe
und nicht die MICROWIRE-Datenausgabe verwendet.
-
Mit
Bezug auf 8 ist die Ausgangsdatenübertragungsschaltung 54 im
Wesentlichen wie gezeigt verbunden. Um MICROWIRE auszuwählen, wird
das Freigabesignal EN wieder auf eine "1" gesetzt
und das Ansteuereingangssignal I2C_uw_z wird auf "0" gesetzt. Ein MICROWIRE-Datenausgangs-Freigabesignal EN_uwd
ist gleich dem UND des Freigabesignals EN und des Komplements (d.h.
Negation) des Ansteuereingangssignals I2C_uw_z, das in diesem Fall
das Ergebnis des UND, eine "1" ist. Das MICROWIRE-Datenausgangssignal
SO_uw wird über
einen Puffer 82 zum Ausgangsanschlussstift SI übertragen.
-
Um
sowohl MICROWIRE als auch I2C für alle Schaltungen 50, 52 und 54 zu
deaktivieren, wird das Freigabesignal EN auf eine "0" gesetzt und die Anschlussstifte SCLK,
SO und SI werden alle auf drei Zustände gesetzt, d.h. auf den Zustand
mit hoher Impedanz gesetzt. Zwei durch Software gesteuerte Bits,
d.h. das Freigabesignal EN und das Ansteuereingangssignal I2C_uw_z
und nur drei Eingangs/Ausgangs-Anschlussstifte, d.h. SCLK, SO und
SI, können
folglich verwendet werden, um entweder MICROWIRE oder I2C
auszuwählen. Zwei
der Eingangs/Ausgangs-Anschlussstifte,
d.h. SCLK und SO, werden automatisch für I2C
auf offenen Drainpol oder für
MICROWIRE auf Totem-pole konfiguriert. Ein programmierbarer Taktteilungsbaum
liefert eine angemessene Taktfrequenz für sie.
-
Während Access.bus-Datenübertragungen
werden Daten während
des hohen Zustands des seriellen Takts (SCL) übertragen. Die Daten müssen sich
während
des niedrigen Zustands des Takts ändern. Während des hohen Zustands werden
die Daten gelesen und unter der Annahme, dass die Daten während der
gesamten hohen Periode des Takts stabil sind, wird angenommen, dass
die Daten gültig
sind. Dies ist in 9 gezeigt.
-
Ein
Datenbit wird während
jedes Taktimpulses übertragen.
Die Daten auf der SDA-Leitung müssen während der
HOHEN Periode stabil bleiben, damit sie gültig sind. Dies liegt daran,
dass Datenübergänge während der
hohen Periode des SCL als Steuersignale interpretiert werden. Dies
ermöglicht,
dass eine einzelne Datenleitung sowohl eine Befehls/Steuer-Information
als auch Daten unter Verwendung des synchronen seriellen Takts überträgt.
-
Ein Übergang
der Datenleitung (SDA) von hoch auf niedrig, während der Takt (SCL) hoch ist,
gibt eine START-Bedingung an, wie in 10 gezeigt.
Ebenso gibt ein Übergang
der SDA-Leitung von niedrig auf hoch, während der SCL hoch ist, eine
STOP-Bedingung an.
-
Der
Bus wird nach der START-Bedingung als belegt und nach einem bestimmten
Zeitintervall nach der STOP-Bedingung als wieder frei betrachtet.
Die START- und STOP-Bedingungen werden vom Master erzeugt.
-
Während einer
Datenübertragung
ist die kleinste Übertragungseinheit
das Byte. Eine beliebige Anzahl von Datenbytes kann auf einmal übertragen
werden. Jedes Byte wird mit dem höchstwertigen Bit zuerst übertragen
und nach jedem Byte (8 Bits) muss ein Betätigungsbit folgen, wie in 11 gezeigt.
Der Master muss den Bestätigungsbit-Taktimpuls erzeugen
und der Empfänger
muss die SDA-Leitung während
des Bestätigungs-Taktimpulses
herabsetzen, während
der Sender die SDA-Leitung während
des Bestätigungsimpulses freigibt
(sie auf einen hohen Pegel schalten lässt). 12 zeigt
diese Bedingung.
-
Ein
Slave-Empfänger
muss nach dem Empfang jedes Bytes eine Bestätigung erzeugen und ein Master
muss nach dem Empfang jedes Bytes, das aus dem Slave-Sender ausgetaktet
wird, eine erzeugen. Wenn die Empfangsvorrichtung die Daten nicht
sofort empfangen kann, kann sie den Sender in einen Wartezustand bringen,
indem sie die Taktleitung (SCL) auf einem niedrigen Pegel hält. Dies
kann geschehen, wenn der Empfänger
mit einer gewissen mit einem Peripheriegerät verbundenen Aufgabe beschäftigt ist
oder anderweitig mit Systemaufgaben höherer Ordnung beschäftigt ist.
Wenn dies geschieht, sollte der Master nach einem Zeitablauf die Übertragung
durch Erzeugen einer Stopbedingung abbrechen, was ermöglicht,
dass andere Übertragungen
stattfinden.
-
Es
gibt zwei Ausnahmen für
die Regel "Bestätigung nach
jedem Byte". Die
erste ist, wenn der Master der Empfänger ist. Er muss dem Sender
ein Datenende signalisieren, indem eine Bestätigung beim letzten Byte, das
aus dem Slave ausgetaktet wurde, NICHT signalisiert wird. Diese "negative Bestätigung" umfasst immer noch
den Bestätigungstaktimpuls
(vom Master erzeugt), aber die SDA-Leitung wird nicht herabgesetzt. Die
zweite Ausnahme ist, wenn ein Slave eine negative Bestätigung sendet,
wenn er keine zusätzlichen
Datenbytes mehr annehmen kann. Dies geschieht, wenn der Empfänger voll
ist, anderweitig belegt ist oder ein Problem aufgetreten ist. Unter
diesen Bedingungen erzeugt der Slave auch eine "negative Bestätigung".
-
Mit
Bezug auf Adressierungsübertragungsformate
weist jede Vorrichtung auf dem Bus eine eindeutige Adresse auf.
Bevor irgendwelche Daten übertragen
werden, überträgt der Master
die Adresse des adressierten Slave. Die Slavevorrichtung sollte,
sobald sie ihre Adresse erkennt, mit einer Bestätigung auf der SDA-Leitung
bestätigen,
dass die Adresse übereinstimmt.
-
Die
Adresse sind die ersten sieben Bits nach einer START-Bedingung. Das 8.
Bit ist der Richtungs-(R/W) Indikator. Eine vollständige Datenübertragung
ist in 13 gezeigt und zeigt die Startbedingung, gefolgt
von einer 7-Bit-Adresse,
einem 1-Bit-RIW-Indikator, einer 1-Bit-Bestätigung,
gefolgt von einem zweiten Datenbyte, einer 1-Bit-Bestätigung und so weiter. Ein Übergang
von niedrig auf hoch während
einer hohen SCL-Periode gab die STOP-Bedingung an und beendet die Übertragung.
-
Wenn
die Adresse gesandt wird, vergleicht jede Vorrichtung in dem System
ihre Adresse mit der gesandten Adresse. Wenn eine Übereinstimmung
besteht, betrachtet sich die Vorrichtung als adressiert und sendet
eine Bestätigung.
In Abhängigkeit
vom Zustand des R/(W_z)-Bits (1 = Lesen, 0 = Schreiben) wirkt die
Vorrichtung als Sender (Daten senden) oder als Empfänger (Daten
empfangen).
-
Wie
vorstehend erwähnt,
umfasst die serielle Schnittstelle 30 ein Steuerregister mit drei
Drähten (3WCON).
Die Schnittstellen MICROWIRE (die eine serielle Taktfrequenz von
0–1 MHz
unterstützt)
und Access.bus (die eine serielle Taktfrequenz von 0–10 kHz
unterstützt)
verwenden spezielle Taktfrequenzen und dieses Register wird verwendet,
um diese Frequenzen zu steuern. Insbesondere sind die Bitzuweisungen
des Steuerregisters 3WCON folgendermaßen. Bits 7–6: SL1,2, die sich mit SL0
zum ausgewählten
CPU-Takt, dividiert durch 4, 8, 16 oder 32, kombinieren. Bits 6–3: Con2-0,
die den 8-Bit-Zähler-Anfangswert festlegen.
SL0 und SL1 sind zwei Auswahlsignale, um den CPU-Takt, dividiert
durch 4, 8, 16 oder 32 auszuwählen,
wie in Tabelle A gezeigt. Dieser vorskalierte Takt geht zu einem
8-Bit-Zähler,
der durch Con0, Con1 und Con2 gesteuert wird, wie in Tabelle B gezeigt.
Mit diesen fünf
Auswahlbits kann man den CPU-Takt, dividiert durch 8, 16, 24, 32,
40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384,
448 und 512, als Taktquelle für
die Schnittstellenlogik mit drei Drähten auswählen.
-
-
Con0,
Con1, Con2, SL1 und SL0 sollten gemäß der Frequenz der CPU, die
in der Hardware verwendet wird, programmiert werden. Sie legen die
Frequenz des in diesem Block verwendeten Takts fest und werden verwendet,
um die Leistung bei verschiedenen Oszillatorgeschwindigkeiten zu
optimieren.
-
-
Das
Bit 2 ist das vorstehend erörterte
Freigabesignal EN. Dieses Bit gibt die 3-Wire-Schnittstelle frei, wenn
es eine "1" ist, und sperrt
die 3-Wire-Schnittstelle, wenn es eine "0" ist.
Dies ist das globale Freigabebit. Das Bit 1 ist das vorstehend erörterte Ansteuereingangsbit
I2C_uw_z, das hierin auch als A_UW-Bit bezeichnet wird. Wenn dieses
Bit eine "0" ist, wird MICROWIRE
ausgewählt,
und wenn dieses Bit eine "1" ist, wird Access.bus
(I2C) ausgewählt. Das Bit 0 ist ein weiches
Rücksetzbit
S_RESET. Auf der Basis irgendeiner Busfehlerbedingung kann die Software
ein Softwarerücksetzen
an diesen Block ausgeben, indem sie dieses Bit auf = "1" setzt.
-
Das
Drei-Draht-Steuerregistermodul weist die folgenden Funktionen auf.
Es decodiert EA-Lesen/Schreiben, CS_3wire und den Adressenbus, um
alle Lese/Schreib-Freigabesignale für 3-Wire zu erzeugen. Es bearbeitet
Registerlesevorgänge.
Alle Module, die lesbare Register enthalten, senden den Bus zu diesem
Modul. Sie werden im Lesezyklus gemischt und ausgesandt. Das Drei-Draht-Steuerregister
schreibt in das scon[7:0]-Register. Es führt eine Zeitüberwachungsfunktion
durch. Wenn I2C ausgewählt
ist und wenn der Takt mehr als 2 ms niedrig bleibt (Access.bus erforderlich),
wird ein Überlauf
und eine Unterbrechung für
die CPU erzeugt. Der Takt RTC_I KHZ wird verwendet, um diese Funktion
zu implementieren. Die Taktteilungskette wird durch dieses Modul
durchgeführt.
OSC/2_clk wird durch 4, 8, 16 und 32 dividiert. Dieser vorskalierte zählende Takt
inkrementiert nach jeder steigenden Flanke, bis er gleich [Con2,
Con1, Con0] ist. Dies ist ein kontinuierlicher laufender Takt, wenn
3-wire aktiviert ist. Er geht in Abhängigkeit davon, welches ausgewählt ist,
zu Microwire oder I2C. Schließlich
wählt das
Drei-Draht-Steuerregistermodul eingehende Daten/eingehenden Takt,
die/der I2C-Daten/Takt sind/ist, oder Microwire-Daten/Takt in Abhängigkeit
davon, welches ausgewählt
ist, aus.
-
Die
serielle Schnittstelle 30 umfasst MICROWIRE-Register. MICROWIRE
und Microwire/Plus sind synchrone serielle Drei-Draht-Schnittstellen-Kommunikationssysteme,
die ermöglichen,
dass Chips wie z.B. der IC-Chip 32 mit irgendeiner anderen
Vorrichtung kommunizieren, die auch die MICROWIRE- und Microwire/Plus-Schnittstelle
unterstützt.
Es sind zwei 8-Bit-MICROWIRE-Register vorhanden.
-
Ein
serielles Eingabe/Ausgabe-Register (SIO) ist ein 8-Bit-Schieberegister,
das SIO-(serielle Eingabe/Ausgabe und PIPO) Register genannt wird.
Es wird sowohl zum Senden als auch Empfangen von Daten verwendet.
In MICROWIRE-Systemen wird das höchstwertige
Bit zuerst gesendet (empfangen) und das niedrigstwertige Bit wird
zuletzt gesendet (empfangen). Die CPU 34 liest und schreibt
vom bzw. in das SIO-Register über
einen parallelen 8-Bit-Datenbus. Es ist ein Lese/Schreib-Register
und weist eine E/A-Zuordnungsadresse von 0051h auf.
-
Das
Microwire-Modul weist die folgenden Funktionen auf. Es synchronisiert
UW_BUSY und verwendet dieses UW_BUSY_sync, um mit Abwärtsteilung
zu steuern, lässt
jedoch den Takt weiter laufen, um den Microwire-Takt zu erhalten
(8 Taktimpulse als eine Gruppe), wenn es sich in der Masterbetriebsart
befindet. Ein Taktzählwert
wird zum Zählen
von 8 Takten verfolgt. Wenn 8 Takte erreicht sind, wird UW_BUSY
gelöscht
und uWI wird gesetzt und der Zählwert
zurückgesetzt.
In die SIO-Schiebe/Laderegister-Implementierung
wird geschrieben, wenn es sich im Programmierzyklus befindet, und
Schieben findet statt, wenn es sich in der Microwire-Übertragungsphase
befindet. Die normale SK-Betriebsart und die alternative SK-Betriebsart
werden durch einen Eingangs- und Ausgangszwischenspeicher implementiert.
In der normalen SK-Betriebsart ist der Ausgangszwischenspeicher
durchlässig
(LATZ = 1 'b1).
Der Eingangszwischenspeicher ist ein verzögerter, umgekehrter CLK. Der
Takt schaltet mit SLAVE_EN. In der Masterbetriebsart gilt SLAVE_EN
= 1, und in der Slavebetriebsart, wenn CS_Z aktiv niedrig ist, gilt
dann SLAVE_WN = 1.
-
Das
andere MICROWIRE-Register ist ein MICROWIRE-Steuerregister (uWCON). Die Bitzuweisungen
sind folgendermaßen.
Die Bits 7–4
sind reserviert. Das Bit 3 ist ein Belegtübertragungskennzeichen BUSY. Wenn
es gesetzt ist, zeigt es an, dass das Schieberegister sich in der
Schiebephase befindet. Das Bit 2 ist ein SK-Taktbetriebsartbit SCTL. Wenn dieses
Bit eine Null ist, was zur Standard-SK-Betriebsart führt, werden
die Ausgangsdaten an SO bei der fallenden Flanke des SK-Takts ausgetaktet
und die Eingangsdaten an SI werden bei der steigenden Flanke des
SK-Takts abgetastet. Wenn dieses Bit eine Eins ist, was zur alternativen SK-Betriebsart
führt,
werden die SK-Taktflankenfunktionen
umgekehrt. Das Bit 1 ist ein Konfigurationsbit CONFIG. wenn dieses
Bit eine "1" ist, arbeitet die
Microwire/Plus-Schnittstelle in der Masterbetriebsart. Wenn dieses
Bit eine "0" ist, arbeitet die
Microwire/Plus-Schnittstelle in der Slavebetriebsart. Das Bit 0
ist ein MICROWIRE-Sende/Empfangs-Unterbrechungskennzeichen
uWI. Es wird am Ende der SIO-Registerverschiebung gesetzt.
-
Mit
Bezug auf die serielle Access.bus-Schnittstelle übertragen zwei Drähte, serielle
Daten und serieller Takt, eine Information zwischen den mit dem
Access.bus verbundenen Vorrichtungen. Jede Vorrichtung wird durch
eine eindeutige Adresse erkannt und kann entweder als Sender oder
Empfänger
in Abhängigkeit
von der Funktion der Vorrichtung arbeiten. Es handelt sich um einen
Mehrfachmasterbus. Vier Betriebsarten werden unterstützt: 1)
Mastersenden (MT); 2) Masterempfang (MR); 3) Slavesenden (ST); und
4) Slaveempfang (SR). Innerhalb des Access.bus-Moduls befinden sich 4 Register: 1)
serielles Eingabe/Ausgabe-Datenregister (SDA); 2) Access.bus-Zustandsregister;
3) Access.bus-Steuerregister; und 4) Register für eigene Adresse.
-
Das
serielle Eingabe/Ausgabe-DATEN-Register (SDR) ist ein 8-Bit-Schieberegister,
das sowohl zum Senden als auch Empfangen von Daten verwendet wird.
Das höchstwertige
Bit wird zuerst gesendet (empfangen) und das niedrigstwertige Bit
wird zuletzt gesendet (empfangen). Die CPU 34 liest und
schreibt SIO über einen
parallelen 8-Bit-Datenbus. Es ist ein Lese/Schreib-Register und
weist eine E/A-Zuordnungsadresse
von 0053h auf.
-
Das
Access.bus-Zustandsregister ist ein Nur-Lese-Register und weist
eine Rücksetzbedingung
von 000000 auf; alle Bits werden durch die Hardware gesetzt. Die
Bitzuweisungen sind folgendermaßen.
Die Bits 7, 6 sind reserviert. Das Bit 5 ist ein Fehlerkennzeichen
Stop_ERR. Es wird durch die Hardware gesetzt, wenn während der
Datenübertragung
die Stopbedingung erfasst wurde (Stop = 1, wenn Busy = 1). Die Software muss
ein weiches Rücksetzen
ausgeben, um diesen Fehler zu löschen,
und alle Access.bus-Vorrichtungen müssen geprüft werden. Das Bit 4 ist ein
Fehlerkennzeichen No_ACK. In der Masterbetriebsart wird beim 9. Takt
eine Übertragung
nicht bestätigt.
Wenn dieses Bit in der Masterbetriebsart Eins wird, erzeugt es einen Stop;
wenn dieses Bit in der Slavebetriebsart Eins wird, geht die Vorrichtung
in den Ruhezustand. Das Bit 3 ist ein Busbelegtkennzeichen BB. Wenn
es gesetzt ist, zeigt es an, dass der Access.bus gerade belegt ist.
Es wird durch die Startbedingung gesetzt und durch die Stop- oder
Rücksetzbedingung
gelöscht.
Das Bit 2 ist ein Buszuteilungsverlustkennzeichen ARL. Wenn es gesetzt
ist, zeigt es an, dass diese Vorrichtung die Buszuteilung verloren
hat, während
sie versucht, die Steuerung des Busses zu übernehmen. Es wird durch Rücksetzen, Stop
und durch die Software gelöscht.
Das Bit 1 ist ein Adressenübereinstimmungskennzeichen
MATCH. In der Slaveempfangs-Betriebsart wird dieses Bit auf Eins
gesetzt, wenn das Adressenbyte (das erste übertragene Byte) der 7-Bit-Adresse im Register
für eigene
Adresse entspricht. Es wird durch die Rücksetz-, Start-, Stop- und
Softwarebedingung gelöscht.
Das Bit 0 ist ein Startkennzeichen START. Es wird durch die Hardware
gesetzt, wenn eine START-Bedingung erfasst wird. Es wird am Ende
des ersten übertragenen
Bytes und durch Rücksetzen
und Stop gelöscht.
-
Neben
den obigen Zustandsbits erzeugt das Access.bus-Zustandsregister auch gewisse andere
Signale, die in anderen Modulen verwendet werden. Wenn eine STOP-Bedingung
erfasst wird, wird zuerst ein STOP-Kennzeichen gesetzt. Es wird
durch RESET und die nächste
START-Bedingung gelöscht.
Ein XMIT-Bit zeigt beim ersten Byte an, ob der nächste Zyklustyp Lesen oder
Schreiben ist. In der MT-Betriebsart bedeutet Data = 0, dass der
nächste
Zyklus ein Schreibtyp ist und Data = 1 bedeutet, dass der nächste Zyklus
ein Lesetyp ist. In der Slaveempfangs-Betriebsart interpretiert
es das entgegengesetzte.
-
Das
Access.bus-Steuerregister ist ein Schreib/Lese-Register mit einer
Rücksetzbedingung
von 00000000 und einer E/A-Zuordnungsadresse
von 0055h. Die Bitzuweisungen sind folgendermaßen. Die Bits 7, 6 sind reserviert.
Das Bit 5 ist ein Überlaufkennzeichen
OVERFLOW. Dieses Bit wird auf Eins gesetzt, wenn der serielle Takt
(SCLK) für
mehr als 1024 Übertragungstaktperioden
niedrig gehalten wird. Wenn dieses Bit in der Masterbetriebsart
gesetzt ist, sollte die Übertragung
abgebrochen werden und der Access.bus sollte zurückgesetzt werden. Das Bit 4,
MASTRQ, wird gesetzt, um die Steuerung des Busses als Master durch
die Software anzufordern. Das Bit 3 ist ein Access.bus-Unterbrechungskennzeichen
ABINT. Es wird am Ende einer Übertragung
durch die Hardware auf "1" gesetzt. Es muss
durch die Software gelöscht
werden. Das Bit 2 ist ein Stopsignal STOP_W. In der Masterbetriebsart
verursacht das Setzen dieses Bits eine STOP-Handlung und erzeugt
einen Stopimpuls. Das Bit 1 ist ein Belegtübertragungskennzeichen BUSY. "0" = bereit und "1" = belegt
oder nicht bereit. Es wird durch die Software gesetzt, wenn das
SDA-Register schiebt. Wenn es auf "0" gesetzt
ist, setzt es die SCL-Leitung
herab. Nach dem Übertragen
von 8 Datenbits und einem 9. Bestätigungsbit löscht die
Hardware dieses Bit. Das Bit 0 ist ein Bestätigungskennzeichen ACK. Dieses
Bit wird durch die Hardware beim 9. Takt (wenn kein Busfehler vorliegt)
nach einer empfangenen Bestätigung
vom Empfänger gesetzt.
Es wird durch den Wert der Empfängerbestätigung gesetzt.
Es sollte durch die Benutzersoftware gelöscht werden, bevor die nächste Übertragung
beginnt. In der Mastersende-Betriebsart verursacht dieses Bit, wenn
ACK = 0, einen Masterabbruch (Erzeugen einer STOP-Bedingung). In
der Slavesende-Betriebsart stoppt es, wenn ACK = 0, die Übertragung
und geht in den Ruhezustand zurück.
In der Master- und der Slaveempfangs-Betriebsart steuert die Benutzersoftware
dieses Bit. Es sollte auf "1" gesetzt werden,
was normalerweise verursacht, dass die Access.bus-Steuereinheit eine
Bestätigung
automatisch nach jedem Byte sendet. Das Bit sollte zurückgesetzt
werden, wenn es sich in der Masterempfangs-Betriebsart befindet,
und es erfordert, dass keine weiteren Daten vom Slavesender gesandt
werden. Dies verursacht eine "negative
Bestätigung" auf dem Access.bus,
was jegliche weitere Übertragung
vom Slave anhält.
Eine Rücksetz-
oder Stopbedingung setzt das Bit auf Null zurück.
-
Die
Steuer- und Zustandsbits im Access.bus-Steuerregister werden von
der Benutzersoftware gesetzt und alle Bits werden durch die Software
und durch RESET gelöscht.
Eine zweite Funktion des Access.bus-Steuerregistermoduls besteht
darin, den seriellen I2C-Takt zu erzeugen.
Alle Takte im I2C-Bus sind durch offenen
Drainpol verbunden.
-
Mit
Bezug auf 14 hat die Betriebsart-(Takt)
Zustandsmaschine fünf
Zustände
zur Folge. Insbesondere ist der erste Zustand ein Ruhezustand T_IDLE
(00001). Dies ist der Vorgabe/RESET-Zustand. Wenn die serielle Schnittstelle 30 global
deaktiviert ist oder I2C nicht ausgewählt ist oder I2C aktiviert
ist, aber keine START-Bedingung erfasst wird oder kein Masteranforderungsbit
gesandt wurde, bleibt sie in diesem Zustand. Der zweite Zustand
ist ein Mastersendezustand T_MT (00010). Wenn MASTRQ-Bits gesetzt
sind, versucht der IC-Chip 32, der Busmaster zu sein. Die
Zustandsmaschine schaltet von T_IDLE in diesen Zustand. Eine Startbedingung
wird erzeugt und der Takt beginnt ausgesendet zu werden. Wenn jedoch
die Buszuteilung beim ersten Byte (Adressenaufruf) verloren geht,
schaltet sie in die Slaveempfangs-Betriebsart um, da der gewinnende Master
arador_i2c aufrufen kann. Wenn die Buszuteilung beim folgenden Byte
(nicht das erste Byte) verloren geht, geht sie in den T_IDLE-Zustand.
Dies geschieht, wenn der IC-Chip 32 und ein anderer Chipgewinnmaster
einen gewissen Slave adressiert haben, aber verschiedene Daten darstellen.
Wenn die nächste Übertragung
ein LESEN ist (diese Information ist in den 8. Daten des ersten
Bytes enthalten), dann sollte sie zu T_MR (Masterempfangs-Betriebsart)
gehen. Wenn keine der obigen drei Bedingungen auftritt, dann gewinnt
der IC-Chip 32 die Buszuteilung und der nächste Zyklus
ist Schreiben und sie bleibt im T_MT-Zustand.
-
Der
dritte Zustand ist eine Masterempfangs-Betriebsart T_MR (00100).
Wenn MASTRQ hoch ist (Startbedingung wiederholen: Sr), dann geht
der Zustand zu T_MT; ansonsten bleibt er in T_MR. Der vierte Zustand
ist die Slaveempfangs-Betriebsart T_SR (01000). Wenn I2C aktiviert
ist und eine START-Bedingung erfasst
wird, aber der IC-Chip 32 nicht MASTRQ anforderte, schaltet
die Zustandsmaschine von T_IDLE auf T_SR um. Wenn die Adresse nicht
mit own_address übereinstimmt
(nach dem Empfangen der 7-Bit-Adresse und Vergleichen mit dem own_address-Register)
oder eine Fehlerbedingung passiert, geht sie zu T_IDLE, da der Slave
nicht für
das Erzeugen einer "STOP"-Bedingung verantwortlich
ist. wenn die Adresse übereinstimmt, aber
der nächste
Zyklus ein "Masterlesen/Slaveschreiben" ist, wechselt sie
in die Slavesende-Betriebsart. Wenn die Adresse übereinstimmt und der nächste Zyklus "Masterschreiben/Slavelesen" ist, bleibt sie
in T_SR. Der fünfte
Zustand ist die Slavesende-Betriebsart T_ST (10000). Wenn die Adresse übereinstimmt
und der nächste
Zyklus Slaveschreiben ist, schaltet die Zustandsmaschine von T_SR
auf T_ST. Wenn ein Fehler auftritt (keine Bestätigung beim 9. Takt oder vorzeitiger
STOP), geht sie zu T_IDLE.
-
Mit
Bezug auf 15 weist die "Taktzustands"-Zustandsmaschine zehn Zustände auf.
Diese Zustandsmaschine umfasst 9 Taktzählwerte und gibt eine korrekte
Taktzustandsreferenz. Mit Bezug auf 16 weisen,
wenn die Takte durch eine Teilungsstruktur-Takterzeugungsschaltung 104 erzeugt
werden, alle Takte im Bus mit offenem Drainpol unterschiedliche
Frequenzen und Asynchronitäten
auf. Wenn alle Takte durch eine Teilung vom Systemtakt erzeugt werden,
laufen sie mit Bezug auf die 17–18 asynchron
und mit verschiedenen Frequenzen. Der Bus mit offenem Drainpol funktioniert
als verdrahtetes Und. Clk-Bus kann nicht in der Lage sein, eine
minimale Breite hoher Impulse zu garantieren (jeder von ihnen kann dies
garantieren). Der resultierende CLK_BUS funktioniert als wire_AND
und könnte
zu sehr kleinen hohen Impulsen führen und
die Spezifikation für
minimale hohe Impulse verletzen, selbst wenn alle Takte selbst die
Spezifikation für hohe
Impulse nicht verletzen. Im I2C-Taktbus
kann der Slave den Takt für
einen Übertragungsquittungsaustausch
niedrig dehnen und der Slave kann den Takt asynchron freigeben und
den Störimpulstakt
auch.
-
19 stellt
eine störimpulsfreie
Takterzeugungsschaltung 106 mit offenem Drainpol und mehreren Quellen
dar, die den Nachteil der in 16 gezeigten
Schaltung 104 beseitigt. 20–21 stellen
den Betrieb der Takterzeugungsschaltung 106 dar. Die Takterzeugungsschaltung 106 ist
eine digitale Schaltung, die ein Taktsignal mit offenem Drainpol
und mehreren Quellen ansteuert, das eine minimale Taktbreite und
Störimpulsfreiheit
garantiert. Dieses wird verwendet, um alle mit diesem Taktsignal
verbundenen Vorrichtungen zu synchronisieren.
-
In
der Takterzeugungsschaltung 106 befinden sich zwei Zähler, die
zum Erzeugen des Takts in dem Entwurf verwendet werden. Einer ist
ein Hoch-Zählwert
für die
Breite hoher Impulse und ein anderer ist ein Niedrig-Zählwert für die Breite
niedriger Impulse. An der fallenden Flanke von CLK_BUS, d.h. wenn
eine fallende Flanke am seriellen I2C-Takt erfasst wird
oder wenn der Hoch-Zähler
abläuft
(auf Null herabzählt
oder auf eine gewünschte
Zahl hochzählt),
setzt die Schaltung ihren eigenen Takt auf niedrig und beginnt,
den Niedrig-Zählwert
abwärts
zu zählen,
bis der Niedrig-Zählwert
abläuft
und der Hoch-Zählwert
zurückgesetzt
wird. CLK_BUS wird niedrig gehalten, bis der Niedrig-Zählwert abläuft. Der Übergang
dieses Takts von niedrig auf hoch kann jedoch den Zustand von CLK_BUS
nicht ändern,
wenn ein anderer Takt noch niedrig ist.
-
An
der steigenden Flanke von CLK_BUS beginnt die Schaltung, den Hoch-Zähler 108 abwärts zu zählen, bis
er abläuft
oder CLK-BUS auf einen niedrigen Pegel schaltet. Der Zählwert muss
zurückgesetzt
werden 110 oder neu geladen werden, wenn CLK_BUS den Zustand ändert. CLK_BUS
wird erzeugt, wobei seine niedrige Periode durch die Vorrichtung
mit der längsten
Taktperiode festgelegt wird und seine hohe Periode durch diejenige
mit der kürzesten
hohen Taktperiode festgelegt wird. Wenn alle Takte eine minimale
Breite hoher Impulse garantieren, werden die Takte im Bus mit offenem
Drainpol auf diese Weise synchronisiert und garantieren eine minimale
Breite hoher Impulse und Störimpulsfreiheit.
-
Wenn
der Niedrig-Zählwert
aller Vorrichtungen abläuft,
schaltet CLK_BUS auf einen hohen Pegel und der Hoch-Zählwert aller Takte startet
das Zählen.
Die erste Vorrichtung, die die HOHE Periode beendet, setzt CLK_BUS
auf einen niedrigen Pegel und jeder Takt setzt den Hoch-Zählwert zurück und der Niedrig-Zählwert startet.
Wiederum wird der hohe Zeitraum von CLK_BUS durch diejenige mit
der kürzesten
hohen Taktperiode festgelegt und die niedrige Periode wird durch
die Vorrichtung mit der längsten
niedrigen Taktperiode festgelegt. Solange jede Vorrichtung die Taktimpulsspezifikation
nicht verletzt, verletzt sie CLK_BUS auch nicht.
-
Mit
der Takterzeugungsschaltung 106 weist der resultierende
Systemtakt folglich immer die kürzesten hohen
und die längsten
niedrigen der clk1- und clk2-Taktsignale auf. Sie arbeitet mit offenem
Drainpol und garantiert die minimale Breite hoher Impulse. Die kleinste
Impulsbreite wird normalerweise festgelegt, um die minimale Breite
hoher Impulse für
I2C zu erfüllen. Es sollte jedoch selbstverständlich sein,
dass die Verwendung der Takterzeugungsschaltung 106 nicht
auf I2C begrenzt ist. Mit anderen Worten,
die Takterzeugungsschaltung 106 garantiert die minimale
Breite hoher Taktimpulse, welche Datenübertragungsspezifikation auch
immer verwendet wird. Der niedrige resultierende Systemtakt ist
der längste
niedrige von clk1 und clk2 und der hohe resultierende Systemtakt
ist der kürzeste
hohe. Normalerweise wird somit der kürzeste hohe gewählt, um
die verwendete Spezifikation zu erfüllen. Die Takterzeugungsschaltung 106 kann
in einer beliebigen Anwendung mit offenem Drainpol verwendet werden
und ist nicht auf I2C begrenzt.
-
Mit
Bezug auf 19 umfasst die Takterzeugungsschaltung 106 zwei
Inkrementzähler:
einen ersten Zähler
zum Zählen
der hohen System-SCLK-Periode und einen zweiten Zähler zum
Zählen
der niedrigen System-SCLK-Periode (wenn das Generatortakt-Tastverhältnis anders
als 50% sein soll). Der vorskalierte Takt clk_mux_i2c, der bereits
durch 4, 8, 16 oder 32 in Abhängigkeit
von den Bits [7:6] im SCON-Register geteilt ist, geht zum zweiten
Zähler.
Wenn das Signal run_hi_cnt auf eine "1" gesetzt
ist, dann beginnt der Drei-Bit-Hoch-Zählwert zu
inkrementieren, bis die Zahl in den Bits [5:3] im SCON-Register
erreicht ist (wenn eq_hi_cnt auf 1 gesetzt ist), oder der System-SCLK
schaltet auf einen niedrigen Pegel (ein anderer Master steuert den
Takt im I2C-Taktbus an). Wenn SCLK als niedrig
erfasst wird, muss der hohe Zählwert
zurückgesetzt
werden und der Niedrig-Zählwert gestartet
werden, um die Synchronisation mit dem System-SCLK beizubehalten.
-
Nach
dem SCLK-Übergang
von hoch auf niedrig, oder wenn eq_hi_cnt auf eine "1" gesetzt wird (d.h. der Hoch-Zählwert Scon-Register
[5:3] erreicht) oder eine Startbedingung gerade durch Elenetari_i2c
erzeugt wurde, beginnt der Niedrig-Zählwert das Zählen und
das System bringt das CLK-OUT-Signal
auf einen niedrigen Pegel und der System-SCLK ist niedrig. Er zählt abwärts, bis
er abläuft
(d.h. der Zählwert
die SCON-Register-Bits [5:3] erreicht und eq_lw_cnt erzeugt wird).
Wenn er abgelaufen ist, stoppt das System, in der CLK_OUT-Leitung
eine "0" anzusteuern.
-
Wenn
das System das Ansteuern einer "0" in der CLK_OUT-Leitung stoppt, können andere
potentielle Master im Buszuteilungszyklus immer noch eine "0" in der CLK_OUT-Leitung ansteuern. SCLK kann zu diesem
Zeitpunkt immer noch niedrig sein. Sowohl die Hoch- als auch die
Niedrig-Zählwert-Zähler sind
während dieses
Zeitraums im Ruhezustand, bis der System-SCLK einen Übergang
von niedrig auf hoch hat. Die zum Erfassen dieses Ereignisses verwendete
Schaltung erzeugt, wenn das System gerade aktiv ist, das Signal run_hi_cnt
und der Hoch-Zählwert
beginnt das Zählen.
Der Hoch-Zählwert
wird durch das Signal eq_hi_cnt oder durch RESET oder durch die
fallende Flanke von SCLK gelöscht.
-
Wenn
die SCLK-Signale von einem niedrigen auf einen hohen Pegel schalten,
deutet dies darauf hin, dass der SCLK-Takt nicht mehr auf einen
niedrigen Pegel gebracht wird. Jeder aktuelle Master zählt dann
den Hoch-Zählwert
für die
Breite der hohen SCLK-Impulse. Der Übergang von SCLK von niedrig
auf hoch setzt das Signal run_hi_cnt im Register 114 auf
einen hohen Pegel, wenn das Signal I2C_BUSY gesetzt ist. Das Signal run_hi_cnt
schaltet mit clk_mux_i2c, um das Register 118 des Hoch-Zählwerts
zu inkrementieren. Bei jeder steigenden Flanke von clk_mux_i2c inkrementiert
der Zähler
um Eins, wenn run_hi_cnt hoch ist, bis er gleich den Bits [5:2]
des SCON-Registers ist. Wenn die Bits [5:2] des SCON-Registers gleich
sind, ist das D-Eingangssignal des Registers 1 Eins und
das Signal eq_hi_cnt schaltet auf Eins. Dieses Signal löscht auch
den Hoch-Zählwert
auf alle Nullen und löscht
das Signal run_hi_cnt auf eine "0".
-
Im
Register 114 wird das CLR-Signal nicht nur durch das Signal
eq_hi_cnt beeinflusst, es wird auch durch die fallende Flanke von
SCLK beeinflusst. Wenn der Hoch-Zählwert des
Systems die Bits [5:3] des SCON-Registers nicht erreicht, startet
der äußere Master,
in SCLK auf niedrig zu steuern, und das System löscht den Hoch-Zählwert, um mit dem System-SCLK
zu synchronisieren. Deshalb wird das Signal clr_run_hi auch durch
die fallende Flanke von SCLK erzeugt.
-
Die
zwei Register DFFC 120 und 122 und die gezeigte
kombinatorische Logik erzeugen das Löschsignal clr_run_lw, um das
Signal run_lw_cnt zu löschen
und den Niedrig-Zählwert zu
stoppen.
-
Wenn
das Signal eq_lw_cnt auf eine "1" gesetzt wird, setzt
die steigende Flanke das Signal set_lw auf eine "1" und
das UND-Gatter 130 setzt das Signal clr_run_lw auf eine "1", was bewirkt, dass das Signal run_lw_cnt,
das vom Register 116 erzeugt wird, auf eine "0" löscht.
Das Niedrig-Zählwert-Taktsignal clk_mux_i2c,
das ein vorskalierter Takt von der Teilungskette UND mit dem Signal
run_lw_cnt ist, wird vom Takt gesperrt, um den laufenden Niedrig-Zählwert vom
Zählen
zu stoppen. Der Niedrig-Zählwert 124 wird
auch durch das Signal eq_lw_cnt gelöscht.
-
Das
Signal eq_lw_cnt wird vom Register 126 erzeugt. Bei der
steigenden Flanke des Signals clk_mux_i2c wird, wenn das Signal
run_lw_cnt hoch ist, der Niedrig-Zählwert 124 um Eins
inkrementiert. Wenn das Ausgangssignal des Zählwerts (count_lw[2:0]) gleich
den Bits [5:3] des SCON-Registers ist, ist das D-Eingangssignal
in das Register 126 eine "1".
An der steigenden Flanke des Signals clk_mux_i2c ist das Signal eq_lw_cntl
auch eine "1". Bei der nächsten steigenden
Flanke des Signals clk_mux_i2c wird, da der Niedrig-Zählwert gelöscht wurde,
das D-Eingangssignal in das Register 126 auch gelöscht, um
das Signal eq_lw_cnt zu löschen.
-
Der
Endausgangstakt CLK_OUT wird auch durch andere Umstände beeinflusst.
Wenn das Signal I2C_BUSY nicht gesetzt ist, was darauf hindeutet,
dass das System nicht für
den nächsten Übergang
bereit ist, bleibt der Ausgangstakt CLK_OUT auch niedrig. Angesichts
der Signale run_lw_cnt und I2C_BUSY bringt das System das Ausgangssignal
CLK_OUT für
das System auf einen niedrigen Pegel. Da der Systemtakt ein offener
Drainpol ist, der mit einem Pull-up-Widerstand verbunden ist, ist
er auf hoch vorgegeben, wenn er nicht auf niedrig gebracht wird.
-
Wieder
mit Bezug auf 15 sind zwei Zustandsmaschinen
in dem Entwurf vorhanden. Eine ist die Betriebsart-Zustandsmaschine,
die als "one_hot" codiert ist. Wenn
sich die Betriebsart-Zustandsmaschine im T_IDLE-Zustand befindet,
bleibt die Zustandsmaschine auch in der Ruhebetriebsart. Wenn die
Betriebsart-Zustandsmaschine in irgendeinen Zustand wechselt, ruft
sie diese Zustandsmaschine dazu auf, zu T_clk_1 zu gehen. Jedes
SCLK_I2C geht in einen anderen Zustand, abgesehen von clk_1, wenn
sie sich in der Wiederholungsstartbedingung (Sr) befindet. Wenn
dies geschieht, bleibt clk_1 für
einen weiteren Takt.
-
Bei
der ersten Datenbyteübertragung
geben die dem 8. Takt zugeordneten Daten an, ob der nächsten Zyklus
ein Lese- oder Schreibtyp
ist. Der 9. Takt ist ein Bestätigungstakt
und der Empfänger
muss die Daten zur Bestätigung
auf niedrig setzen. cLk8_9 wird durch Abtasten von clk_8 an der
fallenden Flanke von SCLK_I2C erzeugt. Das Senden verwendet diesen
Impuls, um den Datenbus freizugeben, und der Slave verwendet ihn,
um die Datenleitung auf niedrig zu setzen. Der Takt legt los, wenn
er sich in der Masterbetriebsart befindet und AR = 0 gilt. Der Takt
bleibt in der Masterbetriebsart niedrig, aber I2C BUSY ist niedrig.
In der Slavebetriebsart dehnt er den Takt auf niedrig, wenn I2C_BUSY
niedrig ist.
-
Das
Register für
eigene Adresse ist ein Schreib/Lese-Register mit einer E/A-Zuordnungsadresse
von 0056h. Die Bitzuweisungen sind folgendermaßen. Das Bit 7 ist reserviert.
Die Bits 6–0
werden mit der 7-Bit-Access.bus-Adresse
geladen. Wenn es als Slave adressiert wird, werden die ersten übertragenen
7 Bits mit diesem Register verglichen, um festzustellen, ob diese
Vorrichtung aufgerufen wird.
-
Das
Modul, das das Datenschieberegister und das Register für eigene
Adresse erzeugt, erzeugt auch die START-, STOP- und Sr-Bedingungen und sieht eine Datenvorbereitungs-Haltezeitsteuerung
vor. Mit Bezug auf 22 benötigt die Startbedingung gewöhnlich eine
minimale Haltezeit von 4 us. Die Hälfte des Signals SCLK_I2C_CON
(Fortsetzung des laufenden Takts mit der maximalen Frequenz = 100k)
ist 5 us. Dieser Takt wird als Referenz verwendet, um eine minimale
Haltezeit zu garantieren. Bei der steigenden Flanke tastet er MASTRQ
ab. Wenn MASTRQ hoch ist, wird die Datenleitung nach der negativen
Flanke für
einen halben Taktzyklus auf niedrig gesetzt und dann freigegeben.
Der Takt setzt danach auf niedrig und beginnt, die Takterzeugung
zu synchronisieren.
-
Mit
Bezug auf 23 erfordert die Datenhaltezeitsteuerung
300 ns. Eine Periode, dividiert durch 8 Taktzyklen (t = 8/25 MHz
= 320 ns), liefert 320 ns. Bei der steigenden Flanke 84 tastet
er den seriellen I2C-Takt SCLK_I2C
ab. Bei einer zweiten steigenden Flanke 86 öffnet er,
wenn er niedrig abtastet, den Ausgangszwischenspeicher und lässt SMB
aus. Für
Daten wird ein Halten von 320–640
ns auf diese Weise garantiert.
-
Vor
dem Erzeugen einer STOP-Bedingung sollten die Daten zuerst auf niedrig
gesetzt, dann auf hoch freigegeben werden, wenn SCLK_I2C hoch ist.
Bei der 9. negativen Flanke von SCLK_I2C, werden die Daten, wenn
STOP_W hoch ist oder NO_akc hoch ist, auf niedrig gesetzt und niedrig
gehalten, bis eine minimale Haltezeit von 4,7 us erfüllt ist,
nachdem der Takt auf einen hohen Pegel schaltet. Die Daten werden
bei clk8_9 auf niedrig gesetzt, wenn in der MR/SR-Betriebsart befindlich
und kein Fehler erfasst wird, um die Bestätigung auszusenden. Die Daten
treiben durch das Schieberegister-MSB, wenn in der MT/ST-Betriebsart
befindlich, von clk_1 bis clk_8.
-
Mit
Bezug auf 24 besteht das obere Modul wire3_top 88 aus
den folgenden drei Modulen: wire3_scon 90, wire3_uwire 92 und
wire3_i2e_all 94. Das Modul wire3_i2c_all 94 besteht
aus allen I2C-Modulen, nämlich wire3_i2c_sm 96,
wire3_i2ccon_reg 98, wire3_i2csda_reg 100 und
wire3_i2cstt_reg 102.
-
Die
hierin beschriebene Erfindung kann als slave1, slave2 und mast1
simuliert werden. Der IC-Chip 32 ist mit dem BIU-Busmodul 40 und
der CPU 34 verbunden. Slave1, Slave2 und Master können durch
eine Verilog-Aufgabe programmiert werden. Wenn der IC-Chip 32 als
Master simuliert wird, kann der Slave auf diese Weise antworten.
Während
eines scon_test kann der folgenden Prozedur gefolgt werden. Zuerst
werden alle Lese/Schreib-Freigabesignale erzeugt. Das scon-Register
und der Zeitüberwachungsfunktionstest
werden programmiert. Die Taktteilungslogik wird geprüft und die
Teilungskombinationen werden geprüft. während des i2c_SSr_MST-Tests
werden die MT-, MR-Betriebsarten geprüft. Start, STOP und Sr werden
für den IC-Chip 32 erzeugt.
MT, Buszuteilungsverlust, SR, ST für mast1 werden geprüft und SR,
ST für
slave1 für
den IC-Chip 32 werden geprüft.
-
Sowohl
der IC-Chip 32 als auch mast1 geben zusammen START aus.
Sowohl Aussenden von "B4" als auch Aufrufen
von slave2(5a) => MT.
Slave2 antwortet durch Zurücksenden
einer Bestätigung
und der Slave geht in den Ruhezustand. Der IC-Chip 32 sendet "79" aus, setzt STOP_W,
und mast1 sendet "7A" und verliert die
Buszuteilung beim 7. Bit und geht dann in den Ruhezustand => MT. STOP wird nach
dem 9. Takt erzeugt. Start wird wieder erzeugt und Aussenden von "78", Aufrufen von mast1(3C)
=> MT. Mast1 antwortet
mit Bestätigung
zurück.
-
Wie
vorstehend erörtert,
weist die serielle Schnittstelle 30 nur drei Signalstifte
auf. Der SCLK-(oder SCL-)Stift ist der Taktstift. In der MICROWIRE-Betriebsart
ist dieser Stift als Eingang in der Slavebetriebsart und als Ausgang
in der Masterbetriebsart konfiguriert. Im Access.bus ist er bidirektional.
Der SO-(oder SDA-)Stift ist der Datenausgangs-DO-Stift. Er ist als
Ausgang in der MICROWIRE-Betriebsart und als bidirektionaler Anschlussstift
in der Access.bus-Betriebsart konfiguriert. Der SI-Stift ist der
Dateneingangs-DI-Stift. Er ist ein Eingang in der MICROWIRE-Betriebsart
und wird in der Access.bus-Betriebsart nicht verwendet.
-
Mit
Bezug auf die Programmierung der seriellen Schnittstelle 30 kann
dann, wenn der Wiederholungsstart (Sr) programmiert wird und wenn
der aktuelle Busmaster weiterhin den Access.bus verwenden will,
um mit einem anderen Slave ohne mögliche Buszuteilung zu sprechen,
Sr verwendet werden. Insbesondere a) nachdem die aktuelle Übertragung
beendet ist (BUSY = 0, ABINT = 1), Setzen von MASTRQ = 1 für Startwiederholung;
b) Setzen von BUSY, Löschen
von ABINT; und c) Programmieren von SDA (Datenregister).
-
Während einer
Access.bus-Übertragung
wird in das SDA-Register
normalerweise nicht geschrieben, da die übertragenen Daten verfälscht werden.
Die SCON-(Systemregister)
Taktteilungskette wird normalerweise zwischen Byteübertragungen
nicht umprogrammiert. Das SDA-Register
wird normalerweise programmiert, nachdem MICROWIRE aktiviert wird.
Wenn sich der IC-Chip 32 in der MICROWIRE-Slavebetriebsart
befindet, muss BUSY früh
gesetzt werden, um zu warten, bis der Master eine Übertragung
beginnt. Der interne Takt (von der Teilungskette) muss schneller
(durch das SCON-Register) programmiert werden, um BUSY zu synchronisieren.
STOP_W wird gewöhnlich
gesetzt, bevor die letzte Übertragung
endet. STOP_W kann gesetzt werden, bevor die letzte Byteübertragung
beginnt.
-
Die 25–29 sind
Ablaufdiagramme, die den Betrieb der seriellen Schnittstelle 30 darstellen.