由于项目需要本人需要用STM32 F407 SDIO读取高速tf卡,并用FSMC将数据发送出去,但读取速度一直无法满足要求。经过测试,本人发现如下奇葩现象,在此贴出供大家讨论。
407主频超频到216MHZ,tf卡时钟总线频率为432/3=144MHZ(再高了,卡就无反应了),采用 DMA方式传输数据,外设总线宽度32位,内存总线宽度16位(设置成32位总是出现读取数据错位)。卡初始化时必须降频,初始化 后再升高频率。
设置成以上参数后,通过内部24位定时器进行计时,精度为1/216us 。
以下为读取数据速率测试,(采用连续读方式)
读取1扇区 用时843.287037 us
读取2扇区 用时850.5833333us 读取1个扇区同读取2个扇区用时竟然只差7.296296296us,计算下来读取第2扇区速率为512*8*1000*1000/7.296296296/1024/1024=535.3743655Mbps(神速)。
读取3扇区
读取4扇区
。。。。。
读取8扇区 用时882.7777778us 从读1个扇区到连续读8个扇区,每增加1个扇区时间多出大概7.4us,相应读取速率为530Mbps那片。
读取9扇区 用时1478.240741us 我晕,竟然比读取8扇区多出近600us,读卡速率瞬间下降至7Mbps,然后继续测试,连续读取10、11、12、13、14、15、16扇区,相邻之间差距差不多在7.5us。相当于同前八次读取速率差不多。然而连续读17扇区时,连续读取9扇区的情况又出现了,多读一个扇区时间竟差了500多us。
总结起来,卡速度提不上去,瓶颈是在于开始阶段以及每读八个扇区后再读一个扇区的延时。不知这是卡内部机制,还是407 SDIO本身问题。各位大神如有想法,请告知小弟,不胜感激。