Use on Radxa Cubie A7Z
The default I2C frequency for i2c-7 on the Radxa Cubie A7Z is set to 400kHz. However, in some cases, this may lead to instability in detecting the PiSugar3 battery device. This document provides a step-by-step guide to downclock i2c-7 to 100kHz, which can improve the detection success rate of the battery device.
The magnets in PiSugar 3 can interfere with the Hall sensor in the official Radxa Cubie A7Z heatsink fan when the fan is mounted directly above them. This can cause the fan to stop spinning and may lead to overheating.
When using the official Radxa fan, remove the magnets from PiSugar 3 and secure the battery using a non-magnetic method, such as suitable double-sided adhesive or a mechanical bracket. Take care not to bend, crush, or puncture the battery while removing the magnets or fitting the replacement mounting. After assembly, power the system briefly while monitoring it and confirm that the fan starts and continues spinning before normal use.
Applicable Scenarios
- PiSugar3 power supply and physical wiring have been confirmed to be normal.
- The initial scan of
i2c-7does not show the battery device address (or only shows other devices).
Environment Information (Tested in This Case)
- Board: Radxa Cubie A7Z
- System Kernel:
5.15.147-14-a733 - I2C Controller:
/sys/firmware/devicetree/base/soc@3000000/twi@2517000 - I2C Device Node:
/dev/i2c-7 - TWI7 overlay:
/boot/dtbo/sun60iw2p1-twi7.dtbo
1 Baseline Check (Before Downclocking)
ssh radxa@<radxa-ip>
printf 'radxa\n' | sudo -S /usr/sbin/i2cdetect -y 7
Observed phenomenon (before downclocking):
- No device detected, the battery device address does not appear.
2 Confirm Current Frequency
printf 'radxa\n' | sudo -S xxd -g 1 /sys/firmware/devicetree/base/soc@3000000/twi@2517000/clock-frequency
Output 00 06 1a 80, i.e. 0x00061A80 = 400000 (400kHz).
3 Modify TWI7 Overlay Frequency to 100kHz
Core idea: Decompile dtbo -> modify
clock-frequency-> recompile and overwrite -> reboot.
printf 'radxa\n' | sudo -S sh -c '
cp -a /boot/dtbo/sun60iw2p1-twi7.dtbo /boot/dtbo/sun60iw2p1-twi7.dtbo.bak-400k
dtc -I dtb -O dts -o /tmp/sun60iw2p1-twi7.dts /boot/dtbo/sun60iw2p1-twi7.dtbo
sed -i "s/clock-frequency = <0x61a80>/clock-frequency = <0x186a0>/" /tmp/sun60iw2p1-twi7.dts
dtc -@ -I dts -O dtb -o /boot/dtbo/sun60iw2p1-twi7.dtbo /tmp/sun60iw2p1-twi7.dts
reboot
'
Notes:
0x61a80= 400000 (400kHz)0x186a0= 100000 (100kHz)
4 Verification After Reboot
4.1 Frequency Confirmation
printf 'radxa\n' | sudo -S xxd -g 1 /sys/firmware/devicetree/base/soc@3000000/twi@2517000/clock-frequency
You should see 00 01 86 a0 (100kHz).
4.2 Bus Scan
printf 'radxa\n' | sudo -S /usr/sbin/i2cdetect -y 7
printf 'radxa\n' | sudo -S /usr/sbin/i2cdetect -r -y 7
Observed phenomenon (after downclocking):
0x57newly appears (not present before downclocking).- In
-rmode,0x57is visible (and0x68can be observed).
4.3 Register Read Connectivity Test
printf 'radxa\n' | sudo -S sh -c '
/usr/sbin/i2cget -y 7 0x57 0x00
/usr/sbin/i2cget -y 7 0x57 0x01
/usr/sbin/i2cget -y 7 0x57 0x02
'
Returned values in this test:
0x030x0f0xec
Indicates that the 0x57 device is communicable.
5 Rollback to 400kHz
If you want to restore the original frequency, simply restore the backup file and reboot:
printf 'radxa\n' | sudo -S sh -c '
cp -a /boot/dtbo/sun60iw2p1-twi7.dtbo.bak-400k /boot/dtbo/sun60iw2p1-twi7.dtbo
reboot
'
6 Common Issues
i2cdetect: command not found- Use the absolute path:
/usr/sbin/i2cdetect
- Use the absolute path:
sudocannot be executed non-interactively- Use
printf 'password\n' | sudo -S ..., or log in first and enter manually.
- Use
- Still unstable
- You can try
50kHz(0x0000c350) for further comparison.
- You can try
Configuration for pisugar-server
After successfully detecting the battery device, you can proceed to configure the pisugar-server to read battery information.
Edit the configuration file /etc/pisugar-server/config.json to specify the I2C bus:
{
"i2c_bus": 7,
}
Then restart the pisugar-server service:
sudo systemctl restart pisugar-server
All set! You should now be able to read battery information through the pisugar-server webUI.