ZHCAGC6 August 2026 AM625
由于PRU内部仅集成一个硬件的高速PRU串口,当需要多路高速串口时,我们可以利用PRU IO的PEFIF(Peripheral I/F外设接口)模式对串口数据进行硬件的接收和发送。每个PRU上存在的三通道外设接口,一般是用来支持 EnDat 2.2 和 BiSS 等串口为基础的电机编码器协议,每路发送PERIF通道都存在32bits的FIFO用于直接存储发送的数据,每路发送PERIF通道都存在4bits的FIFO用于接收数据,我们可以使用该接口进行串口协议的接收和发送。
基于PRU实现的低延迟、多通道的高速 UART 传输系统架构即数据链路层的硬件实现设计如 图 3-1 所示,通过将传统的低速/高延迟任务硬件化,并利用 PRU 实时内核进行数据调度,实现了极高的吞吐率和微秒级的超低确定性延迟。
整个架构在物理和逻辑上明确划分为两个核心时延域,以隔离ARM侧由于系统调度带来的不确定性,高延迟域,主要包含ARM 核心(负责高级应用层逻辑)、DMASS (DMA 系统)、通用 Timer、标准 UARTs(带 64 字节 TX-FIFO)、MSRAM 和 DDR 内存。以上组件的处理由于经过多层总线仲裁和通用操作系统调度,整体访问延迟在 250 纳秒左右,并且根据负载变化在不断变化,抖动可能达数微秒。在低延迟域中,主要由ICSS 内部互联总线(32-bit, 250 MHz)、PRU 0 / PRU 1 双内核、专用 DMA(XFR2VBUS RD DMA)、SPAD 共享内存以及外设perif TX/RX 硬件组成,基于 250 MHz 的 ICSS 总线,可以实现了9 ns 读延迟和 6 ns 写延迟。并且系统通过专门定制的通道架构,为了实现数据从高延迟存储区到实时发送端的平滑过渡与高效搬运,设计了缓冲通道设计 (Ping-Pong Buffer Channel),在低延迟域内部署了 4 个独立的逻辑通道(channel 1 - 4),每个通道均配备了双缓冲结构(如 Channel 1 包含 Tx1a 和 Tx1b进行Ping-Pong),每个单缓冲区大小为 128 字节。这种设计允许 DMA 在搬运当前块数据的同时,PRU 能够无冲突地读取并发送另一块数据。ARM 端通过 INTC(中断控制器) 来与PRU核心进行交互。ARM通过 Main CBASS搬运并刷新这 4 个通道数据,每次刷新88个字节数据预计时间大约需要70μs,按照12Mbps速率进行发送完成128Bytes(1280bits)所需时间大致为106.6μs,因此70μs的时间是能够满足串口发送和接收的需求的,串口数据的的核心计算与控制由两个运行在 333 MHz 的 PRU内核协作完成,PRU 0专门负责 4 个通道的 UART 数据发送。发送数据的获取是通过专用的 XFR2VBUS RD DMA 直接从PRU-ICSS互联总线上的通道缓冲区拉取数据,无需经过 ARM 核心干预。PRU 1专门负责 4 个通道的 UART 数据接收工作,通过底部的 XFR2VBUS RD DMA 将接收到的数据反馈回总线。
图 2-1 PRU UART数据链路层硬件实现设计发送数据最终通过硬件外设和引脚进行串行输出,其表现出极高的确定性:高速硬件 UART直接集成在低延迟域,支持高达 12Mbps的速率,内置 16 字节 TX FIFO。其余三路利用PRU 专用外设发送和接收接口(3 perif TX/RX),PRU 核心通过专用的 R30/R31 寄存器接口,以极低的抖动直接驱动外设接口 TX和 RX,输出至物理引脚,在高吞吐率下,串行帧之间也不会出现长延时空闲。能够实现全速的12Mbps的数据发送,通过 SPAD(Scratchpad 共享内存) PRU0与 PRU 1 直接可以进行高速、零延迟的数据交换,可直接用于PRU的核间同步。