ist I²C eingeschränkt hotplugfähig? Es geht nur um das Anstecken an den Bus, Zugriffe während des Ein-/Aussteckens schließe ich aus. Möchte gerne einen kleinen Datenspeicher steckbar ausführen.
Benötige ich besondere Vorkehrungen wie z.B. vorauseilende Masse/Versorgungsspannung? Vielleciht lassen sich USB-Sticks dazu zweckentfremden, dort kontaktieren 5V und Masse ja zuerst.
I²C-Chipkarten mit 24C16 (soviel Speicher sollte es sein) kenne ich, finde sie aber aus Platz- und Montagegründen (Kontakteinheit) unpraktisch. Wie wird das hotplugging bei diesen Chipkarten gelöst?
Also ob I2C per se hotplug kann, wei=C3=9F ich nicht. Was aber funktionieren d=C3=BCrfte, ist die Stichleitungen f=C3=BCr ein einzelne= s Ger=C3=A4t so zu schalten, dass der Rest vom Bus nicht tangiert wird. Ich denke da an eine Schaltung =C3=A4hnlich wie man sie zum bidirektionalen Level Shift verwendet, also das mit den beiden MOSFETs. Wenn man es so schaltet, dass die MOSFETs im Grundzustand immer sperren, und nachdem man ein Ger=C3=A4t angesteckt hat, zun=C3=A4chst die MOSFETs "freigibt" und nach dieser Freigabe erst die Versorgungsspannung f=C3=BCr das Ger=C3=A4t gibt, dann sollte = man keine Probleme haben. Im Zweifelsfall stellt man noch sicher, dass sich auf dem I2C nichts tut, und "greift" sich den Bus bevor man die Spannung f=C3=BCr das Ger=C3=A4t einschaltet und gibt den=
Nun ja, wenn Du als Einschränkung hinnimmst, dass nach dem Ein- oder Ausstecken möglicherweise der ganze Bus klemmt, dann könntest Du IIC als hot-plug-geeignet annehmen.
Wie willst Du Zugriffe während des Steckvorganges ausschließen? Elektromagnetische Verriegelung der Buchse, so dass man den Stecker nicht zur Unzeit ziehen oder einstecken kann?
Oder zusätzliche vor/nacheilende Kontakte vorsehen, die dem System melden, dass ein Steckvorgang zu erwarten ist, und alle IIC-Zugriffe zu unterbleiben haben. Dann dürfen allerdings nie längere Zugriffssequenzen auftreten (sonst wäre eventuell der Steckvorgang beendet, bevor die Zugriffssequenz beendet ist). Am besten wäre es, wenn am Bus nur der Master und das zu steckende Slave-Device betrieben würden, also eine Punkt-zu-Punkt-Verbindung, kein Bus.
Anders wirst Du das vermutlich nicht annähernd zuverlässig hinbekommen.
Zusätzlich zur Verriegelung bzw. sonstigen Maßnahmen, die Zugriffe während des Steckens ausschließen? Ja.
Dann solltest Du aber noch irgendeine Kodierung vorsehen, die verhindert, dass jemand ein USB-Device in Deinen IIC-Port bzw. dass jemand Deinen IIC-Speicher in einen USB-Port steckt. Es dürfte allerdings schwierig bis unmöglich werden, so eine Kodierung zu fabrizieren.
Da gibt es sicherlich eine ganze Reihe von Lösungen.
Primitiv und wohl am unteren Ende bezüglich Zuverlässigkeit dürfte es wohl sein, wenn einfach unter Spannung gesteckt wird, und der Kontakt/Schalter, der vollständiges Einstecken signalisiert, ausgewertet wird, um Zugriffe freizugeben bzw. zu sperren.
Aufwändiger aber zuverlässiger dürfte es sein, die Spannungsversorgung zur Karte erst dann einzuschalten, wenn vollständiges Einstecken signalisiert wird. Danach die Zugriffe auf den IIC-Bus freigeben. Die Fassung muss so gestaltet sein, dass beim Herausziehen der Karte sie Signalisierung für vollständiges Stecken zurückgenommen wird, bevor die Daten- und Versorgungsleitungen unterbrochen werden. Nach dem wegnehmen des Signals wird der aktuelle Zugriff noch fertig abgearbeitet, dann die Versorgung (auch der Pullups an Takt- und Datenleitung) abgeschaltet. Entsprechend der kürzestmöglichen Zeit zwischen wegnehmen des Signals und Unterbrechung der Daten- und Versorgungsleitungen durch das Ziehen der Karte muss die maximale Länge der Zugriffszyklen bemessen werden. Also vermutlich nie Multi-Byte-Transfers, sondern immer Einzel-Byte-Transfers. Beim Scheiben auf EEPROMs hat man allerdings das Problem, dass die Schreibzyklen meist 10ms dauern. Das könnte eventuell schon zu lang sein (je nachdem, wie schnell man die Karte aus der Fassung reißen kann).
Nachdem es diese IIC-Speicherkarten und die zugehörigen Fassungen schon gibt, und die Leute, die das entworfen haben, sich vermutlich auch einige Gedanken dazu gemacht haben, würde ich die an Deiner Stelle verwenden, anstatt einem Murks mit missbrauchten USB-Steckern.
Ich "durfte" schon mal so ein Design reparieren, bei dem ein Kollege die Verbindung zu einem Device am IIC-Bus schaltbar gestaltet hatte. Das hat überhaupt keinen Spaß gemacht!
Allerdings gibst Du keine Information preis darüber, wozu das Ganze gut sein soll. Wie das halt so immer üblich ist, wenn einer sich seine verschrobenen Ideen "im Internet" bestätigen lassen will. Daher können wir nicht wissen, ob Du das nur dreimal im abgeschlossenen Keller verwenden willst und es dann verschrottest, oder ob es auch andere Leute, vielleicht sogar Kunden, regelmäßig verwenden müssen. Ob der Pfusch mit USB-Steckern ausreicht, weil es eh nur eine kurze Bastelei sein soll, kannst also nur Du beurteilen.
Wenn dann bitte andersherum. Sonst werden möglicherweise die Schutzdioden der Cortroller-Chips umgepolt. Außerdem geraten Spikes vom Einschaltvorgang auf den Bus. Das könnte andere Devices irritieren.
Elektrisch gesehen ist man damit dann weitgehend auf der sicheren Seite. Ob es allerdings protokolltechnisch immer einwandfrei klappt, hängt von vielern anderen Faktoren ab (siehe PS/2 Mäuse).
SCL und SDA sind ja Open-Drain, d.h. da ist kein P-Kanal FET dran und damit auch keine parasitaere Diode nach VCC. Aehnlich wie an den /RESET Pins einiger MCUs: Man legt VCC auf z.B. 5V und legt dann an /RESET 12V an um den Programmiermodus zu aktivieren. Ich habe da deswegen immer eine externe Klemmdiode nach VCC dran.
Mir ist SPI auch lieber. Wenn man hohe Geschwindigkeit braucht (z.B. fuer Speicherchips) hat es mehr zu bieten. Dafuer darf man halt mehr Leiterbahnen verlegen. Dass SPI full-duplex ist bringt IMHO eher selten einen Vorteil.
Wir haben an einem unserer älteren Geräte sowas seit über zehn Jahren am Laufen, ohne Probleme. Ist einfach nur ein Sub-D 9 mit einem seriellen EEPROM dran...
Ich habe auch schon über etliche Meter lange Telefonstrippen quer durchs Firmengebäude i2c gesteuerte Weihnachtslichterketten angesteuert. Ist aber wohl nicht die Norm ;-)
Und dann gabs da noch den Mobilfunk-Infrastruktur-Anbieter, der i2c als Busverbindung zwischen Geräten am Mast betreibt...
Es hält sich die Waage. Philips verlangte schon immer einfach zu viel Kohle für die einfachen i2c-Chips und hat sich damit ziemlich sicher einige nennenswerte Märkte verbaut. Und einige funktionale Bausteine fehlen immer noch nach so langer Zeit.
Aber das Patent ist abgelaufen. TWI darf nun offiziell i2c heißen und ne Busadresse kann man sich auch selber zimmern.
Ich bevorzuge i2c. Da hat man minimal JTAG zum Debuggen gleich integriert...
Übrigens sind JTAG und SPI miteinander verwandt.
Und schau dir mal so feine Sachen wie Si571 an! Wenn du da mal ein paar Cent mehr über hast... ;-)
Sieht interessant aus, insbesondere vielleicht als leicht zu verwendende Zeitquelle für meinen Funktionsgenerator, den ich irgendwann nochmal zuende bauen möchte.
Wo kann man den kaufen? Bei
formatting link
wird man auf die mouse.com-Seite weitergeleitet, die nur das Devkit zum Si570/Si571 anbieten. Wie teuer ist der Si570?
--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
I2C ist bei mir zu lange her, gibt's hier immer weniger. Aber ist es nicht so, dass da auch immer Eingaenge mit dranhaengen? Die sollten doch Substratdioden nach VCC haben.
Voll Duplex hat mir schon Vorteile gebracht. Meist dann, wenn ich mal so richtig aufs Gas gestiegen bin, jenseits der 20MHz. Wandler auslesen und dabei gleichzeitig die naechste Config rueberschicken und solche Geschichten.
--
Gruesse, Joerg
http://www.analogconsultants.com/
"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
$20 wäre noch ok. Ich vermute aber mal, gerade der Si570 wird teuerer sein?
Ich hatte den Chip hier angedacht: AD9854. Eigentlich möchte ich aber nur eine beliebige Frequenz generieren, vielleicht so zwischen 1 MHz und 100 MHz (wenn er nicht bis 1 MHz runterkommt könnte ich das noch teilen, ich plane sowieso einen FPGA einzusetzen), da ist der schon was kompliziert und so ein einfacher Chip wie der Si571, wo ich nur die Frequenz programmieren brauche und nichts sonst anschließen brauche, wäre schon eine schöne Sache.
--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Im Prinzip brauchst du nur einen VCO mit einem Bereich 2:1 und ne binäre Teilerkette, an der du per Multiplexer die Stufe auswählen kannst. Damit ist dann _jede_ niedere Frequenz erzeugbar.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.