Question:
Le CTS et le RTS sont-ils nécessaires sur le port UART?
user92481
2016-05-25 19:12:07 UTC
view on stackexchange narkive permalink

Je travaille actuellement sur un projet où nous utilisons TIVA C TM4C123G et je m'inspire actuellement du tableau de bord comme conception de référence. J'ai plusieurs périphériques UART à connecter à la puce principale en utilisant UART, cependant sur les broches de la puce RTS et CTS ne sont marqués que sur l'UART1. Comment suis-je censé gérer cela?

Avez-vous regardé en ligne pour déterminer le but des broches RTS et CTS?Regardez cela et vous devriez avoir un aperçu de leurs exigences pour une application donnée.
Si vous utilisez RS485, vous aurez besoin du signal RTS pour basculer entre la réception et la transmission.
Vous avez besoin de * quelque chose * pour activer un émetteur-récepteur RS485, mais cela ne doit pas être la ligne RTS.Utiliser la ligne RTS est juste une sorte de piratage courant - "c'est là, nous pouvons le contrôler dans le logiciel, utilisons-le!"Mais sur un système embarqué, il existe généralement de nombreux GPIO répondant également à cette définition.
Cinq réponses:
Warren Hill
2016-05-25 19:41:15 UTC
view on stackexchange narkive permalink

Vous pourrez peut-être simplement ignorer ces signaux. CTS (Clear To Send) et RT (Request To Send) fournissent un mécanisme d'établissement de liaison afin que chaque appareil puisse dire à l'autre quand il est prêt à recevoir des données.

Cependant, de nombreux UART ne l'implémentent pas et non plus Supposons que l'autre extrémité puisse prendre des données à tout moment ou utiliser une autre méthode telle que XON / XOFF

La connexion matérielle avec RTS / CTS n'est pas utilisée très souvent sur les équipements modernes, mais vous devrez consulter le manuel, un peu d'appareils en ont encore besoin.

Merci pour votre réponse, cela me conforte un peu dans la possibilité de l'implémenter sans utiliser RTS et CTS.Je pensais que je pourrais potentiellement lier ces lignes à un GPIO normal, juste au cas où j'aurais besoin de faire une mise à jour latr en implémentant simplement RTS et CTS sur un logiciel en bitbanging GPIO avec RTS et CTS, mais je ne suis pas sûr si cela le feraittravailler ou pas ..?
Richard Crowley
2016-05-25 19:33:32 UTC
view on stackexchange narkive permalink

Cela dépend du type de "contrôle de flux" utilisé par vos "plusieurs périphériques UART" (non identifiés). Cela dépend également si vous avez besoin d'une communication simultanée avec vos périphériques, et s'ils doivent pouvoir «interrompre» le contrôleur de manière asynchrone, ou s'ils seront interrogés et «ne parleront qu'à». Tout cela fait partie de la conception globale du système, ce qui est un problème plus important que le problème précis que vous avez posé.

Merci pour votre réponse.Les appareils sont généralement: un module GSM, un émetteur-récepteur RS485 ou un émetteur-récepteur CAN.Je suis un peu nouveau dans ceux-ci, donc je ne sais pas si je peux dessiner paisiblement la disposition des schémas et des circuits imprimés sans avoir ces lignes RTS et CTS entre les périphériques et le MCU
Vous ne pouvez pas répondre à la question sur l'utilisation de RTS et CTS sans d'abord concevoir le concept plus large de la façon dont l'ensemble du système fonctionnera et de la façon dont les pièces se parleront.RTS et CTS ne sont que des éléments de la solution.Vous n'avez pas encore établi le protocole de contrôle de communication, donc vous ne savez pas comment (ou IF) vous aurez besoin de RTS et CTS.
Que dois-je faire alors?
Pour examiner le protocole utilisé par le périphérique cible que vous souhaitez vous connecter.
Revenez au début et déterminez COMMENT vous devez communiquer avec ces périphériques.Il semble que vous n'ayez pas encore fait une conception correcte du système.
Je suis actuellement la conception schématique et de référence fournie par les fabricants.Je sais que nous utiliserons UART pour communiquer entre le MCU et le périphérique
Vous devez faire des PLANS PLUS GRANDS sur le fonctionnement du logiciel.À quelle fréquence il doit communiquer avec les périphériques.S'il lancera la communication ou s'il devra accepter une entrée à la demande.Il y a des dizaines de questions sur l'architecture du système qui doivent être résolues avant d'arriver à RTS / CTS.
Arun Kumar Naidu
2017-10-19 03:15:28 UTC
view on stackexchange narkive permalink

RTS et CTS ne vous permettent que d'avoir le contrôle de flux. Peut-être que j'utilise une puce FTDI qui traduit les flux USB en UART ... voici 4 méthodes de contrôle de flux qui peuvent être programmées pour le dispositif FT232BM.

  1. Aucune - cela peut entraîner une perte de données à grande vitesse

  2. RTS / CTS - Prise de contact à 2 fils. L'appareil émettra si CTS est actif et abandonnera RTS s'il ne peut plus en recevoir.

  3. DTR / DSR - Prise de contact à 2 fils. L'appareil transmettra si le DSR est actif et abandonnera le DTR s'il ne peut plus en recevoir.

  4. XON / XOFF - le contrôle de flux se fait en envoyant ou en recevant des caractères spéciaux. L'un est XOn (transmission activée) l'autre est XOff (transmission désactivée).

