基于spi-flash的fatfs配置

基于spi-flash的fatfs配置

ID:39474365

大小:59.50 KB

页数:8页

时间:2019-07-04

基于spi-flash的fatfs配置_第1页
基于spi-flash的fatfs配置_第2页
基于spi-flash的fatfs配置_第3页
基于spi-flash的fatfs配置_第4页
基于spi-flash的fatfs配置_第5页
资源描述:

《基于spi-flash的fatfs配置》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、基于spi-flash的fatfs配置——王京石硬件平台:stm32f103VCT6、w25x16软件平台:fatfsR0.10由于产品需要存储大量数据,stm32单片机存储有限需要使用外部flash辅助存储。考虑各方面原因最后选用了一款spi-flash型号为w25x16,spi总线操作,拥有2M的存储单元。为了方便,我们想到了使用文件系统fatfs。此文档记录了配置流程,为以后做参考。一、底层移植Fatfs的diskio.c与diskio.h文件用于兼容底层接口,主要配置过程就是重写disk_initialize、disk_status、disk_read、disk_write、di

2、sk_ioctl、get_fattime六个函数以兼容不同的硬件设备。1、设备初始化DSTATUSdisk_initialize(BYTEpdrv)用于初始化硬件设备,在本次项目中主要就是初始化SPI总线接口,这个底层函数在执行应用层的open、write、read等函数是都会被执行。本项目没有对flash进行分区操作,因此设备号应该为0。DSTATUSdisk_initialize(BYTEpdrv/*Physicaldrivenmuber(0..)*/){if(pdrv==0)//设备号为0则进行初始化操作{SPI_Flash_Init();return0;//返回0表示成功}els

3、e{returnSTA_NODISK;}}2、读取设备状态DSTATUSdisk_status(BYTEpdrv);用于读取设备状态,判断设备是否处于空闲状态,由于本项目使用的存储单元为spi-flash所以始终是可以操作的状态,因此始终返回OK就可以。DSTATUSdisk_status(BYTEpdrv/*Physicaldrivenmuber(0..)*/){if(pdrv==0)return0;elsereturnSTA_NODISK;}3、读扇区操作DRESULTdisk_read(BYTEpdrv,/*物理设备号*/BYTE*buff,/*读取数据缓冲*/DWORDsecto

4、r,/*扇区号*/UINTcount/*读取的扇区个数(1-128)*/)使用读操作在指定扇区里读取出数据。DRESULTdisk_read(BYTEpdrv,/*Physicaldrivenmuber(0..)*/BYTE*buff,/*Databuffertostorereaddata*/DWORDsector,/*Sectoraddress(LBA)*/UINTcount/*Numberofsectorstoread(1..128)*/){if(pdrv!=0)returnRES_WRPRT;SPI_Flash_Read(buff,((uint32_t)sector)<<12,((

5、uint32_t)count)<<12);returnRES_OK;}4、写扇区操作DRESULTdisk_write(BYTEpdrv,constBYTE*buff,DWORDsector,UINTcount);使用写操作在指定扇区里写入相应数据,再写入之前必须要擦除扇区。由于w25x16最小的擦除块为4096字节,因此将fatfs的扇区定义为4096,而w25x16一次性写入256字节数据,因此每个扇区需要写入八次数据。DRESULTdisk_write(BYTEpdrv,/*Physicaldrivenmuber(0..)*/constBYTE*buff,/*Datatobewri

6、tten*/DWORDsector,/*Sectoraddress(LBA)*/UINTcount/*Numberofsectorstowrite(1..128)*/){BYTE*buf=(uint8_t*)buff;uint32_tsecAddr=((uint32_t)sector)<<12;uint8_ti;if(pdrv!=0)returnRES_WRPRT;for(i=0;i

7、=256;secAddr+=256;SPI_Flash_Write_Page((uint8_t*)buf,secAddr,256);buf+=256;secAddr+=256;SPI_Flash_Write_Page((uint8_t*)buf,secAddr,256);buf+=256;secAddr+=256;SPI_Flash_Write_Page((uint8_t*)buf,secAddr,256);buf+=256;sec

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。