Dear DietPi users!
Its the beginning of my adventure with DietPi OS, and Im really happy with performance of the system and how nicely it is maintained.
Since two weeks im working on my first serious project using:
RPi Zero W
Hyperpixel 2.1 round display https://shop.pimoroni.com/products/hyperpixel-round,
Waveshare UPS Hat https://www.waveshare.com/wiki/UPS_HAT_(C)
and Waveshare Serial Expansion Hat https://www.waveshare.com/wiki/Serial_Expansion_HAT.
As the display uses all GPIO pins available on RPI zero, designers provided separate I2C bus brekout on the back on the display.
So I am connecting serial expansion hat there. After installing display drivers display works like a charm, also when I run i2cdetect -l to list available i2c buses I receive this output:
root@DietPi:~# i2cdetect -l
i2c-11 i2c i2c@0 I2C adapter
So i2c-11 bus is detected. Scaning across Bus 11 gives me output:
root@DietPi:~# i2cdetect -y 11
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- 15 -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- 43 -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
0x15 is touchscreen interface
0x43 is UPS Hat interface
0x48 is Waveshare Serial expansion Hat (SC16IS752)
After installing scripts to make readouts on UPS board status via its I2C interface all is working (I had to change I2C Bus 1 to I2C Bus 11 in python script).
Now comes problematic part.
To make SC16IS752 expansion hat to work I have to add its overlay to /boot/config.txt file. But according to info I found somewhere, overlay provided with kernel is hardcoded to use I2C1 Bus. So I have to create overlay with I2C11 specified as target. So I downloaded sc16is752-i2c-overlay.dts (https://github.com/raspberrypi/linux/tree/rpi-5.10.y/arch/arm/boot/dts/overlays), opened it with nano, changed
target = <&i2c_arm>;
to
target = <&i2c11>;
and created .dtbo:
dtc -@ -I dts -O dtb -o sc16is752-i2c11.dtbo sc16is752-i2c11-overlay.dts
and then placed in /boot/overlays. I was trying to use it writing
dtoverlay=sc16is752-i2c11
to /boot/config.txt. Then of course reboot. When testing it via i2cdetect:
root@DietPi:~# i2cdetect -y 11
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- 15 -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- 43 -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
shows me 48 address, which means that overlay was not loaded. To see what’s the problem Im trying to load overlay dynamically running command in terminal:
dtoverlay sc16is752-i2c11
In response I get:
* Failed to apply overlay '0_sc16is752-i2c11' (kernel)
to se more details I run dmesg, which says:
[ 7071.544733] OF: resolver: node label 'i2c11' not found in live devicetree symbols table
[ 7071.544764] OF: resolver: overlay phandle fixup failed: -22
when I list symbols:
root@DietPi:~# ls /sys/firmware/devicetree/base/__symbols__/
act_led gpclk1_gpio44 mmcnr spi2
alt0 gpclk1_gpio5 name spi2_gpio40
audio gpclk2_gpio43 pcm_gpio18 spidev0
audio_pins gpclk2_gpio6 pcm_gpio28 spidev1
aux gpio pixelvalve0 system_timer
axiperf gpioout pixelvalve1 thermal
bt hdmi pixelvalve2 txp
bt_pins hvs pm uart0
cam1_reg i2c power uart0_ctsrts_gpio16
clk_osc i2c0 pwm uart0_ctsrts_gpio30
clk_usb i2c0_gpio0 pwm0_gpio12 uart0_ctsrts_gpio38
clocks i2c0_gpio28 pwm0_gpio18 uart0_gpio14
cma i2c0_gpio44 pwm0_gpio40 uart0_gpio32
cpu_thermal i2c0_pins pwm1_gpio13 uart0_gpio36
csi0 i2c0if pwm1_gpio19 uart0_pins
csi1 i2c0mux pwm1_gpio41 uart1
dma i2c1 pwm1_gpio45 uart1_ctsrts_gpio16
dpi i2c1_gpio2 random uart1_ctsrts_gpio30
dpi_18bit_cpadhi_gpio0 i2c1_gpio44 rmem uart1_ctsrts_gpio42
dpi_18bit_cpadhi_gpio2 i2c1_pins sdhci uart1_gpio14
dpi_18bit_gpio0 i2c2 sdhost uart1_gpio32
dpi_18bit_gpio2 i2c_arm sdhost_gpio48 uart1_gpio40
dpi_gpio0 i2c_csi_dsi sdio_pins uart1_pins
dsi0 i2c_slave_gpio18 smi usb
dsi1 i2c_vc soc usbphy
emmc_gpio22 i2s sound v3d
emmc_gpio34 i2s_pins spi vc4
emmc_gpio48 intc spi0 vchiq
fb jtag_gpio22 spi0_cs_pins vcsm
firmware jtag_gpio4 spi0_gpio35 vdd_3v3_reg
firmware_clocks leds spi0_gpio7 vdd_5v0_reg
firmwarekms mailbox spi0_pins vec
gpclk0_gpio4 minibt spi1 watchdog
gpclk1_gpio42 mmc spi1_gpio16
indeed there’s nothing similar to i2c11. But during .dtbo creation process I added -@ parameter which should generate symbols entry for i2c11…
What could be cause of this? Is there a way to generate symbols entry for specific device?
thanks for any help or advice,
Karol