LPC1768 SPI模式下SD卡FatFs文件系统移植

发布者:温柔心情最新更新时间:2021-10-14 来源: eefocus关键字:LPC1768  SPI模式  SD卡  FatFs文件  系统移植 手机看文章 扫描二维码
随时随地手机看文章

最近在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

关键字:LPC1768  SPI模式  SD卡  FatFs文件  系统移植 引用地址:LPC1768 SPI模式下SD卡FatFs文件系统移植

上一篇:LPC17XX之SSP0/1接口
下一篇:通过SPI方式实现LPC17xx的远程升级设计

推荐阅读最新更新时间:2024-11-11 14:00

SD卡的管脚排列和总线读写方式
SD卡的引脚定义:     SD卡引脚功能详述:   引脚 编号 SD模式                SPI模式 名称 类型 描述 名称 类型 描述 1 CD/DAT3 IO或PP 卡检测/ 数据线3 #CS I 片选 2 CMD PP 命令/ 回应 DI I 数据输入 3
[嵌入式]
三星Galaxy S21或或取消microSD卡
三星即将发布的 Galaxy S21 手机配置信息已经基本得到了曝光。近日一名推特爆料者 @rquandt 表示,S21 手机将不再搭载 microSD 卡槽。除此之外,一些市场将包含充电器,另一些市场将不再随包装附赠充电器。   三星的 S 系列手机一直继承传统,配备 microSD 扩展卡槽。目前市面上在售的 Galaxy S20 手机配备 SIM+microSD 混合卡槽,可以选择安装两个 SIM 卡或者一个 SIM 卡 + 一个 microSD 卡。但是目前的旗舰安卓手机大都取消了 microSD 卡槽这个选项,因为其性能以及可靠性已经远远落后于手机内置的 UFS 闪存。   但是此前有外媒表示,三星 Galaxy
[手机便携]
三星Galaxy S21或或取消micro<font color='red'>SD卡</font>槽
基于STM32的SD卡FATFS文件系统学习笔记
在移植文件系统前,首先来掌握一些基本知识(必须掌握的): 一、FATFS文件系统格式分析 搞文件系统,首先要了解一下SD卡里面的结构和分区,如下图 1、引导扇区 引导扇区包含着磁盘和文件系统的许多重要参数。文件管理系统首先要对该扇区的信息进行分析,才能了解当前磁盘上文件系统的格式。 EB 58 90 4D 53 44 4F 53 35 2E 30 00 02 08 20 00 02 00 00 00 00 F8 00 00 3F 00 FF 00 00 0000 0000 34 0F 00 CC 03 00 00 00 00 00 00 02 00 00 00 01 00 06 00 00 00 00 00 00 00 00
[单片机]
linux2.6.32.2 mini2440平台移植-- 配置 USB 外设、SD卡移植
Linux-2.6.32.2 内核对 USB外设的支持是相当丰富的,并且已经包含了 S3C2440 的 USB Host 驱动支持,因此我们只要配置一下内核就可以了,下面是各种 USB外设的详细配置步骤。 1.4.1 配置和测试 USB键盘、扫描器和鼠标 在内核源代码目录的终端输入:make menuconfig,依次选择如下子菜单项: Device Drivers --- HID Devices --- 按空格键选中 USB Human Interface Device (full HID) support ,这样就配置好了 USB键盘和鼠标项。 提示:这里的配置选项对应的内核源代码目录是:linu
[单片机]
mini2440开发板Linux系统自动挂载U盘与SD卡失败的解决方法
对于有些U盘和SD卡,mini2440开发板自带的Linux系统不能有效的自动挂载在文件系统里面,这是因为mini2440的/etc/mdev.conf 和 /bin/hotplug.sh这两个文件写的不太完善,我经过测试,发现其中的内容需要改进,在/etc/mdev.conf文件中,只需将以下内容写至末尾即可: mmcblk 0:0 0666 =sdcard * /bin/hotplug.sh sd 0:0 0666 =udisk * /bin/hotplug.sh 在/bin/hotplug.sh文件中则需要把以下内容加在 “case $MDEV in” 的后面: sd ) DEVNAME=udisk MO
[单片机]
LPC1768菜鸟学习之路systick
LPC1768在代码里用到使用systick时,是以如下形式出现 if (SysTick_Config(SystemCoreClock /1000))/1ms进入一次中断/ { while (1); /* 错误情况下就停在这里 } 这个函数的原型是 __STATIC_INLINEuint32_t SysTick_Config(uint32_t ticks) { if ((ticks - 1) SysTick_LOAD_RELOAD_Msk) return(1); /* Reload value impossible */ SysTick- LOAD = ticks - 1;
[单片机]
STM32开发板入门教程(十三) - SPI模式读写SD卡
功能介绍 :使用SPI模式 读写SD卡block数据 可通过串口发送到PC机查看 SD卡是Secure Digital Card卡的简称,直译成汉语就是“安全数字卡”,是由日本松下公司、东芝公司和美国SANDISK公司共同开发研制的全新的存储卡产品。SD存储卡是一个完全开放的标准(系统),多用于MP3、数码摄像机、数码相机、电子图书、AV器材等等,尤其是被广泛应用在超薄数码相机上。呵呵 现在偶们做东西也喜欢用sd卡了 为啥? 容量大啊 价格便宜啊 读写次数100000次以上(也有资料说是300000次 呵呵) 这个次数够猛了啊 读写的速度也很快 现在高速的SD卡写速度可以达到20M/S 呵呵 如果你买的SD卡达不到这个速度
[单片机]
STM32开发板入门教程(十三) - <font color='red'>SPI</font><font color='red'>模式</font>读写<font color='red'>SD卡</font>
Linux 文件系统移植全解密
简介:最近不断有人跟我说起静态映射的问题,今天就以linux-2.6.35内核源码为例说明一下IO静态映射的过程(ARM平台)。 //init/main.c asmlinkage void __init start_kernel(void){ ... setup_arch(&command_line); ... } //arch/arm/kernel/setup.c void __init setup_arch(char **cmdline_p){ ... paging_init(mdesc); ... } //arch/arm/mm/mmu.c void __init paging_init(struct machi
[单片机]

推荐帖子

[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 国产芯片交流
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved