Hallo, ich habe ein Modul auf dem ist ein uC untergebracht. Dieser soll dann über eine offene Schnittstelle kurze Daten mit max. 10KBit/s mit einem ansteckbaren weiteren Modul austauschen. Dieses Modul widerrum hat auch einen uC. Welchen aber, soll völlig offen sein und demjenigen überlassen sein, der sich an mein Modul andockt. Ich möchte also für die steckbare Schnittstelle nun eine Übertragungsart/Taktrate/Protokoll usw. vorgeben. Z.B.: UART, oder SPI, oder I2C Auf beiden uC´s muß dies einfach zu implementieren sein. Beide UC´s müssen Kommunikationswunsch signalisieren können (also kein Master/Slave). Was empfiehlt ihr als Schnittstelle vorzugeben. Das wichtigste ist => einfache Implementierung für denjenigen, der sich mit seinem selbst entwickelten Modul an mein Modul andockt. Eine Synchronisation des uC-Taktes soll auf gar keinen Fall über die Schnittstelle erfolgen. Ich hoffe, es ist so einigermaßen klargeworden, was ich meine. Mit besten Grüßen Marco
Na, wenns kein Master/Slave sein soll und auch noch sehr einfach, dann einfach UART. Jeder hat ein TxD und ein RxD. Somit kann jeder senden, wann immer er will.
Hallo, I2C würde auch sinnvoll sein, es ist prinzipiell ein Multi-Master-Bus möglich. Macht dann aber etwas mehr Software-Aufwand (Kollisions-Erkennung). Gruß aus Berlin Michael
UART ist das Einfachste und Zuverlässigste, ist in 10 Minuten programmiert. Sinnvoll wäre es, die Ein/Ausgänge mit Serienwiderständen (und zusätzlichen Dioden) zu versehen, zum Schutz gegen ESD beim Stecken und Ziehen des externen Moduls.
Danke für den Hinweis auf die Schutzdioden /Schutzwiderstände Frage: Wenn einer der typischen Klein-uC´s einen Hardware UART hat, produziert dann dieser automatisch einen Interrupt, sobald ein gültiges Byte empfangen wurde? Oder muß man eine seperate Interruptsignalleitung zwischen den beiden verlegen (sprich über die Schnittstelle ziehen). Marco
Nein,es werden effektiv nur TX,RX und GND für eine UART-Kommunikation benötigt.Mit minimal Mehraufwand (Pegelwandler-IC,zb. MAX232) kann man dann ohne Software-Änderungen auch Daten mit einem PC per RS232 Schnittstelle austauschen. Die meisten Mikrocontroller bieten wenigstens für "Neues Byte empfangen","bereit nächstes Byte zu übertragen" und "Fehler" einen Interrupt an.Bei einigen gibt es auch nur einen allgemeinen UART-Interrupt wenn etwas passiert ist und man muss das genaue Ereignis dann aus einem Statusregister auslesen. Generell kann man die Hardwarelast mit einer interrupt-gesteuerten Hardware-UART extrem klein halten.Mit einem Ringpuffer+2 Indexvariablen lässt sich sogar eine gepufferte Kommunikation realisieren. Einzige Ausnahme ist die Verwendung von externen UART-Bausteinen wie z.b dem 16C654,da wird pro UART eine Interrupt-Leitung benötigt.Wenn man sich aber an die im Mikrocontroller integrierte(n) UART(s) hält,entfällt das natürlich.
Ich würde hier eher die SPI empfehlen. Die SPI kann als 3, 4 oder 5 Draht Interface betrieben werden. die 3 notwendigen Pins sind Master_out; Slave_out; Clock. Der Master bezieht sich hier NUR auf den Kommunikationspartner der den Clock ausgibt. Die beiden zusätzlich möglichen Signale sind Slaveselect und Busy. Mit diesen beiden Signalen kann die Kommunikation synchronisiert werden, teilweise Hardware unterstützt. Bei einigen µC können diese beiden Signale jedoch nur per IO Pin und Software unterstützt werden. Mit der SPI hast du vom Protokollaufwand und der Flexibilität wahrscheinlich die beste Ausgangslage für eine solche Kopplung zweier Module. Die Übertragungsrate kann je nach verwendeten µC ohne Probleme bis zu 10 MBit/s betragen. Das Anfordern einer Kommunikation lässt sich unabhängig von den Signalwegen über eine IO Leitung erledigen. Dies sollte also keine Einschränkung für die Schnittstellenauswahl bedeuten. Ralph
hi, SPI hat den vorteil, dass es mit einfachen GPIOs simuliert werden kann, und dass es relativ schnell (weil sehr primitiv) ist. nachteil ist allerdings, dass man zusätzliche steuerleitungen braucht. wer ist momentan der busmaster? wer gibt den takt an? kollisionserkennung? auch wenn man die volle bandbreite nutzen will (also SPI full duplex betreiben möchte), braucht man z.b. techniken wie 'byte stuffing', da ein separater empfang oder separates senden nicht möglich sind (im gegensatz zu UARTs). viele MCUs unterstützen SPI hardwareseitig, allerdings mit einschränkungen. meistens sind die schieberegister nur 8 bit breit etc. der erfinder des SPI ist meines wissens motorola (heute freescale). ich würde mich mal auf deren webseite nach specs umsehen (timing usw.)...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.