当前位置: 首页> 房产> 家装 > 如何使用mcu 内置 flash 实现fatfs

如何使用mcu 内置 flash 实现fatfs

时间:2025/7/15 6:05:35来源:https://blog.csdn.net/c_1969/article/details/141652562 浏览次数:0次

一、环境与目的

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);}

关键字:如何使用mcu 内置 flash 实现fatfs

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: