Yahoo Groups archive

Lpc2000

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

Message

Re: I2C question

2006-05-04 by rtstofer

--- In lpc2000@yahoogroups.com, "Sutton Mehaffey" <sutton@...> wrote:
>
> Can someone unconfuse me on several I2C issues as I try to understand
> the Philips I2C code in the file section?
> 
> On, my design using a LPC2148, I am using Master Transmitter mode to
> address a RAM.
> 
> The AA flag: Is it only used to acknowledge data received from the RAM
> after reading from I2C0DAT?  I assume that the ACKs received from the
> RAM when simply addressing it is not related to AA (but is the SI
> bit).  I noticed in the Philips code that the only AA assertion is
> done after receiving data from the chip.  I also assume that the slave
> will always give an ACK after sending it data (by the SI flag).  Or,
> am I totally off base?

When the master reads data from the slave it acknowledges by asserting
AA for every byte EXCEPT the last byte.  For the last byte the master
does not assert AA and this is a NAK to the slave which stops the
transaction.  This is done in state 0x50.

I think in EVERY case, the receipient sends the ACK.  When a slave is
first addressed, it is the receipient of the address and it sends the
ACK.  When the master reads data, it sends the ACK for all but the
last byte.  When the master writes data, the receiver sends the ACKs
for every byte, assuming no error.

Figure 34 in the 2148 User Manual indicates which device is talking
and which device is sending ACKs in the case of reading from a device
- Master Receiver mode.

Figure 33 in the manual indicates which device is talking and which
device is sending ACKs in the case of writing to a device - Master
Transmitter mode.

Section 11.9 "Software example" gives a very good description of
exactly what should happen at each state.

> 
> Also, does SCL run all the time, or just during the data transfer? 
> I'm not seeing a SCL signal at all when I start my code.

Both the SCL and SDA idle in the high state.  The master only emits a
clock during a transaction.

It may be useful to take a three 2-input NAND gates and build a
circuit that detects the START condition.  Use 3 gates from a 74LCX00

NAND1 = SDA NAND SDA - just an inverter
NAND2 = SCL NAND NAND1 - forms NOT (SCL AND SDA')  
NAND3 = NAND2 NAND NAND2 - forms (SCL AND SDA')

Trigger your scope on the rising edge of NAND3 or the falling edge of
NAND2.

Richard

Attachments

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.