Bonjour,
J’ai développé une carte avec une CM4. Sur cette carte j’utilise deux bus SPI;
- spi0 (cs0) qui est géré par un driver personnalisé (la gestion par le spidev de ce bus SPI est désactivée par un dtbo ajouté aux overlays).
- spi1 (cs0) qui est géré par spidev normalement à travers le device /dev/spidev1.0 (open, read, write & close).
Le /boot/config.txt est le suivant:
# For more options and information see
# https://www.raspberrypi.com/documentation/computers/config_txt.html
# Some settings may impact device functionality. See link above for details
# Common Options
# Additional overlays and parameters are documented /boot/overlays/README
# =======================================================================
# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_vc=on,spi=on,audio=off
dtparam=i2c=on,spi=on,audio=off
# Disable onboard Bluetooth on Pi 3B, 3B+, 3A+, 4B and Zero W, restoring UART0/ttyAMA0 over GPIOs 14 & 15
dtoverlay=disable-bt
# Enabled SPI0 for the STM32 with one chip select on GPIO8
dtoverlay=disable-spidev-spi0
dtoverlay=spi0-1cs,cs0_pin=8
# Enabled SPI1 for the IM52 with one chip select on GPIO18(CS0)
dtoverlay=spi1-1cs,cs0_pin=18
# Uncomment this to enable rtc PCF85063
dtoverlay=i2c-rtc,pcf85063a,i2c_csi_dsi,addr=0x51
# Set STM(gpio2) = 0, STMBOOT(gpio3) = 0, STMRST_n(gpio24) = 1
gpio=2,3=op,dh
gpio=24=op,dl
# Uncomment this to enable I/O STM32F103T6
enable_uart=1
#dtoverlay=uart1
# Uncomment this to enable USART3 for the SMI Protocols
dtoverlay=uart3,ctsrts
# Boot Options
# ============
# Run in 64-bit mode
arm_64bit=1
# Conditional Filters
# ===================
[pi4]
# Run as fast as firmware / board allows
arm_boost=1
# Disable compensation for displays with overscan
disable_overscan=1
Device tree qui désactive la gestion du bus SPI0 par spidev (disable-spidev-spi0.dts)
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&spidev0>;
__overlay__ {
status = "disabled";
};
};
};
Le problème (enfin):
Lorsque je met sous tension la carte et que le CM4 a complètement démarré;
Les GPIOs #8 à #11 sont attribuées correctement au bus SPI0:
GPIO 8: level=1 fsel=1 func=OUTPUT pull=UP
GPIO 9: level=1 fsel=4 alt=0 func=SPI0_MISO pull=DOWN
GPIO 10: level=1 fsel=4 alt=0 func=SPI0_MOSI pull=DOWN
GPIO 11: level=0 fsel=4 alt=0 func=SPI0_SCLK pull=DOWN
Mais les GPIOs #18 à #21 attribuées au bus SPI1.0 ne le sont qu’à moitiée !!:
GPIO 18: level=1 fsel=1 func=OUTPUT pull=DOWN
GPIO 19: level=0 fsel=3 alt=4 func=SPI1_MISO pull=DOWN
GPIO 20: level=0 fsel=3 alt=4 func=SPI1_MOSI pull=DOWN
GPIO 21: level=1 fsel=1 func=OUTPUT pull=DOWN **<-------------- devrait être SPI1_SCLK !!**
- Le device spi1 est correctement créer (/dev/spidev1.0).
- Les messages vclog ne montrent pas d’erreur de chargement.
- J’ai désactivé le bus SPI0 pour vérifier s’il n’y avait pas une inter-action entre les deux bus SPI.
- Si je « set » la GPIO #21 à la fonction alternative 4 manuellement, la communication avec le device sur le bus SPI1 foncionne correctement. Mais dès que je redémarre la carte, je perd de nouveau la fonctionnalité de SPI1 sur la GPIO#21.
raspi-gpio set 21 a4
Si vous avez de nouvelles pistes à explorer, je vous en remercie d’avance car je sèche complètement sur le sujet.
Linux uc52 5.15.92-rt61-v8+ #1 SMP PREEMPT_RT Fri Apr 28 16:26:24 CEST 2023 aarch64 GNU/Linux
Lijh