From: Joerg on
Tilmann Reh wrote:
> don schrieb:
>
>> The correct way to RESET the I2C buss, is to do a repeat-START, then a STOP.
>
> Please note that you simply can't apply a (repeated) start condition
> when a device continuously holds SDA low. In such cases, you first have
> to provide SCL pulses until SDA gets high again, then do start-stop.
>

_If_ it lets go at all. I've seen cases where it didn't and a power
cycle was required :-(

--
Regards, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
From: Paul Carpenter on
In article <7tedm4Fam1U1(a)mid.individual.net>, invalid(a)invalid.invalid
says...
> Tilmann Reh wrote:
> > don schrieb:
> >
> >> The correct way to RESET the I2C buss, is to do a repeat-START, then a STOP.
> >
> > Please note that you simply can't apply a (repeated) start condition
> > when a device continuously holds SDA low. In such cases, you first have
> > to provide SCL pulses until SDA gets high again, then do start-stop.
> >
>
> _If_ it lets go at all. I've seen cases where it didn't and a power
> cycle was required :-(

Especially if the slave device is doing a clock stretch, holding SCL low.


--
Paul Carpenter | paul(a)pcserviceselectronics.co.uk
<http://www.pcserviceselectronics.co.uk/> PC Services
<http://www.pcserviceselectronics.co.uk/fonts/> Timing Diagram Font
<http://www.gnuh8.org.uk/> GNU H8 - compiler & Renesas H8/H8S/H8 Tiny
<http://www.badweb.org.uk/> For those web sites you hate
From: Joerg on
Paul Carpenter wrote:
> In article <7tedm4Fam1U1(a)mid.individual.net>, invalid(a)invalid.invalid
> says...
>> Tilmann Reh wrote:
>>> don schrieb:
>>>
>>>> The correct way to RESET the I2C buss, is to do a repeat-START, then a STOP.
>>> Please note that you simply can't apply a (repeated) start condition
>>> when a device continuously holds SDA low. In such cases, you first have
>>> to provide SCL pulses until SDA gets high again, then do start-stop.
>>>
>> _If_ it lets go at all. I've seen cases where it didn't and a power
>> cycle was required :-(
>
> Especially if the slave device is doing a clock stretch, holding SCL low.
>

Sort of the eternal stretch :-)

I like SPI a lot more although I2C does have the advantage of being able
to hang it all onto the same serial bus. But that can at the same time
cause hang-ups while SPI never hung on me.

--
Regards, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
From: Tilmann Reh on
Paul Carpenter schrieb:

>> >> The correct way to RESET the I2C buss, is to do a repeat-START, then a STOP.
>> >
>> > Please note that you simply can't apply a (repeated) start condition
>> > when a device continuously holds SDA low. In such cases, you first have
>> > to provide SCL pulses until SDA gets high again, then do start-stop.
>> >
>>
>> _If_ it lets go at all. I've seen cases where it didn't and a power
>> cycle was required :-(
>
> Especially if the slave device is doing a clock stretch, holding SCL low.

I have always carefully selected only such I2C slaves that don't do
clock stretching... :-)

Tilmann
From: Joe G (Home) on

"Joe G (Home)" <joe.g(a)optusnet.com.au> wrote in message
news:4b6fecc1$0$3003$afc38c87(a)news.optusnet.com.au...
> Hi All,
>
> SPI is more simplistic in internal IC hardware design than I2c. If the
> SPI data bus receive garbage (spikes or noise) you can pull the chip
> select high and start clocking the data in/out again.
>
> SPI has
> /CS chip select
> Clock
> Data out
> Data in
>
> I2C has
> Clock
> Data
>
> Question
> ========
> If an I2C bus receives garbage, how does one tell a I2C receiver to
> "reset" and start again, as there is only a clock and data line.
>
> Thanks in Advance.
>
> Joe
>
>
Thanks all for your comments.

Joe