Px4 için barometreden veri alamama

Hayırlı günler,

Kart belgelendirmesinde LPS22DF Kart Özellikleri - T3 Foundation Gemstone Project barometresi yer aldığı söylenmekte ancak başka sayfada ise PX4 - T3 Foundation Gemstone Project burada katta barometre bulunmadığı yazıyor. Ek olarak bir süredir px4 sürücüleri üzerinden barometreden veri almaya çalışsam da veri gelmemekte. lps22df: no instance started (no device on bus?) ek olarak device tree üzerinden linux erişimine px4 ile karışmasın diye kapatıldı.

k3-am67a-t3-gem-o1-px4-r5f.dtso
// SPDX-License-Identifier: GPL-2.0-only OR MIT
/*
 * PX4-R5F mode: disable Linux drivers for peripherals owned by MAIN R5F.
 *
 * Mutually exclusive with edgeai-apps.dtbo and ArduPilot enable overlays
 * (spidev, pwm-*, uart-ttys*).
 *
 * Copyright (C) 2026 T3 Foundation - https://www.t3vakfi.org/
 */

/dts-v1/;
/plugin/;

/*
 * Helper to show loaded overlays under: /proc/device-tree/chosen/overlays/
 */
&{/chosen} {
	overlays {
		k3-am67a-t3-gem-o1-px4-r5f.kernel = __TIMESTAMP__;
	};
};

/ {
	fragment@0 {
		target = <&mcu_spi0>;
		__overlay__ { status = "disabled"; };
	};
	fragment@1 {
		target = <&main_uart0>;
		__overlay__ { status = "disabled"; };
	};
	fragment@2 {
		target = <&main_uart1>;
		__overlay__ { status = "disabled"; };
	};
	fragment@3 {
		target = <&main_uart6>;
		__overlay__ { status = "disabled"; };
	};
	fragment@4 {
		target = <&mcu_i2c0>;
		__overlay__ { status = "disabled"; };
	};
	fragment@5 {
		target = <&epwm0>;
		__overlay__ { status = "disabled"; };
	};
	fragment@6 {
		target = <&epwm1>;
		__overlay__ { status = "disabled"; };
	};
	fragment@7 {
		target = <&ecap0>;
		__overlay__ { status = "disabled"; };
	};
	fragment@8 {
		target = <&ecap1>;
		__overlay__ { status = "disabled"; };
	};
	fragment@9 {
		target = <&ecap2>;
		__overlay__ { status = "disabled"; };
	};
	/* IMU_EN (mcu_gpio0 pin 12): base DTS gpio-hog conflicts with R5F GPIO_IMU_EN */
	fragment@10 {
		target = <&mcu_gpio0>;
		__overlay__ { status = "disabled"; };
	};
};

Beklenen

LPS22DF, MCU_MCSPI0 channel 1. WHO_AM_I register 0x0F, değer 0xB4. SPI mode 3, 10 MHz. Command byte 0x8F (0x0F | 0x80).

Ölçülen

Aynı boot, aynı MCSPI (0x04b00000):

  • Channel 3, ICM-20948: WHO_AM_I 0xEA.
  • Channel 1, 0x0F data phase, iki kez: RX word 0x00000000. 0xB4 kelimenin hiçbir byte’ında yok.
  • Channel 1, 0x11 (CTRL_REG2) data phase, iki kez: 0x00000003. Datasheet reset değeri 0x00.
  • Transfer bitiyor: TXS=1, RXS=1. REVISION=0x2b.

Sürücü RX0 low 8 bitini kullanıyor. 0x03 o low byte’ta. Kimlik kelimesinin tamamı sıfır olduğu için yanlış byte seçimi değil.

Yazılımın o anda yazdığı

  • CS1 pad A10 mux 0. Okunan pad 0x00010000.
  • Channel 1 CHCONF=0x201603d3: FORCE=1, EPOL=1, mode 3. TRM SPRUJB3C 12.1.3.4.3.5.2: bu kombinasyon SPIEN low.
  • SINGLE=1. SPIENSLV=0 channel 1 ve channel 3’te. ICM 0xEA verdiği için bu alan CS3’ü de seçmiyor.

Soru

Controller mode, SINGLE=1, channel 1 FORCE=1 iken RX0 neden bir register için 0x00000003, kimlik register’ı için 0x00000000 oluyor? Channel register bankası ve FORCE bu SoC’ta CS1’i seçmek için yeterli mi, yoksa channel 1’den önce EOT veya başka bir CHCONF adımı şart mı?

sürücü kısmında LPS22DF ıkısmında ve spi kısmında debub logları bıraksam da bir sonuç alamadım. Bundan sonrasında ne yapılabilir.

boards/t3gemstone/o1: enable the LPS22DF barometer · Ehli-Kesf/PX4-Autopilot-gemstone@ae249e3 · GitHub incelendi

Merhaba @arastirmaci,

Detaylı ölçümleriniz ve paylaştığınız register dökümleri için çok teşekkürler, sorunu netleştirmemizi kolaylaştırdı.

Sorunun kaynağı yazılım veya SPI yapılandırması değil, elinizdeki kartın donanım revizyonu. Size vermiş olduğumuz T3 Gemstone O1 seri üretim öncesi bir prototipti. Seri üretim kartlarda barometre olarak LPS22DFTR bulunuyor, ancak prototipte farklı bir barometre kullanılmıştı ve o sensör seri üretime alınmadı. Dokümanlardaki LPS22DFTR bilgisi seri üretim kartları için geçerli.

Ölçümleriniz de bunu doğruluyor. Aynı MCSPI üzerinde channel 3’teki ICM-20948 doğru WHO_AM_I değerini (0xEA) dönüyor, yani controller, SPI modu ve chip select mantığı çalışıyor. Channel 1’de 0xB4 gelmemesinin sebebi, o hatta LPS22DF’nin bulunmaması. Bu nedenle EOT veya ek bir CHCONF adımı aramanıza gerek yok.

Dokümantasyonda yer alan PX4 sayfasında kartta barometre bulunmadığının yazması da güncel değil, belgeleri tutarlı hale getireceğiz, belirttiğiniz için teşekkürler.

İyi çalışmalar.