分而治之,或慢慢写-快速阅读


在我的一个项目中,需要从ADC的3个通道顺序记录数字化数据集。 测量结果必须以6 KB / s的速度存储,而数据收集周期的持续时间可能是一天或更长时间。 因此,需要存储的信息总量为500 MB或更多。 作为存储设备,决定选择SD卡。


由于创建的设备的设计功能不允许提取用于读取数据的卡,因此使任务变得复杂。 当时正在执行任务的XMega128A4U控制器没有SDIO硬件支持,但允许通过SPI接口与卡配合使用,该带宽可以以所需的速度写入,但可以通过SPI通过SD卡链将大量数据读入计算机。 ->控制器-> USB-Com转换器相当乏味,并且花费了大量时间。


经过深思熟虑(尝试对上述捆绑软件进行超频, 但未成功),决定使用硬件SD卡读卡器控制器,为此选择了支持USB 2.0的GL823芯片。 现在,有必要在数据收集过程中通过SPI通过控制器提供对SD卡的单独访问,在高速读取过程中通过GL823通过SDIO从计算机提供对SD卡的单独访问。 使用两个4通道2x1多路复用器实现了这种分离。



开关U2,U3的前缀为“ STM”的线连接到控制器,前缀为“ SD”的线连接到SD卡。 为了控制电路,使用SD2MCU信号,在MCU与GL823和GL823_PWR之间切换SD卡,通过MOSFET切换GL823电源。


最初,我认为这种方法是一种“拐杖”,但是令我惊讶的是,它对我自己来说是相当有用的,并被成功操作该设备几年的实践所证实。


此外,在以下基于STM32F407的开发中,该开发具有SDIO支持以访问卡,并且有可能提高USB 2.0 HS MSD(尽管通过并行ULPI接口),但考虑了使用基于总线的GL823解决方案的可能性。


通过将STM32F407与外部PHY USB3300捆绑使用,可以实现〜41 Mbit / s的读卡速度,而使用硬件读卡器时,该速度可以达到〜150 Mbit / s,在所有其他条件相同的情况下。 通过从以FAT32格式格式化的SD卡读取128 MB文件进行测量。 两种方法都有自己的细微差别,但在我看来,两种方法都有“生命权”。 至于细微差别:就我而言,在此设备开发的下一次迭代中,需要将硬件放置在26毫米宽的板上。


在这种情况下,用于STM32F407外壳的LQFP100的PCB布局有些困难,但是至在LQFP64外壳中也定位了其“弟弟” STM32F405 。 但是STM32F405缺少ULPI,因此无法使用USB 2.0 HS,并且MSD FS的实现会大大降低从卡中读取数据的速度。 使用上述相同的解决方案,您可以在从设备读取数据的同时,以足够的速度从计算机访问SD。


如果我的经验对某人有用,我会很高兴。


Source: https://habr.com/ru/post/zh-CN440308/


All Articles