External M41T0 RTC not being read on boot

Our custom daughterboard uses the same circuitry as the Colibri development board with regards to the M41T0 external clock but the RTCSync doesn’t seem to be reading it on boot (or executed manually). If I do a Reset, the clock is retained, otherwise it defaults to 2006. I have looked at the datasheet for the M41T0 and it shows a Slave Address of 0xD0, yet the Toradex documentation says the address is 0x68 (a 1-bit right shift). The registry entries for RTCSync are Protocol=1, SlaveAddr=104. Is this a startup order issue? We use no other I2C on our board.


Thank you for contacting support.

Did you see the same issue on Colibri Eval Board?
Could you please probe the I2C SCL, SDA lines using Oscilloscope and share the waveform?
In rare cases, if you experience I2C failures of Vybrid Modules, reducing pull-up resistor value may be of valuable help. 1.8K pull-up can give the better result.

When is rtcsync.exe executed on boot? Our application seems to be preventing it from running–even during a Sleep() call What priority level does it run at? Can it be forced to run during the boot process?

We tried the resistor change with no effect. The signals look good on the scope but don’t occur (except for some narrow toggles) for about 18 seconds before I see a clock and data. What takes so long?

@dbaltz ,

Are you referring power ON to clock and data toggle time?
Please disable RTCSync(edit below registry, save registry) and see, is there any I2C bus activity?

Did you see the same issue on Colibri Eval board?
You can use [I2CTool][1] to check manually M41T0 RTC response.

Very odd but I have it working now.
Our app is executed on startup from a .bat file in the \FlashDisk\AutoRun folder. Although it is running at NORMAL priority, it seems it hangs/confuses RtcSync. I added a 10 second Sleep() delay at the start of our app and now I see I2C activity much sooner and the clock has been read correctly by the time the code gets to the GetSystemTime() call.
One other oddity is that in an attempt to get things working, I switched back to using the internal RTC and disabled the I2C dlls in the registry (i.e. Dll=_i2cdriver.dll) but still see I2C traffic as if nothing changed. Now I’m not sure whether it is reading the internal RTC or the external RTC.

Still having RTC problems. The pic below shows what I see on startup when RtcSync runs. The upper trace is the clock and the lower trace the data.773-tek00000.jpg


If you are using v1.5) image and disable i2cdriver, RTCSync will still use I2c using I2C library.
Please disable RTCSync then verify any activity in the I2c bus.


Understood. There is no I2C activity when Rtcsync is disabled.