slogic32u3-python-libsigrok-stream.py

Sipeed SLogic32U3: Analizador lógico de 32 canales USB 3.2 Gen2 · Archivo : slogic32u3-python-libsigrok-stream.py · Lenguaje : python · Uso : Acquérir des données en temps réel et les traiter avec NumPy via libsigrok.

Ejemplo de Python que utiliza libsigrok-python para abrir el dispositivo, configurar el muestreo y recuperar paquetes de datos.

Este código requiere la instalación de libsigrok y sus enlaces de Python. Ilustra la apertura de la conexión USB, la configuración de la frecuencia de muestreo (aquí 800 MS/s para 8 canales) y el bucle de recepción de datos. El procesamiento de paquetes sin procesar requiere un manejo específico del formato binario.

slogic32u3-python-libsigrok-stream.py

import libsigrok
import numpy as np
import time

def capture_logic():
    # Initialiser le contexte libsigrok
    ctx = libsigrok.Context()
    
    # Obtenir la liste des pilotes et des appareils
    drivers = ctx.driver_list()
    # Recherche du pilote SLogic (nom à vérifier selon la version du pilote)
    driver = next((d for d in drivers if 'slogic' in d.name.lower()), None)
    if not driver:
        raise Exception("Pilote SLogic non trouvé")
        
    # Obtenir la liste des appareils pour ce pilote
    devices = driver.scan()
    if not devices:
        raise Exception("Aucun appareil SLogic détecté")
        
    dev = devices[0]
    dev.open()
    
    # Configurer les canaux (ex: activer les 8 premiers canaux)
    # Note : L'API libsigrok-python peut varier, ceci est une structure type
    dev.config_set(libsigrok.CONF_SAMPLE_RATE, 800000000) # 800 MS/s pour 8 canaux
    dev.config_set(libsigrok.CONF_NUM_LOGICAL_CHANNELS, 8)
    
    # Démarrer l'acquisition
    dev.start()
    
    print("Acquisition en cours...")
    data_buffer = []
    start_time = time.time()
    
    try:
        while time.time() - start_time < 1.0: # 1 seconde
            packet = dev.receive()
            if packet:
                data_buffer.append(packet)
    finally:
        dev.stop()
        dev.close()
        
    # Traitement basique (exemple : compter les transitions sur le canal 0)
    # Attention : Le format des données dépend de la configuration (bits/packed)
    print(f"Packets reçus : {len(data_buffer)}")

if __name__ == "__main__":
    capture_logic()

← Volver a la ficha