单片机/MCU论坛
直播中

一笔带过00

3年用户 19经验值
擅长:处理器/DSP
私信 关注
[问答]

DSP+FPGA+FATFS+SD卡

项目背景,在DSP上挂Fatfs文件系统,而SD卡是挂在FPGA上的,DSP需要通过FPGA与SD卡交互,大概就是会把数据存到FPGA的DDR上,然后FPGA再对SD卡进行读写操作。

问题:SD卡在进行跨簇写的时候需要去读SD内容,可能这个时候,FPGA正在对SD进行写操作,导致DSP这边需要等待。

找到问题方法:启用快速读写,我理解的快速读写是生成一个固定大小的文件,然后把链接这个文件大小的Fat表全部存储到DSP的内存里,如果我需要跨簇些内容,只需读这个Fat表即可。而不需要与SD卡交互。但是无论我怎么增长clmt这个数组的长度,我都只写入了8KB的大小。我的簇大小就是8KB,所以不确定这个东西我理解的对不对,或者有没有其他方法,可以解决这个问题

已退回10积分

回帖(1)

h1654155275.5741

2023-12-11 14:38:29
实际上,SD卡在进行跨簇写操作时,确实需要读取旧簇的数据以及更新FAT表。然而,对于跨簇写操作进行优化是一个复杂的任务,并且需要考虑到实时性、并发性等因素。下面是一些可能的解决方案:

1. 缓存机制:在DSP中维护一个缓存区,在进行跨簇写操作时,首先将需要读取的簇数据缓存到DSP的DDR中,并通过FPGA将其存储到SD卡。然后,在FPGA进行写操作时,不需要等待SD卡读操作的完成,而是继续进行写操作。当DSP需要读取数据时,先从缓存区读取,如果数据没有命中缓存,则需要等待FPGA完成操作。

2. 双缓冲机制:在DSP中维护两个缓存区,一个用于读取旧簇数据,另一个用于写入新簇数据。这样,在进行跨簇写操作时,可以并行进行读取和写入操作。当DSP需要读取数据时,可以直接从缓存中读取,而不需要等待FPGA的操作。

3. DMA技术:利用DMA(Direct Memory Access)技术,在DSP和FPGA之间进行数据传输。通过配置DMA引擎,可以实现数据的高速传输,减少等待时间,提高系统性能。

关于你提到的快速读写的方法,只是一种优化策略,并不是绝对解决问题的方法。这种方法可以减少对SD卡的访问次数,但无法避免在进行跨簇写操作时仍然需要等待FPGA的读写操作。

综上所述,解决该问题可以综合考虑上述的优化方法,并根据具体应用场景进行调整和优化。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分