2010-12-01 22 views
1

Je souhaite envoyer des messages via le port série à l'aide de PySerial. L'un des paramètres du constructeur en série est 'bytesize'. J'ai essayé serial.SEVENBITS et serial.EIGHTBITS et n'ai pas remarqué de différence. La documentation est un peu vague et je suis nouveau à la fois Python et la communication série. Est-ce que cela définit simplement la valeur maximale qu'un octet peut contenir ou est-ce quelque chose à faire avec les octets signés? Quelqu'un peut-il clarifier pourquoi j'utiliserais 7 bits sur 8? J'ai cherché mais je n'ai pas trouvé de réponse.'bytesize' dans le module PySerial

Merci

Répondre

1

Ceci fait référence au nombre de bits de données dans chaque caractère transmis. De wikipedia:

bits de données

Le nombre de bits de données dans chaque caractère peut être 5 (pour le code Baudot), 6 (rarement utilisé), 7 (pour vrai ASCII), 8 (pour tout type de données, car cela correspond à la taille d'un octet), ou 9 (rarement utilisé). 8 bits de données sont presque utilisé universellement dans les nouvelles applications . 5 ou 7 bits généralement seulement faire sens avec des équipements plus anciens tels que les téléimprimeurs.

La plupart des conceptions de communications série envoient les bits de données dans chaque octet LSB (Bit le moins significatif) en premier. Cette norme est également appelée "little endian". Également possible, mais rarement utilisé, est "big endian" ou MSB (Most Significant Bit) premières communications série . (Voir Endianness pour plus sur la commande de bits.) L'ordre de bits n'est généralement pas configurable, mais les données peuvent être permutées par octet seulement avant l'envoi .

+0

Re « La plupart des communications série dessins envoient les bits de données dans chaque octet LSB » La plupart du matériel interfaces série l'affiche est susceptible de rencontrer avec peu abstrait pyserial commande loin, fournissant seulement un octet interface. D'autre part, LSB Standards [UART (inclut RS-232)] mais MSB Standards [SPI, I2C] – SingleNegationElimination

+0

Merci les gars. Donc je suppose que c'est juste mieux d'aller avec 8 bits alors ... – Jack

+0

@Jack, vous devriez aller avec tout ce dont vous avez besoin d'interfaçage (généralement 8, comme indiqué).Si vous contrôlez les deux extrémités, vous auriez peu de raison d'utiliser 7 bits à moins d'avoir une combinaison (improbable) d'exigences impliquant des données uniquement ASCII, et des besoins de performance tels que l'omission de la surcharge du huitième bit redondant serait essentiel pour vous. –

3

Historiquement, il était courant d'envoyer uniquement le texte ASCII via une connexion série qui se classent parmi sept bits, et un huitième bit serait utilisé comme un marqueur de parité qui pourrait indiquer si les données étaient transmis correctement. Etant donné que la vérification de parité n'attrape pas les erreurs sur un nombre pair de bits et qu'elle ne peut pas corriger les données, elle n'est pas très utile et la pratique moderne consiste à utiliser des données 8 bits et à détecter les erreurs. correction à une couche supérieure de protocole.

La réponse courte est que vous voulez probablement 8 bits, mais cela dépend de ce que l'autre extrémité de la connexion série attend. D'après votre autre question, il semble que vous programmiez les deux extrémités de la connexion et que vous contrôliez vos messages. Il est donc très simple d'utiliser le mode 8 bits.

+0

Merci Russell, très apprécié :) – Jack