J'ai un microcontrôleur qui envoie des données via UART à 3 MBaud. Le microcontrôleur envoie un octet de démarrage/état tous les 8000 octets. J'aime mon script python pour lire toutes les données et analyser les données entre les octets de début.uart haut débit en python
Je sais que Python est capable de gérer 3 Mbauds depuis cet extrait de code montre les positions correctes des octets de début:
ser = serial.Serial('COM3', 3000000, timeout=None)
_RawData = ser.read(100000)
for cnt in range(0, 100000, 1):
#search for start byte and print the position
if(_RawData[cnt] < 128): print(cnt)
Mais je dois lire en permanence le flux de données, avec cet exemple je lâche des données entre les commandes "ser.read (x)". Donc, je dois comparer les données pendant la lecture du flux:
ser = serial.Serial('COM3', 3000000, timeout=None)
_RawData = []
cnt = 0
for c in ser.read():
cnt += 1
#search for start byte
if(c < 128):
#print start byte position
print(cnt)
# -= start thread =-
_RawData.clear()
_RawData.append(c)
Mais trouvé que la lecture d'un seul octet est trop lent pour que la vitesse de transmission, la position d'octet de départ est pratiquement généré de manière aléatoire. Est-ce que je peux lire mon flux de données sans perte?
Aucun éditorial sur l'OP, mais c'est hilarant que python ait même la possibilité de parler à un uart. Je suppose que quand tout ce que vous avez est un marteau, tout ressemble à un clou. – nicomp
Le 'print' vous ralentit probablement (le terminal est probablement plus lent que votre uart). Autre que cela, le modèle normal est 'pour chunk dans s.read (chunksize): pour ch dans le morceau: ...' – thebjorn
@ nicomp: Quel est le problème avec UART? C'est toujours le moyen le plus simple d'obtenir des données d'un microcontrôleur sur le PC. Et avec l'aide d'une puce FTDI vous pouvez l'avoir alimenté par USB avec une vitesse jusqu'à 3Mbps. Ce n'est pas parce que c'est un vieux protocole que c'est mauvais. – Mathiable