如何使用mcu 内置 flash 实现fatfs

news2024/9/20 20:34:42

一、环境与目的

AT32F403AVGT7,FLASH从0x80e0000到最后,共128K。扇区大小为512。

注意:Flash 的扇区大小为2KB。

fatfs 80286    /* Revision ID */

目标在于利用单片机1MBflash后面的一小部分,以方便应用程序存储系统参数。

1)diskio.c里ioctl下:

case DEV_SYS :
    switch(cmd){
      case CTRL_SYNC:
        result = RES_OK;
        break;
      case GET_SECTOR_SIZE:
        *(DWORD*)buff = 512;
        result = RES_OK;
        break;
      case GET_SECTOR_COUNT:
        //*(DWORD*)buff = ABLINKFLASH_SIZE/2048;
        *(DWORD*)buff = 256;
        result = RES_OK;
        break;
      case GET_BLOCK_SIZE:
        *(DWORD*)buff = 1;
        result = RES_OK;
        break;
      default:
        result = RES_PARERR;
        break;
    }

2)  读写函数:

void flash_write_byte_nocheck(uint32_t write_addr, uint8_t *p_buffer, uint32_t num_write){             
    uint32_t i;
    uint32_t writeNum   = num_write*512;
    uint32_t headAddr, tailAddr;

    write_addr = write_addr*512+ABLINKFLASH_START_ADDR;

    while(writeNum){
        headAddr        = write_addr - write_addr%2048;//(write_addr>>11)<<11;
        tailAddr        = headAddr+2048;
        n_ReadSector(headAddr);
        for(i=write_addr; i<tailAddr; i++){
            flushSectorBuff[i-headAddr]     = p_buffer[i-write_addr];
            writeNum--;
            if(0==writeNum){
                break;
            }
        }
        n_WriteSector(headAddr);
    }
    
} 

void flash_read_byte(uint32_t read_addr, uint8_t *p_buffer, uint32_t num_read){ 
    uint32_t i;
    uint32_t readCount  = num_read*512;
    uint32_t sectora    = read_addr<<9;
    uint8_t* pu8T_Temp;
    for(i = 0; i < readCount; i++){
      pu8T_Temp         = (uint8_t*)(sectora+ABLINKFLASH_START_ADDR+i);
      p_buffer[i]       = *pu8T_Temp; 
    }  
}

二、解析如下:

