历史上的今天
返回首页

历史上的今天

今天是:2024年08月24日(星期六)

2021年08月24日 | LPC1768 SPI模式下SD卡FatFs文件系统移植

2021-08-24 来源:eefocus

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

推荐阅读

史海拾趣

Anaheim Automation公司的发展小趣事

2003年,AMOTECH的压敏电阻产品被产业资源部评为“世界一流产品”,这是对公司技术实力的再次肯定。同年,公司还在韩国安全商协会进行了自动报价首次公开募股,为公司的发展筹集了更多资金。随着实力的增强,AMOTECH开始将目光投向海外市场。2004年,公司在山东建立了首家海外工厂,专注于全球定位系统天线的生产,这标志着公司国际化战略的正式启动。

Ferraz Shawmut(Mersen)公司的发展小趣事

1885年,Shawmut熔丝公司在美国麻省波士顿市成立,开启了其在电气保护领域的征程。随着技术的不断进步和市场需求的增长,Shawmut逐渐崭露头角。1999年,法国Carbone Lorraine公司收购了Gould Shawmut,并将其与Ferraz公司合并,成立了Ferraz Shawmut公司。这一合并不仅增强了公司的技术实力,也扩大了其市场影响力。

BSI公司的发展小趣事

随着电子产品的普及和消费者对产品质量的关注,电子产品测试和认证成为了一个必不可少的环节。BSI作为全球知名的认证机构,为电子产品提供了专业的测试和认证服务。通过严格的测试和认证流程,BSI确保了电子产品符合国际标准和客户需求,提高了产品的市场竞争力和信誉度。同时,BSI还为企业提供了定制化的商检解决方案,帮助企业在国际贸易中解决技术和法规问题,降低了贸易风险。

Bogen Communications Inc公司的发展小趣事

在电子行业的激烈竞争中,Bogen Communications Inc公司凭借一项革命性的技术创新,迅速崭露头角。该公司研发出一种新型的音频处理芯片,极大地提升了通信设备的音质和性能。这一创新不仅赢得了市场的广泛认可,还为公司带来了大量的订单和合作伙伴。随着技术的不断完善和市场的扩大,Bogen Communications Inc逐渐成为了音频通信领域的领导者。

ALLIED [Allied Electronics]公司的发展小趣事

在电子行业的发展过程中,Bogen Communications Inc公司意识到单打独斗难以取得长久的成功。因此,公司积极寻求与其他企业和机构的合作,共同开发新技术、新产品。通过与合作伙伴的紧密合作,公司不仅获得了更多的资源和技术支持,还成功地将产品推向了更广阔的市场。

GMT(致新科技)公司的发展小趣事
在设置界面中,找到“定时开机”或类似的选项,并选中它。

问答坊 | AI 解惑

求教:康华光模电书上的D41

在模电书上看道高压运放D41(+—150v)符合设计要求,但是查不到相关资料,请问哪能查到DATASHEET,厂家? 或有没有其他的替代元件…

查看全部问答>

TMS320F2812外部接口分析与存储器扩展

TMS320F2812外部接口分析与存储器扩展…

查看全部问答>

vxworks下播放".wav"文件

TORNADO的例子文件中有个sndPlay.c文件,里面有个soundPlay函数,在此基础上稍加改动,在目标机上敲入soundPlay“3.wav”可以播放,但是在别的程序中调用soundPlay(\"3.wav\")无法播放;请问该如何调用此函数才能正常播放音频? 另:我想在sndPlay. ...…

查看全部问答>

TI DM355的ROM boot loader

最近开始接触一个在TI的DM355上面的开发。 问题一:关于DM355的ROM boot loader 的理解一直很模糊。谁有关于DM355的ROM boot loader 的资料提供点信息呀? 问题二:我们是买的奥维视讯的一个高清摄像机的开发包,在这个开发板上已经学会烧录UBL和 ...…

查看全部问答>

关于量子计算机的一个问题

谁能简单解释一下量子计算机是什么啊?…

查看全部问答>

ARM 指令 关于DCD和SPACE的一个问题

语句如下: FiqStackSpace SPACE FIQ_Stack_Legth FiqStack      DCD   FiqStackSpace + FIQ_Stack_Legth 最后一条语句,DCD的后面跟FiqStackSpace + FIQ_Stack_Legth, DCD后面的FiqStackSpace,表示一串空字符 ...…

查看全部问答>

关于 CSP_BITFMASK,CSP_BITFVAL的疑问

在csparm_macros.h中有这样两个函数定义: #define CSP_BITFMASK(bit) (((1U …

查看全部问答>

矩阵键盘的疑问

wince里编写矩阵键盘驱动。(7行*6列)矩阵键盘,引出13根线,6列的引线连接的GPIO设成外部中断口,7行的引线连接的GPIO方向为out输出口。 采用“行扫”的方式的话我想是不是要这样操作: 1. 等待键盘按下时,6列引线接口设成eint外部中断状态;7 ...…

查看全部问答>

请教稳压管的问题

请问图中如果VCC的电压太高,把稳压管击穿后VCC的电压是5.6V还是0V啊??…

查看全部问答>

求助:MSP430中断嵌套

有谁会msp430中断嵌套,麻烦指教一下。我想实现ADC12中断时能收其他中断,但在ADC12中断设置_EINT();后单片机会不停地自动复位。有谁知道这方面的请指教一下,谢谢啦…

查看全部问答>