A good serial communications protocol/stack for embedded devices? [closed]

久未见 提交于 2019-12-02 13:59:39

Have you considered HDLC or SDLC?

There's also LAP/D (Link Access Protocol, D-Channel).

Uyless Black's "Data Link Protocols" is always nearby on my bookshelf - you might find some useful material in there too (even peruse the TOC & research the different protocols)

CAN meets a number of your criteria:

  • Support multiple devices: It supports a large number of devices on one bus. It's not, however, compatible with RS485.
  • Guaranteed delivery: The physical layer uses bit-stuffing and a CRC, all of which are implemented in hardware on an increasing number of modern embedded processors. If you need acknlowedgement, you need to add that on top yourself.
  • Not master/slave: There are no masters or slaves; all devices can transmit whenever they want. The processor hardware deals with arbitration and contention.
  • OS independence: Not applicable; it's a low-level bus. What you put on top of that is up to you.
  • ANSI C: Again, not applicable.
  • Speed: Typically, up to 1 Mbps up to 40 m; you can choose your own speed for your application.

As mentioned, its definition is fairly low-level, so there's still work to be done to turn it into a full protocol to meet your needs. However, the fact that a lot of the work is done in hardware for you does it make very useful for a variety of applications.

Javier

I'd guess a reasonable starting point could be uIP.

(Adding Wikipedia article on µIP since original link is dead.)

Take a look at Profibus.

If you don't want master/slave, I think you ought to do the arbitration with hardware (Canbus, FlexRay).

Drazen Cika

Would you consider the MODBUS protocol? It is master/slave oriented, so the slave could not initiate the transfer, but otherwise is lightweight for implementation, free, and well supported with high level tools. You should just get a grasp on their terminology /like holding register, input register, output coil etc).

Phy level could be RS232, RS485, Ethernet...

Have a look at Microcontroller Internet Network (MIN):

https://github.com/min-protocol/min

Inspired by CAN but using standard UART hardware, with Fletcher's checksum and frame format checking for error detection and byte-stuffing to mark a frame header.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!