ds3231 suddenly failing

Jukka Ukkonen jau789 at gmail.com
Thu Feb 4 15:49:14 UTC 2016


On 02/03/16 16:54, Ian Lepore wrote:
> On Wed, 2016-02-03 at 16:40 +0200, Jukka Ukkonen wrote:
>> Hello all,
>>
>> Previously my RPI2 had no problems with ds3231 RTC.
>> Now 11.0-CURRENT r295206 shows these during boot...
>>
>> ds32310: <Maxim DS3231 RTC> at addr 0x1a0 on iicbus1
>> ds32310: cannot read from RTC.
>>
>> Trying sysctl dev.ds3231 gives me this...
>>
>> dev.ds3231.0.%parent: iicbus1
>> dev.ds3231.0.%pnpinfo: name=rtc compat=maxim,ds3231
>> dev.ds3231.0.%location: addr=0x1a0
>> dev.ds3231.0.%driver: ds3231
>> dev.ds3231.0.%desc: Maxim DS3231 RTC
>> dev.ds3231.%parent:
>>
>> Trying "i2c -s" does not show anything on either
>> /dev/iic0 or /dev/iic1.
>>
>> AFAIK I have not changed anything in the build.
>>
>> Checking the contents of rpi2.dtb says this about
>> the clock chip...
>>
>>                         rtc {
>>                                 compatible = "maxim,ds3231";
>>                                 reg = <0xd0>;
>>                         };
>>
>> I guess that the alert "cannot read from RTC." is
>> due to the fact that "addr 0x1a0" does not match
>> "reg = <0xd0>;" in the DTB. It just does not dawn
>> to me where the kernel found the alternate value.
>> Any ideas?
>>
>> --jau
> 
> You didn't say what version you were running previously that had no
> problems, but there was an update a while back that changed the i2c
> device addressing in dts files to match the published standard, which
> requires 7-bit addresses.  Freebsd has always used 8-bit addresses in
> i2c drivers.  (0x1a0 is 0xd0 left-shifted by 1).
> 
> So, just adjust the address in your dts to 0x68 and it should start
> working again.
> 
> -- Ian
> 

Quite right. I did not say what was the previous version for
the simple reason that I installed the new OS version on the
same SD card without checking the old version first.

Anyhow your hint was spot on. When I shifted the 0xd0 value
down one bit in the DTS file the lost ds3231 returned to service
again. Thanks.

It seems that the ds3231 manual page still says only this...

-----
On a FDT(4) based system the following properties must be set:

compatible  Must always be set to "maxim,ds3231".

reg         The i2c address of ds3231. The default address for ds3231 is
0xd0.
-----

Obviously if left as is this tends to be misleading. The
proper value "reg = <0x68>" and the automatic shift by one
bit position should be explained in the manual page.

--jau



More information about the freebsd-arm mailing list