Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Thread

initializing I2C problem

initializing I2C problem

2005-04-12 by neptunus1000

Hello,

I use an olimex evaboard (LPC2129) and crossStudio.
I would like to use the I2C interface but it won't work.
ARM should be the master. First I tried to code it on my own with the 
datasheet. Then I found some example code on the group.

The methode InitI2C() is working fine. Only the methode 
SendSlaveAdress(unsigned char Addr_S) is working not well. At "while
(I2STAT != 0x08); // Wait for start to be completed" my code stops 
and is waiting for de SI bit to set. This is never happening. I don't 
understand why it is already stopping here.

I have nothing connected to the I2C bus, I mean that there is only 
the EEPROM. Which is standard on the evaboard. I'm using 0xA0 address 
for writing and 0xA1 for reading. But it can only by a matter if the 
code can past this line of code "while(I2STAT != 0x08);"

For who have an interest this is the link the de pcb plan. 
  
http://microcontrollershop.com/Images/lpc-e2124-sch.gif?
osCsid=3e8281154ae1883323bdf695bf87d276 
	

can anybody help?
Roy

#define STA  0x20
#define SIC  0x08
#define SI   0x08
#define STO  0x10
#define STAC 0x20
#define AA   0x04

#include <__cross_studio_io.h>

class I2C{
  private:
    
  public:
    I2C(void);
    void delay(int);
    void InitI2C(void);
    void SendSlaveAdress(unsigned char);
    unsigned char ReadOnI2C(void);
    void WriteOnI2C(unsigned char);
    void StopI2C(void);
};

I2C::I2C(void){
  
}
void I2C::delay(int d){     
  for(; d; --d){
    asm volatile ("nop");
  }
}

void I2C::InitI2C(void) {
  I2CONCLR = 0xFF;
  PINSEL0  |= 0x50;   //  Set pinouts as scl and sda
  I2SCLL   =60;	      //19 speed at 100Khz for a VPB Clock Divider  = 
4 at 14 MHz
  I2SCLH   =60;
  // I2SCLL=60;	      //speed at 375Khz for a VPB Clock Divider  = 1
  // I2SCLH=70;       // Pierre Seguin's origional values.
  I2CONSET = 0x40;    //Active Master Mode on I2C bus
}

