接下来就是实现文件系统,uCFS在SD卡上的移植.我用的还是1.34.01版本,网上到处都是.不过更高版本的很难找到,谁有的愿与我分享会非常感谢.
SMARTARM2200上SD卡通过SPI与处理器通信,另外3根IO用来控制供电,插入检测,写保护检测.SD驱动代码从ZLG的工程中获得用来移植到IAR上.移植好的工程请见http://download.csdn.net/source/1796291大部分代码来源于网络,我做了些整合和修改.
SD驱动共有9个文件:
1.sdconfig.h
定义了一些宏,包括配置参数及初始化SPI/SD引脚
2.sdhal.c,sdhal.h
SD卡底层的处理函数,如果电源初始化,SPI初始化,设置SPI时钟,SPI读写函数,SD卡检测
3.sdcmd.c,sdcmd.h
SD命令函数
4.sdcrc.c,sdcrc.h
CRC校验
5.sddriver.c,sddriver.h
SD较高层的驱动,如SD初始化,读写SD Block函数
接下来就sddriver.c中的一些代码进行简要分析.
1.SD_Initialize
2.SD_ReadBlock
3.SD_WriteBlock
4.SD_ReadMultiBlock
SD_WriteMultiBlock
处理流程与读写单个Block类似,就是多调用了SD_ReadMultipleBlock和SD_WriteMultipleBlock发送读写多个Block的命令,详细代码请参考上传的工程
5.SD_EraseBlock
6.SD_GetCardInfo
读到的CSD对应数据的字节位置如下:
更底层的SD SPI命令实现请参考sdcmd.c,sdcmd.h,以下列举了一些SD命令:
接下来介绍uCFS的在SD上的移植.