i2c och SPI på samma bus

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DragonOrb
Inlägg: 381
Blev medlem: 16 oktober 2003, 21:57:19
Ort: Flen

i2c och SPI på samma bus

Inlägg av DragonOrb »

Hej

Håller på med ett projekt.
Det är en PIC18F4550.
Där ska det sitta en Real-time clock (DS1337) som använder i2c bussen.
Sedan ska jag även ha ett minne 25AA256 som använder SPI-bussen.

SPI och I2C använder ju samma pinnar på pic´en. Jag har kollat igenom databladet och kollat på google men inte hittat något.

Kan man köra dom på samma buss ?
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

SPI kräver att man "chipselectar" på en pinne medans i2c har mjukvaruadressering (har jag för mig). Antar att det är där problemet kommer hamna. Om i2c-enheten har en chipselect-pinne borde det inte vara något problem.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

På i²C kan slaven hålla CLK låg under en väntperiod, alltså _kan_ det skita sig vid vissa data men det är mest en teoretisk möjlighet.
DragonOrb
Inlägg: 381
Blev medlem: 16 oktober 2003, 21:57:19
Ort: Flen

Inlägg av DragonOrb »

Vid nogrannare koll av databladet så vill även DS1337 att man skickar adressen till den.

Såhär ser det ut för att skriva till den.

Kod: Markera allt

Start data transfer: A change in the state of the data line, from HIGH to LOW, while the clock is HIGH, defines a
START condition

Acknowledge: Each receiving device, when addressed, is obliged to generate an acknowledge after the reception
of each byte. The master device must generate an extra clock pulse that is associated with this acknowledge bit.

Stop data transfer: A change in the state of the data line, from LOW to HIGH, while the clock line is HIGH,
defines the STOP condition.

"Start > Skicka adressen 1101000 > R/W  > Acknowledge > Data >  Acknowledge > STOP "

Detta är om man kör DS1337´n i slavemode
Att man lyckas med detta är väll inte så stor chans. Jag kör på :)
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

Även? det var ju den som skulle ha det! (i2c)
(minneskretsen ha väl ingen adress? annat än dataadresserna)

Jag är rädd att data du skickar med SPI kommer att råka bli instruktioner till i2c-enheten.

Men nu kom jag på en ide', använd en bufferkrets, typ 74HC244 mellan uC:en och enheterna.
DragonOrb
Inlägg: 381
Blev medlem: 16 oktober 2003, 21:57:19
Ort: Flen

Inlägg av DragonOrb »

Har löst problemet nu:

Från databladet till PIC´en

Kod: Markera allt

SPI-Mode:
 Serial Data Out (SDO)  RC7/RX/DT/SDO
 Serial Data In (SDI)  RB0/AN12/INT0/FLT0/SDI/SDA
 Serial Clock (SCK)  RB1/AN10/INT1/SCK/SCL
I2C använder "Serial DATA In (SDI)" för att prata med UC´n.
Så alla kommandon man skickar till SPI-minnet skickas över "Serial Data Out"
Inget som I2C-bussen känner av.

Jag ska läsa databladen nogrannare i framtiden :lol:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Vanlig fråga.

Och det vanligaste svaret är att det sannolikt kommer att bli problem.

En lösning är att köra I2C via MSSP modulen och bit-banga SPI (eftersom SPI är enklare).

Eller, det självklara alternativt, se till att RTC och EEPROM kör *samma* interface, I2C *eller* SPI.

> I2C använder "Serial DATA In (SDI)" för att prata med UC´n.

Alltså så skickar du data till SPI minnets utgång när du skickar på I2C.
Jag vet inte om minnet tål det, men det kanske är satt i High-Z, när det inte är "valt".

Det är hur som helst ingen vidare bra lösning...
DragonOrb
Inlägg: 381
Blev medlem: 16 oktober 2003, 21:57:19
Ort: Flen

Inlägg av DragonOrb »

Får göra som du säger.

Tack för hjälpen ialafall. :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Får göra som du säger.

Om "du" är jag, vilket av alternativen ?
DragonOrb
Inlägg: 381
Blev medlem: 16 oktober 2003, 21:57:19
Ort: Flen

Inlägg av DragonOrb »

> Om "du" är jag, vilket av alternativen ?

Bit-banga SPI

:)
Skriv svar