三、验证代码如下:

 res = f_mkfs("0:", 0, buffer, 1024);
  if(FR_OK==res){
    aBlink.uart_usb->send("f_mkfs ok...\r\n", 14);
  }else{
    aBlink.uart_usb->send("f_mkfs error...\r\n", 17);
  }


  res = f_mount(&fatfs, "0:", 1);
  if(FR_OK==res){
    aBlink.uart_usb->send("fatfs mount success.\r\n", 22);
    res = f_open(&fil, "0:123456.txt", FA_OPEN_ALWAYS);
    if(FR_OK==res){
      aBlink.uart_usb->send("fatfs open success...\r\n", 23);
      res = f_close(&fil);
      if(FR_OK==res){
        aBlink.uart_usb->send("fatfs close success...\r\n", 24);
      }else{
        aBlink.uart_usb->send("fatfs close error...\r\n", 24);
      }
    }else{
      aBlink.uart_usb->send("fatfs open error...\r\n", 23);
    }

  }else{
    aBlink.uart_usb->send("fatfs mount error.\r\n", 22);
  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu上安装剪切板管理软件

1. 更新系统和软件 确保你的系统和软件是最新的&#xff0c;有时更新可以修复这类错误。 sudo apt update sudo apt upgrade 2. 重新安装 Diodon 尝试卸载并重新安装 Diodon。 sudo apt remove diodon sudo apt install diodon 3. 检查依赖项 确保系统中安装了所有必要…

Aiseesoft Data Recovery for Mac:专业级数据恢复解决方案

在数字时代&#xff0c;数据的安全与恢复成为了我们不可忽视的重要议题。对于Mac用户而言&#xff0c;Aiseesoft Data Recovery无疑是一款值得信赖的专业级数据恢复软件。它以其强大的恢复能力、简洁的操作界面以及广泛的兼容性&#xff0c;在众多数据恢复工具中脱颖而出&#…

I 2U-Net: 一种具有丰富信息交互的双路径U-Net用于医学图像分割|文献速递-大模型与多模态诊断阿尔茨海默症与帕金森疾病

Title 题目 I 2U-Net: A dual-path U-Net with rich information interaction for medical image segmentation I 2U-Net: 一种具有丰富信息交互的双路径U-Net用于医学图像分割 01 文献速递介绍 在计算机视觉领域&#xff0c;医学图像分割是主要的挑战之一&#xff0c;例如…

【Java】—— Java面向对象基础:使用Java模拟银行账户与客户交易系统

目录 账户类&#xff08;Account&#xff09; 客户类&#xff08;Customer&#xff09; 测试类&#xff08;CustomerTest&#xff09; 运行结果 在今天的博文中&#xff0c;我们将通过Java编程语言来模拟一个简单的银行账户与客户交易系统。这个系统将包括两个主要类&#…

算法设计:实验四回溯法

【实验目的】 应用回溯法求解图的着色问题 【实验要求】 设下图G(V,E)是一连通无向图&#xff0c;有3种颜色&#xff0c;用这些颜色为G的各顶点着色&#xff0c;每个顶点着一种颜色&#xff0c;且相邻顶点颜色不同。试用回溯法设计一个算法&#xff0c;找出所有可能满足上述…

Cookie、Session、Token、JWT的区别

先总结 其实比较的话就只是Session、Token、JWT的区别&#xff0c;Session是基于Cookie的 这里暂时只比较Session和JWT的区别 存放位置不同 Session基于Cookie存储在服务端JWT存放在客户端&#xff0c;通常是在浏览器的Cookie或LocalStorage中。 JWT将 Token 和 Payload 加…

从学习到工作,2024年不可或缺的翻译助手精选

翻译工具利用先进的机器学习和自然语言处理技术&#xff0c;能够迅速将一种语言的文档转换为另一种语言&#xff0c;极大地促进了信息的无障碍流通。接下来&#xff0c;我们将介绍几款功能强大、操作简便的类似deepl翻译的工具&#xff0c;帮助你轻松应对各种翻译需求。 第一款…

容器网络(桥接、host、none)及跨主机网络(etcd、flannel、docker)

1.本地网络 1.bridge 所有容器连接到桥就可以使用外网&#xff0c;使用nat让容器可以访问外网&#xff0c;使用ip a s指令查看桥&#xff0c;所有容器连接到此桥&#xff0c;ip地址都是 172.17.0.0/16网段&#xff0c;桥是启动docker服务后出现&#xff0c;在centos使用bridge…

深度强化学习算法(五)(附带MATLAB程序)

深度强化学习&#xff08;Deep Reinforcement Learning, DRL&#xff09;结合了深度学习和强化学习的优点&#xff0c;能够处理具有高维状态和动作空间的复杂任务。它的核心思想是利用深度神经网络来逼近强化学习中的策略函数和价值函数&#xff0c;从而提高学习能力和决策效率…

数据结构(6.4_2)——最短路径问题_BFS算法

最短路径问题 BFS求无权图的单源最短路径 原代码 改造visit函数后

list的使用及其相关知识点

目录 ◉list的底层逻辑 ◉关于list的新增功能 ▲splice功能 ▲remove函数 ▲unique函数 ▲merge函数 ▲sort函数 ▣迭代器类型 ▲reverse函数 作为数据容器之一的list和其他容器的使用上有很多相似的地方&#xff0c;比如都有大致相同的构造函数&#xff0c;大致相同的头插尾插…

CUDA编程之CUDA Sample-5_Domain_Specific-volumeFiltering(光线追踪)

volumeFiltering演示了使用 3D 纹理和 3D 表面写入进行 3D 体积过滤。它从磁盘加载一个 3D 体积&#xff0c;并使用光线步进和 3D 纹理进行显示。 以下是该示例的主要内容和功能&#xff1a; 主要功能 3D 体积加载: 从磁盘加载 3D 体积数据&#xff0c;通常为医学成像数据或体…

图像处理中的腐蚀与膨胀算法详解

引言 在图像处理领域&#xff0c;形态学操作&#xff08;Morphological Operations&#xff09;是处理二值图像的重要工具。腐蚀&#xff08;Erosion&#xff09;和膨胀&#xff08;Dilation&#xff09;是形态学操作的两种基本形式&#xff0c;它们常用于消除噪声、分割图像、…

深入解析C#中的锁机制:`lock(this)`、`lock(privateObj)`与`lock(staticObj)`的区别

前言 在C#的多线程编程中&#xff0c;lock关键字是确保线程安全的重要工具。它通过锁定特定的对象&#xff0c;防止多个线程同时访问同一块代码&#xff0c;从而避免数据竞争和资源冲突。然而&#xff0c;选择适当的锁对象对于实现高效的线程同步至关重要。本文将深入探讨使用…

三种tcp并发服务器实现程序

都需先进行tcp连接 1、多进程并发 2、多线程并发 3、IO多路复用并发 &#xff08;1&#xff09;select &#xff08;2&#xff09;epoll

在VB.net中,LINQ在数据统计方面的应用,举例说明

标题 在VB.net中&#xff0c;LINQ在数据统计方面的应用&#xff0c;举例说明 正文 在VB.NET中&#xff0c;LINQ&#xff08;Language Integrated Query&#xff09;在数据统计方面有着广泛的应用。LINQ允许开发者以声明性的方式对数据集合进行复杂的查询和统计操作&#xff0c;…

笔记:Echarts 饼图 图例legend 自定义 换行

配置后效果&#xff1a;&#x1f447; 配置&#xff1a; let option {legend: [{data: ["融云", "融AI", "融安全", "融平台"],show: true,right: "3%",bottom: "20%",left: "center",icon: "re…

乾元通渠道商中标大理市自然灾害应急能力提升项目

近日&#xff0c;乾元通渠道商中标云南省大理市自然灾害应急能力提升项目&#xff0c;乾元通作为设备厂家&#xff0c;为项目提供通信指挥类装备&#xff08;多链路聚合设备&#xff09;QYT-X1。 青岛乾元通数码科技有限公司作为国家应急产业企业&#xff0c;深耕于数据调度算法…

医疗数字化转型数据中台架构方案(一)

为推进医疗数字化转型&#xff0c;我们提出构建数据中台架构方案&#xff1a;通过集成医院内外多个数据源&#xff0c;利用大数据、人工智能等技术对数据进行清洗、整合、标准化处理&#xff0c;形成高质量的数据资产&#xff1b;再基于云原生技术构建湖仓一体化大数据平台&…

【Python数据结构与算法】栈----合法出栈序列

题目&#xff1a;合法出栈序列 描述 给定一个由大小写字母和数字构成的&#xff0c;没有重复字符的长度不超过62的字符串x&#xff0c;现在要将该字符串的字符依次压入栈中&#xff0c;然后再全部弹出。 要求左边的字符一定比右边的字符先入栈&#xff0c;出栈顺序无要求。 …