本帖最后由 北斗stone 于 2016-11-30 13:26 编辑
这次第二波的测评准备挑这块板子上的SD卡的外设做一下测评,同样地,**和大家分享CUBE的使用心得: 楼主之前没用做过关于SD卡的任何工程项目,在SD卡方面是个小白新手,有不对或者不完善的欢迎大家指正和补充。 首先我上网学习了一些关于SD卡的基本资料,简单来说,SD卡支持两种模式:SD模式和SPI模式。简单地看过了SD卡的通信原理、各种状态的切换之后,当务之急就是将它驱动起来,能够读写。 另外看了很多资深工程师做SD驱动时候发的帖子。在一番深入了解之后,我也看了FATFS文件协议,从应用的角度出发,看FATFS的函数接口,用处是最大的。 先上传一份FATFS的API中文应用手册,这是我在网上找的,版本应该不是最新的(见附件内容)。最新的版本官网有,不过是英文的。这是英文的官网,大家可以在这上面找到最新、最全的内容。FATFS文件系统的官网 好了,万事俱备,首先还是打开Datasheet,确认下板子的引脚所在: 打开CUBE,这次我建立的是芯片级工程。 首先选中FATFS文件系统的SD card模式 使能SDIO外设,选择4线模式 另外我还加了自带的USART3用来作为调试使用,同时在右侧确认引脚的使用,确保引脚没有复用错 在第二个菜单页配置时钟,我们要把时钟配置为合理的范围,另外值得注意的是SDIO用的是自己的时钟,最大为48Mhz。 接下来第三个页面,首先配置SDIO,时钟分频因子不变,第二个子页面不添加常量,第三个子页面很关键,需要使能SDIO的全局中断,它要配合DMA使用。 第四个子页面,配置DMA。 能使得数据在内存与SD卡之间相互搬运。第一步添加可用DMA搬运的请求,一个收一个发,注意添加FIFO,第三步选择数据长度,这里是一个字(双字节)。第四步要做的便是选择地址自增,给memory打上勾,表示每次搬运后,内存地址自增。最后的GPIO子页面不做改动。 USART3用默认配置就行,不做改动。接下来大家可以看看DMA和NVIC内,之前在外设上已经配置好DMA之后,DMA2内也会有显示。 NVIC也是一样。 接下来关于FATFS的配置,点击中间件FATFS,我们可以看到有四个子页面需要设置。其中后三个页面几乎可以忽略,但是第一个页面的内容还是值得学习的。如果将CUBE用好了,很多东西关于FATFS的特性参数、其它外设的特性参数也是可以从中学到的。 在此我讲几个重要的参数,编码格式GBK编码,能支持中文,第二项使能长文件名,名字保存于堆空间中(stack),其余不变。 点击generate,选择文件保存路径,由于上面长文件名用了堆空间保存,所以这里要增加堆空间的大小,改成0x0800。 选择生成代码,KEIL5换成SW4STM32。 好了,接下来就是写代码测试性能的问题了。 我找到了安装库里的例程代码,路径如下: C:\Users\Administrator\STM32Cube\Repository\STM32Cube_FW_F4_V1.13.0\Projects\STM32469I-Discovery这里要强调一下,虽然cube可能安装到D盘,但是它的库会下载到C盘用户文件夹下。 这里面有四个子文件夹,第一个是应用案例代码,第三个是外设例程。在应用案例下,找到了FATFS带有SD卡的应用例程,我将它配置的初始化文件与CUBE生成的文件做了下对比。感觉差不多,于是就拿它进行了修改。 首先我做了SD卡不带FATFS系统的读写擦除的操作,通过串口发送数据,证明可以使用,之后我又做了带FATFS的一个测试代码,新建TXT文件以及jpg文件。两份测试代码是参考库中已有代码改写的。主要的文件代码已上传,由于库文件太大,删了库文件,另外保留了CUBE工程文件。 关于程序内容不在这里展开分析,再讲一下我评测过程中遇到的一个细节。
CUBE生成的程序代码,在生成的代码里面,有很多块语句注释,在user begin和user end之间能插入用户自己的东西,按照这个规范做,重新用CUBE导出初始化代码的时候,之前写过的东西不会被擦除掉,用户如果在其它地方加入代码,会被擦除掉。
最后楼主打算按照论坛里面大神们的方法测一下SD卡的读写速率,还在写代码的阶段,后续有时间会上传上来。
|