Skip to content

SPI transfer fails with [Errno 110] Connection timed out when there are > 4 CS pins configured #6159

Closed
@itsarune

Description

@itsarune

Describe the bug

If I configure the device tree with 5 chip selects for SPI0, I am able to observe the chip selects go low (as expected) when I transfer a message to each of them. If I try to issue a transfer to the 5th configured chip select, I observe the chip-select pin going low--but stays low for much longer than expected eventually resulting in a TimeoutError: [Errno 110] Connection timed out.

I downloaded the kernel with hash 1e53604087930e7cf42eee3d42572d0d6f54c86a and loaded it onto the sd card. I believe this has the fix #6044 for #6020, #5858 and #5865 but I still have this issue.

Steps to reproduce the behaviour

  1. Set up device tree for five chip-selects for SPI0 using two default SPI CS pins and three GPIOs
  2. error reproducing example. The same issue also occurs with the C++ spidev implementation, but provided is python:
    import spidev
    spi = spidev.SpiDev()
    spi.open(0, 4)
    to_send = [0x1, 0x2, 0x3]
    spi.xfer(to_send)
    
  3. Configuring the fifth GPIO pin to another hardware pin results in the same problem.

Device (s)

Raspberry Pi 5

System

system information

raspberry pi 5 model b rev 1.0
pretty_name="debian gnu/linux 12 (bookworm)"
name="debian gnu/linux"
version_id="12"
version="12 (bookworm)"

raspberry pi reference 2024-03-15
generated using pi-gen, https://github.com/rpi-distro/pi-gen, f19ee211ddafcae300827f953d143de92a5c6624, stage2

linux piedpiper 6.6.30-v8-16k+ #1762 smp preempt thu may 9 15:18:59 bst 2024 aarch64 gnu/linux
revision : c04170
serial : 022f76c8c8c62e9a
model : raspberry pi 5 model b rev 1.0
throttled flag : throttled=0x0
camera : vc_gencmd_read_response returned -1 error=1 error_msg="command not registered"

videocore information

2024/04/20 11:53:30
copyright (c) 2012 broadcom
version d1744d21 (release) (embedded)

vc_gencmd_read_response returned -1
error=1 error_msg="command not registered"

filesystem information

filesystem 1k-blocks used available use% mounted on
udev 1899136 0 1899136 0% /dev
tmpfs 414240 5232 409008 2% /run
/dev/mmcblk0p2 60819080 4481464 53229288 8% /
tmpfs 2071136 0 2071136 0% /dev/shm
tmpfs 5120 48 5072 1% /run/lock
/dev/mmcblk0p1 522230 90424 431806 18% /boot/firmware
tmpfs 414224 0 414224 0% /run/user/1000

filename type size used priority
/var/swap file 102368 0 -2

package version information

raspberrypi-ui-mods:
installed: (none)
raspberrypi-sys-mods:
installed: 20240129
openbox:
installed: (none)
lxpanel:
installed: (none)
pcmanfm:
installed: (none)
rpd-plym-splash:
installed: (none)

networking information

eth0: flags=4163<up,broadcast,running,multicast> mtu 1500
inet x.x.x.x netmask x.x.x.x broadcast x.x.x.x
inet6 y::y.y.y.y prefixlen 64 scopeid 0x20
ether m.m.m.m txqueuelen 1000 (ethernet)
rx packets 48 bytes 8359 (8.1 kib)
rx errors 0 dropped 0 overruns 0 frame 0
tx packets 59 bytes 10287 (10.0 kib)
tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 107

lo: flags=73<up,loopback,running> mtu 65536
inet x.x.x.x netmask x.x.x.x
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (local loopback)
rx packets 10 bytes 1588 (1.5 kib)
rx errors 0 dropped 0 overruns 0 frame 0
tx packets 10 bytes 1588 (1.5 kib)
tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0: flags=4099<up,broadcast,multicast> mtu 1500
ether m.m.m.m txqueuelen 1000 (ethernet)
rx packets 0 bytes 0 (0.0 b)
rx errors 0 dropped 0 overruns 0 frame 0
tx packets 0 bytes 0 (0.0 b)
tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0

