i2c och SPI på samma bus
i2c och SPI på samma bus
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 ?
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 ?
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.
Att man lyckas med detta är väll inte så stor chans. Jag kör på 
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

Har löst problemet nu:
Från databladet till PIC´en
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
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
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

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...
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...