En fonction des besoins, vous pouvez sélectionner ... il y a une commande sur la ligne du terminal que nous pouvons utiliser pour définir ou réinitialiser le contrôle de flux. Utilisez ce lien pour plus de détails.

stty --file / dev / ttyUSB0 -crtscts pour désactiver le contrôle de flux matériel

stty --file / dev / ttyUSB0 crtscts pour activer le contrôle de flux matériel.

stty -F / dev / ttyUSB0 -crtscts ixon ixoff pour désactiver hw flow active les logiciels xon et xoff.

supercat
2017-10-19 19:51:30 UTC
view on stackexchange narkive permalink

La prise en charge matérielle de RTS / CTS peut être avantageuse et parfois nécessaire, en fonction du "préavis" qu'un appareil peut donner quand il a besoin d'un appareil émetteur pour se retenir. Si un périphérique récepteur n'a pas de support matériel pour la libération automatique de RTS, il devra être en mesure de s'assurer qu'il est toujours en mesure de traiter tous les caractères entrants avant que la mémoire tampon matérielle puisse déborder. Si un appareil n'a pas de support matériel pour se retenir sur CTS, il devra alors éviter d'alimenter l'UART plus de caractères que le récepteur ne serait capable de gérer après la sortie de RTS.

Si l'émetteur et le récepteur incluent tous deux un support matériel pour RTS / CTS, ils pourront communiquer de manière fiable même si le récepteur ne dispose que d'un tampon à un seul caractère et que le logiciel du récepteur peut parfois prendre un certain temps pour répondre aux données entrantes (si le le récepteur abandonnerait des données à la réception du deuxième octet complet, il devrait libérer RTS comme pendant qu'il reçoit le premier, ce qui dégraderait les performances; s'il ne perdrait pas de données à moins que / jusqu'à ce que le bit de début d'un troisième octet arrive, il pourrait laisser RTS affirmé jusqu'à ce qu'il reçoive le second). Si le récepteur ne prend pas en charge le RTS matériel, une communication fiable ne sera pas possible à moins que le tampon du récepteur puisse contenir tout ce qui pourrait arriver alors qu'il est incapable de répondre aux données entrantes (par exemple, parce qu'il est trop occupé avec des interruptions de priorité plus élevée). Si le destinataire dispose d'un support matériel mais pas l'expéditeur, une communication fiable sera possible, mais seulement si le logiciel de l'expéditeur se met en marche pour ne jamais donner à l'UART plus de données que ce qui peut être transmis en toute sécurité.

Dans les puces avec des fonctionnalités de type PLD sur certaines broches, il peut être possible de truquer le support RTS brut dans les puces qui n'ont pas de support matériel réel en programmant une sortie pour se verrouiller automatiquement à chaque fois que la broche de réception série est faible. Cela aurait pour effet d'amener le récepteur à se signaler qu'il n'est pas prêt à chaque fois qu'une transmission commence. Une fois que le logiciel reçoit un octet, il serait alors en mesure de réaffirmer CTS pour faire savoir à l'expéditeur qu'il peut transmettre un autre octet. Les performances utilisant une telle approche seraient probablement mauvaises, mais si un appareil qui n'a ni le support matériel RTS ni la capacité de garantir de bons temps de réponse d'interruption doit recevoir des données d'un appareil qui arrête les données immédiatement lorsque son CTS (le RTS du récepteur) est libéré , une telle approche pourrait permettre un fonctionnement fiable.

Une autre approche qui peut parfois être utile dans les cas où un appareil sera réactif et non réactif à des intervalles prévisibles (par exemple, parce qu'il exécute périodiquement une tâche qui nécessite 100% de CPU, sans interruption, pendant des millisecondes à la fois) est pour qu'un périphérique libère RTS chaque fois qu'il est sur le point d'entrer dans un état non réactif, que son tampon de réception soit prêt à accepter certaines données. Le plus gros problème avec cette approche est que si un appareil n'est prêt à recevoir des données qu'à certaines heures et qu'un autre vérifie uniquement s'il est prêt à recevoir des données à certains moments, aucune donnée ne sera envoyée à moins que ces heures ne coïncident.

Personnellement, je considère que le support matériel RTS / CTS est une fonctionnalité intéressante, mais beaucoup de fabricants de puces ne semblent pas le faire.Heureusement, les puces FTDI USB-série répondent très bien à ces signaux (d'autres peuvent aussi bien, mais je ne les ai pas testés), ce qui permet à un périphérique sans support matériel RTS / CTS de demander un octet à la fois enaffirmer brièvement RTS (je ne suis pas sûr de la largeur minimale) chaque fois que le logiciel récepteur vérifie un octet entrant et le libère peu de temps après.Cela fonctionnera de manière fiable à condition que RTS ne soit jamais affirmé accidentellement pendant plus d'un intervalle de caractères à la fois.

filo
2016-05-26 13:05:23 UTC
view on stackexchange narkive permalink

RTS et CTS ne sont pas nécessaires. RX et TX suffisent si vous effectuez tout le contrôle de flux dans le logiciel.

Par exemple: RTS peut être utilisé si vous avez un émetteur-récepteur RS-485 (qui ne peut transmettre ou recevoir qu'à la fois) pour désactiver automatiquement le récepteur et activez l'émetteur lorsque vous souhaitez envoyer quelque chose.

Si votre MCU n'a pas de RTS matériel, vous pouvez également faire de même avec un GPIO et un morceau de code.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...