Transmissions série et snooping

Transmissions série et snooping

Vous le savez peut-être, le Yocto-RS232 permet d'enregistrer ce qu'il se passe sur une ligne série, ce qui est fort utile pour faire de l'ingénierie inverse sur un protocole de communication inconnu. Jusqu'à présent la méthode qui permettait de faire ça était un peu brute de décoffrage. Cette semaine on vous présente une nouvelle fonction de l'API un peu plus conviviale ainsi qu'une petite application qui l'utilise.


Faire du snooping avec un Yocto-RS232

Il est en effet possible de configurer le Yocto-RS232 pour qu'il espionne écoute ce qu'il se passe sur une ligne RS232. Pour cela il suffit d'intercaler un petit adaptateur sur la connexion, on branche le Yocto-RS232 sur cet adaptateur et c'est tout. L'adaptateur est question est vendu tout fait par Yoctopuce sous le nom RS232-Snooping-Adapter, mais vous pouvez aussi le fabriquer vous même: il ne contient aucun composant électronique et le schéma de câblage se trouve dans la documentation du Yocto-RS232.

Le Yocto-RS232 peut écouter une ligne série grâce à un petit adaptateur
Le Yocto-RS232 peut écouter une ligne série grâce à un petit adaptateur


Une fois que tout est branché il suffit de configurer le Yocto-RS232 en mode snooping. Dans ce mode le Yocto-RS232 est capable d'écouter les transmissions qui passent sur le câble RS232 quelque soit leur direction. Jusqu'à présent, pour voir ce que le module avait observé, il fallait appeler une URL spéciale du VirtualHub et on obtenait les données brutes en mode texte. Ce qui n'était pas forcément super pratique à utiliser.

La fonction snoopMessages

Si vous mettez à jour votre API ainsi que le firmware de votre Yocto-RS232, vous aurez alors accès la fonction YserialPort.snoopMessages() qui vous renverra la liste des messages observés sous la forme d'un tableau d'objets YSnoopingRecord contenant:

  • La direction du message (RX=0 , TX=1)
  • Le temps écoulé, en ms, depuis le début du message précédent
  • Le contenu du message

Voici un exemple en trois lignes de Python qui vous montre à quel point elle est facile à utiliser:

serialPort = YSerialPort.FirstSerialPort()
messagesList = serialPort.snoopMessages(0)
for  msg in messagesList:
    print (str(msg.get_time())+"ms " + str(msg.get_direction()) + " "  + msg.get_message())


Quelque remarques

  • La fonction snoopMessages() renvoie le contenu du buffer du Yocto-RS232 à partir de la dernière fois où elle a été appelée. Il faut donc l'appeler régulièrement pour obtenir les messages en temps réel.
  • Si le port série est configuré avec un protocole ASCII, YSnoopingRecord.get_message() renverra le contenu du message en clair, s'il s'agit d'un protocole binaire, il renverra le message sous la forme d'une chaine hexadécimale.
  • Le buffer du Yocto-RS232 est circulaire, il faut donc appeler la fonction snoopMessages() assez régulièrement pour être sûr de ne pas perdre de messages.
  • Le temps maximum entre deux messages, renvoyé par YSnoopingRecord.get_time(), que peut calculer le Yocto-RS232 est 60 secondes. Donc si vous obtenez une valeur de 60000ms, vous savez qu'il s'est peut-être écoulé plus d'une minute depuis le dernier message.
  • Le temps renvoyé par YSnoopingRecord.get_time() est à résolution variable. Cette résolution est environ 10% du temps mesuré.



Application

En guise d'exemple d'application de la fonction YSnoopingRecord.get_message(), on vous a codé une petite page web qui affiche en temps réel les messages observés par Yocto-RS232. Elle se présente sous la forme d'une timeline rouge le long de laquelle viennent s'afficher les messages. Les messages du buffer de réception sont affichés dans la moitié supérieure et les messages du buffer d'émission dans la partie inférieure.

Une application html pour voir que ce qu'il se passe sur une ligne série
Une application html pour voir que ce qu'il se passe sur une ligne série



Tout en bas de la fenêtre une interface très simple permet de:

  • Choisir le YSerialPort à utiliser.
  • Régler les paramètres du port en question. N'oubliez par de choisir FlowControl=Snooping pour faire du snooping.
  • Configurer l'échelle de temps

On lance la capture en cliquant sur le bouton play, et on l'arrête en re-cliquant dessus. Le bouton avec une croix sert à effacer le contenu de la capture. Notez que si vous changez le niveau de zoom d'affichage du browser, le contenu s'adaptera automatiquement.

Utilisation

Vous pouvez télécharger cette application en cliquant sur ce lien. C'est un petit fichier Zip, dézippez le tout dans le répertoire de votre choix. Vérifiez que votre Yocto-RS232 est bien connecté, lancez un VirtualHub et ouvrez le fichier yoctosnoop.html avec un browser web récent.

Une dernière chose

La fonction YSerialPort.snoopMessages() marche non seulement dans le mode "snooping", mais aussi dans les autre modes. Vous pouvez parfaitement l'utiliser pour débugger des transmissions envoyées ou reçues directement par le Yocto-RS232.

Une deuxième dernière chose

Pour faire simple, on n'a parlé que Yocto-RS232, mais cette fonctionnalité bien pratique est aussi désormais présente sur d'autres modules qui ont une fonction YserialPort: le Yocto-Serial et le Yocto-RS485.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.