cm3588-gpio-i2c-control-7.ino
Ejemplo en Python usando smbus2 para consultar un sensor I2C (ej. BMP280) a través de los buses de hardware RK3588, incluyendo verificación de ID de dispositivo.
El CM3588 incluye múltiples controladores I2C. Habilite I2C1 en el Device Tree (dts) o mediante herramientas de configuración del sistema. Instale 'smbus2' y 'gpiod'. Los pines GPIO deben estar mapeados correctamente según la placa base específica utilizada.
cm3588-gpio-i2c-control-7.ino
import time
import smbus2
import gpiod
# Configuration matérielle CM3588
# Bus I2C1 est généralement disponible sur les pins 3-5 (SDA1/SCL1) via le connecteur 100 broche
# Vérifiez avec 'i2cdetect -y 1' pour voir l'adresse du capteur (ex: 0x76)
I2C_BUS_NUM = 1
SENSOR_ADDRESS = 0x76 # Exemple BMP280
CHIP = "/dev/gpiochip0" # Chip GPIO principal du RK3588
PIN_SDA = 44 # Correspondance physique vers GPIO logique (dépend du pinout exact du carrier board)
try:
# Initialisation du bus I2C
bus = smbus2.SMBus(I2C_BUS_NUM)
# Vérification de la présence du capteur
try:
device_id = bus.read_byte_data(SENSOR_ADDRESS, 0xD0)
if device_id != 0x58:
print(f"Erreur : Device ID inattendu {device_id} (attendu 0x58)")
exit()
print("Capteur BMP280 détecté.")
except OSError:
print("Erreur : Impossible de communiquer avec le capteur. Vérifiez le câblage et i2cdetect.")
exit()
# Lecture simplifiée de la pression (nécessite lecture des coefficients de calibration pour précision réelle)
print("Lecture en cours...")
while True:
try:
# Lecture des bits de données brutes (simplifié)
msb = bus.read_byte_data(SENSOR_ADDRESS, 0xF7)
lsb = bus.read_byte_data(SENSOR_ADDRESS, 0xF8)
xlsb = bus.read_byte_data(SENSOR_ADDRESS, 0xF9)
adc_p = ((msb << 12) | (lsb << 4) | (xlsb >> 4))
print(f"Valeur brute pression ADC: {adc_p}")
time.sleep(1)
except KeyboardInterrupt:
break
except Exception as e:
print(f"Erreur de lecture: {e}")
break
finally:
bus.close()
print("Bus I2C fermé.")