Busser - Valle´s Bedste Hjemmeside.
Busser - Valle´s Bedste Hjemmeside.
Busser - Valle´s Bedste Hjemmeside.
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Busser</strong><br />
Senest redigeret: februar 2013<br />
Dette kompendium er et forsøg på at beskrive nogle af de forskellige busser, der anvendes inden for<br />
elektronikken til kommunikation imellem IC’er og fra en uC til omverdenen.<br />
Kompendiet er ikke færdigt, - men bearbejdes løbende:<br />
De busser, der i dette materiale hovedsagelig er tale om er:<br />
Bussystemer mellem IC’er:<br />
1-Wire, I 2 C, 3-wire, SPI, MicroWire<br />
Bussystemer til omverdenen:<br />
RS232, RS485<br />
/: Valle Thorø<br />
Side 1 af 43
<strong>Busser</strong><br />
Oversigt over bussystemer:<br />
De tidligste busser var Microwire og I2C bussen. Følgende figur viser oversigt over forskellige<br />
busser og deres kommunikationshastighed.<br />
Serial Bus Speed Trends.<br />
There are two kinds of serial busses,<br />
peripheral and memory.<br />
The I2C bus is both. As the need for<br />
performance increases, the speed of<br />
peripheral and memory busses<br />
increase.<br />
På http://eetimes.com/design/embedded/4023975/Serial-Protocols-Compared findes en fin sammenligning af<br />
forskellige bussystemer.<br />
Der er flere måder at sende signaler fra en uC ( eller PC ) til andre uCer.<br />
Fra gamle PC-er, kendes kommunikation til fx en printer: Dette foregik<br />
enten parallelt eller serielt. Parallel-protokollen kaldet Centronix, der var<br />
en 8 bit parallel overførsel, plus forskellige kontrol-signaler, kaldet<br />
handshake-signaler. Der blev brugt et 25 pin canon-stik.<br />
En anden måde at sende signaler til en printer var via en seriel<br />
forbindelse, kaldet RS232.<br />
Nu til dags findes disse stik ikke på vore PC-er. Der bruges USB-stik.<br />
Mange fysikapparater har hidtil været koblet til PC-ere via RS232-stik. Så her er man nødt til at<br />
lave noget konvertering fra RS232 til USB.<br />
/: Valle Thorø<br />
Side 2 af 43
<strong>Busser</strong><br />
Der kan købes konvertere, der omdanner USB- til RS232. Der<br />
findes også USB til andre serielle protokoller, endog til<br />
parallel centronix protokol findes! Dvs. ældre udstyr godt<br />
kan kobles på en USB-port.<br />
For at få konverteren til at virke, skal der installeres nogle<br />
drivere, og de får PC-en til at ”tro”, at den har en ny<br />
hardware-port installeret.<br />
Se evt. et specielt kompendium herom!!<br />
Fra Microcontroller til microcontroller. TxD RxD<br />
Dette kompendium drejer sig primært om kommunikation via en uC.<br />
I “vores” microcontroller er der indbygget en UART, der står for Universal Asynkron Receiver<br />
Transmitter. Denne del kan både sende og modtage serielle signaler. Dette betyder, at 2 uC’er kan<br />
kobles sammen.<br />
Data kan sendes både:<br />
Synkron<br />
Asyncron<br />
Der sendes både et signal plus et clock-signal, så modtageren ved, når der<br />
skal klockes ind i et skifteregister. Der skal bruges 2 signal-ledninger, - og<br />
nul, i alt 3 ledninger.<br />
Data afsendes og kommer til modtageren på et tilfældigt tidspunkt. Derfor<br />
skal der være ”aftalt” en protokol, dvs. at startbit, stopbit, baudrate osv. skal<br />
være kendt.<br />
Det er nok med 1 signalledning, plus nul.<br />
I vores 8-bit uC sendes ”pakker” eller bytes asynkront. Der sendes 1 Startbit, 8 databit, og 1 stopbit.<br />
Signaler kan sendes direkte fra uC til uC, dvs.<br />
med signalniveauer på 0 og 5 Volt. Tx fra den<br />
ene uC skal forbindes til Rx på den anden uC.<br />
Dette medfører dog ret begrænset rækkevidde<br />
pga. evt. støjpåvirkning, der kan medføre at<br />
signalet forvanskes så modtageren læser forkert.<br />
Men det kan sagtens bruges til at koble to uC<br />
sammen på samme print og over kortere<br />
afstande. Fx kan en uC kontrollere et tastatur,<br />
/: Valle Thorø<br />
Side 3 af 43
<strong>Busser</strong><br />
og sende de indtastede data til en anden uC.<br />
Ønskes større rækkevidde, kan ”protokollen” der kaldes RS232 anvendes. Her bruges lidt højere<br />
spændinger i signalet end de 5 Volt direkte fra uC’en.<br />
Et ”1”-tal sendes som minus 12 volt, og et ”0” som plus 12 volt.<br />
( Valide spændinger er dog mellem ± 3 og 12 Volt. )<br />
Her ses en graf over<br />
signalerne i en<br />
transmission af en<br />
pakke på 8 databit efter<br />
RS232-standarden.<br />
Evt. kan sendes en 9.<br />
bit, en Paritetsbit.<br />
Transmissionsafstanden<br />
er dog ikke garanteret<br />
over ca. 10 meter!<br />
Grafen er fra : http://en.wikipedia.org/wiki/RS-232<br />
De data, dvs. de 8 bit-pakker, der blev brugt til at sende data til printere ( efter RS232 ) i<br />
”gamle dage” var ordnet efter ASCII-tabellen.<br />
Opgave:<br />
Tjek kredsen MAX232, der kan bruges til at omforme fra 5 Volt signaler til +/- 12 Volt.<br />
I RS232 protokollen sendes signalet på 1 ledning, men en nul-ledning skal også forbindes. Tillige<br />
bruges evt. brugt et antal handshake-signaler, til fx at fortælle afsenderen, at modtageren er optaget<br />
( Busy ) – eller at den ikke er færdig med at behandle de forrige data !!.<br />
RS485-protokollen.<br />
Ønskes en meget stabil og meget langtrækkende signaloverførsel, kan man med fordel vælge at<br />
bruge standarden kaldet RS485.<br />
/: Valle Thorø<br />
Side 4 af 43
<strong>Busser</strong><br />
Standarden RS485 benytter et balanceret signal, på kun 2-ledere.<br />
Rækkevidden er ca. op til 1 km. på blot 5 Volt. Det er dog en<br />
betingelse, at lederne er snoede, for at modvirke elektrisk indstrålet<br />
støj.<br />
Til at kode og til at afkode signalet bruges en lille IC. Signalet<br />
overføres fra kredsens A-signal og B-signal.<br />
Kredsen kan kobles som enten sender eller modtager.<br />
Kredsen LTC485<br />
Eller DS75176<br />
ADM485<br />
Parsnoning modvirker støj:<br />
De blå pile repræsenterer magnetfelt, og de<br />
sorte induceret strøm.<br />
Det ses, at for et parsnoet kabel ophæves støjpåvirkningen.<br />
Billede fra : http://www.lammertbies.nl/comm/info/RS-485.html<br />
In the picture above, noise is generated by magnetic fields from the environment. The picture<br />
shows the magnetic field lines and the noise current in the RS485 data lines that is the result<br />
of that magnetic field. In the straight cable, all noise current is flowing in the same direction,<br />
practically generating a looping current just like in an ordinary transformer. When the cable is<br />
twisted, we see that in some parts of the signal lines the direction of the noise current is the<br />
oposite from the current in other parts of the cable. Because of this, the resulting noise<br />
current is many factors lower than with an ordinary straight cable.<br />
Her ses et eksempel på hvordan flere sendere / modtagere kan kobles sammen på et RS485-netværk.<br />
/: Valle Thorø<br />
Side 5 af 43
<strong>Busser</strong><br />
Normalt er et RS-485 modtagers output "1" hvis<br />
spændingen på A mere end 200mV højere end<br />
på B, og "0" hvis B > A med 200mV eller mere.<br />
RS485-bussen sender data differential over et<br />
twisted pair kabel. Dvs. at når den ene ledning<br />
bliver positiv, bliver den anden nul, og modsat.<br />
Kablet skal termineres med 120 Ohm i hver<br />
ende.<br />
Kilde: http://www.maxim-ic.com/appnotes.cfm/an_pk/723/<br />
Her ses en anden graf over signalerne:<br />
Transmitterens spænding er ”høj” i forhold til<br />
den nødvendige spænding for modtageren.<br />
Herved opnås også støjimmunitet.<br />
Det højre billede viser signalets<br />
spændingsniveauer på sendersiden<br />
sammenlignet med den større tolerance på<br />
modtagersiden.<br />
Kredsen har en enable til at koble output-trinnet og TxD<br />
ind. Alternativt er output-trinnet højimpedant.<br />
Et digitalt signal på input konverteres til et differential<br />
signal på bussen. Et højt ( logisk 1 ) svarer til at de to<br />
output-ledninger har U A større end U B . Et logisk 0 er<br />
modsat. U B > U A . I RS485 bruges samme spænding i de to<br />
stillinger. Den symmetriske opbygning bevirker<br />
transmission af rene puls-kanter ved bus-frekvenser op til<br />
12 Mbits/s.<br />
Max buslængde afhænger af overførselshastigheden. Den absolut største længde er 1200 meter ved<br />
en datarate på 93,7 Kbit/s med max 32 enheder på bussen. Ved hjælp af repeatere, dvs.<br />
/: Valle Thorø<br />
Side 6 af 43
<strong>Busser</strong><br />
signalforstærkere, kan der kobles 4 grupper a’ 32 devices sammen. Eksempler på RS485-interfaces<br />
er SN75176 fra Texas og MAX485 fra Maxim.<br />
En regel for standard kabler lyder, at Baudraten ganget med kabel-længden i meter skal være mindre<br />
end 10^8. Så fx, hvis et kabel er 100 meter lang, fås en max baudrate på 1Mbit/s.<br />
Man behøver ikke altid at bruge TP-kabler. Ved små afstande er alm. Telefonkabler gode nok.<br />
Terminering på 120 ohm i begge ender behøves ikke altid ved små længder kabel.<br />
Simplex<br />
Duplex<br />
Skal der sendes i begge retninger<br />
samtidigt, må man bruge IC’er, der<br />
kan håndtere det, - eller evt. 4 alm.<br />
8-pins LTC485.<br />
Figuren viser et<br />
twisted par med<br />
terminering.<br />
http://www.maxim-ic.com/app-notes/index.mvp/id/763<br />
Der bruges normalt<br />
termineringsmodstande på 120<br />
Ohm. Svarende til kablets<br />
impedans.<br />
/: Valle Thorø<br />
Side 7 af 43
<strong>Busser</strong><br />
Pins skal forbindes som flg.:<br />
LTC485, DS75176,<br />
Koblet som:<br />
Pin Pin Sender Modtager<br />
1 Reciever Out NC Rx<br />
2 Reciever Out enable 5V 0<br />
3 Driver output enable 5V 0<br />
4 Driver input Tx 0<br />
5 GND 0 0<br />
6 Signal A A<br />
7 Signal B B<br />
8 Vcc 5V 5V<br />
http://pdf1.alldatasheet.net/datasheet-pdf/view/8465/NSC/DS75176.html<br />
Her et billede fra et Scoop af de to signaler:<br />
http://www.maxim-ic.com/app-notes/index.mvp/id/723<br />
Læs evt. mere: http://www.emcu.it/MCUandPeriph/RS485/RS485uk.html<br />
RS 485 exists in two versions: 1 TwistedPair or 2 TwistedPairs.<br />
Single TwistedPair RS 485<br />
In this version, all devices are connected to a single TwistedPair. Thus, all of them must<br />
have drivers with tri-state outputs (including the Master). Communication goes over the<br />
single line in both directions. It is important to prevent more devices from transmitting at<br />
same time (software problem).<br />
/: Valle Thorø<br />
Side 8 af 43
<strong>Busser</strong><br />
Double TwistedPair RS 485<br />
Here, Master does not have to have tri-state output, since Slave devices transmit over the<br />
second twistedpair, which is intended for sending data from Slave to Master.<br />
Sometimes you can see a RS 485 system in a point-to-point system. It is virtually identical<br />
to RS 422; the high impedance state of the RS 485 output driver is not used. The only<br />
difference in hardware of the RS 485 and RS 422 circuits is the ability to set the output to<br />
high impedance state.<br />
http://www.pccompci.com/The_RS-_485_Serial_Port.html<br />
Forskellige IC-er beregnet til forskellige bussystemer:<br />
Nogle eksempler på kredse, der kan kobles til en uC og kommunikere vha. forskellige bussystemer.<br />
I2C, I 2 C eller IIC, eller 2-wire-bus.<br />
Bussen I2C har flere navne. IIC står for “Inter IC Communications” eller Inter Integrated<br />
Controller. Kaldes også nogle steder for 2-wire bus.<br />
I2C bussen er skabt af Philips I 80érne. Dengang var standarden en max clockfrekvens på 100 KHz,<br />
men nu findes en hurtigere standard på 400 KHz.<br />
/: Valle Thorø<br />
Side 9 af 43
<strong>Busser</strong><br />
I2C-bussen er en bus, hvor to<br />
signal-ledninger bruges til at<br />
sende signaler til et antal af<br />
tilkoblede IC-er.<br />
Der skal også bruges en nulleder.<br />
Denne skitse illustrerer hvordan IC-erne<br />
koblet på bussen kan trække signalet lavt med<br />
en Open Collector eller Open Drain.<br />
http://www.scribd.com/doc/77997878/Final-Project<br />
I2C er en standard bidirektionel 2 wire-bus, der bruges til kommunikation mellem chips i moderne<br />
elektronisk udstyr, fx i et TV. Fx gemmes opsætninger af kanaler osv. i EEPROM’s via IIC-bussen.<br />
Vha. bussen kan man fx forbinde en uC til en seriel EEPROM, Temperatur IC, port-kredse osv. Alle<br />
de tilkoblede kredse kaldes slaver.<br />
Al kommunikation sker med et clock-signal og et data-signal. Plus selvfølgelig stel.<br />
Bussen bruges kun til at koble et antal kredse til en kontroller internt på et printkort. Ikke til<br />
kommunikation ”længere væk”.<br />
Det ses, at der kun anvendes 2 wires, der<br />
forbindes til alle enhederne i systemet. Plus<br />
selvfølgelig nul. Dette er ret smart, idet der så<br />
ikke optages et antal pins i controlleren for hver<br />
tilkoblet kreds.<br />
I andre bussystemer angiver processoren med en<br />
separat ledning til hver tilsluttet kreds, - en Chip<br />
Select, - at den er interesseret i at kommunikere<br />
med netop denne kreds.<br />
/: Valle Thorø<br />
Side 10 af 43
<strong>Busser</strong><br />
Men i I2C-systemet sker dette valg af tilsluttede kredse også på de to signalledninger.<br />
Kredsene er født med en ”unik” ID-kode, også kaldet slaveadresse. Den består af en mellem 4 til 7<br />
bit kode som masteren sender ud på bussen. De tilsluttede kredse vil derfor kun reagere, når<br />
processoren ”kalder dem op” ved at sende deres ID-kode.<br />
I I2C-bussen findes der ingen chipselect. De enkelte chips på<br />
bussen kaldes op ved deres adresse eller ID.<br />
Adressen er ( normalt ) 7 bit – og det 8. bit bestemmer, om<br />
man kalder chippen op for skrive eller læseadgang.<br />
Control Byte Allocation { 24LC256 EEPROM }<br />
1 0 1 0 A2 A1 A0 R/W<br />
Men IC’erne på bussen har dog kun<br />
4 bit adresse fast fortrådet i IC’en.<br />
Dvs. at de 4 mestbetydende bit er bestemt af fabrikanten, og de næste 3 kan indstilles på printet.<br />
Den her viste en IC, en EEPROM, har reelt kun en 4-bit ID. De tre af bittene er ført ud til pins,<br />
hvilket bevirker, at man fx med dipswitche kan bestemme 3 af IC-ens adressebit. Herved kan man<br />
sætte hele 8 af samme IC på bussen.<br />
Forbindelserne ser således ud!!<br />
Denne IC har en ID, der kan aflæses i<br />
dens datablad. Den samlede ID bliver<br />
altså ???? 000 r/w,<br />
Schematic showing proper wiring of<br />
a 24LC256 EEPROM. The pull-up<br />
resistors are required and can vary<br />
from 4.7k to 10k.<br />
Følgende skema angiver forskellige kredstyper og deres ID-kode. ( Eller adresser )<br />
Som det fremgår af følgende liste har nogle af kredsene flere end 4 bit ID.<br />
/: Valle Thorø<br />
Side 11 af 43
<strong>Busser</strong><br />
Som tidligere beskrevet er der på ( nogle af ) kredsene en mulighed for eksternt at bestemme op til 3<br />
bit fx vha. dipswitche. Pin’ene kaldes A2, A1 & A0. Herved kan der sættes op til 8 ens kredse med<br />
samme device-ID på bussen.<br />
Nogle kredse er i dag så store, fx EEPROM’s, at der i kredsen er større memory, end der kan vælges<br />
eller adresseres med 8 bit. For disse kredse er memory’en opdelt i BANKS, eller afdelinger. Her kan<br />
A2, A1 og A0 opfattes som Bank-valg, i stedet for IC-valg. Afhængig af størrelse kan der så kun<br />
kobles et færre antal kredse på bussen.<br />
En kreds adresseres så med en byte bestående af 4 bit ID, og 3 bit device, (eller Bank).<br />
Det kunne se sådan ud!<br />
/: Valle Thorø<br />
Side 12 af 43
<strong>Busser</strong><br />
IC type ID<br />
Kreds / Bank<br />
1 0 0 1 A2 A1 A0 R/W<br />
En kommunikation fra en controller foregår på den måde, at controlleren først udsender en “start”.<br />
Herefter udsendes en ID-byte, der får den rette IC-enhed til at reagere. I byten er med bit 0 angivet,<br />
om der ønskes læse eller skriveadgang. ( R / W )<br />
Den kreds, der adresseres, svarer efterfølgende ved at sende en ACKnoledge.<br />
Ønskes fx at gemme noget i en EEPROM, sendes der fra controlleren efterfølgende fx den adresse i<br />
EEPROM’en, hvor der skal gemmes. Igen kvitterer kredsen, der også kaldes ”slaven” med en ACK.<br />
Næste byte, controlleren sender gemmes så på korrekte plads.<br />
Når controlleren er færdig, sendes en STOP ordre.<br />
Dette er illustreret i følgende skitse.<br />
Det er også mulig at sende flere på<br />
hinanden følgende databyte.<br />
Først når der sendes en Stop-kommando fra<br />
controlleren, er transmissionen færdig.<br />
Her følger flere timing-diagrammer:<br />
/: Valle Thorø<br />
Side 13 af 43
<strong>Busser</strong><br />
http://pdf1.alldatasheet.com/datasheet-pdf/view/106552/ISSI/IS24C16.html<br />
http://pdf1.alldatasheet.com/datasheet-pdf/view/106552/ISSI/IS24C16.html<br />
http://www.ti.com/lit/ml/slap117/slap117.pdf<br />
På internettet kan findes nogle ( få ) I2C-primitives, der skal opfattes som små programstumper,<br />
eller subrutiner. Disse kan kopieres og anvendes i en kilde-tekst. Det er fx Start, Stop, Sendbyte,<br />
Modtagbyte osv. Se mere senere!!<br />
Hovedprogrammets opgave er så at flytte data i rigtige RAM-registre i controlleren før der sker et<br />
kald til I2C-programstumperne.<br />
/: Valle Thorø<br />
Side 14 af 43
<strong>Busser</strong><br />
Se senere<br />
Acknoledge kan opfattes som det 9. bit, hvor slaven trækker dataledningen lav.<br />
Der findes større kredse, hvor det er nødvendigt at sende 2 adressebytes.<br />
Det er ikke nødvendigt, at opretholde en konstant klockrate. Derfor kan processoren godt servicere<br />
interruptrutiner undervejs.<br />
Se evt. tysk kodegenerator.<br />
Der findes ny protokol med 10 bit adressing og op til 400 Kbit / sek.<br />
Her et par gaflede tekster, der på fin vis forklarer baggrunden for IIC-protokollen:<br />
I2C Baggrund<br />
I2C, or 2-wire<br />
communication, is a form of<br />
synchronous serial<br />
communication that was<br />
developed by Phillips<br />
Semiconductor. Two wires,<br />
serial data (SDA) and serial<br />
clock (SCL), carry information<br />
between the devices<br />
connected to the bus. Each<br />
byte put on the SDA line<br />
must be 8-bits long, but the<br />
number of bytes transmitter<br />
per transfer is unrestricted.<br />
Term<br />
Transmitter<br />
Receiver<br />
Master<br />
Slave<br />
Definition<br />
The device which is currently sending data<br />
to the buss.<br />
The device which is currently receiving<br />
data from the buss.<br />
The device which initiates a transfer,<br />
generates clock signals and terminates a<br />
transfer. In our case, this is always the<br />
BS2.<br />
The device addressed by the MASTER.<br />
Both SDA and SCL are bi-directional lines, connected to a positive supply voltage via a pull-up<br />
resistor (usually between 4.7k and 10k). When the bus is free, both lines are high. Each device<br />
is recognized by a unique address (whether it's an EEPROM, RTC or I/O expander) and can<br />
operate as either a transmitter or receiver. In addition to transmitters and receivers, devices<br />
can also be considered as masters or slaves when performing data transfers. The BASIC Stamp<br />
cannot operate as an I2C slave device, however. The table below defines I2C terminology:<br />
All I2C communication must begin with a START condition and terminate with a STOP<br />
condition. START and STOP conditions are generated by the master and are defined as:<br />
/: Valle Thorø<br />
Side 15 af 43
<strong>Busser</strong><br />
START<br />
A HIGH to LOW transition of<br />
the SDA line while SCL is<br />
HIGH indicates a START<br />
condition.<br />
STOP<br />
A LOW to HIGH transition of<br />
the SDA line while SCL is<br />
HIGH defines a STOP<br />
condition.<br />
After a START condition, a control byte is sent. The control byte consists of a unique 7-bit<br />
device address and a R/W (read/write) bit. If R/W is a logic 1, a READ command is sent and if<br />
R/W is a logic 0, a WRITE command is sent. Some devices, such as serial EEPROM, have "A"<br />
address pins which allow you to change the address of a device. For example, an EEPROM with<br />
A2, A1, A0 connected to ground would have a address of 1010000 while an EEPROM with A2,<br />
A1, A0 connected to +5v would have an address of 1010111. Using these address pins, up to 8<br />
identical devices can be configured to share the same I2C bus.<br />
Control Byte Allocation { 24LC256 EEPROM }<br />
1 0 1 0 A2 A1 A0 R/W<br />
Some devices, such as the 24LC16B, are not internally connected to these address pins.<br />
Instead, these bits in the control byte function as "page selection blocks," usually denoted as<br />
b2, b1, b0. The 24LC16B is configured as a 8x256 device with 8 blocks, or pages, of memory.<br />
B2, B1, B0 is used to select a page ranging from 0 - 7.<br />
Control Byte Allocation for devices which use block<br />
selection { 24LC16B EEPROM }<br />
1 0 1 0 B2 B1 B0 R/W<br />
After the control byte is sent, the receiver sends an acknowledgement ("ACK") to the<br />
transmitter. During the 9 th clock pulse on SCL (generated by the MASTER), the transmitter<br />
must release the SDA line which the receiver then must pull down (LOW). This LOW on SDA<br />
(generated by the SLAVE) is an ACK. After the transmitter receives the ACK, data can be sent.<br />
An ACK is usually sent after each byte of data.<br />
EEPROM can be read from or written to in a number of ways (byte write, page write, current<br />
read, random read, sequential read) depending on the particular device. For the purposes of<br />
this tutorial, we are going to focus on byte write and random read. The sample software below<br />
contains examples for all five methods of reading and writing.<br />
Byte Write<br />
Byte write is used to put data into a specific memory location. Following the START condition<br />
from the master, a control byte with R/W set to logic 0 (WRITE) is clocked onto the bus by the<br />
master transmitter. This indicates to the slave that the address high byte will follow after it has<br />
generated an ACK. After the ACK is received, the high byte of the address is sent, and ACK is<br />
received, the low byte of the address is sent, an ACK is received, the data is sent, an ACK is<br />
received and finally a STOP condition from the master terminated communication. (Do you see<br />
a pattern with ACK?)<br />
/: Valle Thorø<br />
Side 16 af 43
<strong>Busser</strong><br />
Current Address Read<br />
Current address read will read the data at the current address of the EEPROM's internal<br />
address pointer. If the previous read was at location "n", the next current address read would<br />
access data from address "n+1". A control byte with R/W set to logic 1 (READ) is sent by the<br />
Master, the Master receives the slave's ACK, the Master gets the DATA and issues a STOP<br />
condition without generating an ACK. This is called a "NACK".<br />
Random Read<br />
Random read will access data from a specified EEPROM address. Random read is very similar<br />
to byte write with one exception: where the data is sent in Byte Write, Random Read sends a<br />
START condition with R/W set to logic 1 (READ), receives the ACK and the data, then issues a<br />
NACK (a STOP condition without sending an ACK).<br />
Følgende er fra http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html er gaflet:<br />
The I2C Physical Protocol<br />
When the master (your controller) wishes to talk to a slave (our CMPS03 for example) it begins by issuing a start sequence on<br />
the I2C bus. A start sequence is one of two special sequences defined for the I2C bus, the other being the stop sequence. The<br />
start sequence and stop sequence are special in that these are the only places where the SDA (data line) is allowed to change<br />
while the SCL (clock line) is high. When data is being transferred, SDA must remain stable and not change whilst SCL is high.<br />
The start and stop sequences mark the beginning and end of a transaction with the slave device.<br />
Data is transferred in sequences of 8 bits. The bits are placed on the SDA line starting with the MSB (Most Significant Bit). The<br />
SCL line is then pulsed high, then low. Remember that the chip cannot really drive the line high, it simply "lets go" of it and the<br />
resistor actually pulls it high. For every 8 bits transferred, the device receiving the data sends back an acknowledge bit, so there<br />
are actually 9 SCL clock pulses to transfer each 8 bit byte of data. If the receiving device sends back a low ACK bit, then it has<br />
received the data and is ready to accept another byte. If it sends back a high then it is indicating it cannot accept any further<br />
data and the master should terminate the transfer by sending a stop sequence.<br />
How fast?<br />
The standard clock (SCL) speed for I2C up to 100KHz. Philips do define faster speeds: Fast mode, which is up to 400KHz and<br />
High Speed mode which is up to 3.4MHz. All of our modules are designed to work at up to 100KHz. We have tested our<br />
modules up to 1MHz but this needs a small delay of a few uS between each byte transferred. In practical robots, we have never<br />
had any need to use high SCL speeds. Keep SCL at or below 100KHz and then forget about it.<br />
I2C Device Addressing<br />
All I2C addresses are either 7 bits or 10 bits. The use of 10 bit addresses is rare and is not covered here. All of our modules and<br />
the common chips you will use will have 7 bit addresses. This means that you can have up to 128 devices on the I2C bus, since<br />
a 7bit number can be from 0 to 127. When sending out the 7 bit address, we still always send 8 bits. The extra bit is used to<br />
inform the slave if the master is writing to it or reading from it. If the bit is zero the master is writing to the slave. If the bit is 1 the<br />
master is reading from the slave. The 7 bit address is placed in the upper 7 bits of the byte and the Read/Write (R/W) bit is in<br />
the LSB (Least Significant Bit).<br />
/: Valle Thorø<br />
Side 17 af 43
<strong>Busser</strong><br />
The I2C Software Protocol<br />
The first thing that will happen is that the master will send out a start sequence. This will alert all the slave devices on the bus<br />
that a transaction is starting and they should listen in incase it is for them. Next the master will send out the device address. The<br />
slave that matches this address will continue with the transaction, any others will ignore the rest of this transaction and wait for<br />
the next. Having addressed the slave device the master must now send out the internal location or register number inside the<br />
slave that it wishes to write to or read from. This number is obviously dependent on what the slave actually is and how many<br />
internal registers it has. Some very simple devices do not have any, but most do.<br />
Having sent the I2C address and the internal register address the master now can send the data byte (or bytes, it doesn't have<br />
to be just one). The master can continue to send data bytes to the slave and these will normally be placed in the following<br />
registers because the slave will automatically increment the internal register address after each byte. When the master has<br />
finished writing all data to the slave, it sends a stop sequence which completes the transaction.<br />
So to write to a slave device:<br />
1. Send a start sequence<br />
2. Send the I2C address of the slave with the R/W bit low (even address)<br />
3. Send the internal register number you want to write to<br />
4. Send the data byte<br />
5. [Optionally, send any further data bytes]<br />
6. Send the stop sequence.<br />
As an example, you have an IC with the factory default ID or address of E0h.<br />
Reading from the Slave<br />
This is a little more complicated - but not too much more. Before reading data from the slave device, you must tell it which of its<br />
internal addresses you want to read. So a read of the slave actually starts off by writing to it. This is the same as when you want<br />
to write to it:<br />
You send the start sequence, the I2C address of the slave with the R/W bit low and the internal register number you want to<br />
write to. Now you send another start sequence (sometimes called a restart) and the I2C address again - this time with the read<br />
bit set. You then read as many data bytes as you wish and terminate the transaction with a stop sequence.<br />
1. Send a start sequence<br />
2. Send 0xC0 ( I2C address example with the R/W bit low )<br />
3. Send 0x01 (Internal address of the internal register ( example ))<br />
4. Send a start sequence again (repeated start)<br />
5. Send 0xC1 ( I2C address example with the R/W bit high )<br />
6. Read data byte from the device<br />
7. Send the stop sequence.<br />
/: Valle Thorø<br />
Side 18 af 43
<strong>Busser</strong><br />
The bit sequence will look like this:<br />
Wait a moment<br />
That's almost it for simple I2C communications, but there is one more complication. When the master is reading from the slave,<br />
its the slave that places the data on the SDA line, but its the master that controls the clock. What if the slave is not ready to send<br />
the data! With devices such as EEPROMs this is not a problem, but when the slave device is actually a microprocessor with<br />
other things to do, it can be a problem. The microprocessor on the slave device will need to go to an interrupt routine, save its<br />
working registers, find out what address the master wants to read from, get the data and place it in its transmission register. This<br />
can take many uS to happen, meanwhile the master is blissfully sending out clock pulses on the SCL line that the slave cannot<br />
respond to. The I2C protocol provides a solution to this: the slave is allowed to hold the SCL line low! This is called clock<br />
stretching. When the slave gets the read command from the master it holds the clock line low. The microprocessor then gets the<br />
requested data, places it in the transmission register and releases the clock line allowing the pull-up resistor to finally pull it high.<br />
From the masters point of view, it will issue the first clock pulse of the read by making SCL high and then check to see if it really<br />
has gone high. If its still low then its the slave that holding it low and the master should wait until it goes high before continuing.<br />
Luckily the hardware I2C ports on most microprocessors will handle this automatically.<br />
Sometimes however, the master I2C is just a collection of subroutines and there are a few implementations out there that<br />
completely ignore clock stretching. They work with things like EEPROM's but not with microprocessor slaves that use clock<br />
stretching. The result is that erroneous data is read from the slave. Beware!<br />
Serielle EEPROMS<br />
En af de interessante komponenter, der med fordel kan kobles til vores uC, er en EEPROM. Denne<br />
er en hukommelse, der kan gemmes data i, uden at de forsvinder når spændingen fjernes.<br />
/: Valle Thorø<br />
Side 19 af 43
<strong>Busser</strong><br />
En EEPROM er en hukommelseskreds,<br />
der kan kobles til en uC. Gemte data<br />
”glemmes ikke” selv om spændingen<br />
fjernes.<br />
Her er vist en oversigt over EEPROM’s<br />
til forskellige “bus-familier”.<br />
Alle data er organiseret i 8 bit<br />
Nogle enheder kan håndtere forskellige modes. fx Current adress read, Random read, eller<br />
Sequential read.<br />
Standard I2C protokollen for EEPROMS var designet til op til 16 Kbit memory. Dvs. 2 Kbyte a’ 8<br />
bit.<br />
Bit 0:<br />
X = 1, Read<br />
X = 0, Write<br />
IC-Navn størrelse Antal blokke<br />
24LC01B<br />
1 Kbit<br />
1 Blok Op til 8 på bussen<br />
24LC01<br />
85C72<br />
8 byte page<br />
24LC02<br />
2 Kbit<br />
1 Blok 8<br />
85C82<br />
8 Bit page<br />
24LC04<br />
4 Kbit<br />
2 Blokke A2 A1 X<br />
85C92<br />
16 Byte page<br />
24LC08<br />
8 Kbit<br />
4 Blokke A2 X X<br />
16 Byte page<br />
24LC16B 16 KBit 8 X X X Kun 1 device<br />
AT24C164<br />
16 Kbit<br />
Extended ??<br />
8, A2, A1 A0<br />
16 Byte page<br />
AT24C32<br />
32K Bit<br />
8 pr bus, A2, A1 A0<br />
32 Byte page<br />
AT24C64<br />
64 K Bit<br />
8 pr bus, A2, A1, A0<br />
32 Byte / page<br />
AT24C128 128 Kbit 4, A0, A1<br />
/: Valle Thorø<br />
Side 20 af 43
<strong>Busser</strong><br />
AT24C256<br />
64 Byte / Page<br />
256 Kbit<br />
64 Byte / Page<br />
4, A0, A1<br />
24C16 kan adresseres som 1010 A10 A9 A8 R/W. Med de tre bit A10, A9 og A8 kan vælges blandt<br />
8 enheder. ??<br />
Her et forsøg på at tegne et flow for et program:<br />
Diverse I2C-Kredse:<br />
Følgende en oversigt over nogle forskellige relevante I2C-kredse.<br />
Type Forklaring<br />
PCF8574 8 bit Port expander Read / Write ( Read, = læs port til uC )<br />
PCF8574A Port expander Read / Write ( Read, = læs port til uC ), Anden ID-kode !!<br />
DS 1624 Temperaturcensoren fra Dallas kan indstilles til forskellige temperaturmodes, enten<br />
kontinuerlig, eller sleepmode, med startsignal hver gang der ønskes en konvertering.<br />
PCF8591<br />
DS1307<br />
100 KHz 4 kanal 8 bit ADC<br />
Real time clock<br />
/: Valle Thorø<br />
Side 21 af 43
<strong>Busser</strong><br />
I2C-program<br />
For at kommunikere med en IIC-chip, kan man klare sig med nogle få standard-subrutiner, også<br />
kaldet primitives. De er ret simple, - se fx: http://www.8051projects.net/i2c-twi-tutorial/8051-i2cimplementation.php<br />
Derudover nogle, hvor der er indbygget fejl-detektering, der kan tjekke, om fx en adresseret IC ikke<br />
er sat i sin sokkel. Se disse senere:<br />
Primitiver: Eller subrutiner, der kan bruges til at<br />
kommunikere med en I2C-kreds kan fx have<br />
disse navne:<br />
I2C_start:<br />
I2C_stop:<br />
I2C_sendbyte:<br />
I2C_modtag:<br />
I2C_ACK: ( Modtaget )<br />
I2C_NACK: ( end of transmission )<br />
Her følger en mere udførlig gennemgang af subrutinerne:<br />
; -------------------------------<br />
; Send startsignal. SDA og SCL gøres lave, og Cy sættes !<br />
; Er bussen optaget, returneres med C = 1.<br />
I2C_start:<br />
Setb SDA<br />
Setb SCL<br />
JNB SDA, I2C_START1 ; Tjeck for bus ikke optaget, optaget hvis lav !<br />
JNB SCL, I2C_start1 ; - ” –<br />
Clr SDA<br />
CLR SCL<br />
; begge linier gøres lave<br />
CLR C<br />
; og Cy flaget også lav<br />
JMP I2C_START2<br />
I2C_start1:<br />
Setb C<br />
I2C_start2:<br />
RET<br />
; -------------------------<br />
/*<br />
Send stopsignal:<br />
Gør SDA kortvarig lav, mens SCL gøres høj.<br />
SCL forventet lav ved start. Slut med SCL og SDA høj.<br />
/: Valle Thorø<br />
Side 22 af 43
<strong>Busser</strong><br />
*/<br />
I2C_stop:<br />
Clr SDA ;<br />
NOP<br />
Setb SCL<br />
NOP<br />
Setb SDA<br />
RET<br />
; --------------------------------------<br />
/*<br />
Send Byte:<br />
Rutinen kaldes med data I A-registeret. Efter at en byte er sendt, tjekker rutinen for om der<br />
modtages en ACK. ACK-værdien returneres i CY. Cy = 0 => ??, Cy = 1 => ??.<br />
Send en byte ud på I2C-bussern, MSB først.<br />
SCL og SDA forventet lav ved start. Slut med SCL lav<br />
Data, der skal sendes i reg A ved start.<br />
Returnerer med CY sat for at indikere en not acknowledge fra slaven.<br />
Ødelægger indholdet i A efter byte er sendt.<br />
*/<br />
I2C_sendbyte:<br />
Push B<br />
Mov b, #8<br />
I2C_sendbyte1:<br />
RCL A<br />
Mov SDA, C<br />
Setb SCL<br />
NOP<br />
Clr SCL<br />
DJNZ b, I2C_sendbyte1<br />
; 8 bit er nu sendt<br />
; modtag Ack fra slave<br />
setb SDA<br />
Setb Scl<br />
Nop<br />
Mov C, SDA<br />
Clr SCL<br />
POP b<br />
RET<br />
; Roter A ud i Cy<br />
; C til SDA-bus<br />
; clock kortvarig høj<br />
; vent på at slave sender Ack<br />
; læs Ack-bit til Carry-bit<br />
; ----------------------------------<br />
/*<br />
Modtage byte<br />
/: Valle Thorø<br />
Side 23 af 43
<strong>Busser</strong><br />
B gemmes, modtagne data gemmes i ACC. Først modtagne bit = MSB.<br />
SCL forventet lav ved start. Slut med SLC lav<br />
Returnerer den modtagne byte i A<br />
*/<br />
I2C_modtag:<br />
Setb SDA<br />
Push b<br />
Mov B, #8<br />
; indstil tæller til 8 bit.<br />
I2C_modtag1:<br />
Setb SCL<br />
; clock høj<br />
nop<br />
Mov C, SDA<br />
RCL A<br />
DJNZ b, I2C_modtag1<br />
; igen i alt 8 gg.<br />
Pop b<br />
RET<br />
; ------------------------------<br />
/*<br />
Send ACK. ( ala ?? ”Modtaget” )<br />
Sender ACKNOWLEDGE bit ud ( low )<br />
SCL forventet lav ved start. Slut med SCL og SDA lave.<br />
*/<br />
I2C_ACK:<br />
Clr SDA<br />
NOP<br />
Setb SCL<br />
NOP<br />
Clr SCL<br />
NOP<br />
RET<br />
; ------------------------------<br />
/*<br />
Send Not ACK.<br />
Send en NOT ACKNOWLEDGE bit ud ( Høj )<br />
SLC forventet lav ved start. Slut med SCL lav og SDA høj.<br />
*/<br />
I2C_NACK: ( Not Acknowledge (End of Transmission) )<br />
Setb SDA<br />
NOP<br />
Setb SCL ; Klock kortvarig høj<br />
NOP<br />
CLR SCL<br />
RET<br />
; ----------------------------------<br />
/: Valle Thorø<br />
Side 24 af 43
<strong>Busser</strong><br />
Se for yderligere oplysninger:<br />
http://www.esacademy.com/en/library/technical-articles-and-documents/miscellaneous/i2c-bus.html<br />
http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html ( Med C-kode )<br />
http://www.totalphase.com/support/kb/10039/<br />
http://www.eeherald.com/section/design-guide/esmod11.html<br />
http://www.best-microcontroller-projects.com/i2c-tutorial.html<br />
http://www.i2c-bus.org/i2c-bus/<br />
http://www.i2c-bus.org/i2c-primer/<br />
I2C-bus specification and user manual:<br />
http://www.nxp.com/documents/user_manual/UM10204.pdf<br />
I2C på 8051 både ASM og C: http://www.8051projects.net/i2c-twi-tutorial/8051-i2c-implementation.php<br />
Flowchart: http://www.holtek.com.tw/english/tech/appnote/uc/pdf/ha0149e.pdf<br />
/: Valle Thorø<br />
Side 25 af 43
<strong>Busser</strong><br />
SPI, 3-wire og 4-wire-busserne:<br />
( der er ikke helt klarhed over forskellen! ) se sammenligning:<br />
http://www.coridium.us/ARMhelp/index.htm#page=HwSPIMicrowire.html<br />
SPI står for Serial Peripheral Interface. SPI-bussen bruger 4 wirer. Chip Select, Clock, og 2<br />
dataledninger, en i hver sin retning.<br />
Men man kan også støde på opsætninger, hvor den ene data-ledning er udeladt, - fx hvis der kun<br />
skal læses fra en IC.<br />
Og der findes IC-er til SPI-bussen, hvor data sendes og modtages på samme ledning. ( kan så bare<br />
være kaldt ”Data” ) Denne type kan kun arbejde i half-duplex, dvs. data i en retning ad gangen.<br />
SPI 4 wire setup<br />
http://elk.informatik.fh-augsburg.de/da/da-49/da-thoms-cc.pdf<br />
SPI er skabt af Motorola i midt 1980’erne.<br />
Nogle gange kaldes SPI-bussen også for 4-wire serial bus.<br />
SPI 3 wire setup.<br />
SPI bussen kan sammenlignes lidt med microwire bussen. Den bruger lignende signal-navne og<br />
commando-protokol. Men den clock’er data ind og ud lidt anderledes. Data kan klockes med meget<br />
højere frekvens end microwire. Op til 5 MHz!<br />
I nyere microcontrollere kan der være indbygget SPI-port!<br />
Fra nettet:<br />
The SPI bus specifies four logic signals:<br />
SCLK:<br />
MOSI; SIMO:<br />
MISO; SOMI:<br />
SS:<br />
serial clock (output from master);<br />
master output, slave input (output from master);<br />
master input, slave output (output from slave);<br />
slave select (active low, output from master).<br />
Alternative naming conventions are also widely used:<br />
/: Valle Thorø<br />
Side 26 af 43
<strong>Busser</strong><br />
SCK; CLK:<br />
SDI; DI, DIN, SI:<br />
SDO; DO, DOUT, SO:<br />
serial clock (output from master)<br />
serial data in; data in, serial in<br />
serial data out; data out, serial out<br />
The SDI/SDO (DI/DO, SI/SO) convention requires that SDO on the master be connected to SDI on<br />
the slave, and vice-versa. Chip select polarity is rarely active high, although some notations (such<br />
as SS or CS instead of nSS or nCS) suggest otherwise.<br />
SPI interfacen er command drevet.<br />
For at læse data fra Memory,<br />
vælger hosten eller masteren en<br />
device, vha. Chip-select, sender<br />
READ kommando, sender<br />
adressen af den byte, der ønskes<br />
læst, og clocker så data ud af<br />
device gennem SO pin.<br />
( Seriel Out )<br />
Ved afslutningen de-selecter<br />
hosten igen kredsen.<br />
Der kan være software forskelle<br />
mellem fabrikater af SPI-ic’er.<br />
http://www.eeherald.com/section/design-guide/esmod12.html<br />
Fra Nettet<br />
The 3-wire nomenclature is the general category of emcompassing the SPI and Microwire<br />
busses. The Microwire is a subset of SPI with slightly different timing and data latching. This<br />
last part tripped us up at work when we tried to access an SPI EEPROM with a PIC configured<br />
for the Microwire data latching.<br />
SPI<br />
The Serial Peripheral Interface (SPI) is a synchronous serial bus developed by Motorola and<br />
present on many of their microcontrollers.<br />
/: Valle Thorø<br />
Side 27 af 43
<strong>Busser</strong><br />
The SPI bus consists of four signals: master out slave in (MOSI), master in slave out (MISO),<br />
serial clock (SCK), and active-low slave select (/SS). As a multi-master/slave protocol,<br />
communications between the master and selected slave use the unidirectional MISO and MOSI<br />
lines, to achieve data rates over 1Mbps in full duplex mode. The data is clocked simultaneously<br />
into the slave and master based on SCK pulses the master supplies. The SPI protocol allows<br />
for four different clocking types, based on the polarity and phase of the SCK signal. It is<br />
important to ensure that these are compatible between master and slave.<br />
In addition to the 1Mbps data rate, another advantage to SPI is if only one slave device is<br />
used, the /SS line can be pulled low and the /SS signal does not have to be generated by the<br />
master. (This capability is, however, dependent on the phase selection of the SCK.)<br />
A disadvantage to SPI is the requirement to have separate /SS lines for each slave. Provided<br />
that extra I/O pins are available, or extra board space for a demultiplexer IC, this is not a<br />
problem. But for small, low-pin-count microcontrollers, a multi-slave SPI interface might not<br />
be a viable solution.<br />
For more detail on SPI, read David and Roee Kalinsky's "Beginner's Corner: Serial Peripheral Interface"<br />
(February 2002).<br />
Microwire<br />
Microwire is a three-wire synchronous interface developed by National Semiconductor and<br />
present on their COP8 processor family.<br />
Similar to SPI, Microwire is a master/slave bus, with serial data out of the master (SO), and<br />
serial data in to the master (SI), and signal clock (SK). These correspond to SPI's MOSI,<br />
MISO, and SCK, respectively. There is also a chip select signal, which acts similarly to SPI's<br />
/SS. A full-duplex bus, Microwire is capable of speeds of 625Kbps and faster (capacitance<br />
permitting).<br />
Microwire devices from National come with different protocols, based on their data needs.<br />
Unlike SPI, which is based on an 8-bit byte, Microwire permits variable length data, and also<br />
specifies a "continuous" bitstream mode.<br />
Microwire has the same advantages and disadvantages as SPI with respect to multiple slaves,<br />
which require multiple chip select lines. In some instances, an SPI device will work on a<br />
Microwire bus, as will a Microwire device work on an SPI bus, although this must be reviewed<br />
on a per-device basis.<br />
Both SPI and Microwire are generally limited to on-board communications and traces of no<br />
longer than 6 inches, although longer distances (up to 10 feet) can be achieved given proper<br />
capacitance and lower bit rates.<br />
http://www.embedded.com/design/connectivity/4023975/Serial-Protocols-Compared<br />
SPI-Modes<br />
/: Valle Thorø<br />
Side 28 af 43
<strong>Busser</strong><br />
The exchange itself has no pre-defined protocol.<br />
This makes it ideal for data-streaming<br />
applications. Data can be transferred at high<br />
speed, often into the range of the tens of<br />
megahertz. The flip side is that there is no<br />
acknowledgment, no flow control, and the<br />
master may not even be aware of the slave's<br />
presence.<br />
The frame of the data exchange is described by two parameters, the clock polarity (CPOL) and the<br />
clock phase (CPHA). This diagram shows the four possible states for these parameters and the<br />
corresponding mode in SPI.<br />
http://www.totalphase.com/support/kb/10045/<br />
SPI-enheden indbygget i controllere kan<br />
typisk konfigureres på 4 forskellige modes<br />
http://elm-chan.org/docs/spi_e.html<br />
SPI-Bussen og 3-wire sammenlignet:<br />
De to busser, 3-wire og SPI er næsten lig hinanden. Her en sammenligning mellem de to:<br />
http://www.maxim-ic.com/appnotes.cfm/an_pk/169<br />
/: Valle Thorø<br />
Side 29 af 43
<strong>Busser</strong><br />
Her en skitse af signalerne på<br />
ledningerne.<br />
For mere se:<br />
http://www.mct.de/faq/spi.html<br />
http://www.rpi.edu/dept/ecse/mps/Coding_SPI_sw.pdf<br />
http://www.mikroe.com/en/books/8051book/ch4/ ( for SPI indbygget i en uC )<br />
/: Valle Thorø<br />
Side 30 af 43
<strong>Busser</strong><br />
Microwire:<br />
Microwire står for Serial to Peripheral Interface (SPI). Det er en hardware/firmware<br />
kommunikations protokol udviklet af Motorola og senere adopteret af andre I industrien.<br />
National Semiconductors Microwire er det same som SPI. Sometider kaldes SPI for "four wire"<br />
serial bus.<br />
Her følger en del afsnit, gaflet forskellige steder på nettet.<br />
MICROWIRE is a 3Mbps [full-duplex] serial 3-wire interface standard defined by National Semiconductor. The<br />
MICROWIRE protocol is essentially a subset of the SPI interface, CPOL = 0 and CPHA = 0. Microwire is a serial I/O<br />
port on microcontrollers, so the Microwire bus will also be found on EEPROMs and other Peripheral chips.<br />
Microwire is essentially a predecessor of SPI. It's a strict subset: half duplex, and using SPI mode 0. Microwire-Plus<br />
supports other SPI modes. Microwire chips tend to need slower clock rates than newer SPI versions; perhaps 2 MHz vs.<br />
20 MHz. Some Microwire chips also support a 3-Wire mode see below, which fits neatly with the restriction to half<br />
duplex.<br />
Microwire<br />
Das, von National Semiconductor entwickelte Microwire ist zu SPI kompatibel, definiert jedoch<br />
(ahnlich SMBus für I2C) striktere Regeln fur die Hard- und Softwareteile des Busses. Damit ¨<br />
konnen Microwiregeräte praktisch an jedem SPI Master betrieben werden. ¨<br />
Der originale Microwire Standard ist kompatibel zum SPI mode 1. Viele altere SPI Geräte<br />
implementieren aber nur den SPI mode 0, der genau andersherum funktioniert. Microwire/Plus<br />
behebt dieses Problem, indem ein SKSEL Bit (shift clock select) eingefuhrt wird, um zwischen den<br />
SPI - modes 0 und 1 umzuschalten.<br />
http://elk.informatik.fh-augsburg.de/da/da-49/da-thoms-cc.pdf<br />
Microwirebussen begyndte som en inter-processor kommunikation port, skabt af National<br />
semiconductor.<br />
Det er en af de ældste serielle busser. Populær ved høj volumen i lang tid. Supporterer nogle af de<br />
billigste serielle hukommelseskredse. Er hurtig nok til mange applikationer, men supporterer ikke så<br />
mange kredse<br />
Kræver flere portpins end I2C<br />
4-wire bus<br />
/CS, Chip Select<br />
SCK, Clk<br />
SO, DO, Data Out<br />
SI, DI, Data In<br />
/: Valle Thorø<br />
Side 31 af 43
<strong>Busser</strong><br />
Interface speed er max 1 MHz. Clock’er data ind og ud på samme clock flanke. En lignende bus,<br />
SPI clock’er data ind og ud på modsatte clock-flanker, og har højere hastighed.<br />
Selvom Microwire bussen har nogle fordele, er det den første, der vil forsvinde. ( www.xicor.com)<br />
Power up i EWDS mode, = ERASE / WRITE Disable State. Dvs. Alle Erase og Write functions er<br />
disablede indtil EWEN, Erase / Write Enable instruktionen er udført.<br />
Der er 7 instruktioner: for 93LCxx, Microchip !<br />
Ordre OPCODE Adress DATA<br />
Erase All, ERAL 00 10xxxxxx<br />
Write All, WRAL 00 01xxxx Data til alle adresser<br />
Der kan spares en pin ved at forbinde DO med en modstand på 10 Kohm op til 5 V, og en 2,2 K til<br />
DI. Dvs. der nu er en 2-wire bus!<br />
Maxim 3-wire<br />
The Maxim 3-wire interface is found on the DS1620 and some other ICs from Maxim The data<br />
flow to and from the DS1620 is multiplexed on only one pin (DQ) while SPI needs two<br />
separate signals (MOSI, MISO).<br />
One variant of SPI uses single bidirectional data line (slave out/slave in, called SISO) instead<br />
of two unidirectional ones (MOSI and MISO). Clearly, this variant is restricted to a half duplex<br />
mode. It tends to be used for lower performance parts, such as small EEPROMs used only<br />
during system startup and certain sensors, and Microwire. As of this writing, few SPI master<br />
controllers support this mode; although it can often be easily bit-banged in software.<br />
When someone says a part supports SPI or Microwire, you can normally assume that means<br />
the four-wire version.<br />
However, when someone talks about a part supporting a 3-wire serial bus you should always<br />
find out what it means: standard 4-wire SPI, without the chip select pin from that count, since<br />
most buses use chip selects but only three wires carry "real" signals; (More, sometimes with<br />
an unshared SPI bus segment the device's chip select will be hard-wired as "always selected".)<br />
"real" 3-wire SPI; or even a RS232 cable with RXD, TXD, and shield/ground, or an applicationspecific<br />
signaling scheme.<br />
Fra: http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus<br />
Andre firmaer kalder bare deres signal-ledninger for Data, Clock og CS ( Chip Select )<br />
/: Valle Thorø<br />
Side 32 af 43
<strong>Busser</strong><br />
The Serial Peripheral Interface Bus or SPI bus is a very loose standard for controlling<br />
almost any digital electronics that accepts a clocked serial stream of bits. A nearly identical<br />
standard called "Microwire" is a restricted subset of SPI.<br />
SPI is cheap, in that it does not take up much space on an integrated circuit, and effectively<br />
multiplies the pins, the expensive part of the IC. It can also be implemented in software with a<br />
few standard IO pins of a microcontroller.<br />
Many real digital systems have peripherals that need to exist, but need not be fast. The<br />
advantage of a serial bus is that it minimizes the number of conductors, pins, and the size of<br />
the package of an integrated circuit. This reduces the cost of making, assembling and testing<br />
the electronics.<br />
A serial peripheral bus is the most flexible choice when many different types of serial<br />
peripherals must be present, and there is a single controller. It operates in full duplex (sending<br />
and receiving at the same time), making it an excellent choice for some data transmission<br />
systems.<br />
In operation, there is a clock, a "data in", a "data out", and a "chip select" for each integrated<br />
circuit that is to be controlled. Almost any serial digital device can be controlled with this<br />
combination of signals.<br />
SPI signals are named as follows:<br />
SCLK - serial clock<br />
MISO - master input, slave output<br />
MOSI - master output, slave input<br />
CS - chip select (optional, usually inverted polarity)<br />
Most often, data goes into an SPI peripheral when the clock goes low, and comes out when the<br />
clock goes high. Usually, a peripheral is selected when chip select is low. Most devices have<br />
outputs that become high impedance (switched-off) when the device is not selected. This<br />
arrangement permits several devices to talk to a single input. Clock speeds range from several<br />
thousand clocks per second (usually for software-based implementations), to several million<br />
per second.<br />
Most SPI implementations clock data out of the device as data is clocked in. Some devices use<br />
that trait to implement an efficient, high-speed full-duplex data stream for applications such as<br />
digital audio, digital signal processing, or full-duplex telecommunications channels.<br />
On many devices, the "clocked-out" data is the data last used to program the device. Readback<br />
is a helpful built-in-self-test, often used for high-reliability systems such as avionics or<br />
medical systems.<br />
In practice, many devices have exceptions. Some read data as the clock goes up (leading<br />
edge), others read as it goes down (falling edge). Writing is almost always on clock movement<br />
that goes the opposite direction of reading. Some devices have two clocks, one to "capture" or<br />
"display" data, and another to clock it into the device. In practice, many of these "capture<br />
clocks" can be run from the chip select. Chip selects can be either selected high, or selected<br />
low. Many devices are designed to be daisy-chained into long chains of identical devices.<br />
SPI looks at first like a non-standard. However, many programmers that develop embedded<br />
systems have a software module somewhere in their past that drives such a bus from a few<br />
/: Valle Thorø<br />
Side 33 af 43
<strong>Busser</strong><br />
general-purpose I/O pins, often with the ability to run different clock polarities, select<br />
polarities and clock edges for different devices.<br />
Fra: http://www.coridium.us/ARMhelp/index.htm#page=HwSPIMicrowire.html<br />
Sammenkobling af forskellige busser?<br />
Måske sådan kan 4 og 3-wire kobles<br />
sammen ??<br />
http://www.totalphase.com/support/kb/10059/<br />
Sammenkobling af I2C og SPI Bus<br />
Konverter fra I2C til 485:<br />
/: Valle Thorø<br />
Side 34 af 43
<strong>Busser</strong><br />
http://xj900diversion.free.fr/bus/I2C%20-%20RS-485%20adapter.htm<br />
/: Valle Thorø<br />
Side 35 af 43
<strong>Busser</strong><br />
1-wire Bus, MicroLAN,<br />
1-wire bussen er fra Dallas Semiconductor / Maxim<br />
Dallas / Maxim 1-wire bussen burger en enkel datalinie ( derfor 1-Wire ) til at transmittere og<br />
modtage data. Hver 1-Wire enhed skal også forbindes til fælles ground, og optional til en power<br />
supply. Hvis powersupply udelades, kan 1-wire enheden strømfødes ”parasitisk” fra dataledningen.<br />
1-wire bussen er normalt holdt høj, med en 4,7 K modstand til Ucc. Når der sendes data, trækkes<br />
bussen kortvarigt lav i henhold til bittene.<br />
Busprotokollen arbejder med et antal definerede signaltyper. En reset puls, ”presence puls”, Write 0,<br />
Write 1, Read 0, Read 1.<br />
Hvert signal har timing parameter som skal strengt overholdes. Derfor er det vigtigt, at systemet er i<br />
stand til at generere akkurate timeslots.<br />
For fuldstændig oversigt over 1-Wire signalling refereres til dokumentation på Dallas/Maxim’s<br />
hjemmeside.<br />
Data sendes ved at trække data linien lav. < 15uS => 1, > 60uS => 0<br />
q-PWM Code Bus System<br />
Kredse:<br />
DS18x20, Temperaturcensor I TO92 hus. DS18S20 giver 9 bit / 0,5 grader C opløsning, og<br />
DS18B20 giver op til 12 bits opløsning, 0,0625 grader. Begge med tollerencer inden for 0,5 grader.<br />
DS 2401, Bruges til serial nummer, eller ID-chip !. I SMD eller TO92 hus !<br />
Sender 8 bit familiekode, ( Type of device ), 48 bit unik kode, ( 2,8E14 koder !<br />
Og 8 bit CRC, Cyclic Redundancy Check<br />
Kendes fx som iBUTTON<br />
/: Valle Thorø<br />
Side 36 af 43
<strong>Busser</strong><br />
DS 1920 Temperaturcensor ! og IC til adgangskontrol.<br />
Se: http://en.wikipedia.org/wiki/1-Wire<br />
CAN-bussen<br />
CAN står for Controller Area Network., og er en international standard for seriel kommunikation<br />
brugt til at kontrollere enheder på et netværk. CAN-standarden sætter regler for nogle af de fysiske<br />
udformninger af netværket, såvel som low-level kommunikationsprotokollen.<br />
CAN-bussen blev udviklet i 1981 af BOSH og Intel til at koble elektroniske moduler på en bus i<br />
biler. Siden har standarden også fundet vej til applikationer udenfor dens oprindelige domæne. Fx i<br />
industrikontrol.<br />
Fysisk ser CAN-bussen ud som RS485 bussen. Den består af et twisted pair kabel, der skal<br />
termineres med 120 ohm i begge ender for at opnå en typisk impedans på 120 ohm.<br />
Der bruges differentiale spændinger til datakommunikation hvilket gør systemet meget immun<br />
overfor støj.<br />
CAN er primært designet til kontrol-formål, derfor er meddelelserne, der sendes små, max 8 bytes.<br />
Eksempel på et CAN-netværk<br />
Et eksempel på et netværk kan være installation i en bil. Der sidder en ECU ved bremsepedalen, en<br />
ved venstre baglygte, en ved højre baglygte, en ved instrumentpanelet, osv.<br />
Når der trædes på bremsen, sendes et signal ud på bussen, fx ”Bremsepedal trykket”. ECU-en ved<br />
baglygterne er så programmeret til at tænde stoplygterne, når en sådan meddelelse ankommer. ECUen<br />
ved instrument-panelet kan udsende en meddelelse ” Kan nogen fortælle hvad temperaturen i<br />
blokken er” – hvorefter den ECU der har med dette at gøre måler og svarer. Meddelelserne i dette<br />
system kan være valgt altid at bestå af to byte, en ID, in binær værdi, fx 37h, der betyder ”Kan<br />
/: Valle Thorø<br />
Side 37 af 43
<strong>Busser</strong><br />
nogen …” efterfulgt fx af 00h, og svaret kunne være 38h efterfulgt af en byte, der angiver<br />
temperaturen.<br />
Kommunikationsprotokollen definerer, at CAN-bussen bruger en ”dominant” og en ”recessive” =<br />
”vigende” spændingsniveau.<br />
Et lavt signal ( logisk 0 ) svarer til en positiv spænding, U CAN H > U CAN L ., og bruger den dominante<br />
bus-spændings-niveau.<br />
Et logisk højt svarer til en lille differential signal, U CAN H ~ U CAN L . – bruger den vigende busspændingsniveau.<br />
Følgende figur viser det interne i en CAN-interface-chip.<br />
Den dominante ”L” niveau kan override den vigende ”H”-niveau uden kollision eller interference.<br />
Derfor er et enable-signal ikke nødvendig.<br />
Den ret høje output-modstand begrænser imidlertid max kommunikations raten til 1 Mbit/s.<br />
Ved 1 Mbit/s er den største længde 30 m, mens 62,5 kbit/s giver 1000 m.<br />
Can-interface-chips er fx SN75LBC031 fra Texas, og PCA82C250 fra Philips.<br />
U diff Ressive ’H’ level Dominant ’L’ level<br />
/: Valle Thorø<br />
Side 38 af 43
<strong>Busser</strong><br />
Receiver 0 til 0,50 V 0,90 til 2,0 V<br />
Transmitter 0,05 til -0,50 V 1,50 til 2,0 V<br />
Bussens spændinger på graf-form: Til venstre absolut værdi, U abs i [V], til højre relativ, U diff [V]<br />
Den basale meddelelsesstruktur indeholder to dele. En meddelelses-identitet, og meddelelsesdata.<br />
Strukturen er dog lidt mere kompliceret end det. Der er error-detection, synkroniserings- og andre<br />
bit adderet til hver meddelelse. Men en af fordelene ved CAN er, at specielle bit tager hånd om<br />
dette.<br />
Hver enhed i et netværk kaldes en NODE, eller en Electronic Control Unit, en ECU.<br />
Kilde: Elector Electronics, 2/2006, s56-58.<br />
PM-BUS, Power Management Bus<br />
I sin mest basale form er PMBussen en to-tråds seriel bus, som er baseret på SM-bussen, der selv er<br />
en variant af I2C-Bussen<br />
PMbussen kræver en unik 7-bits fysisk adresse for hver styret komponent. Men der er ingen<br />
specifikation af, hvordan disse adresser etableres. Det kan gøres via en 7 bit dipswitch. Evt. med 3<br />
pins, der enten kan være lav, høj eller tristate. Dette er smart, hvis antallet af pins er kritisk. Ericsson<br />
har lavet en modstands-trimningsteknik, som kun kræver et lille antal pins. Fx med intern 10 uA<br />
strømgenerator, vil forskellige eksterne modstande med 25 kohms step kunne give 8 trin fra 0 til 2<br />
Volt. Med blot 2 pins kan man opnå 64 adresser.<br />
/: Valle Thorø<br />
Side 39 af 43
<strong>Busser</strong><br />
SM-BUS, System Manage Bus<br />
SMBus star for System Management Bus, en simple 2-wire bus, der kan bruges i udstyr som fx<br />
computer motherboards til kommunikation. For det meste med kredse med lav båndbredde.<br />
SMBussen blev udviklet af Intel i 1995.<br />
/: Valle Thorø<br />
Side 40 af 43
<strong>Busser</strong><br />
Bonus info:<br />
Af følgende oversigt fremgår, at der findes et større antal bussystemer.<br />
Network<br />
Concept<br />
Number of<br />
Signal Lines<br />
Optional<br />
signals<br />
Network Size<br />
Network<br />
Interface<br />
Network<br />
Voltage<br />
Logic<br />
Thresholds<br />
Transmission<br />
Address<br />
Format<br />
Network<br />
Inventory<br />
Gross Data<br />
Rate<br />
1-Wire I 2 C* SMBus SPI MicroWire/PLUS M-Bus<br />
(EN1434)<br />
single<br />
master,<br />
multiple<br />
slaves<br />
1 (IO)<br />
N/A<br />
Up to 300<br />
m (with<br />
suitable<br />
master<br />
circuit)<br />
open drain,<br />
resistive or<br />
active<br />
master<br />
pull-up<br />
From 2.8 to<br />
6.0 V,<br />
device<br />
specific<br />
Vary with<br />
network<br />
voltage<br />
LS bit first,<br />
half-duplex<br />
56 bits<br />
Automatic,<br />
supports<br />
dynamic<br />
topology<br />
change<br />
Standard:<br />
~0 to 16.3k<br />
bps<br />
Overdrive:<br />
~0 to 142k<br />
bps)<br />
multiple<br />
masters,<br />
multiple<br />
slaves<br />
2, (SCL,<br />
SDA)<br />
N/A<br />
Limited by<br />
max. 400pF<br />
bus<br />
capacitance<br />
requirement<br />
open drain,<br />
resistive or<br />
active master<br />
pull-up<br />
From 1.8 to<br />
5.5V, device<br />
specific<br />
Fixed level:<br />
>1.5V, >3.0 V<br />
V DD-related<br />
level: 70% of V DD<br />
MS bit first<br />
plus<br />
Acknowledge<br />
bit, halfduplex<br />
7 bits, (10 bits<br />
defined but<br />
not<br />
implemented)<br />
N/A; slave<br />
addresses<br />
hard-coded in<br />
firmware<br />
Standard: ~0<br />
to 100k bps;<br />
Fast: ~0 to<br />
400k bps;<br />
High-Speed:<br />
~0 to 3.4M<br />
bps<br />
multiple<br />
masters,<br />
multiple<br />
slaves<br />
2, (SMBCLK,<br />
SMBDAT)<br />
single<br />
master,<br />
multiple<br />
slaves<br />
4, (CS\, SI,<br />
SO, SCK)<br />
single master,<br />
multiple slaves<br />
4, (CS\, DI, DO, SK)<br />
single<br />
master,<br />
multiple<br />
slaves<br />
2 (lines can<br />
be swapped)<br />
CAN<br />
(ISO11898)<br />
multiple<br />
masters,<br />
multiple<br />
slaves<br />
2 (CAN_H,<br />
CAN_L,<br />
terminated)<br />
2nd GND,<br />
SMBSUS#,<br />
SMBALERT# N/A N/A N/A Power,<br />
Shield<br />
Limited by<br />
max. 400pF<br />
bus<br />
capacitance<br />
requirement<br />
open drain,<br />
resistive or<br />
active master<br />
pull-up<br />
2.7V to 5.5V<br />
2.1V<br />
MS bit first<br />
plus<br />
Acknowledge<br />
bit, halfduplex<br />
7 bits, (10<br />
bits defined<br />
but not<br />
implemented)<br />
ARP,<br />
Address<br />
Resolution<br />
Protocol<br />
(Rev. 2.0<br />
only)<br />
10k to 100k<br />
bps<br />
N/A (circuit<br />
board level)<br />
Push-pull<br />
with tristate<br />
From 1.8V to<br />
5.5V, device<br />
specific<br />
V DD-related<br />
level: 70%<br />
of V DD<br />
(inconsistent)<br />
MS bit first,<br />
full-duplex<br />
N/A<br />
N/A; slave<br />
select (CS\)<br />
hard-coded<br />
in firmware<br />
~0 to ~10 M<br />
bps (device<br />
specific)<br />
N/A (circuit board<br />
level)<br />
Push-pull with<br />
tristate<br />
From 1.8V to 5.5V,<br />
device specific<br />
Fixed level: 2.0V; V DD-related<br />
level: 70% (80%) of V DD<br />
(inconsistent)<br />
MS bit first, fullduplex<br />
N/A<br />
N/A; slave select<br />
(CS\) hard-coded in<br />
firmware<br />
~0 to ~5 M bps<br />
(device specific)<br />
Max. 350m<br />
per segment<br />
of max. 250<br />
slaves; max.<br />
180nF<br />
M to S:<br />
voltage drive<br />
S to M:<br />
current load<br />
~40V<br />
Master to<br />
slave: 24V,<br />
36V<br />
nominalSlave<br />
to master:<br />
11mA<br />
LS bit first,<br />
half-duplex,<br />
acknowledge<br />
response<br />
8 bits<br />
(primary<br />
address), 64<br />
bits<br />
(secondary<br />
address)<br />
Automatic<br />
300, 2400,<br />
9600 bps<br />
40m @1M<br />
bps1000m @<br />
50k bps<br />
(example)<br />
Differential<br />
open<br />
drain/source<br />
or open<br />
coll./emitter<br />
V DD-VD<br />
(diode drop);<br />
~4.5V max.<br />
Differential:<br />
1.5V<br />
(dominant);<br />
driver<br />
specification<br />
MS bit first,<br />
half-duplex<br />
LIN Bus<br />
single<br />
master,<br />
multiple<br />
slaves<br />
1 (LIN)<br />
N/A<br />
Up to 40m,<br />
max. 10nF<br />
total load<br />
open drain,<br />
resistive<br />
master pullup<br />
8 to 18V<br />
V DD-related<br />
level: 80% of V DD<br />
(driver<br />
spec.)60% of V DD<br />
(receiver<br />
spec.)<br />
LS bit first,<br />
half-duplex<br />
Message<br />
identifier 11 Message<br />
bits (standard identifier 8<br />
format), 29 bits,<br />
bits including 2<br />
(extended parity bits<br />
format)<br />
N/A;<br />
messagebased<br />
protocol, not<br />
address<br />
based<br />
~0 to 1M bps<br />
N/A;<br />
messagebased<br />
protocol, not<br />
address<br />
based<br />
~1k to ~20k<br />
bps<br />
Access Time Standard: Standard: ~95µs @ N/A N/A Primary At 1M bps At 20k bps<br />
/: Valle Thorø<br />
Side 41 af 43
<strong>Busser</strong><br />
Data<br />
Protection<br />
Collision<br />
Detection<br />
~ 5.4ms<br />
Overdrive:<br />
~0.6ms (at<br />
maximum<br />
speed)<br />
8-bit and<br />
16-bit CRC N/A<br />
Yes,<br />
through<br />
nonmatching<br />
CRC<br />
~95µsFast:<br />
~23µs(at<br />
maximum<br />
speed)<br />
Yes (multimaster<br />
operation<br />
only)<br />
100k bps<br />
PEC Packet<br />
Error Code<br />
(Rev.1.1, 2.0)<br />
Yes (Rev. 2.0<br />
only)<br />
Parasitic<br />
(typical),<br />
Slave supply<br />
V DD<br />
(exception)<br />
V DD only V DD only V DD only V DD only<br />
http://www.maxim-ic.com/appnotes.cfm/appnote_number/3438<br />
N/A<br />
N/A<br />
N/A<br />
N/A<br />
address,<br />
2400 bps:<br />
13.75ms<br />
(short frame),<br />
27.5ms (long<br />
frame)<br />
Even parity,<br />
check sum,<br />
frames<br />
Yes<br />
("medium"<br />
and "strong"<br />
collisions)<br />
Parasitic<br />
and/or local<br />
supply<br />
19µs<br />
(standard) or<br />
39µs<br />
(extended)<br />
from start of<br />
frame to 1st<br />
data bit<br />
15-bit CRC,<br />
frames,<br />
frame<br />
acknowledge<br />
Yes:<br />
CSMA/CD<br />
V DD only,<br />
local or<br />
remote<br />
source<br />
1.7ms from<br />
start of<br />
frame to 1st<br />
data bit<br />
Check sum,<br />
frames<br />
Yes, through<br />
check sum<br />
Parasitic<br />
only<br />
SPI-Allgemeines<br />
Beim SPI-Bus (Serial Peripheral Interface) handelt es sich um einen synchronen 3-Draht Bus mit einer<br />
zusätzlichen Steuerleitung (/SS) Er wurde von Motorola Anfang 1989 entwickelt und bietet einen volldupplex<br />
Datentransfer. Spezifiziert wurde er damals für 3 MBits/s. Heute gibt es für diesen Bus Bausteine mit bis zu 33<br />
Mbits/s. Für jedes /SS-Signal wird ein eigener Portpin am Master benötigt. Ist das /SS-Signal am Slave auf High,<br />
sind die anderen Eingänge des Slave im Tri-State. Der Master selbst benötigt keinen /SS-Pin.<br />
Die Übertragung mit einen SPI-Bus erfolgt folgendermaßen:<br />
1. Der Master setzt den /SS-Pin auf Low. Dies wird mit Hilfe von Software realisiert.<br />
2. Danach wird ein Wert in das Übertragungsregister (SPDAT) geschrieben. Durch das Einschreiben wird die<br />
Übertragung automatisch gestartet und das zu sendende Byte wird über den Portpin MOSI seriell<br />
herausgeschoben synchron zum SPICLK.<br />
Gleichzeitig werden acht Bits über den Portpin MISO empfangen. Somit ist jeder Sendevorgang grundsätzlich<br />
mit einem Empfangsvorgang automatisch verbunden. Will der Master nur einen Wert senden, so ist die<br />
Empfangsinformation irrelevant. Der Slave-Baustein sendet keine Quittung zurück. Es können nun ein weitere<br />
Bytes ohne Zeitverzögerung in gleicher Weise gesendet und empfangen werden.<br />
3. Soll nur ein Wert aus dem Slave gelesen werden, muss dennoch ein Dummywert gesendet werden.<br />
4. Die Übertragung an den Slave wird gestoppt, indem kein weiterer Wert mehr in das SPDAT geschrieben und<br />
das /SS-Pin auf High gelegt wird. Erst danach kann der Master einen anderen Slave ansprechen.<br />
5. Die Verwendung des SPI-Buses ist softwaremäßig einfacher, als die des I²C-Busses, da kein Adressfeld mit<br />
gesendet und ausgewertet werden muss.<br />
Mittels dem Signal /SS wird der Slave aktiviert. Sind mehrere Slaves am SPI-Bus angeschlossen, wird für jeden<br />
Slave ein weiteres /SSx-Signal benötigt. Mit der MOSI-Leitung werden die Daten seriell vom Master zum Slave<br />
gesendet. Mit der MISO-Leitung werden die Daten vom Slave empfangen. Die SPICLK-Leitung sorgt für die<br />
Taktvorgabe vom Master.<br />
Vorteile des SPI gegenüber dem I²C-Bus:<br />
/: Valle Thorø<br />
Side 42 af 43
<strong>Busser</strong><br />
Schneller Datentransfer<br />
Bidirektionale Datentransfer<br />
Einfaches Protokollhandling<br />
Jeder Slave kann mit der maximalen Taktfrequenz betrieben werden, da jeweils nur ein Slave aktiv am SPI-Bus<br />
ist. Beim I²C-Bus bestimmt der langsamste Teilnehmer die Taktfrequenz.<br />
Nachteile des SPI gegenüber dem I²C-Bus:<br />
Für jeden Slave wird eine zusätzliche Steuerleitung (/SS) benötigt.<br />
Es kann keine Überprüfung stattfinden, ob der Slave angeschlossen ist, bzw. die Daten<br />
empfangen hat.<br />
/: Valle Thorø<br />
Side 43 af 43