基于FPGA的Micro SD卡控制器(SD模式驱动)

作者: Kevin 分类: FPGA学习笔记 发布时间: 2019-03-17 20:29

在年前,帮一个学生做了一个基于 Micro SD 存储摄像头图像的小项目,这个有点类似于行车记录仪这样的功能,一直把摄像头的数据写入Micro SD 卡,直至Micro SD 卡被全部写满。

就这么一个功能,很简单啊!

你一定没想过,可就这么一个简单的项目,我却做了 一年 ”,从年前开始做,直到年后才做完。

我严重怀疑是自己脑子进水了才接了这个项目!

这个项目是帮一个在校学生做的,但这个项目又是这个学生他导师接的一个项目。刚开始知道对方是学生之后,我内心对于这个项目是拒绝的。毕竟我接私活的价格不低呀,收多了,学生经济压力也大。收少了,艹,导师接个项目不至少得有十几万啊,劳资辛辛苦苦把这个项目弄好,到头来挣的连他导师的零头都不到。

刚拿到项目需求的时候,其实就是在 SD 卡存一秒钟的图像数据,也就是把摄像头在一秒钟内的图像写入 SD 卡,当然摄像在一秒钟内输出的图像不少于 24 张,并且以 BMP 图像格式进行保存,为了能达到在一秒钟存储24张图片的速度要求,可以适当减小图片的尺寸。

对于将摄像头数据保存为 BMP 图片,我之前在 ZYNQ 平台上调过,再加上这个学生一直说,如果他年前没有弄好,导师就不让回家过年了。一心软,也看到功能这么简单,想着应该可以很快搞定,就接过来了。

这一部分功能调好之后,拍一个演示视频发过去,原以为等着收 Money 就可以了。谁能想到,对方想要的效果还远远不是这样,他要的功能是要把摄像头采集的数据一直往SD卡写,而且图像尺寸不能低于 640 x 480。而已经做好的功能是,为了提高ZYNQ 中对图像的保存速度,图像尺寸已经降低到了640 x 480 以下。这一版功能,不行!

当时沟通的时候,对方并没有对图像的最低尺寸有明确限制,突然这样来一下,很无语!

大家看到这,应该可以严重意识到项目需求沟通和确认的重要性!

如果按照这种需求,一秒钟ZYNQ向SD卡写入图像尺寸不小于640×480 的 24 张图片,采用FATS文件系统,是完全达不到要求的。因为写入 SD 的速度实在是太慢太慢了!

sd_sudu

这是我把 SD 卡插在读卡器上进行文件拷贝时,看到的 SD 卡写入速率有12.8MB / 秒。这个速率对于在一秒钟内写入24 张尺寸为 640×480 的图片是完全没问题的。从这一点可以确定,这张 SD 卡本身,写入的速率是完全够的,在 ZYNQ 中达不到要求,很大可能性 FATS 文件系统的问题。所以只能先放弃在 ZYNQ 平台来完成这个项目。

为了把SD卡的写入速度提上来,查阅了很多SD相关的协议和论文。

sd_xieyi

【SD协议相关资料】

sd_lunwen

对于用 FPGA 来设计 Micro SD 卡的控制器 ,大部分用的都是基于 SPI 的接口,其 SPI 接口的时钟可以跑到50MHz。 这样算,使用 SPI 模式 SD 卡最大写入速度也就是50Mbit / 秒。而需要一秒钟内写入的图像数据要达到 640 x 480 x 16 bit x 24 帧 = 117 964 800 bit,已经超过了 50Mbit ,这样的话,数据量太大了,采用 SPI 模式行不通。幸好使用的摄像头是 OV5640 ,可以将摄像头输出的图像配置成 JPG 格式,将原图像进行压缩。经过测试,以JPG格式输出,一帧图像的数据量不超过 100Kbyte ,24帧图像在一秒钟的数据量也不超过 19660800 bit , 还是要小于 50 Mbit 的,理论上 SPI 模式可以满足需求。

但实际上使用SPI模式操作SD卡,还需要有一些其他的开销,像命令等等都需要占用时间。而且目前的图像数据量 19660800 bit  将近占了 50 Mbit 的 一半。那算是其他开销,很是担心实际使用会满足不了需求。作为一个FPGA设计的老司机,怎么能容忍自己花了时间最后又相当于白干这种事情再次发生在自己身上呢?

所以又再次寻找 SD 卡写入速度更快的方式。

SD 卡除了 SPI 模式还有一种 SD 模式, 其数据线可以使用 4 根,同样使用 50MHz 的时钟频率,其最大写入速率可达 25MByte / 秒,也就是100 000 000 bit / 秒,将近是 19660800 bit 的 5 倍。在SD模式下,所允许的其他时间开销更大了,看到 SD 模式,这才稍微松了口气。以 SD 模式操作SD卡,其实已经可以满足咱们项目中很大一部分与存储相关的需求了,而且 SD 卡扩容非常方便,直接换一张大容量的就可以,价格还便宜。

今天晚上就先写到这吧,先睡觉了,明天星期天还要给周末班的学生上课。

下一篇文章再继续给大家介绍怎么以 SD 模式去操作 Micro SD卡。

大家可以在公众号后台回复【SD卡】获取 Kevin 搜罗的 SD 论文和协议。

erweima

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注