usb information

/: bus 04.port 1: dev 1, class=root_hub, driver=xhci-hcd/1p, 5000m
/: bus 03.port 1: dev 1, class=root_hub, driver=xhci-hcd/2p, 480m
/: bus 02.port 1: dev 1, class=root_hub, driver=xhci-hcd/1p, 5000m
/: bus 01.port 1: dev 1, class=root_hub, driver=xhci-hcd/2p, 480m

display information

running (f)kms, console

/sys/class/drm/card1-hdmi-a-1

/sys/class/drm/card1-hdmi-a-2

/sys/class/drm/card1-writeback-1

/sys/class/drm/card1-writeback-2

connector 0 (32) hdmi-a-1 (disconnected)
encoder 0 (31) tmds
connector 1 (41) hdmi-a-2 (disconnected)
encoder 1 (40) tmds

hdmi0: hdmi_hotplug = 0x00000000
hdmi1: hdmi_hotplug = 0x00000000

/sys/kernel/debug/dri/1/state:
plane[45]: plane-0
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=0
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[62]: plane-1
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=0
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[76]: plane-2
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=0
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[87]: plane-3
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=0
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[98]: plane-4
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=1
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[108]: plane-5
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=2
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[118]: plane-6
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=3
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[128]: plane-7
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=4
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[138]: plane-8
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=5
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[148]: plane-9
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=6
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[158]: plane-10
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=7
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[168]: plane-11
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=8
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[178]: plane-12
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=9
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[188]: plane-13
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=a
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[198]: plane-14
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=b
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[208]: plane-15
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=c
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[218]: plane-16
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=d
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[228]: plane-17
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=e
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[238]: plane-18
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=f
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[248]: plane-19
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=10
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[258]: plane-20
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=11
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[268]: plane-21
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=11
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[278]: plane-22
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=11
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
plane[288]: plane-23
crtc=(null)
fb=0
crtc-pos=0x0+0+0
src-pos=0.000000x0.000000+0.000000+0.000000
rotation=1
normalized-zpos=11
color-encoding=itu-r bt.709 ycbcr
color-range=ycbcr limited range
crtc[55]: mop
enable=0
active=0
self_refresh_active=0
planes_changed=0
mode_changed=0
active_changed=0
connectors_changed=0
color_mgmt_changed=0
plane_mask=0
connector_mask=0
encoder_mask=0
mode: "": 0 0 0 0 0 0 0 0 0 0 0x0 0x0
crtc[72]: moplet
enable=0
active=0
self_refresh_active=0
planes_changed=0
mode_changed=0
active_changed=0
connectors_changed=0
color_mgmt_changed=0
plane_mask=0
connector_mask=0
encoder_mask=0
mode: "": 0 0 0 0 0 0 0 0 0 0 0x0 0x0
crtc[86]: crtc-2
enable=0
active=0
self_refresh_active=0
planes_changed=0
mode_changed=0
active_changed=0
connectors_changed=0
color_mgmt_changed=0
plane_mask=0
connector_mask=0
encoder_mask=0
mode: "": 0 0 0 0 0 0 0 0 0 0 0x0 0x0
crtc[97]: crtc-3
enable=0
active=0
self_refresh_active=0
planes_changed=0
mode_changed=0
active_changed=0
connectors_changed=0
color_mgmt_changed=0
plane_mask=0
connector_mask=0
encoder_mask=0
mode: "": 0 0 0 0 0 0 0 0 0 0 0x0 0x0
connector[32]: hdmi-a-1
crtc=(null)
self_refresh_aware=0
max_requested_bpc=8
colorspace=default
connector[41]: hdmi-a-2
crtc=(null)
self_refresh_aware=0
max_requested_bpc=8
colorspace=default
connector[61]: writeback-1
crtc=(null)
self_refresh_aware=0
max_requested_bpc=0
colorspace=default
connector[75]: writeback-2
crtc=(null)
self_refresh_aware=0
max_requested_bpc=0
colorspace=default

