最近在LPC1768 SPI模式下移植SD卡FatFs(版本R0.09a)文件系统成功,总结一下移植过程。
一、底层驱动
使用的SSP0的SPI模式驱动,SSP时钟开始使用的25M。SD卡驱动测试完成,可读写擦除测试没有问题之后开始文件系统移植。
要用到的底层驱动函数有:
MMCSD_TYPE MMCSD_Init(void)
BOOL MMCSD_EraseBlocks(uint32_tblkStart,uint32_t blkEnd)
BOOL MMCSD_ReadSingleBlock(uint32_tblkIndex,uint8_t *pBytes)
uint32_t MMCSD_ReadMultipleBlocks(uint32_tblkIndex,uint32_t blkCnt,uint8_t *pBytes)
BOOL MMCSD_WriteSingleBlock(uint32_tblkIndex,uint8_t *pBytes)
uint32_tMMCSD_WriteMultipleBlocks(uint32_t blkIndex,uint32_t blkCnt,uint8_t *pBytes)
除此之外需要读取卡的基本信息,存在CSD寄存器中的,根据读取到的CSD寄存器来得到卡扇区大小,扇区数量等,具体可参考SD卡资料中CSD寄存器说明,对于不同的卡CSD的版本不同。一般SDSC为V1.0版本,SDHC或SDXC为V2.0版本
二、FatFs移植
1、disk_initialize
磁盘初始化,调用底层SD卡驱动(这里用的MMCSD_Init),如果初始化成功返回RES_OK。
2、disk_status
获取磁盘状态,可直接返回RES_OK.
3、disk_read
读磁盘操作,根据couter参数来判断是读单扇区还是多扇区
4、disk_write
写磁盘操作,根据couter参数来判断是写单扇区还是多扇区
5、disk_ioctl
控制设备特定的功能以及磁盘读写以外的其它功能。
n GET_SECTOR_SIZE
扇区大小,跟SD协议中的Block是同一个概念,返回值以WORD形式存入Buffer中。一般情况是以512字节为单位,直接返回512即可。
n GET_SECTOR_COUNT
获取扇区数量,该功能与格式化(f_mkfs)时有关,返回值以DWORD形式存入Buffer中,若返回值错误将导致格式化后容量错误。如果不需要格式化可以直接返回RES_OK;
n GET_BLOCK_SIZE
以扇区为单位的存储阵列的擦除块大小,返回值以DWORD形式存入Buffer中,当擦除块大小未知或是磁盘设备时可以直接返回RES_OK,仅在格式化时使用。
可以直接返回RES_OK,也可以根据CSD寄存器中的SECTOR_SIZE来确定。
n CTRL_ERASE_SECTOR
当要往SD卡写数据时就需要使用该功能,即写之前的擦除扇区。参数以DWORD形式存在Buffer中。
DWORD *pDWORD = (DWORD *)buff;
pDWORD[0]表示要擦除的起始扇区
pDWORD[1]表示要擦除的截止扇区
如果SD卡为只读的话可以直接返回RES_OK;
6、get_fattime
获取当前时间
DWORD get_fattime (void);
返回的当前时间为 DWORD 数值。各位域定义如下:
bit31:25 年,从 1980 年开始算起 (0..127)
bit24:21 月 (1..12)
bit20:16 日 (1..31)
bit15:11 时 (0..23)
bit10:5 分 (0..59)
bit4:0 秒 /2(0..29)
7、配置参数
_USE_MKFS:为1时允许格式化,为0时不允许。
_MAX_SS:最大操作扇区大小,大的值可以提前文件系统效率。
_USE_ERASE:为1时可以使用CTRL_ERASE_SECTOR功能
三、速度测试:
测试文件wmv视频文件,大小:7375.689 KB(7552706Bytes)
SPI时钟 50MHz
其中写入速度是根据拷贝时间和读取时间来计算出写入时间而得到的。
速度测试结果如下:
文件系统 SD卡类型 读取时间 读取速度 拷贝时间 拷贝速度 写入速度
FAT 金士顿TF1G 10秒 737.569KB/S 27秒 273.174KB/S 433.864KB/S
FAT32 金士顿TF1G 10秒 737.569KB/S 123秒 59.965KB/S 65.272KB/S
FAT32 闪迪SD4G 21秒 351.223KB/S 34秒 216.932KB/S 567.361KB/S
FAT32 金士顿SD8G 11秒 670.517KB/S 29秒 254.334KB/S 409.761KB/S
FAT32 金士顿SD16G 12秒 614.641KB/S 29秒 254.334KB/S 433.864KB/S
FAT32 金士顿SD32G 11秒 670.517KB/S 29秒 254.334KB/S 409.761KB/S
底层驱动使用SSP0,加上DMA功能后的速度测试结果如下:
文件系统 SD卡类型 读取时间 读取速度 拷贝时间 拷贝速度 写入速度
FAT 金士顿TF1G 5秒 1.441MB/S 17秒 433.864KB/S 614.641KB/S
FAT32 金士顿TF1G 5秒 1.441MB/S 111秒 66.448KB/S 69.582KB/S
FAT32 闪迪SD4G 16秒 460.981KB/S 32秒 230.490KB/S 460.981KB/S
FAT32 金士顿SD8G 6秒 1.200MB/S 20秒 368.784KB/S 526.835KB/S
FAT32 金士顿SD16G 6秒 1.200MB/S 20秒 368.784KB/S 526.835KB/S
FAT32 金士顿SD32G 6秒 1.200MB/S 22秒 335.259KB/S 460.981KB/S
上一篇:LPC17XX之SSP0/1接口
下一篇:通过SPI方式实现LPC17xx的远程升级设计
推荐阅读最新更新时间:2024-11-11 14:00
推荐帖子
- [TI首届低功耗设计大赛]+BQ25504_Launchpad BOOST太阳能采集板
- 前段时间,我在FR5969这个板子上加上司机设计的lcd扩展板显示一些信息,给板子上的超级电容充电再拔掉USB发现仅使用这个电容中的电能可以维持液晶显示很长时间,虽然我这个LCD不是像夏普的那种低功耗lcd,由此可见FR5969的功耗是非常的低的,相信做好程序设计还可以进一步的降低系统的功耗。看到这个显现让我非常的兴奋,增加了使用FR5969无电池方案的的实现信心。曾经在kickstarter看到过一个仅使用很小的一片的太阳能电池板的cc430项目(https://www
- IC爬虫 微控制器 MCU
- RS-232、RS-422与RS-485标准与应用简介
- 附件:RS-232、RS-422与RS-485标准与应用简介是个好东西。先谢谢啦~~Re:RS-232、RS-422与RS-485标准与应用简介
- totopper 工控电子
- 恒功率、恒压、恒流的问题
- 【不懂就问】对于恒功率模块(比如功率电源)所以有如下疑问【1】如果是恒功率(比如开关电源或者线性电源),这个恒定功率是是如何确定的是不是指的是电源中变压器的功率吗?还是说怎么样?【2】比如说30A输出的驱动模块,是指输出最大30A吗?因为驱动器接负载,电流是由负载决定啊?谢谢!恒功率、恒压、恒流的问题【1】如果是恒功率(比如开关电源或者线性电源),这个恒定功率是是如何确定的是不是指的是电源中变压器的功率吗?还是
- shaorc 电源技术
- UCC3858的设计特点、引脚功能与电气参数
- UCC3858的设计特点、引脚功能与电气参数高效率、高功率因数预调节器UCC3858是Unitrode公司新推出的PFC功率因数校正器产品。有关UCC3858的内部功能框图见图1,其主要设计特点是:可调整的PWM脉宽调制频率折反、使轻载时有较高的效率;前沿脉宽调制以减小输出电容的纹波电流;控制BoostPWM使功率因数接近1?0;在世界通用的供电电压范围工作均无需设量程开关;正确的功率限制;可同步的振荡器;100μA的电源起动电流;低功耗的BCDMOS工艺;工作电压范围12V~18V
- zbz0529 模拟与混合信号
- linux 下写nor flash的方法
- 虽然网上有很多关于写norflash的方法,很多都是基于MTD框架的,由于我现在做的这个项目不能基于MTD的框架,所以自己在底层写了一个关于norflash的驱动,然后在应用层写了一个应用程序,最终尝试了很多方法,终于完成了此项目!以后哪位兄弟遇到Norflash的问题都可以找我讨论,而且我这边有很多关于写norflash自己积累的文档linux下写norflash的方法LZ不如上传上来吧!添加在附件里,大家一起学习。恭喜楼主,可以和大家分享一下回复楼主chenrvm
- chenrvmldd Linux与安卓
- 【翌创ET6001测评】RTC电子时钟
- 翌创ET6001开发板具有RTC计时功能,在使用串口0连接外部USB转TTL模块的情况下,可查看到RTC计时的效果,见图2所示。图1串口0接口图2测试效果若将RTC与串行数码管显示模块相结合,则可实现电子时钟的计时效果,其主程序为:intmain(void){rtcDatetimecalendar;uint8_ttick=0;RTC_Calendar_init();EVB_SMG_Init(); Init_MAX721
- jinglixixi 国产芯片交流