void I2C::SendSlaveAdress(unsigned char Addr_S){
    unsigned char r;
    I2CONCLR = 0xFF;             // clear I2C - included if User 
forgot to "StopI2C()"
                                 // else this function would hang.
    I2CONSET = 0x40;             // Active Master Mode on I2C bus
    if((Addr_S & 0x01))          // test if it's reading
       I2CONSET = STA | AA;      // set STA - allow master to 
acknowlege slave;
    else
       I2CONSET = STA;           // set STA dont allow acknowledges;
    r = I2STAT; 
    while(I2STAT != 0x08) ;        // Wait for start to be completed
    I2DAT    = Addr_S;           // Charge slave Address
    I2CONCLR = SIC | STAC;       // Clear i2c interrupt bit to send 
the data
    r = I2STAT; 
    while( ! ( I2CONSET & SI)) ; // wait till status available
    r = I2STAT;                    // read Status. See standard error 
codes pdf (link in manual).
    if(!(Addr_S & 0x01)) {       // if we are doing a write
        if (r != 0x18) {             // look for "SLA+W has been 
transmitted; ACK has been received"
             if ( r==0x20 )          // check for "SLA+W has been 
transmitted; NOT ACK has been received"
                debug_printf("no acknowlege - probably no device 
there.\n"); // no acknowlege - probably no device there. Return a 1 
in longjmp
                debug_printf("error code: %x\n", r);    // other 
error - return status code in longjmp
        }
     } else {
        if (r != 0x40) {             // look for "SLA+R has been 
transmitted; ACK has been received"
             if ( r==0x48 )          // check for "SLA+R has been 
transmitted; NOT ACK has been received"
                debug_printf("no acknowlege - probably no device 
there.\n"); // no acknowlege - probably no device there. Return a 1 
in longjmp
                debug_printf("error code: %x\n", r);    // other 
error - return status code in longjmp
        }
     }
     debug_printf("I2STAT OKÉ: %x\n", r);
}

unsigned char I2C::ReadOnI2C(void) {
    unsigned char r;
    I2CONCLR = SIC;                  // clear SIC;
    while( ! (I2CONSET & 0x8));      // wait till status available
    r=I2STAT;                        // check for error
    if (r != 0x50){                  // look for "Data byte has been 
received; ACK has been returned"
       debug_printf("Read fail error code: %x\n", r);          // 
read fail
    }
    return I2DAT;
}

void I2C::WriteOnI2C(unsigned char Data) {
    unsigned char r;
    I2DAT    = Data;                // Charge Data
    I2CONCLR = 0x8;                 // SIC; Clear i2c interrupt bit 
to send the data
    while( ! (I2CONSET & 0x8));     // wait till status available
    r = I2STAT;
    if (r != 0x28){                 // look for "Data byte in S1DAT 
has been transmitted; ACK has been received"
       debug_printf("Write fail error code: %x\n", r);         // 
write fail
    }
}

void I2C::StopI2C(void){
    I2CONCLR = SIC;
    I2CONSET = STO;
    while((I2CONSET&STO)) ;         // wait for Stopped bus I2C
}

Re: [lpc2000] initializing I2C problem

2005-04-13 by Aalt Lokhorst

Hello Roy,

Is there a pull-up on the SCL line? I can't find it in the schematic 
drawing but probably I missed it.

As far as I know both lines need a pull-up because SDA and SCL lines are 
'open-drain' outputs.

Best Regards,
Aalt

-- 
==============================
Aalt Lokhorst
Schut Geometrische Meettechniek bv
Duinkerkenstraat 21
9723 BN Groningen
P.O. Box 5225
9700 GE Groningen
The Netherlands
Tel: +31-50-5877877
Fax: +31-50-5877899
E-mail: Lokhorst@...
==============================

neptunus1000 wrote:
Show quoted textHide quoted text
> 
> Hello,
> 
> I use an olimex evaboard (LPC2129) and crossStudio.
> I would like to use the I2C interface but it won't work.
> ARM should be the master. First I tried to code it on my own with the
> datasheet. Then I found some example code on the group.
> 
> The methode InitI2C() is working fine. Only the methode
> SendSlaveAdress(unsigned char Addr_S) is working not well. At "while
> (I2STAT != 0x08); // Wait for start to be completed" my code stops
> and is waiting for de SI bit to set. This is never happening. I don't
> understand why it is already stopping here.
> 
> I have nothing connected to the I2C bus, I mean that there is only
> the EEPROM. Which is standard on the evaboard. I'm using 0xA0 address
> for writing and 0xA1 for reading. But it can only by a matter if the
> code can past this line of code "while(I2STAT != 0x08);"
> 
> For who have an interest this is the link the de pcb plan.
>  
> http://microcontrollershop.com/Images/lpc-e2124-sch.gif?
> osCsid=3e8281154ae1883323bdf695bf87d276

Re: initializing I2C problem

2005-04-13 by neptunus1000

Hello Aalt,

with on both lines a pull-up the code is still not working oke. 
Please help my.

--- In lpc2000@yahoogroups.com, "Aalt Lokhorst" <lokhorst@s...> wrote:
> Hello Roy,
> 
> Is there a pull-up on the SCL line? I can't find it in the 
schematic 
> drawing but probably I missed it.
> 
> As far as I know both lines need a pull-up because SDA and SCL 
lines are 
> 'open-drain' outputs.
> 
> Best Regards,
> Aalt
> 
> -- 
> ==============================
> Aalt Lokhorst
> Schut Geometrische Meettechniek bv
> Duinkerkenstraat 21
> 9723 BN Groningen
> P.O. Box 5225
> 9700 GE Groningen
> The Netherlands
> Tel: +31-50-5877877
> Fax: +31-50-5877899
> E-mail: Lokhorst@S...
> ==============================
> 
> neptunus1000 wrote:
> > 
> > Hello,
> > 
> > I use an olimex evaboard (LPC2129) and crossStudio.
> > I would like to use the I2C interface but it won't work.
> > ARM should be the master. First I tried to code it on my own with 
the
> > datasheet. Then I found some example code on the group.
> > 
> > The methode InitI2C() is working fine. Only the methode
> > SendSlaveAdress(unsigned char Addr_S) is working not well. 
At "while
> > (I2STAT != 0x08); // Wait for start to be completed" my code stops
> > and is waiting for de SI bit to set. This is never happening. I 
don't
> > understand why it is already stopping here.
> > 
> > I have nothing connected to the I2C bus, I mean that there is only
> > the EEPROM. Which is standard on the evaboard. I'm using 0xA0 
address
> > for writing and 0xA1 for reading. But it can only by a matter if 
the
Show quoted textHide quoted text
> > code can past this line of code "while(I2STAT != 0x08);"
> > 
> > For who have an interest this is the link the de pcb plan.
> >  
> > http://microcontrollershop.com/Images/lpc-e2124-sch.gif?
> > osCsid=3e8281154ae1883323bdf695bf87d276

Re: [lpc2000] Re: initializing I2C problem

2005-04-14 by Aalt Lokhorst

Hello Roy,

Was there indeed a pull-up resistor missing on the Olimex board?

If you can measure low and high levels on both I2C lines now then I 
expect that the hardware is fine. If there is also a I2C device on the 
bus and it is still not working then i assume it is a software problem.

In the past I used I2C on a 8051 with some 'bit-bang' routines. Until 
now I didn't use the I2C of the ARM. This will change in the next few 
weeks but for the moment I can't help you.

In the files section of the yahoo group are some examples. If the 
pull-up indeed was missing in the hardware then you probably spend a lot 
  of time with software debugging without any change to succeed.
Might be the moment to start debugging again, use an oscilloscope if you 
have it and study the signals to see where it fails.

Best Regards
Aalt,


-- 
==============================
Aalt Lokhorst
Schut Geometrische Meettechniek bv
Duinkerkenstraat 21
9723 BN Groningen
P.O. Box 5225
9700 GE Groningen
The Netherlands
Tel: +31-50-5877877
Fax: +31-50-5877899
E-mail: Lokhorst@...
==============================


neptunus1000 wrote:
Show quoted textHide quoted text
> 
> Hello Aalt,
> 
> with on both lines a pull-up the code is still not working oke.
> Please help my.
> 
> --- In lpc2000@yahoogroups.com, "Aalt Lokhorst" <lokhorst@s...> wrote:
>  > Hello Roy,
>  >
>  > Is there a pull-up on the SCL line? I can't find it in the
> schematic
>  > drawing but probably I missed it.
>  >
>  > As far as I know both lines need a pull-up because SDA and SCL
> lines are
>  > 'open-drain' outputs.
>  >
>  > Best Regards,
>  > Aalt
>  >
>  > --
>  > ==============================
>  > Aalt Lokhorst
>  > Schut Geometrische Meettechniek bv
>  > Duinkerkenstraat 21
>  > 9723 BN Groningen
>  > P.O. Box 5225
>  > 9700 GE Groningen
>  > The Netherlands
>  > Tel: +31-50-5877877
>  > Fax: +31-50-5877899
>  > E-mail: Lokhorst@S...
>  > ==============================

LP2000

2005-04-14 by SANDEEP BAKSHI

Hi All,
Where can I get information about how write code for LPC2XXX family.
I am new in this field and I am have Keil software.


Regards,

Sandeep
The Netherlands

_________________________________________________________________
Talk with your online friends with MSN Messenger http://messenger.msn.nl/

Re: initializing I2C problem

2005-04-14 by neptunus1000

Hello,

"Was there indeed a pull-up resistor missing on the Olimex board?" 
YES there was one missing.

I put for the testing two pull-up on the bus of 4,7K and connected to 
the 3.3 Volt. When I'm debugging the program. The program is still 
hanging on the while(I2STAT != 0x08);. When I measure the both I2C 
lines with pull-up, the lines have 3.3 Volt. The program is not 
working. If I disconnect the pull-up resistor the SDA line is 3.3 
Volt and the SCL line is 0 Volt. This is oke if I look in the schema 
of the Olimex board. I really don't understand why it is not working.

Of course I can build some code for 'bit-bang', but if the uC has a 
I2C bus. Then it is ugly to build a 'bit-bang' routine.

I measured with a FLUKE 123 scope meter.

Best Regards
Roy

--- In lpc2000@yahoogroups.com, "Aalt Lokhorst" <lokhorst@s...> wrote:
> Hello Roy,
> 
> Was there indeed a pull-up resistor missing on the Olimex board?
> 
> If you can measure low and high levels on both I2C lines now then I 
> expect that the hardware is fine. If there is also a I2C device on 
the 
> bus and it is still not working then i assume it is a software 
problem.
> 
> In the past I used I2C on a 8051 with some 'bit-bang' routines. 
Until 
> now I didn't use the I2C of the ARM. This will change in the next 
few 
> weeks but for the moment I can't help you.
> 
> In the files section of the yahoo group are some examples. If the 
> pull-up indeed was missing in the hardware then you probably spend 
a lot 
>   of time with software debugging without any change to succeed.
> Might be the moment to start debugging again, use an oscilloscope 
if you 
> have it and study the signals to see where it fails.
> 
> Best Regards
> Aalt,
> 
> 
> -- 
> ==============================
> Aalt Lokhorst
> Schut Geometrische Meettechniek bv
> Duinkerkenstraat 21
> 9723 BN Groningen
> P.O. Box 5225
> 9700 GE Groningen
> The Netherlands
> Tel: +31-50-5877877
> Fax: +31-50-5877899
> E-mail: Lokhorst@S...
> ==============================
> 
> 
> neptunus1000 wrote:
> > 
> > Hello Aalt,
> > 
> > with on both lines a pull-up the code is still not working oke.
> > Please help my.
> > 
> > --- In lpc2000@yahoogroups.com, "Aalt Lokhorst" <lokhorst@s...> 
wrote:
Show quoted textHide quoted text
> >  > Hello Roy,
> >  >
> >  > Is there a pull-up on the SCL line? I can't find it in the
> > schematic
> >  > drawing but probably I missed it.
> >  >
> >  > As far as I know both lines need a pull-up because SDA and SCL
> > lines are
> >  > 'open-drain' outputs.
> >  >
> >  > Best Regards,
> >  > Aalt
> >  >
> >  > --
> >  > ==============================
> >  > Aalt Lokhorst
> >  > Schut Geometrische Meettechniek bv
> >  > Duinkerkenstraat 21
> >  > 9723 BN Groningen
> >  > P.O. Box 5225
> >  > 9700 GE Groningen
> >  > The Netherlands
> >  > Tel: +31-50-5877877
> >  > Fax: +31-50-5877899
> >  > E-mail: Lokhorst@S...
> >  > ==============================

Re: LP2000

2005-04-14 by Ken Wada

If you have Keil...there is no real need to write assembly language 
code.

However, if you want to write assembly language code: You can use the 
following resources:

1.  Keil compiler Help, (click HELP->uVision Help)...> the ARM 
assembler help is in this area.
2.  Go out and purchase the "ARM Architecture Reference Manual"

Actually, if you are doing any system programming, using any ARM chip, 
then you really ought to do #2 anyway!

Ken Wada

--- In lpc2000@yahoogroups.com, "SANDEEP BAKSHI" <bakshi_sandeep@h...> 
wrote:
> 
> Hi All,
> Where can I get information about how write code for LPC2XXX family.
> I am new in this field and I am have Keil software.
> 
> 
> Regards,
> 
> Sandeep
> The Netherlands
> 
> _________________________________________________________________
> Talk with your online friends with MSN Messenger http://messenger.
msn.nl/

Re: initializing I2C problem

2005-04-15 by neptunus1000

Hello everybody,

is there realy nobody how had ths problem before. Or is there realy 
nobody how now's a solution.

Thanks Roy

--- In lpc2000@yahoogroups.com, "neptunus1000" <roykrikke@h...> wrote:
> 
> Hello,
> 
> "Was there indeed a pull-up resistor missing on the Olimex board?" 
> YES there was one missing.
> 
> I put for the testing two pull-up on the bus of 4,7K and connected 
to 
> the 3.3 Volt. When I'm debugging the program. The program is still 
> hanging on the while(I2STAT != 0x08);. When I measure the both I2C 
> lines with pull-up, the lines have 3.3 Volt. The program is not 
> working. If I disconnect the pull-up resistor the SDA line is 3.3 
> Volt and the SCL line is 0 Volt. This is oke if I look in the 
schema 
> of the Olimex board. I really don't understand why it is not 
working.
> 
> Of course I can build some code for 'bit-bang', but if the uC has a 
> I2C bus. Then it is ugly to build a 'bit-bang' routine.
> 
> I measured with a FLUKE 123 scope meter.
> 
> Best Regards
> Roy
> 
> --- In lpc2000@yahoogroups.com, "Aalt Lokhorst" <lokhorst@s...> 
wrote:
> > Hello Roy,
> > 
> > Was there indeed a pull-up resistor missing on the Olimex board?
> > 
> > If you can measure low and high levels on both I2C lines now then 
I 
> > expect that the hardware is fine. If there is also a I2C device 
on 
> the 
> > bus and it is still not working then i assume it is a software 
> problem.
> > 
> > In the past I used I2C on a 8051 with some 'bit-bang' routines. 
> Until 
> > now I didn't use the I2C of the ARM. This will change in the next 
> few 
> > weeks but for the moment I can't help you.
> > 
> > In the files section of the yahoo group are some examples. If the 
> > pull-up indeed was missing in the hardware then you probably 
spend 
> a lot 
> >   of time with software debugging without any change to succeed.
> > Might be the moment to start debugging again, use an oscilloscope 
> if you 
> > have it and study the signals to see where it fails.
> > 
> > Best Regards
> > Aalt,
> > 
> > 
> > -- 
> > ==============================
> > Aalt Lokhorst
> > Schut Geometrische Meettechniek bv
> > Duinkerkenstraat 21
> > 9723 BN Groningen
> > P.O. Box 5225
> > 9700 GE Groningen
> > The Netherlands
> > Tel: +31-50-5877877
> > Fax: +31-50-5877899
> > E-mail: Lokhorst@S...
> > ==============================
> > 
> > 
> > neptunus1000 wrote:
> > > 
> > > Hello Aalt,
> > > 
> > > with on both lines a pull-up the code is still not working oke.
> > > Please help my.
> > > 
> > > --- In lpc2000@yahoogroups.com, "Aalt Lokhorst" <lokhorst@s...> 
> wrote:
> > >  > Hello Roy,
> > >  >
> > >  > Is there a pull-up on the SCL line? I can't find it in the
> > > schematic
> > >  > drawing but probably I missed it.
> > >  >
> > >  > As far as I know both lines need a pull-up because SDA and 
SCL
Show quoted textHide quoted text
> > > lines are
> > >  > 'open-drain' outputs.
> > >  >
> > >  > Best Regards,
> > >  > Aalt
> > >  >
> > >  > --
> > >  > ==============================
> > >  > Aalt Lokhorst
> > >  > Schut Geometrische Meettechniek bv
> > >  > Duinkerkenstraat 21
> > >  > 9723 BN Groningen
> > >  > P.O. Box 5225
> > >  > 9700 GE Groningen
> > >  > The Netherlands
> > >  > Tel: +31-50-5877877
> > >  > Fax: +31-50-5877899
> > >  > E-mail: Lokhorst@S...
> > >  > ==============================

Re: initializing I2C problem

2005-04-15 by ateichtmann

Hi,

> At "while (I2STAT != 0x08); my code stops 

...check what Status Code is in I2STAT (instead of 0x08), maybe this 
gives you a hint to find the problem.

Description of i2c status byte can be found in table 3 to 6 in:
http://www.semiconductors.philips.com/acrobat/various/8XC552_562OVERVIE
W_2.pdf

Regards
Arvid

Re: initializing I2C problem

2005-04-15 by semetex01

--- In lpc2000@yahoogroups.com, "neptunus1000" <roykrikke@h...> wrote:
> 
> Hello everybody,
> 
> is there realy nobody how had ths problem before. Or is there realy 
> nobody how now's a solution.
> 
> Thanks Roy
> 
> --- In lpc2000@yahoogroups.com, "neptunus1000" <roykrikke@h...>
wrote:
> > 
> > Hello,
> > 
> > "Was there indeed a pull-up resistor missing on the Olimex
board?" 
> > YES there was one missing.
> > 
> > I put for the testing two pull-up on the bus of 4,7K and
connected 
> to 
> > the 3.3 Volt. When I'm debugging the program. The program is
still 
> > hanging on the while(I2STAT != 0x08);. When I measure the both
I2C 
> > lines with pull-up, the lines have 3.3 Volt. The program is not 
> > working. If I disconnect the pull-up resistor the SDA line is 3.3 
> > Volt and the SCL line is 0 Volt. This is oke if I look in the 
> schema 
> > of the Olimex board. I really don't understand why it is not 
> working.
> > 
> > Of course I can build some code for 'bit-bang', but if the uC has
a 
> > I2C bus. Then it is ugly to build a 'bit-bang' routine.
> > 
> > I measured with a FLUKE 123 scope meter.
> > 
> > Best Regards
> > Roy
> > 
> > --- In lpc2000@yahoogroups.com, "Aalt Lokhorst" <lokhorst@s...> 
> wrote:
> > > Hello Roy,
> > > 
> > > Was there indeed a pull-up resistor missing on the Olimex board?
> > > 
> > > If you can measure low and high levels on both I2C lines now
then 
> I 
> > > expect that the hardware is fine. If there is also a I2C device 
> on 
> > the 
> > > bus and it is still not working then i assume it is a software 
> > problem.
> > > 
> > > In the past I used I2C on a 8051 with some 'bit-bang' routines. 
> > Until 
> > > now I didn't use the I2C of the ARM. This will change in the
next 
> > few 
> > > weeks but for the moment I can't help you.
> > > 
> > > In the files section of the yahoo group are some examples. If
the 
> > > pull-up indeed was missing in the hardware then you probably 
> spend 
> > a lot 
> > >   of time with software debugging without any change to succeed.
> > > Might be the moment to start debugging again, use an
oscilloscope 
> > if you 
> > > have it and study the signals to see where it fails.
> > > 
> > > Best Regards
> > > Aalt,
> > > 
> > > 
> > > -- 
> > > ==============================
> > > Aalt Lokhorst
> > > Schut Geometrische Meettechniek bv
> > > Duinkerkenstraat 21
> > > 9723 BN Groningen
> > > P.O. Box 5225
> > > 9700 GE Groningen
> > > The Netherlands
> > > Tel: +31-50-5877877
> > > Fax: +31-50-5877899
> > > E-mail: Lokhorst@S...
> > > ==============================
> > > 
> > > 
> > > neptunus1000 wrote:
> > > > 
> > > > Hello Aalt,
> > > > 
> > > > with on both lines a pull-up the code is still not working
oke.
> > > > Please help my.
> > > > 
> > > > --- In lpc2000@yahoogroups.com, "Aalt Lokhorst"
<lokhorst@s...> 
> > wrote:
> > > >  > Hello Roy,
> > > >  >
> > > >  > Is there a pull-up on the SCL line? I can't find it in the
> > > > schematic
> > > >  > drawing but probably I missed it.
> > > >  >
> > > >  > As far as I know both lines need a pull-up because SDA and 
> SCL
> > > > lines are
> > > >  > 'open-drain' outputs.
> > > >  >
> > > >  > Best Regards,
> > > >  > Aalt
> > > >  >
> > > >  > --
> > > >  > ==============================
> > > >  > Aalt Lokhorst
> > > >  > Schut Geometrische Meettechniek bv
> > > >  > Duinkerkenstraat 21
> > > >  > 9723 BN Groningen
> > > >  > P.O. Box 5225
> > > >  > 9700 GE Groningen
> > > >  > The Netherlands
> > > >  > Tel: +31-50-5877877
> > > >  > Fax: +31-50-5877899
> > > >  > E-mail: Lokhorst@S...
> > > >  > ==============================

Roy,

I had this problem (I2C start not generated and I2C status at 0xf8
forever) on an Olimex board (LPC-WEB 2124) and a pull-up on SCL fixed
it.

H.A.

Re: initializing I2C problem

2005-04-15 by jim_e_dallas

Some erroneous I2C data on the bus can cause this condition. If an 
I2C node sends a start condition with out a valid stop, then the I2C 
interface will think the bus is busy and never generate the start 
condition. When I write an I2C interface, I generally use a "switch
(I2CSTAT)" with a case for each of the possible I2CSTAT states. Then 
I add a bus free timeout counter and a message length timeout 
counter. The Bus free timeout is for the condition mentioned above 
and starts a timer when the start condition is requested and is reset 
when the start condition has been transmitted. If too long a time 
goes by without a start condition being sent, then the timeout would 
reset the I2C interface so it no longer thinks the bus is busy. The 
message length timeout also helps recover from the condition where a 
master does not send out enough SCL clocks to complete a slave 
transmission. If the slave send out a '0' and no more clocks are 
received a "stuck bus" can occur. A message length timeout is started 
when a start condition is received and reset when a stop condition is 
received. If the stop condition is not received, the the I2C 
interface is reset after a period of time and releases the bus from 
it's "stuck" condition. These timeouts may vary depending on the 
application.

Regards,

Jim E.

--- In lpc2000@yahoogroups.com, "semetex01" <info.semetex@s...> wrote:
> 
> --- In lpc2000@yahoogroups.com, "neptunus1000" <roykrikke@h...> 
wrote:
> > 
> > Hello everybody,
> > 
> > is there realy nobody how had ths problem before. Or is there 
realy 
> > nobody how now's a solution.
> > 
> > Thanks Roy
> > 
> > --- In lpc2000@yahoogroups.com, "neptunus1000" <roykrikke@h...>
> wrote:
> > > 
> > > Hello,
> > > 
> > > "Was there indeed a pull-up resistor missing on the Olimex
> board?" 
> > > YES there was one missing.
> > > 
> > > I put for the testing two pull-up on the bus of 4,7K and
> connected 
> > to 
> > > the 3.3 Volt. When I'm debugging the program. The program is
> still 
> > > hanging on the while(I2STAT != 0x08);. When I measure the both
> I2C 
> > > lines with pull-up, the lines have 3.3 Volt. The program is not 
> > > working. If I disconnect the pull-up resistor the SDA line is 
3.3 
> > > Volt and the SCL line is 0 Volt. This is oke if I look in the 
> > schema 
> > > of the Olimex board. I really don't understand why it is not 
> > working.
> > > 
> > > Of course I can build some code for 'bit-bang', but if the uC 
has
> a 
> > > I2C bus. Then it is ugly to build a 'bit-bang' routine.
> > > 
> > > I measured with a FLUKE 123 scope meter.
> > > 
> > > Best Regards
> > > Roy
> > > 
> > > --- In lpc2000@yahoogroups.com, "Aalt Lokhorst" <lokhorst@s...> 
> > wrote:
> > > > Hello Roy,
> > > > 
> > > > Was there indeed a pull-up resistor missing on the Olimex 
board?
> > > > 
> > > > If you can measure low and high levels on both I2C lines now
> then 
> > I 
> > > > expect that the hardware is fine. If there is also a I2C 
device 
> > on 
> > > the 
> > > > bus and it is still not working then i assume it is a 
software 
> > > problem.
> > > > 
> > > > In the past I used I2C on a 8051 with some 'bit-bang' 
routines. 
> > > Until 
> > > > now I didn't use the I2C of the ARM. This will change in the
> next 
> > > few 
> > > > weeks but for the moment I can't help you.
> > > > 
> > > > In the files section of the yahoo group are some examples. If
> the 
> > > > pull-up indeed was missing in the hardware then you probably 
> > spend 
> > > a lot 
> > > >   of time with software debugging without any change to 
succeed.
> > > > Might be the moment to start debugging again, use an
> oscilloscope 
> > > if you 
> > > > have it and study the signals to see where it fails.
> > > > 
> > > > Best Regards
> > > > Aalt,
> > > > 
> > > > 
> > > > -- 
> > > > ==============================
> > > > Aalt Lokhorst
> > > > Schut Geometrische Meettechniek bv
> > > > Duinkerkenstraat 21
> > > > 9723 BN Groningen
> > > > P.O. Box 5225
> > > > 9700 GE Groningen
> > > > The Netherlands
> > > > Tel: +31-50-5877877
> > > > Fax: +31-50-5877899
> > > > E-mail: Lokhorst@S...
> > > > ==============================
> > > > 
> > > > 
> > > > neptunus1000 wrote:
> > > > > 
> > > > > Hello Aalt,
> > > > > 
> > > > > with on both lines a pull-up the code is still not working
> oke.
> > > > > Please help my.
> > > > > 
> > > > > --- In lpc2000@yahoogroups.com, "Aalt Lokhorst"
> <lokhorst@s...> 
> > > wrote:
> > > > >  > Hello Roy,
> > > > >  >
> > > > >  > Is there a pull-up on the SCL line? I can't find it in 
the
> > > > > schematic
> > > > >  > drawing but probably I missed it.
> > > > >  >
> > > > >  > As far as I know both lines need a pull-up because SDA 
and 
> > SCL
> > > > > lines are
> > > > >  > 'open-drain' outputs.
> > > > >  >
> > > > >  > Best Regards,
> > > > >  > Aalt
> > > > >  >
> > > > >  > --
> > > > >  > ==============================
> > > > >  > Aalt Lokhorst
> > > > >  > Schut Geometrische Meettechniek bv
> > > > >  > Duinkerkenstraat 21
> > > > >  > 9723 BN Groningen
> > > > >  > P.O. Box 5225
> > > > >  > 9700 GE Groningen
> > > > >  > The Netherlands
> > > > >  > Tel: +31-50-5877877
> > > > >  > Fax: +31-50-5877899
> > > > >  > E-mail: Lokhorst@S...
> > > > >  > ==============================
> 
> Roy,
> 
> I had this problem (I2C start not generated and I2C status at 0xf8
> forever) on an Olimex board (LPC-WEB 2124) and a pull-up on SCL 
fixed
Show quoted textHide quoted text
> it.
> 
> H.A.

Re: initializing I2C problem

2005-04-16 by neptunus1000

Hello,

can you tell some more about the I2C reset, how this works. If it is 
possible that you can post you're code. I think some people on this 
group will thank you.

Thanks

Roy

--- In lpc2000@yahoogroups.com, "jim_e_dallas" <jim_e_dallas@y...> 
wrote:
> 
> Some erroneous I2C data on the bus can cause this condition. If an 
> I2C node sends a start condition with out a valid stop, then the 
I2C 
> interface will think the bus is busy and never generate the start 
> condition. When I write an I2C interface, I generally use a "switch
> (I2CSTAT)" with a case for each of the possible I2CSTAT states. 
Then 
> I add a bus free timeout counter and a message length timeout 
> counter. The Bus free timeout is for the condition mentioned above 
> and starts a timer when the start condition is requested and is 
reset 
> when the start condition has been transmitted. If too long a time 
> goes by without a start condition being sent, then the timeout 
would 
> reset the I2C interface so it no longer thinks the bus is busy. The 
> message length timeout also helps recover from the condition where 
a 
> master does not send out enough SCL clocks to complete a slave 
> transmission. If the slave send out a '0' and no more clocks are 
> received a "stuck bus" can occur. A message length timeout is 
started 
> when a start condition is received and reset when a stop condition 
is 
> received. If the stop condition is not received, the the I2C 
> interface is reset after a period of time and releases the bus from 
> it's "stuck" condition. These timeouts may vary depending on the 
> application.
> 
> Regards,
> 
> Jim E.
> 
> --- In lpc2000@yahoogroups.com, "semetex01" <info.semetex@s...> 
wrote:
> > 
> > --- In lpc2000@yahoogroups.com, "neptunus1000" <roykrikke@h...> 
> wrote:
> > > 
> > > Hello everybody,
> > > 
> > > is there realy nobody how had ths problem before. Or is there 
> realy 
> > > nobody how now's a solution.
> > > 
> > > Thanks Roy
> > > 
> > > --- In lpc2000@yahoogroups.com, "neptunus1000" <roykrikke@h...>
> > wrote:
> > > > 
> > > > Hello,
> > > > 
> > > > "Was there indeed a pull-up resistor missing on the Olimex
> > board?" 
> > > > YES there was one missing.
> > > > 
> > > > I put for the testing two pull-up on the bus of 4,7K and
> > connected 
> > > to 
> > > > the 3.3 Volt. When I'm debugging the program. The program is
> > still 
> > > > hanging on the while(I2STAT != 0x08);. When I measure the both
> > I2C 
> > > > lines with pull-up, the lines have 3.3 Volt. The program is 
not 
> > > > working. If I disconnect the pull-up resistor the SDA line is 
> 3.3 
> > > > Volt and the SCL line is 0 Volt. This is oke if I look in the 
> > > schema 
> > > > of the Olimex board. I really don't understand why it is not 
> > > working.
> > > > 
> > > > Of course I can build some code for 'bit-bang', but if the uC 
> has
> > a 
> > > > I2C bus. Then it is ugly to build a 'bit-bang' routine.
> > > > 
> > > > I measured with a FLUKE 123 scope meter.
> > > > 
> > > > Best Regards
> > > > Roy
> > > > 
> > > > --- In lpc2000@yahoogroups.com, "Aalt Lokhorst" 
<lokhorst@s...> 
> > > wrote:
> > > > > Hello Roy,
> > > > > 
> > > > > Was there indeed a pull-up resistor missing on the Olimex 
> board?
> > > > > 
> > > > > If you can measure low and high levels on both I2C lines now
> > then 
> > > I 
> > > > > expect that the hardware is fine. If there is also a I2C 
> device 
> > > on 
> > > > the 
> > > > > bus and it is still not working then i assume it is a 
> software 
> > > > problem.
> > > > > 
> > > > > In the past I used I2C on a 8051 with some 'bit-bang' 
> routines. 
> > > > Until 
> > > > > now I didn't use the I2C of the ARM. This will change in the
> > next 
> > > > few 
> > > > > weeks but for the moment I can't help you.
> > > > > 
> > > > > In the files section of the yahoo group are some examples. 
If
> > the 
> > > > > pull-up indeed was missing in the hardware then you 
probably 
Show quoted textHide quoted text
> > > spend 
> > > > a lot 
> > > > >   of time with software debugging without any change to 
> succeed.
> > > > > Might be the moment to start debugging again, use an
> > oscilloscope 
> > > > if you 
> > > > > have it and study the signals to see where it fails.
> > > > > 
> > > > > Best Regards
> > > > > Aalt,
> > > > > 
> > > > > 
> > > > > -- 
> > > > > ==============================
> > > > > Aalt Lokhorst
> > > > > Schut Geometrische Meettechniek bv
> > > > > Duinkerkenstraat 21
> > > > > 9723 BN Groningen
> > > > > P.O. Box 5225
> > > > > 9700 GE Groningen
> > > > > The Netherlands
> > > > > Tel: +31-50-5877877
> > > > > Fax: +31-50-5877899
> > > > > E-mail: Lokhorst@S...
> > > > > ==============================
> > > > > 
> > > > > 
> > > > > neptunus1000 wrote:
> > > > > > 
> > > > > > Hello Aalt,
> > > > > > 
> > > > > > with on both lines a pull-up the code is still not working
> > oke.
> > > > > > Please help my.
> > > > > > 
> > > > > > --- In lpc2000@yahoogroups.com, "Aalt Lokhorst"
> > <lokhorst@s...> 
> > > > wrote:
> > > > > >  > Hello Roy,
> > > > > >  >
> > > > > >  > Is there a pull-up on the SCL line? I can't find it in 
> the
> > > > > > schematic
> > > > > >  > drawing but probably I missed it.
> > > > > >  >
> > > > > >  > As far as I know both lines need a pull-up because SDA 
> and 
> > > SCL
> > > > > > lines are
> > > > > >  > 'open-drain' outputs.
> > > > > >  >
> > > > > >  > Best Regards,
> > > > > >  > Aalt
> > > > > >  >
> > > > > >  > --
> > > > > >  > ==============================
> > > > > >  > Aalt Lokhorst
> > > > > >  > Schut Geometrische Meettechniek bv
> > > > > >  > Duinkerkenstraat 21
> > > > > >  > 9723 BN Groningen
> > > > > >  > P.O. Box 5225
> > > > > >  > 9700 GE Groningen
> > > > > >  > The Netherlands
> > > > > >  > Tel: +31-50-5877877
> > > > > >  > Fax: +31-50-5877899
> > > > > >  > E-mail: Lokhorst@S...
> > > > > >  > ==============================
> > 
> > Roy,
> > 
> > I had this problem (I2C start not generated and I2C status at 0xf8
> > forever) on an Olimex board (LPC-WEB 2124) and a pull-up on SCL 
> fixed
> > it.
> > 
> > H.A.

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.