40 votes

Un bon protocole / pile de communications série pour les périphériques intégrés?

Après avoir écrit plusieurs personnalisée différents protocoles de série pour divers projets, j'ai commencé à devenir frustré de ré-inventer la roue à chaque fois. Au lieu de continuer à développer des solutions personnalisées pour chaque projet, j'ai été à la recherche pour plus de solution générale. Je me demandais si quelqu'un connaît un protocole série (ou, mieux encore, la mise en œuvre) qui remplit les conditions suivantes:

  • Support de plusieurs périphériques. Nous aimerions être en mesure de soutenir un bus RS485.
  • La garantie de livraison. Une sorte de mécanisme de reconnaissance, et une simple erreur de détection (CRC16 est probablement pas un problème).
  • Pas de maître/esclave. Idéalement, l'esclave(s) serait capable d'envoyer des données de manière asynchrone. C'est principalement pour des raisons d'esthétique, le concept de bureaux de chaque esclave ne se sent pas le droit de me.
  • OS de l'indépendance. Idéalement, il ne serait pas compter sur un multitâche préemptif de l'environnement à tous. Je suis prêt à l'admettre si je peux obtenir les autres trucs.
  • ANSI C. Nous avons besoin pour être en mesure de le compiler pour plusieurs architectures différentes.

La vitesse n'est pas trop un problème, nous sommes prêts à donner un peu de vitesse dans le but de répondre à certains de ces besoins. Nous tenons toutefois à minimiser la quantité de ressources nécessaires.

Je suis sur le point de commencer à mettre en œuvre un protocole à fenêtre glissante avec greffé et les accusés de réception sans sélective répéter, mais la pensée que peut-être quelqu'un pourrait me sauver de l'ennui. Quelqu'un sait-il d'un projet existant, que je pouvais en tirer profit? Ou peut-être une meilleure stratégie?

Mise à JOUR
J'ai sérieusement considéré comme une implémentation de TCP/IP, mais espérais vraiment pour quelque chose de plus léger. De nombreuses caractéristiques de TCP/IP sont overkill pour ce que je suis en train de faire. Je suis prêt à accepter (à contrecœur) que peut-être les caractéristiques que je veux juste ne sont pas inclus dans le plus léger des protocoles.

Mise à JOUR 2
Merci pour les conseils sur le POUVEZ. J'ai regardé dans le passé et sera probablement l'utiliser dans l'avenir. J'aimerais vraiment que la bibliothèque pour gérer les accusés de réception, mise en mémoire tampon, les tentatives etc, mais. Je suppose que je suis plus à la recherche d'un réseau/une couche de transport au lieu d'une liaison de données/de la couche physique.

Mise à JOUR 3
Il semble donc qu'un état de l'art dans ce domaine est:

  • Une ligne en bas de la pile TCP/IP. Probablement commencer avec quelque chose comme lwIP ou de l' uIP.
  • Une fonction de mise en œuvre, il serait probablement s'appuient fortement sur le bus can, donc il ne serait pas utile sur d'autres couches physiques. Quelque chose comme PEUT le Festival pourrait aider le long du chemin.
  • Un HDLC ou SDLC mise en œuvre (comme cette une). C'est probablement la route que nous allons prendre.

N'hésitez pas à poster plus de réponses si vous tombez sur cette question.

12voto

Dan Points 6319

Avez-vous envisagé de HDLC ou SDLC?

Il y a aussi LAP/D (Link Access Protocol, Canal D).

Uyless Black "Protocoles de Liaison de Données" est toujours à proximité sur mon étagère - vous pouvez trouver des informations utiles là aussi (même parcourir la table des matières et de la recherche les différents protocoles)

6voto

Javier Points 33134

Je suppose qu'un point de départ raisonnable pourrait être l' UIP .

5voto

Steve Melnikoff Points 1694

POUVEZ répond à un certain nombre de vos critères:

  • Support de plusieurs périphériques: Il prend en charge un grand nombre d'appareils sur un bus. Ce n'est pas, cependant, compatible avec RS485.
  • Garantie de livraison: La couche physique utilise des bits de bourrage et un CRC, qui sont mis en œuvre dans le matériel sur une augmentation du nombre de modernes des processeurs embarqués. Si vous avez besoin d'acknlowedgement, vous avez besoin d'ajouter que sur le dessus de vous-même.
  • Pas maître/esclave: Il n'y a pas de maîtres ou esclaves; tous les appareils peuvent transmettre à chaque fois qu'ils veulent. Le processeur traite de l'arbitrage et de la contention.
  • OS de l'indépendance: Non applicable; c'est un faible niveau de bus. Ce que vous mettez sur le dessus de qui est à vous.
  • ANSI C: Encore une fois, n'est pas applicable.
  • Vitesse: en général, jusqu'à 1 Mbit / s jusqu'à 40 m; vous pouvez choisir votre propre vitesse pour votre application.

Comme mentionné, sa définition est assez bas niveau, donc il y a encore du travail à faire pour le transformer en un protocole complet pour répondre à vos besoins. Cependant, le fait que beaucoup de travail est effectué dans le matériel pour vous est-il très utile pour une variété d'applications.

2voto

dcika Points 178

Souhaitez-vous envisager le protocole MODBUS? Il est orienté maître / esclave, de sorte que l'esclave ne peut pas initier le transfert, mais reste léger pour la mise en œuvre, libre et bien pris en charge avec des outils de haut niveau. Vous devez juste comprendre leur terminologie / type registre de maintien, registre d’entrée, bobine de sortie, etc.).

Le niveau de phy pourrait être RS232, RS485, Ethernet ...

1voto

KeyserSoze Points 2103

Jetez un coup d'œil à Profibus .

Si vous ne voulez pas maître / esclave, je pense que vous devriez faire l'arbitrage avec du matériel ( Canbus , FlexRay ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X