31.10.2013 Views

Busser - Valle´s Bedste Hjemmeside.

Busser - Valle´s Bedste Hjemmeside.

Busser - Valle´s Bedste Hjemmeside.

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!