Just now I realized that the I2C data and clock lines (SDA and SCL) must have pullup resistors.
Well, I've built a couple of clocks using the DS1307 RTC (see datasheet) according to the schematic below. Notice that I have omitted both pullup resistors.
Both clocks work fine, one of them is working for more than 3 months now. How is that possible? In any case, I wanted to know:
What happens when the I2C pullups are omitted?
Is the lack of pullups likely to damage any of those two ICs in my board?
I'm after answers that address my specific case of connecting ATmega328P to a DS1307 RTC like in the schematics I provided, but if the question doesn't get too broad, it would be helpful to know what happens when the pullups are omitted in general, i.e., in other scenarios of I2C operation.
PS. I did search the Net to find the answer, but could just find articles about dimensioning the pullups.
Update: I'm using Arduino IDE 1.03 and my firmware handles the RTC using the DS1307RTC Arduino lib (through its functions RTC.read()
and RTC.write()
). That lib in turn uses Wire.h
to talk to the RTC.
Update 2: Below are a series of scope shots I took to help explain how the I2C is working without the external pullups.
Update 3 (after I2C pullups added): Below is another series of scope shots I took after adding proper (4K7) pullup resistors to the I2C lines (on the same board). Rise times dropped from about 5 µs to 290 ns. I2C is much happier now.