高速并行I2S数据连续写入SD卡的裸机控制器选型咨询
过去半年我在个人业余项目中始终未找到可行解决方案,思路几近枯竭。我计划对以远距离信号接收能力著称的Sony XDR-F1HD HD Radio进行改装:该设备HD Radio功能的主模块会通过一对传输数字采样的I2S线路输出数字化RF基带信号,我希望搭线采集这些原始采样数据并写入SD卡。
待采集接口包含I2S字选择(word select)线、位时钟(bit clock)线,以及一对I2S数据线,每条数据线独立传输一路PCM采样,相关参数如下:
- 位时钟频率为10.4 MHz,字选择线频率为325 kHz
- 每条I2S数据线承载单通道数据,对应采样率为650,000采样/秒、采样精度16bit/采样,双通道合计有效数据率为20.8 Mbps(2.6 MB/s)
需注意位时钟与字选择时钟均由射频模块生成,采集端必须工作在rx slave接收从模式,不得自行生成时钟,我修改后的接口时序说明图已公开发布在技术交流社区。
我的目标是将该并行I2S流连续写入SD卡文件系统,生成可在电脑端读取的双通道、16bit/采样、650 ksps音频文件。目前主流合格SD卡通过SDIO接口可轻松承载2.6MB/s的写入速率,但SPI模式下速率通常无法满足要求。
我需要一款可实现该功能的微处理器或专用芯片(下文简称控制器),理想状态下可通过I2C等接口向控制器发送“开始录制到指定路径”“停止录制”指令;控制器需至少支持FAT32文件系统,优先支持可存储大于2GB文件的Windows兼容文件系统(如ExFAT、NTFS),采用分段文件存储的方案也可接受。已知SD卡写入过程中最长可能出现250ms的卡顿,因此控制器需具备足够RAM,可缓存250ms的待写入数据(约0.65MB),避免等待写入过程中丢失采样。
- ESP32方案:虽数据手册标称支持最高80MHz位时钟,但经确认该指标仅适用于ESP32生成时钟的主机模式,不适用于本项目需要锁定外部时钟的从模式,从模式下会出现丢位、读取数据乱码的问题;且ESP32不支持本项目所用的特殊“并行”I2S接口,尽管其SD卡接口速率可满足写入要求,仍无法使用,相关问题说明可参考电子技术交流社区的公开讨论。
- Raspberry Pi Pico方案:通过编写定制PIO(可编程IO)汇编代码可轻松实现信号采集,但SD卡写入速率不足,仅能采集RAM容量范围内的数据,无法满足连续录制要求;不过我已在该平台上通过fftw3完成FFT运算(运行效果超出预期),验证了I2S线路上传输的数据确实是目标信号,相关验证结果图已公开发布。
- 全尺寸Raspberry Pi方案:虽具备足够RAM与SDIO速率,但GPIO速率无法满足采集要求,且该方案需运行操作系统,不符合我尽量采用裸机开发、避免依赖OS的需求,并不适配本项目。
我需要一款满足以下要求的微控制器或芯片:
- 可工作在I2S从模式,基于外部输入的位时钟、字选择时钟,连续采集速率为20.8Mbps(2.6MB/s)的并行I2S接口16bit PCM采样,并写入SD卡
- 可通过文件系统将数据写入SD卡文件,至少支持FAT32,优先支持可存储大于2GB文件的ExFAT/NTFS,采用分段文件存储的方案也可接受
- 具备足够RAM缓存数据,可应对SD卡最长250ms的写入卡顿,避免采样丢失
- 成本亲民,适用于个人业余项目,不接受单价500美元以上的开发板
- 方案轻量,无需启动操作系统,支持裸机开发
我具备软件开发经验可自行编写上层业务代码,仅需找到适配的硬件平台;我无FPGA硬件描述语言开发经验,无法采用FPGA方案。我非常认可Raspberry Pi Pico的“可编程IO”特性,期望找到类似具备可编程IO、更大RAM、原生SDIO接口的控制器方案。我已为该问题耗费数月时间尝试多种方案,始终未能解决,恳请提供相关建议。
内容的提问来源于stack exchange,提问作者RomanPort

