Questions regarding SPI (and I2C)


Closed Thread
Results 1 to 11 of 11
  1. #1
    Join Date
    Apr 2007
    Posts
    53

    Default Questions regarding SPI (and I2C)

    Hello,

    Having never experimented much with SPI (or I2C for that matter), I need to ask a rather basic question - Do SPI and I2C require the use of an accurate (eg. crystal) oscillator, or do they work ok with standard internal oscillators?

    What are the pros / cons of SPI vs. I2C?

    Regards,

    Andy

  2. #2
    Join Date
    Nov 2005
    Location
    Bombay, India
    Posts
    948


    Did you find this post helpful? Yes | No

    Default Re: Questions regarding SPI (and I2C)

    Both can work with the standard internal oscillators without any fuss.

    I2C is 2 wires, SPI is 4 wire.

  3. #3
    Join Date
    Apr 2007
    Posts
    53


    Did you find this post helpful? Yes | No

    Default Re: Questions regarding SPI (and I2C)

    Thanks Jerson.

    Andy

  4. #4
    Join Date
    Apr 2011
    Location
    Welches, Oregon
    Posts
    198


    Did you find this post helpful? Yes | No

    Default Re: Questions regarding SPI (and I2C)

    I am not very familiar in using SPI, nor I2C for that matter, but as it is on topic and may help both the OP and myself...

    Is it correct that I2C must be initiated by the master always, so that the slave device cannot initiate a communication? Say, by example, an I2C clock cannot (by I2C protocol alone) initiate an interrupt (like by the second); rather, must wait for the master unit to read data and determine for itself that the second register is updated? Of course an interrupt line may be used - independent of the protocol - if one is available...

    SPI also has this interrupt built into the protocol and one of the required lines may signal that new data is available, yes? Therefore SPI may be more suitable for "active" devices? As our clock example above, the SPI clock (or other SPI device) may signal an updated second register so that the master unit may service this as an interrupt and not bother itself until notified by the slave.

  5. #5
    Join Date
    Nov 2005
    Location
    Bombay, India
    Posts
    948


    Did you find this post helpful? Yes | No

    Default Re: Questions regarding SPI (and I2C)

    I2C has 2 variants I2Cmaster and I2Cslave. The master always is in command and the slave responds to the master initiated query/commands.

    SPI usually has 4 wires MISO, MOSI, SCLK, CS (Master In Slave Out, Master out slave In, serial clock, chip select). Some devices may signal availability of data on the MISO line when the CS is held inactive. That is implementation specific to that device.

    An interrupt line has no relation to the 2 protocols except you might be able to enable / disable the feature via the communications by setting of some register

  6. #6
    Join Date
    Apr 2007
    Posts
    53


    Did you find this post helpful? Yes | No

    Default Re: Questions regarding SPI (and I2C)

    I have another question - do SPI and I2C (using either software or MSSP) still work ok when interrupts are also in use?

    Andy

  7. #7
    Join Date
    Aug 2003
    Posts
    985


    Did you find this post helpful? Yes | No

    Default Re: Questions regarding SPI (and I2C)

    Yes, but there could be error if interrupt happens during the communication.
    I found this could occur with LCDOUT when interrupt occurs,
    but if you are always updating, it will correct itself next time.

    Some clock chips have a pulse per second output that could be used to
    interrupt the chip independently of the I2C communication.

  8. #8
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default Re: Questions regarding SPI (and I2C)

    I2C is by nature a Multi-Master Bus.
    Any device on the bus can be the "Master".
    And the same device can also be a "Slave", it just needs to switch back and forth between the modes.
    There's also some collision detection / arbitration to do, but it's definitely possible.

    Most manufactured I2C devices like EEPROM or RTC's are only Slaves.
    But a PIC can easily be both.

    SPI can only have one Master, and it is always the Master.
    SPI lines are "Driven" instead of open collector with pull-ups, and two Master's can't "Drive" the lines at the same time.

    Interrupts will not affect the data transmission from a Master.
    But it can ruin the response times of a Slave if not using "Clock Stretching".

    Slaves must be ready and waiting to do the bidding of their Master.

    ---

    Interrupts will not affect LCDOUT either, unless your ISR is misbehaving.
    DT

  9. #9
    Join Date
    Apr 2007
    Posts
    53


    Did you find this post helpful? Yes | No

    Default Re: Questions regarding SPI (and I2C)

    Hi Darrel,

    Thank you for your detailed explanation. Can you elaborate on "Clock Stretching" please?

    Are other interrupts only an issue when using bit-banged SPI or are there still problems when using the (M)SSP module?

    Sorry for all the questions! I am trying to do my homework as best I can before embarking on my project. It's better to ask dumb questions that to make dumb mistakes....

    Andy

  10. #10
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default Re: Questions regarding SPI (and I2C)

    Quote Originally Posted by Andy Wood View Post
    Can you elaborate on "Clock Stretching" please?
    I'll let Wikipedia explain that ...
    http://en.wikipedia.org/wiki/I%C2%B2...hing_using_SCL

    In PBP when using I2CREAD/I2CWRITE, the Master would use ... DEFINE I2C_HOLD 1 ... to respond properly to Clock Stretching.
    In I2C Slave mode, the MSSP module can automatically hold the SCL line low after each byte, which gives your program time to respond.

    Are other interrupts only an issue when using bit-banged SPI or are there still problems when using the (M)SSP module?
    Interrupts can only be a problem on SPI Slaves, which you're not going to bit-bang anyhow.
    The Master dictates when the Slave needs to send data.
    If the Slave's off in an interrupt, it may not be ready to send anything when the Master cracks it's whip.

    The MSSP will generate interrupts to help the Slave be ready, and on an 18F that can be a High Priority interrupt that interrupts any Low priority interrupts which may be running.
    But on a 16F, you can't interrupt an interrupt.

    SPI does not have "Clock Stretching".
    Be ready to send ... or lose data.
    Typically, the SPI Master will have to wait long enough to insure the Slave had time to prepare.

    Yes, you can do things like having a separate line to indicate when the SPI Slave is ready.
    But technically, that would no longer be called SPI.
    DT

  11. #11
    Join Date
    Apr 2007
    Posts
    53


    Did you find this post helpful? Yes | No

    Default Re: Questions regarding SPI (and I2C)

    Thanks again Darrel.

Similar Threads

  1. Beginner I2C Questions
    By rocket_troy in forum Serial
    Replies: 13
    Last Post: - 23rd May 2013, 02:08
  2. LTC2492 Code questions/16bit A/D, SPI
    By BUBBA2 in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 24th January 2011, 20:01
  3. I2C howto questions
    By comwarrior in forum mel PIC BASIC Pro
    Replies: 8
    Last Post: - 27th May 2010, 18:39
  4. i2c PBP questions
    By TimV in forum General
    Replies: 14
    Last Post: - 5th February 2007, 17:58
  5. Still new to PicBasic - i2c questions
    By cometboy in forum mel PIC BASIC
    Replies: 4
    Last Post: - 13th November 2006, 18:27

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts