w806 w25q128 spi flash 移植fatfs
一:spi初始化
hspi.Instance = SPI;hspi.Init.Mode = SPI_MODE_MASTER;hspi.Init.CLKPolarity = SPI_POLARITY_LOW; hspi.Init.CLKPhase = SPI_PHASE_1EDGE; hspi.Init.NSS = SPI_NSS_SOFT;hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;hspi.Init.FirstByte = SPI_LITTLEENDIAN;
二:io初始化
__HAL_RCC_SPI_CLK_ENABLE();__HAL_AFIO_REMAP_SPI_CS(GPIOB, GPIO_PIN_4);//22 or 18__HAL_AFIO_REMAP_SPI_CLK(GPIOB, GPIO_PIN_2);//24__HAL_AFIO_REMAP_SPI_MISO(GPIOB, GPIO_PIN_3);//25__HAL_AFIO_REMAP_SPI_MOSI(GPIOB, GPIO_PIN_5);//26
三:下载fatfs
//#define DEV_RAM 0 /* Example: Map Ramdisk to physical drive 0 */
//#define DEV_MMC 1 /* Example: Map MMC/SD card to physical drive 1 */
//#define DEV_USB 2 /* Example: Map USB MSD to physical drive 2 */#define DEV_SPI 0 /* Example: Map USB MSD to physical drive 2 *///修改添加 spi
/*-----------------------------------------------------------------------*/
/* Low level disk I/O module SKELETON for FatFs (C)ChaN, 2019 */
/*-----------------------------------------------------------------------*/
/* If a working storage control module is available, it should be */
/* attached to the FatFs via a glue function rather than modifying it. */
/* This is an example of glue functions to attach various exsisting */
/* storage control modules to the FatFs module with a defined API. */
/*-----------------------------------------------------------------------*/#include "ff.h" /* Obtains integer types */
#include "diskio.h" /* Declarations of disk functions */#include "../src/wq25128.h"/* Definitions of physical drive number for each drive *///#define DEV_RAM 0 /* Example: Map Ramdisk to physical drive 0 */
//#define DEV_MMC 1 /* Example: Map MMC/SD card to physical drive 1 */
//#define DEV_USB 2 /* Example: Map USB MSD to physical drive 2 */#define DEV_SPI 0 /* Example: Map USB MSD to physical drive 2 *//*-----------------------------------------------------------------------*/
/* Get Drive Status */
/*-----------------------------------------------------------------------*/DSTATUS disk_status (BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{DSTATUS stat;
// int result;uint8_t id[2] = {0};switch (pdrv) {case DEV_SPI://BSP_W25Q128_Init();BSP_W25Q128_Read_ID(id);//result = id[0] << 8 | id[1];if(id[0] == 0xEF && id[1] == 0x17)//0x18 is w25q256stat = !STA_NOINIT;else stat = STA_NOINIT;return stat; }return STA_NOINIT;
}/*-----------------------------------------------------------------------*/
/* Inidialize a Drive */
/*-----------------------------------------------------------------------*/DSTATUS disk_initialize (BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{//DSTATUS stat;//int result;switch (pdrv) {case DEV_SPI://BSP_W25Q128_Init();return !STA_NOINIT;//disk_status(DEV_SPI);}return STA_NOINIT;
}/*-----------------------------------------------------------------------*/
/* Read Sector(s) */
/*-----------------------------------------------------------------------*/DRESULT disk_read (BYTE pdrv, /* Physical drive nmuber to identify the drive */BYTE *buff, /* Data buffer to store read data */LBA_t sector, /* Start sector in LBA */UINT count /* Number of sectors to read */
)
{//DRESULT res;//int result;switch (pdrv) {case DEV_SPI:if(pdrv != 0 || count == 0) return RES_PARERR;if(BSP_W25Q128_Read(buff, sector * W25Q128FV_SECTOR_SIZE, count * W25Q128FV_SECTOR_SIZE) == W25Q128_OK)return RES_OK;else return RES_ERROR;}return RES_PARERR;
}/*-----------------------------------------------------------------------*/
/* Write Sector(s) */
/*-----------------------------------------------------------------------*/#if FF_FS_READONLY == 0DRESULT disk_write (BYTE pdrv, /* Physical drive nmuber to identify the drive */const BYTE *buff, /* Data to be written */LBA_t sector, /* Start sector in LBA */UINT count /* Number of sectors to write */
)
{//DRESULT res;//int result;uint8_t i = 0;switch (pdrv) {case DEV_SPI:if(pdrv != 0 || count == 0) return RES_PARERR;for(i = 0; i < count; i++){if(BSP_W25Q128_Erase_Sector((sector + i) * W25Q128FV_SECTOR_SIZE) != W25Q128_OK)return RES_ERROR;if(BSP_W25Q128_Write((uint8_t*)buff + (i * W25Q128FV_SECTOR_SIZE), (sector + i) * W25Q128FV_SECTOR_SIZE, W25Q128FV_SECTOR_SIZE) != W25Q128_OK)return RES_ERROR;}return RES_OK;}return RES_PARERR;
}#endif/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions */
/*-----------------------------------------------------------------------*/DRESULT disk_ioctl (BYTE pdrv, /* Physical drive nmuber (0..) */BYTE cmd, /* Control code */void *buff /* Buffer to send/receive control data */
)
{DRESULT res;//int result;switch (pdrv) {case DEV_SPI:if(pdrv != 0) return RES_PARERR;switch(cmd){case CTRL_SYNC:res = RES_OK;break;case GET_SECTOR_COUNT:*(DWORD*)buff = W25Q128FV_FLASH_SIZE / W25Q128FV_SECTOR_SIZE;res = RES_OK;break;case GET_SECTOR_SIZE:*(WORD*)buff = W25Q128FV_SECTOR_SIZE;res = RES_OK;break;case GET_BLOCK_SIZE:*(DWORD*)buff = 1;res = RES_OK;break;default:res = RES_PARERR;break;}return res;}return RES_PARERR;
}
根据需要 修改 配置 文件
#define FF_USE_MKFS 1 //支持格式化函数
#define FF_CODE_PAGE 936 //中文支持
#define FF_USE_LFN 1 //长文件名支持
#define FF_MAX_SS 4096 //扇区块字节
#define FF_MAX_SS 4096 //文件日期
w806 w25q128 spi flash 移植fatfs相关推荐
- STM32CUBEMX(13)--SPI,W25Q128外部Flash移植
STM32CUBEMX--SPI,W25Q128外部Flash移植 概述 视频教学 完整代码下载 硬件准备 选择芯片型号 配置时钟源 配置时钟树 串口配置 SPI配置 接线方式 生成工程设置 生成代码 ...
- HI3516a w25q128 spi flash无法启动问题
海思HI3516a开发套件上spi flash硬件默认3 addr模式,需要更改u-boot代码才能正确支持3 addr模式,具体操作如下: 更改u-boot代码osdrv/opensource/ub ...
- STM32外部Flash移植FATFS笔记
FatFs是面向小型嵌入式系统的一种通用的FAT文件系统.它完全是由AISI C语言编写并且完全独立于底层的I/O介质.因此它可以很容易地不加修改地移植到其他的处理器当中,如8051. PIC. AV ...
- 【理论】SPI Flash和E2PROM区别
SPI Flash和E2PROM两款存储芯片作为单片机常用的外部存储器件,其区别还是要去仔细把握一下的. 以W25Q128为代表的SPI Flash和以AT24C02为代表的E2PROM为例,下面我就 ...
- STM32CUBEIDE之SPI读写FLASH进阶串行FLASH文件系统FatFs
预备知识 >>W25Q128是16M spi flash,一共有256个block ,每个Block 64KB. >>一个Block可以分割为16个扇区(small secto ...
- 串行FLASH文件系统FatFs介绍并在STM32F1上移植
先对内存存储有一个理解,比如在FALSH中存储数据时,已知在STM32F1 开发板上都有自带有一个外部 FLASH(W25Q128.128Mbit=16MByte,即16M内存),FLAS ...
- 基于stm32、spi协议的Fatfs文件系统移植(附完整代码下载)
开发环境:Window 7 32bit 开发工具:Keil uVision4 硬件:stm32f103vct6 目录 1.硬件设计: 2.软件设计 1.SPI收发数据 2.向SD卡发送的命令格式: 3 ...
- STM32CubeMX学习笔记(25)——FatFs文件系统使用(操作SPI Flash)
一.FatFs简介 FatFs 是面向小型嵌入式系统的一种通用的 FAT 文件系统.它完全是由 ANSI C 语言编写并且完全独立于底层的 I/O 介质.因此它可以很容易地不加修改地移植到其他的处理器 ...
- 移植SFUD,驱动SPI FLASH ZD25WQ80
1.关于SFUD SFUD (Serial Flash Universal Driver) 串行 Flash 通用驱动库,支持众多spi flash,关于SFUD的详细资料可参考:https://gi ...
最新文章
- 数据结构与算法:19 排序
- 猫、交换机和路由器的区别
- 高内聚低耦合通俗理解_抱歉,请不要把“业务逻辑层”理解为“业务中台”
- 如何把html转换为js文件,Html2Js--Html代码到Javascript文件的转换
- 动态切换view视图viewflipper组件
- 没有流氓软件,只有流氓行为
- 工业4.0围观,大炒作,大问题,大差距,你发现了吗?
- export ,export default 和 import 区别以及用法
- VC 6.0下载 VC 6.0英文版下载 Visual C++ 6.0 英文企业版 集成SP6完美版(最新更新地址,百度网盘)...
- Android实战之淘宝领券(二)
- 系统建模uml语言(用例图、实现类图、状态图、顺序图、活动图、组件图、部署图、详细类图、uml文档设计)
- 阿里企业邮箱收费版与免费版有哪些规格和功能上的区别?
- 【Unity3D】基于模板测试和顶点膨胀的描边方法
- Revit导出PDF格式图纸流程及“批量导出图纸”
- 高薪运维经典企业版面试题汇总
- input的value属性值
- ConcurrentHashMap是如何保证线程安全的?
- 说说共享纸巾的那些事
- 前端入门篇(八)表单
- 域名到期后多久释放?如何抢注到期域名?