Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 Nov 2024 14:27:34 +1030
From:      Daniel O'Connor <darius@dons.net.au>
To:        freebsd-arm@freebsd.org
Subject:   I2C on Raspberry Pi 4B has wrong clock rate?
Message-ID:  <EAA369F5-948E-4C74-8A99-FB09916426FF@dons.net.au>

next in thread | raw e-mail | index | archive | help
Hi,
I have an RPi4B with (currently) FreeBSD 13.1 on it which has a PiJuice =
(https://github.com/PiSupply/PiJuice/tree/master) hat on it as a mini =
UPS.

This has an I2C interface which emulates an RTC at 0x68 as well as has =
its own control/status at 0x14.

If I boot up Linux this is detected fine, eg
doconnor@rpitest:~ $ i2cdetect -l
i2c-0	i2c       	i2c-22-mux (chan_id 0)          	I2C =
adapter
i2c-1	i2c       	bcm2835 (i2c@7e804000)          	I2C =
adapter
i2c-10	i2c       	i2c-22-mux (chan_id 1)          	I2C =
adapter
i2c-20	i2c       	fef04500.i2c                    	I2C =
adapter
i2c-21	i2c       	fef09500.i2c                    	I2C =
adapter
i2c-22	i2c       	bcm2835 (i2c@7e205000)          	I2C =
adapter

doconnor@rpitest:~ $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- 14 -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

doconnor@rpitest:~ $ i2ctransfer -y 1 w1@0x14 0x40 r1
0x34

And the logic analyser I have sniffing the bus shows what I expect:
i2c-1: Address write: 14
i2c-1: ACK
i2c-1: Data write: 40
i2c-1: ACK
i2c-1: Start repeat
i2c-1: Read
i2c-1: Address read: 14
i2c-1: ACK
i2c-1: Data read: 34
i2c-1: NACK
i2c-1: Stop

I checked using a 'scope and the bus appears to be running at about =
40kHz (bit weird, but OK..)

However on FreeBSD it looks like the I2C bus is not working correctly, I =
have modified config.txt as per =
https://lists.freebsd.org/pipermail/freebsd-arm/2021-May/023713.html =
(otherwise the bus hangs).

Most of the time scanning fails, if I spam it I get:
[rpi13 3:41] ~ >while [ 1 ]; do
sudo i2c -m tr -s 2>/dev/null | grep -v none
done
Scanning I2C devices on /dev/iic0: 68
Scanning I2C devices on /dev/iic0: 68
Scanning I2C devices on /dev/iic0: 68
Scanning I2C devices on /dev/iic0: 14
Scanning I2C devices on /dev/iic0: 15
Scanning I2C devices on /dev/iic0: 68
Scanning I2C devices on /dev/iic0: 14 68
..

ie 15 is definitely wrong, "14 68" is what I would expect.

If I try and read the pijuice firmware version:
[rpi13 3:45] ~ >while ! sudo i2c -m tr -a 0x14 -d r -c 1 -o 0xfd; do
done
i2c: ioctl(I2CRDWR) failed: Input/output error
i2c: ioctl(I2CRDWR) failed: Input/output error
i2c: ioctl(I2CRDWR) failed: Input/output error
i2c: ioctl(I2CRDWR) failed: Input/output error
i2c: ioctl(I2CRDWR) failed: Input/output error
i2c: ioctl(I2CRDWR) failed: Input/output error
i2c: ioctl(I2CRDWR) failed: Input/output error
i2c: ioctl(I2CRDWR) failed: Input/output error
17

ie it fails often and also usually gets the wrong answer (should be 1.6)

Checking with the 'scope shows the bus running at about 200kHz however =
sysctl says it should be 100kHz:
[rpi13 3:54] ~ >sysctl dev.iichb
dev.iichb.0.debug: 0
dev.iichb.0.rise_edge_delay: 48
dev.iichb.0.fall_edge_delay: 48
dev.iichb.0.clock_stretch: 64
dev.iichb.0.frequency: 100000
dev.iichb.0.%parent: simplebus0
dev.iichb.0.%pnpinfo: name=3Di2c@7e804000 compat=3Dbrcm,bcm2711-i2c
dev.iichb.0.%location:
dev.iichb.0.%driver: iichb
dev.iichb.0.%desc: BCM2708/2835 BSC controller
dev.iichb.%parent: twsi

I tried setting the frequency but it does not 'stick':
[rpi13 3:56] ~ >sudo sysctl dev.iichb.0.frequency=3D10000
dev.iichb.0.frequency: 100000 -> 100000

Does anyone have suggestions for what I can try?
Thanks.

--
Daniel O'Connor
"The nice thing about standards is that there
are so many of them to choose from."
-- Andrew Tanenbaum




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?EAA369F5-948E-4C74-8A99-FB09916426FF>