[应用相关] 高效,可靠,安全的串口通讯开源方案

[复制链接]
 楼主| 问天少年 发表于 2022-6-1 10:07 | 显示全部楼层 |阅读模式

原文来自公众号:小麦大叔

在嵌入式开发中,经常会用到串口通讯。面对不同应用场景,需要不同的方案。

今天我们来讲一下高效,可靠,安全的方案,记得看到最后,会有收获。

常见的有串口轮询模式,串口中断模式,串口DMA接收传输等等;

利用串口的空闲中断配合DMA的环形缓冲区模式,可以高效接收不固定长度的消息报文

下图中经过黄色的高电平时间空闲之后,就会产生一个空闲事件,IDLE EVENT

396706296c9829d6f2.png

因为DMA功能有HC和TC中断;

  • HC  (Harf Complete)DMA传输一半成功标志;
  • TC   (Total Complete)  DMA传输完成成功标志;

举个例子;

如下图所示,这里分配了一个DMA缓冲区,大小是12字节,如果从地址1开始接收,会出现以下这两种情况;


  • DMA接收到第6个字节的时候,会触发HC事件;
  • DMA接收到第12个字节的时候,会触发TC事件;
  • 68966296c995661ff.png
  • 这个思路其实我之前也有实践过,但是没有很好地利用HC和TC事件。

    所以无法处理这种情况,即DMA缓冲区处于环形模式(Circular)的时候,数据覆盖的问题,最近看到了一个非常棒的开源项目,这里的思路非常不错,下面会详细介绍。

    下面是DMA HC/DMA TC/Idle组合进行串口接收的细节,如下图所示;


888156296c9b5eabe7.png

再次简单介绍一下缩略词的含义;

  • R 读取;
  • W 写入;
  • I 空闲信号;
  • HT Half-Transfer complete DMA缓冲区半传输完成;
  • TC Transfer-Complete DMA缓冲区全部接收完成;

这里简单介绍一下情况E的解决方案,上面图片最右边小图;

  • 缓冲区大小20格,这里假设20字节,情况E需要接收30个字节,也就是说,10字节可能会被覆盖

  • 经过前面的四次接收后,串口继续从字母R处接收数据至DMA缓冲区;

  • 接收4字节时,会触发TC事件,这时候可以将4字节数据处理;

  • 746216296c9c30222b.png

  • 因为是环形模式,所以回到第一个字节处,继续接收10字节,触发HT事件,这时候可以处理10字节数据;

  • 302256296c9da5cdd9.png

  • 第三步,继续接收10字节,触发TC事件,其中,已经有4字节被覆盖(下图橙色所示),因为之前这部分数据已经处理了,所以,即使覆盖也不影响;

  • 449126296c9e5b669e.png

  • 第四步,上述已经接收了24个字节,所以还有6个字节没有接收,后面接收会产生空闲信号,并对之前的数据区域进行覆盖,如下图示所示;

  • 270446296c9f25b26d.png 所以,不难发现,如果只使用空闲中断,如果需要接收的数据长度大于缓冲区,就会出现数据覆盖的情况,而加上DMA的HT和TC中断,就完美解决了这样的问题;

    当然除了这些,还有很多优秀的方案,这个项目提供大量的例子。




海滨消消 发表于 2022-6-2 10:47 来自手机 | 显示全部楼层
挺不错的方案,有具体的应用案例吗
xiaoyaozt 发表于 2022-7-8 10:25 | 显示全部楼层
楼主的资料是开源的 吗   
xiaoyaodz 发表于 2022-7-9 15:13 | 显示全部楼层
如何避免数据被覆盖呢?
cehuafan 发表于 2022-7-9 15:59 | 显示全部楼层
这个没有完整的设计方案呢   
olivem55arlowe 发表于 2022-7-9 17:57 | 显示全部楼层
串口的loop吗   
fengm 发表于 2022-7-9 21:33 | 显示全部楼层
DMA缓冲区处于环形模式可靠吗   
juventus9554 发表于 2022-7-10 12:58 | 显示全部楼层
开源的?
tail066 发表于 2022-7-10 13:54 | 显示全部楼层
画了几个图挺漂亮,具体实施呢
gaoyang9992006 发表于 2022-7-12 17:19 | 显示全部楼层
方案不错
Uriah 发表于 2022-10-3 16:30 | 显示全部楼层

在掌握对象的变化频度时是有效的
Bblythe 发表于 2022-10-3 19:29 | 显示全部楼层

大部分单片机都带有加密锁定位或者加密字节
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

564

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部