--- 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
Message
Re: I2C question
2006-05-04 by rtstofer
Attachments
- No local attachments were found for this message.