1. 问题背景与现象描述
最近在RK3588平台上调试SPI接口时遇到了一个棘手的问题。我们使用SPI总线与FPGA进行通信,SPI时钟频率设置为50MHz,每次传输数据量达到65535字节时,发现读取速率明显低于预期。具体表现为:写入速率接近理论值5.96MB/s(实测5.777MB/s),但读取速率只有2.949MB/s,误码率为0。
这个问题在实际项目中非常关键,特别是对于需要高速数据交换的应用场景,比如高清视频传输、实时数据采集等。SPI作为常用的串行通信接口,其性能直接影响整个系统的吞吐量。在RK3588这样的高性能平台上,SPI接口理论上能够支持很高的数据传输速率,但实际使用中却遇到了瓶颈。
通过示波器抓取时序信号,我们发现了一个异常现象:在读取大量数据时,时钟信号会出现间断。具体来说,前部分时钟信号正常,但后半部分会出现周期性的中断,导致数据传输时间延长。这种现象在写入操作中并不明显,只有在读取大量数据时才会出现。
2. SPI时钟异常的根本原因
2.1 硬件缓冲区与驱动限制
首先,我们需要理解SPI数据传输的基本原理。SPI控制器通常有一个硬件缓冲区,用于暂存待传输的数据。RK3588的SPI控制器理论上支持一次传输最多64KB的数据,但实际驱动中可能做了限制。在我们的案例中,驱动默认将一次传输的最大数据量限制为4KB,需要手动修改才能支持更大的数据量。
修改驱动后,我们支持了一次传输65535字节的能力,但在高频率下传输大量数据时,时钟信号出现了异常。这种现象的根本原因可能与硬件缓冲区的管理机制有关。当数据传输量较大时,缓冲区可能无法及时处理数据,导致时钟信号暂时中断。
2.2 时钟信号生成的机制
SPI时钟信号由主设备(这里是RK3588)生成,并通过SCK线传输给从设备(FPGA)。当时钟频率较高(如50MHz)且数据量较大时,时钟信号的稳定性可能会受到多种因素的影响:
- 时钟分频器配置:SPI控制器的时钟分频器可能无法完美支持高频率下的长时间连续传输。
- 中断处理延迟


5858

被折叠的 条评论
为什么被折叠?