config.txt

arm_64bit=1
arm_boost=1
arm_freq=2400
arm_freq_min=1500
arm_peri_high=1
audio_pwm_mode=2
auto_initramfs=1
avs_temp=57614
camera_auto_detect=1
core_freq=910
core_freq_min=500
disable_commandline_tags=2
disable_fw_kms_setup=1
disable_l2cache=1
disable_overscan=1
display_auto_detect=1
display_default_lcd=-1
display_hdmi_rotate=-1
display_lcd_rotate=-1
dvfs=4
enable_gic=1
enable_uart=-1
force_eeprom_read=1
force_pwm_open=1
framebuffer_depth=16
framebuffer_ignore_alpha=1
framebuffer_swap=1
gpu_freq_min=500
hdmi_enable_4kp60=1
hevc_freq=910
hevc_freq_min=500
ignore_lcd=-1
init_uart_clock=0x2dc6c00
isp_freq=910
isp_freq_min=500
mask_gpu_interrupt1=16418
max_framebuffers=2
over_voltage_avs=0x2e568
pause_burst_frames=1
pciex4_reset=1
pmic_turbo_threshold=600
program_serial_random=1
total_mem=4096
v3d_freq=960
v3d_freq_min=500
vpred=9498
vpred_max=9498
hdmi_force_cec_address:0=65535
hdmi_force_cec_address:1=65535
device_tree=-
overlay_prefix=overlays/
hdmi_cvt:0=
hdmi_cvt:1=
hdmi_edid_filename:0=
hdmi_edid_filename:1=
hdmi_timings:0=
hdmi_timings:1=

cmdline.txt

reboot=w coherent_pool=1m 8250.nr_uarts=1 pci=pcie_bus_safe smsc95xx.macaddr=d8:3a:dd:bd:e5:f8 vc_mem.mem_base=0x3fc00000 vc_mem.mem_size=0x40000000 console=ttyama10,115200 console=tty1 root=partuuid=e28bd33a-02 rootfstype=ext4 fsck.repair=yes rootwait

Logs

[ 145.448526] spidev spi0.4: SPI transfer timed out
[ 145.448541] spi_master spi0: failed to transfer one message from queue
[ 145.448544] spi_master spi0: noqueue transfer failed

Additional context

device tree overlay:

/dts-v1/;
/plugin/;


/ {
        compatible = "brcm,bcm2835";

        fragment@0 {
                target = <&spi0_cs_pins>;
                frag0: __overlay__ {
                        brcm,pins = <8 7 5 6 13>;
                };
        };

        fragment@1 {
                target = <&spi0>;
                frag1: __overlay__ {
                        #address-cells = <1>;
                        #size-cells = <0>;

                        cs-gpios = <&gpio 8 1>, <&gpio 7 1>, <&gpio 5 1>, <&gpio 6 1>, <&gpio 13 1>;
                        status = "okay";

                        spidev0_2: spidev@2 {
                                compatible = "spidev";
                                reg = <2>;
                                #address-cells = <1>;
                                #size-cells = <0>;
                                spi-max-frequency = <125000000>;
                        };

                        spidev0_3: spidev@3 {
                                compatible = "spidev";
                                reg = <3>;
                                #address-cells = <1>;
                                #size-cells = <0>;
                                spi-max-frequency = <125000000>;
                        };

                        spidev0_4: spidev@4 {
                                compatible = "spidev";
                                reg = <4>;
                                #address-cells = <1>;
                                #size-cells = <0>;
                                spi-max-frequency = <125000000>;
                        };
                };
        };
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions