slogic32u3-python-libsigrok-stream.py

Sipeed SLogic32U3 : Analyseur logique 32 canaux USB 3.2 Gen2 · Fichier : slogic32u3-python-libsigrok-stream.py · Langage : python · Usage : Acquérir des données en temps réel et les traiter avec NumPy via libsigrok.

Exemple Python utilisant libsigrok-python pour ouvrir l'appareil, configurer l'échantillonnage et récupérer les paquets de données.

Ce code nécessite l'installation de libsigrok et ses bindings Python. Il illustre l'ouverture de la connexion USB, la configuration de la fréquence d'échantillonnage (ici 800 MS/s pour 8 canaux) et la boucle de réception des données. Le traitement des paquets bruts nécessite une gestion spécifique du format binaire.

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()

← Retour à la fiche