OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10962|回复: 19

新手上路,求好心人解答为什么我用SPI_FLASH移植FatFS一直在硬件出错死循环里

[复制链接]

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-12-21
在线时间
0 小时
发表于 2014-12-21 22:51:09 | 显示全部楼层 |阅读模式
5金钱
附上我的工程文件,见附件

SPI_FLASH FatFS.rar

3 MB, 下载次数: 835

最佳答案

查看完整内容[请看2#楼]

原子哥,我大致搞定了,为了服务一些还在迷茫的同学,上传代码给同学们参考下,我用的是华邦w25x16,在SPI_FLASH里运行FatFS文件系统,有bug欢迎指出,大家相互交流,相互学习。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2014-12-21 22:51:10 | 显示全部楼层
原子哥,我大致搞定了,为了服务一些还在迷茫的同学,上传代码给同学们参考下,我用的是华邦w25x16,在SPI_FLASH里运行FatFS文件系统,有bug欢迎指出,大家相互交流,相互学习。

用w25x16运行FatFS文件系统.rar

3.03 MB, 下载次数: 4891

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-12-21 23:07:00 | 显示全部楼层
先自己调试几天,找找感觉。然后能说出你自己的分析,我再帮你看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2014-12-22 09:48:47 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------已经调试几天了,先格式化,然后调用disk_write,disk_read,正常,而且格式化后获取磁盘信息,显示为0 KB Total Drive Space.0 KB Available Space.然后进入硬件出错中断,上网搜资料,都说是数组溢出,结构体越界之类的,但新手调试这个确实有困难

         format_disk();
disk_write(0,hello,0,2);
disk_read(0,hello1,0,2);
printf("%s\n\n",hello1);
disk_read(0,hello1,2,1);
printf("%s\n\n",hello1);
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2014-12-22 13:34:46 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,我有新进展,按照你http://www.openedv.com/posts/list/7415.htm上说的内存对齐和编译器优化,我调试了下,内存对齐好像没什么用(对于我的工程来说),我改变了编译器后,能显示我的内存信息1888 KB Total Drive Space.1888 KB Available Space.可以创建文件,文件夹,查看文件列表等操作,但是每次操作过后又进入硬件出错死循环,原子哥,还有什么原因会导致这种错误吗
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2014-12-22 14:06:36 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,之前不知道怎么改堆栈,后面上网发现堆栈在启动文件里,搜Stack_Size,就有了(初学的不知道,希望能帮助别人),我把它改大了,然后把编译优化改为默认(level 2),还是回到了0 KB Total Drive Space.0 KB Available Space.创建文件显示错误代码:6  The path name format is invalid,只能继续观察了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-12-22 19:28:02 | 显示全部楼层
回复【4楼】杨海平:
---------------------------------
跟踪代码,看看哪里进入的hardfault。然后这里就是出问题的地方了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2014-12-22 22:47:26 | 显示全部楼层
 我跟踪了,它是完成了
[mw_shl_code=c,true]void creat_file(void) { FIL file; FIL *pf = &file; FATFS fs; uint8_t res = FR_OK; uint8_t name[16] = {0}; uint8_t length = 0; printf("\r\n????????????,?????·??...???? 8 + 3..."); printf("\r\n??:123.dat\r\n"); get_file_name(name,length,FI); res = f_mount(0,&fs); /* Mount a Logical Drive 0 */ if (res != FR_OK) { printf("\r\n?????????????§°?,?í?ó?ú??: %u",res); return; } res = f_open(pf,(TCHAR *)name,FA_READ | FA_WRITE | FA_CREATE_NEW); if (res == FR_OK) { printf("\r\n???¨????????!"); res = f_close(pf); if (res != FR_OK) { printf("\r\n???¨????????,????±??????±,?§°?!"); printf("\r\n?í?ó?ú??: %u",res); } } else { printf("\r\n???¨?????§°?!"); printf("\r\n?í?ó?ú??: %u",res); } f_mount(0,NULL); }[/mw_shl_code]

后自动跳到最后一张图了,后面运行就会重启程序(实际跑的时候进入硬件错误中断),不仅是creat_file,其他队文件的操作也会跳入中断,原子哥,求指点,你的一两句话可能抵我一天的功夫,谢谢!




回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2014-12-22 22:50:41 | 显示全部楼层
在公司实习,被公司催着要结果也是醉了。
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2014-12-22 22:53:50 | 显示全部楼层


不知道上面的东西是什么意思,如果想知道,我该看什么资料来了解呢?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-12-22 23:29:30 | 显示全部楼层
还是堆栈问题。
fs这么占内存的东东,你居然直接放局部变量,不死才怪。
凡是超过50个字节的结构体/数组,都应该用内存管理,或者全局变量。
你自己去看这些结构体到底要多少内存,然后定义成全局变量,再试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2014-12-23 08:55:40 | 显示全部楼层
原子哥,其实昨天我看了http://www.openedv.com/posts/list/7415.htm这个帖子,晚上我把 FATFS fs;这个变量做成全局变量,但是好像还是不行,我今天再试试。
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2014-12-23 23:10:01 | 显示全部楼层
原子哥,我用keil里的stdlib.h中的malloc函数实现动态分配(不但是FATFS结构体,FIL结构体也是),试了下,工程调试好像效果不佳,还是硬件错中断,是不是应该用原子哥编写的mem_malloc来实现?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-12-24 19:07:18 | 显示全部楼层
回复【12楼】杨海平:
---------------------------------
自带的需要在.s里面设置HEAP大小,可能还有其他需要设置的地方,不太清楚。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-12-24 19:07:25 | 显示全部楼层
回复【13楼】杨海平:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2014-12-26 11:07:20 | 显示全部楼层
原子哥,问你个问题,我的SPI_FLASH能不能局部格式化呢?比如2M的flash,只格式化512K,其他的有另外的用途?
回复

使用道具 举报

15

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-10-31
在线时间
4 小时
发表于 2014-12-26 20:42:20 | 显示全部楼层
看看w25x16的数据手册,可以实现4k扇区擦除,32k和64k块区擦除
总有一天,要为自由而活
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-5-29
在线时间
14 小时
发表于 2016-2-2 11:24:54 | 显示全部楼层
谢谢分享,十分感谢
MCU DIY
回复

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-1-18
在线时间
45 小时
发表于 2016-5-4 16:06:00 | 显示全部楼层
调好了吗兄弟,我也卡在这能不能提供一下帮助
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-4-28
在线时间
7 小时
发表于 2016-10-15 23:15:20 | 显示全部楼层
我的也卡在这里了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 01:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表