I2CChip.com: Monitoring I2C Bus
There are 2 styles of monitoring the I2C Bus:
- When everything works: Deliberately sending diagnostic
messages / information from an I2C controller (a
microprocessor) to a PC for logging or ATE, servicing
- When it doesn't work: Spying on the bus for debugging
There are several ways to do this:
- Use an I2C to RS232 chip to send what you want.
- Use a semaphore memory to pass messages
- Use a dual port semaphore memory to pass messages
We have been asked for a chip for this. If we get enough requests, we will make it
Dual port I2C mnemories are made for DDC (monitors). An
example is the Microchip 24LC41.
It has two completely separate I2C busses,
which can both access the eeprom simultaneously. This means there
are no issues of multi-mastering the bus. Just write when you
want. Its just too-easy.
This solution provides your equipment with EEProm that can be
used to store data, as well as allowing a PC to read out the
diagnostics any time it wishes.
Typically we keep a count of hours-run, number of power-ons,
number of watchdog time-outs for all systems we make.
Another good idea is to normally use an ordinary I2C EEProm,
but when you want to do some diagnostics, just plug the special
dual-port version, and connect to the PC with an I2C-2-PC
You can use a simple I2C ram chip (philips) or use the ram in
something else such as an RTC chip like philips PCF8583. It has
240 bytes of ram free for storing data, and writing diagnostic
Then you pick the messages up from the PC using the I2C-2-PC
As it is a lot more work for most users to support a
multi-master bus, you can just use one of the I2C-2-PC ports to
hold the systems micro in reset while you collect the data
- Use the LEDS on our bus
monitor board to make sure the wiring is OK. The BUSY
led shows you if START and STOP
conditions are being sent
- Use an ordinary digital scope. This is a good way to find
subtle timing or logic level problems. It is much easier
to watch messages if you can trigger off the START
condition. This makes it very easy to see what is going
on, and see the actual addresses and message
contents.Below is a start bit detector which generates a
pulse when the start condition occurs. A more complete
circuit like our Bus
Monitor board has a BUSY pin, and start bit
and stop bit triggers, LEDS etc.
- Use a fancy Agilent Mixed Signal Oscilloscope, logic
analyser etc. These claim to have dedicated I2C modes.
Get one on demo while you sort out that thorny problem...
- Use a bus monitor program like Warmcats "Cheap I2C". The drawback
of this is that it ties up a PC 100% whilst it's running.
Still, who doesn't have an old PC these days? Our Bus Monitor board has an
improved interface for for this built in.
- Get a Bus Protocol Monitor from one of the other
suppliers on our links
page. MCC are strong in protocol analysers for smbus.
- Check the power supply to all devices
- Check that SDA and SCL go to devices, and are not swapped
or shorted together
- Try using the bus to write to a known good device, I find
it very useful to have a board with a PCF8574 and 8 LEDS.
It is useful later for debugging programs
- Use a scope to monitor the bus. Check that the levels are
- Check that SDA transitions happen when SCL is LOW.
(except start and stop)
- A circuit that detects START/STOP is very useful for
triggering the scope at this point. An alternative is to
use a micro pin to signal that an I2C transaction is
about to begin.
- Use the scope to check the start condition is correct, ie
SDA falls when SCL is high
- Count the number of SCL edges in the address byte: I2C
has 9 bits per byte.
- Check to see if there is an ACK bit, ie does the slave
- If the basic chip functions are OK, but the whole system
doesn't go, you might want a protocol analysing tool to
store long sequences in a form you can pore over.
Phone +64 21 623-402
Please send us mail
telling us what you think about this page and how we might