vesperW · 12月11日

FreeRTOS-TCP 软件架构及收发流程

如今网络发达的今天,越来越多的设备都有联网的需求,联网的方式也越来越多。

在 2022 年 11 月于纽伦堡举办的智能生产解决方案(SPS)展览会上,由 Analog Devices、Arm、Amazon Web Services (AWS)、B&R Industrial Automation、莱迪思半导体、 施耐德电气、Texas Instruments 和 NXP 等 8 家合作伙伴组成的一个工作组宣布, 将利用 FreeRTOS 创建一个开放源代码的基于时间敏感网络(TSN)的开放平台通信联合架构(OPC UA)。

为了使 OPC UA 与现有的工业协议一样在现场得到广泛应用, 支持 OPC-UA/TSN 的设备价格必须与现有的解决方案持平。这就需要有支持 OPC-UA/TSN 的基于低成本 MCU 和低功耗 FPGA SoC 的设备。

FreeRTOS-plus-TCP 软件架构

源码地址:

https://github.com/FreeRTOS/FreeRTOS-Plus-TCP

在 FreeRTOS+TCP 堆栈的现有设计中,IP 任务被设计为事件驱动任务。它 它在一个 FreeRTOS 队列上超时阻塞(挂起),应用程序和网络接口向该队列发布事件 。当接收到一个事件(在队列中发布的事件)时,IP 任务会解除阻塞并处理 这些事件。这些事件包括:

  • 从套接字 API 发送/接收事件,以及向套接字 API 发送/接收事件
  • IP 堆栈定时器事件
  • 其他网络事件(如网络上行/下行事件)

队列中收到的所有事件当前都以相同的优先级进行处理 (因为只有一个 SW 队列),与流量类型、套接字配置、协议等无关。

image.png

支持 TSN 的现有架构的局限性

  • 现有堆栈中没有处理多优先级流量数据的选项。
  • 三次上下文切换(应用程序任务到 IP 任务和 IP 任务到网络驱动程序任务)可能 会使 TSN 运行的发送和接收延迟变得不确定。
  • FreeRTOS-plus-TCP 空闲任务 PrvIPTask 目前的优先级高于 应用任务。这将造成问题,因为 TSN 较高的吞吐量可能要求应用程序 任务的优先级高于空闲任务。
  • 在发送和接收时使用相同的以太网驱动任务 将对 TSN 的高速吞吐量构成挑战。

向前迈进

我们正在根据以下设计原则推进 FreeRTOS+TCP 堆栈:

API:

  • 针对尽力而为和 TSN 流量的通用 API。
  • 为了支持 TSN 流量类型,引入一个名为 "FREERTOS_AF_TSN 的新的 "xDomain" ——在 "FreeRTOS_socket" API 中。

流量分离层:

  • 套接字层之后的解码层可区分尽力而为 TCP 流量 和 TSN 流量。
  • 这一层还可区分各种优先级的 TSN 流量。

流量优先级和多优先级队列:

  • 支持多优先级,以便在第 2 层获得确定性流量。
  • 支持根据优先级处理流量。

该堆栈可在 2 种模式下工作:

  • 只有尽力而为流量:在这种情况下,堆栈将作为单一队列系统运行。
  • 尽力而为流量和 TSN 流量:根据底层硬件支持的队列数量, 激活所需的队列数量。

流量调度:

传输:

  • FreeRTOS-plus-TCP 将使用简单的轮询机制将 队列刷新到硬件。
  • 硬件将决定发送和接收速率,FreeRTOS-plus-TCP 堆栈将保持硬件速率。

每个队列都有一个阈值,只要达到该值,DMA 就会将数据传输到 TSN MAC。

接收:

TSN 硬件将根据流量优先级来确定数据包的优先级。

发送+接收框图

Image

END

作者:strongerHuang
来源:嵌入式专栏

推荐阅读

欢迎大家点赞留言,更多 Arm 技术文章动态请关注极术社区嵌入式客栈专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

推荐阅读
关注数
2891
内容数
284
分享一些在嵌入式应用开发方面的浅见,广交朋友
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息