请教一个stm32USBHOST采用fatfsstm32 fat32文件系统统向U盘连续写文件的问题

博客访问: 1035124
博文数量: 215
博客积分: 2215
博客等级: 大尉
技术积分: 4324
注册时间:
气质,源于心灵的自信!
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
发布时间: 16:44:57
一、序言& & 经常在网上、群里看到很多人问关于STM32的FATFS文件系统移植的问题,刚好自己最近也在调试这个程序,为了让大家少走弯路,我把我的调试过程和方法也贡献给大家。二、FATFS简介& & FatFs Module是一种完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语.........
阅读(979) | 评论(0) | 转发(0)
给主人留下些什么吧!~~
jeff_gang:大牛,我最近再看Linux驱动,看懂了Linus设备驱动模型,看了看i2c子系统、dm9000驱动等等。对内核也有一定的了解,现在想从事这方面的工作,有点担心没这方面的项目经验,我之前是做单片机开发的,现在用stm32跑跑小系统,比如ucosii、freertos,工作中要用到freertos,我该再学点什么东西才能顺利的转到驱动上呢?
建议你深入的学习linux内核,如果你的基础不够好的话,可以跟着韦东山的那套免费视频教程(还有书嵌入式linux完全开发手册)先把基础打牢!说实话,学linux这玩意没啥捷径,看的东西多,慢慢时间久了就理解啦。推荐你一本书《深入linux内核驱动机制》,陈学松写的,现在正在写第二版,等过一段该出版啦,第一版网上你可以下到pdf,我认为他算是国内linux写书写的最好的啦!还有毛德操的那本《linux内核情景分析》也是国内难得的好书,就是版本老了一点,不过对于内核的基本原理还是没变。
大牛,我最近再看Linux驱动,看懂了Linus设备驱动模型,看了看i2c子系统、dm9000驱动等等。对内核也有一定的了解,现在想从事这方面的工作,有点担心没这方面的项目经验,我之前是做单片机开发的,现在用stm32跑跑小系统,比如ucosii、freertos,工作中要用到freertos,我该再学点什么东西才能顺利的转到驱动上呢?
shangbaogen:usb本身的传输速率估计优化不了啦,因为都是usb&spec规定好的,最快的也就是等时(isochronous)传输,不用应答。如果是大容量存储的话你可以试图优化块设备读写的流程,来提高速率
一般从PC拷贝文件到mass&storage的话&速率为4MBps算正常吗
haijian0114:老大&知道如何提高USB的传输速率吗
usb本身的传输速率估计优化不了啦,因为都是usb&spec规定好的,最快的也就是等时(isochronous)传输,不用应答。如果是大容量存储的话你可以试图优化块设备读写的流程,来提高速率
老大&知道如何提高USB的传输速率吗
请登录后留言。STM32 上FATFS文件系统移植問題(一)----- f_mkfs 求解(跪謝)-电子产品世界论坛
STM32 上FATFS文件系统移植問題(一)----- f_mkfs 求解(跪謝)
&在按照论坛上给的野火 零死角玩转STM32-高级篇2 文件系统进行相关操作时,搞了3个星期,都没弄通。现在主要问题是:主函数中調用&res=f_open(&fsrc,"0:/Demo.TXT",FA_CREATE_ALWAYS |FA_WRITE);
就報open file error :13 沒有文件系統。
接著就一步一步分析程序,其中到如下這個創建文件系統的文件,遇到幾個問題,還請論壇里,搞過這個的指導一下。主要問題就是 n_fat 偏移地址的計算;先謝了。
用的是KINGSTON &2G SD 卡,
FRESULT f_mkfs (
/* Logical drive number */
BYTE partition,
/* Partitioning rule 0:FDISK, 1:SFD */ &選的是1 SFD,我想0扇區并沒有MBR
WORD allocsize
/* Allocation unit size [bytes] */ &一個簇為8個扇區,從WINHEX得到
static const DWORD sstbl[] = { 2, , 3, , & 0 };
static const WORD cstbl[] = &{ & 32768, & 16384, & 8192, & 4096, & , &8192, &,
BYTE fmt, m, *
DWORD b_part, b_fat, b_dir, b_
/* Area offset (LBA) */
DWORD n_part, n_rsv, n_fat, n_
/* Area size */
DWORD n_clst, d,
/* Check validity of the parameters */
if (drv &= _DRIVES) return FR_INVALID_DRIVE;
if (partition &= 2) return FR_MKFS_ABORTED;
/* Check mounted drive and clear work area */
fs = FatFs[drv];
if (!fs) return FR_NOT_ENABLED;
fs-&fs_type = 0;
drv = LD2PD(drv);
/* Get disk statics */
stat = disk_initialize(drv);
if (stat & STA_NOINIT) return FR_NOT_READY;
if (stat & STA_PROTECT) return FR_WRITE_PROTECTED;
#if _MAX_SS != 512
/* Get disk sector size */
if (disk_ioctl(drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK
|| SS(fs) & _MAX_SS)
return FR_MKFS_ABORTED;
if (disk_ioctl(drv, GET_SECTOR_COUNT, &n_part) != RES_OK || n_part & MIN_SECTOR)
return FR_MKFS_ABORTED;
printf(" sector_number=%d\r\n",n_part);
if (n_part & MAX_SECTOR) n_part = MAX_SECTOR;
/*n_part 總的扇區數*/
b_part = (!partition) ? 63 : 0;
/* Boot sector *///認為此部份是MBR區的大小碼?
/*b_part 要是為64個扇區,32K,一個簇的最大容量*/
n_part -= b_
/*allocsize 一個簇有多少個扇區,應為8*/
for (d = 512; d &= 32768U && d != d &&= 1) ; /* Check validity of the allocation unit size */
if (d != allocsize) allocsize = 0;
if (!allocsize) {
/* Auto selection of cluster size */
for (as = SS(fs); as & 512U; as &&= 1) d &&= 1;
/*一個簇的大小,好像有毛病,沒法定位到allocsize=8,這些是自動進行一個簇大小的計算,先不用管*/
for (n = 0; d & sstbl[n]; n++) ;
allocsize = cstbl[n];
if (allocsize & SS(fs)) allocsize = SS(fs);
allocsize /= SS(fs);
/* Number of sectors per cluster */
/* Pre-compute number of clusters and FAT type */
&n_part,總的扇區數量3854336,這個與Winhex中一致,但這個是多少容量呢?每個簇8個扇區,4K,n_clst計算的值481792,與Winhex得到的480848,相差944;944*4K=3.6875M,與兩個FAT表的大小1.8M相符,也就是Winhex中得到的總簇數實際為:這裡算的總簇數—FAT表 所占扇區數折合簇數-保留區扇區數折合的簇數,所以開頭是預計算,不知道是不是這個道理*/
n_clst = n_part /
printf("n_clst=%d\r\n",n_clst);
fmt = FS_FAT12;
if (n_clst &= 0xFF5) fmt = FS_FAT16;
if (n_clst &= 0xFFF5) fmt = FS_FAT32;
/* Determine offset and size of FAT structure */
switch (fmt) {
case FS_FAT12:
n_fat = ((n_clst * 3 + 1) / 2 + 3 + SS(fs) - 1) / SS(fs);
n_rsv = 1 +
n_dir = N_ROOTDIR * 32 / SS(fs);
case FS_FAT16:
n_fat = ((n_clst * 2) + 4 + SS(fs) - 1) / SS(fs);
n_rsv = 1 +
n_dir = N_ROOTDIR * 32 / SS(fs);
//計算FAT 含有的扇區數,why is it? 3757是從winhex得來,看是否能對應上,
&N_clst 總簇數從Winhex 中得到為480848個。N_clst得到得是481792,按這樣計算的話一個FAT表項占的扇區數為3765,而從Winhex得到的一個FAT表項所占的扇區數為3757,相差8個扇區;
n_fat = ((n_clst * 4) + 8 + SS(fs) - 1) / SS(fs);
& printf("n_fat1=%d\r\n",n_fat);
//n_rsv = 33 -
n_rsv = 39 -//從Winhex得到保留扇區為38個,
n_dir = 0;
&//原來沒有此句
b_fat = b_part + n_
/* FATs start sector */
//b_fat = n_
b_dir = b_fat + n_fat * N_FATS; /* Directory start sector */
b_data = b_dir + n_
/* Data start sector=38+2=0X1D80 */
printf("b_data=%d\r\n",b_data);
/* Align data start sector to erase block boundary (for flash memory media) */
if (disk_ioctl(drv, GET_BLOCK_SIZE, &n) != RES_OK) return FR_MKFS_ABORTED;
n = (b_data + n - 1) & ~(n - 1);
n_fat += (n - b_data) / N_FATS;//為什麽呢?
printf("n_fat2=%d\r\n",n_fat);
/* b_dir and b_data are no longer used below */
/* Determine number of cluster and final check of validity of the FAT type */
n_clst = (n_part - n_rsv - n_fat * N_FATS - n_dir) /
if ( & (fmt == FS_FAT16 && n_clst & 0xFF5)
|| (fmt == FS_FAT32 && n_clst & 0xFFF5))
return FR_MKFS_ABORTED;
&附上源文件,請大俠們幫忙看看,到底什麽原因?跪謝了
匿名不能发帖!请先 [
Copyright (C) 《电子产品世界》杂志社 版权所有FATFS文件系统,最全面的FATFS文件系统文章 - 电子工程世界网
FATFS文件系统
在电子工程世界为您找到如下关于“FATFS文件系统”的新闻
FATFS文件系统资料下载
FATFS结构(文件系统对象)用来保存独立逻辑驱动器动态工作区域。这个结构由应用程序给定,使用f_mount函数注册/注销 FatFs模块。在执行f_mount或媒体发生变化后,访问第一个文件时FATFS被初始化。其他应用程序不能改变结构的任何成员变量。...
FATFS结构(文件系统对象)用来保存独立逻辑驱动器动态工作区域。这个结构由应用程序给定,使用f_mount函数注册/注销 FatFs模块。在执行f_mount或媒体发生变化后,访问第一个文件时FATFS被初始化。其他应用程序不能改变结构的任何成员变量。...
FATFS文件系统在STM32上的移植,基于STM32开发,将FATFS文件系统有效的移植在STM32FATFS文件系统在STM32上的移植\Libraries\CMSIS\CM3\CoreSupport\core_cm3.c
.......\...\..\...\.....\core_cm3.h
.......\...\..\...\DeviceSupport\ST\STM32F10x...
FATFS文件系统的移植.doc...
FatFs文件系统的移植...
SY-STM32F407 V2例程:FATFS文件系统例程...
基于STM32F407ZG的SD卡文件系统FATFS利用SDIO端口的移植。网上找不到所以自己写了个...
Atmega128移植FATFS文件系统,SD卡读写BMP图片实验...
文件系统 :FatFs/Tiny-FatFs Module Source Files R0.06...
FATFS文件系统源代码,测试工程例程及参考资料...
FATFS文件系统相关帖子
。图1.SD卡接口电路2.& && &软件部分SD卡的初始化和指令操作是一个繁琐的流程,具体实现步骤需要查看SD卡的规范手册。此外,要将数据以文件的形式在SD卡上储存并能被WINDOWS或其他系统识别,就必须遵循一定的文件格式,这其中用的最广泛的是WINDOWS发明的FAT文件系统。对于嵌入式设备,FAT文件系统的实现还要感谢一个日本工程师写的开源FATFS...
,你创建一个txt文件,但是只向文件中写若干字符,然后查看文件属性发现实际空间是字符数,占用空间是4KB,[attach]313315[/attach]
这个是电脑的文件系统的规定,究其原因是底层这样规定的,磁盘或者SD卡都有扇区和块的概念,具体可以百度,例如SD卡的读写都是按照sector来的,而不是单个字节的读写,可以参考FATFS文件系统的底层驱动程序部分。
[quote][size...
本帖最后由 被雨困住 于
13:30 编辑
没有问题了,是硬件有问题 fatfs文件系统读不出扇区内的数 细心...
本人想STM32F4通过FATFS文件系统,SDIO读写micro SD卡,可是调试发现,可以创建txt文件,但是里面却无法写入数据,这是怎么一回事?如下图,,
关于利用STM32F4移植 FATFS文件系统通过SDIO读取mSD卡的问题 能创建成功底层函数应该没问题,写入不进去报错1的话表示FR_DISK_ERR,但是这个错误提示太笼统,建议你试试读取文件内容试试再。:):) 记得ST的...
有USB的产品,可以通过给他先烧一个USB转NAND的程序,然后通过电脑拷贝文件进去.
但是没USB的产品,而他又外接了NAND,如何往里面复制数据呢?
比较方便快捷方法是什么?NAND上跑有fatfs文件系统.
如何往NAND写数据 不可以先用烧写器烧写NAND然后在进行贴片焊接吗?或者改用其他接口,SPI、SATA等等吧,只要能从host
接受数据就可以吧,可能就是速度慢些...
& &&&在C语言中,文件操作有分为 打开二进制文件、打开文本文件这两种形式。但是FATFS系统中只有打开文本文件形式先遇到问题:想读取一个16进制的dld文件,发现读取出来的数据都是不对的。
调试:若是读取其他文件以文本形式的文件,读取数据正确,所有我怀疑是打开文件形式的不对。
大家之前有没遇到这类的问题? 有没比较好的解决方法
第59讲 SD卡FATFS文件系统
第60讲 SD卡FATFS文件系统实验
第61讲 LCD彩色液晶屏工作原理
第62讲 LCD彩色液晶屏显示汉字、英文、数字
第63讲 触摸屏工作原理
第64讲 触摸屏实验
视频教程还会继续更新
众拳【剑齿虎STM8】库函数配套课堂笔记下载
众拳【剑齿虎STM8】精品编程100例下载
众拳【剑齿虎STM8】精品编程100例程序下载...
驱动芯片工作原理
第54讲 TM1650 LED数码管驱动芯片实验
第55讲 RDA5807收音机实验
第56讲 STM8 SPI工作总线原理
第57讲 W25Q128存储器工作原理
第58讲 W25Q128存储器实验
第59讲 SD卡FATFS文件系统
第60讲 SD卡FATFS文件系统实验
第61讲 LCD彩色液晶屏工作原理
第62讲 LCD彩色液晶屏显示汉字、英文、数字...
在Flash的16字节备用空间中。当文件系统被挂载时,只须扫描存储器的备用空间就能将文件系统信息读入内存,并且驻留在内存中,不仅加快了文件系统的加载速度,也提高了文件的访问速度,但是增加了内存的消耗。
&&和FATFS文件系统比较:yaffs的针对nand而生,不过yaffs占的内存大。
先把底层SPI读写SD卡驱动调通再说文件系统的事[/quote]
我使用51单片机单独调SD没问题,但是换上瑞萨的这个芯片,也是8位的,因为没有相关文件操作库函数调用,文件操作是个大难,要从底层写起。目前SD初始化没问题,接下来就是读写 文件操作直接找个轻量级的fat32文件系统就行,不必自己手动写,只需要把底层初始化,读写调通基本就能用文件系统了。 上个文件系统就可以了,fatfs...
FATFS文件系统视频
你可能感兴趣的标签
热门资源推荐}

我要回帖

更多关于 stm32 flash 文件系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信