OpenEdv-开源电子网

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

读SD卡txt文件,并通过esp8266发送

[复制链接]

7

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2018-1-20
在线时间
14 小时
发表于 2018-2-22 09:36:28 | 显示全部楼层 |阅读模式
10金钱
我想每次读1扇区,通过wifi发一扇区,直至文件尾。但是现在接收到的数据全是0,而且一直发送,不会终止。
函数如下,请教大家这是什么问题?


[mw_shl_code=c,true]/* Read a text file and transmit it */
/*输入参数:文件名*/

void data_trans(u8 *pname)
{
FATFS FatFs; /* Work area (filesystem object) for logical drive */
UINT br        ;
u8 ress;
u8 *databuf;        //1扇区数据缓存区
FIL *fil; /* File object */
FRESULT fr; /* FatFs return code */
pname=mymalloc(SRAMIN,32);       
databuf=(u8*)mymalloc(SRAMIN,512);
fil=(FIL*)mymalloc(SRAMIN,512);

/* Register work area to the default drive */
f_mount(&FatFs, 0, 1);

/* Open a text file */
fr = f_open(fil,(const TCHAR*)pname, FA_READ|FA_OPEN_ALWAYS);

/* Read all lines and display it */
for (;;)
{
// memset(databuf,0,512);
ress=f_read(fil, databuf,512, &br);
atk_8266_wifiap_send(databuf);
if (ress==0) break; // over
}
/* Close the file */
f_close(fil);
myfree(SRAMIN,databuf);
myfree(SRAMIN,fil);
myfree(SRAMIN,pname);
}
[/mw_shl_code]

最佳答案

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

就是判断br的值,为0说明读完了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-2-22 09:36:29 | 显示全部楼层
Curlyhair 发表于 2018-2-25 19:02
改成判断if(br==0)break;但是只能读一半的内容。。。。

就是判断br的值,为0说明读完了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2018-1-30
在线时间
22 小时
发表于 2018-2-24 18:10:41 | 显示全部楼层
请问你的SD卡是通过IO方式还是SPI方式通信
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-2-25 01:30:24 | 显示全部楼层
仿真找下问题,看问题点在哪里
回复

使用道具 举报

7

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2018-1-20
在线时间
14 小时
 楼主| 发表于 2018-2-25 09:12:15 | 显示全部楼层
wkz2018 发表于 2018-2-24 18:10
请问你的SD卡是通过IO方式还是SPI方式通信

SPI方式
回复

使用道具 举报

7

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2018-1-20
在线时间
14 小时
 楼主| 发表于 2018-2-25 09:58:20 | 显示全部楼层
正点原子 发表于 2018-2-25 01:30
仿真找下问题,看问题点在哪里

原子哥,仿真发现 f_open 返回 FR_INVALID_NAME
主函数是这两条语句,[mw_shl_code=c,true]sprintf((char*)p,"0HOTO/PIC00001.txt");               
data_trans(p);[/mw_shl_code],请问是什么原因?
回复

使用道具 举报

7

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2018-1-20
在线时间
14 小时
 楼主| 发表于 2018-2-25 17:13:34 | 显示全部楼层
正点原子 发表于 2018-2-25 01:30
仿真找下问题,看问题点在哪里

请问如何判断TXT的内容已经读完?
如果ress=f_read(fil, databuf,512, &br);
在读完512个字节后,f_read就返回0x00
回复

使用道具 举报

7

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2018-1-20
在线时间
14 小时
 楼主| 发表于 2018-2-25 19:02:42 | 显示全部楼层
Curlyhair 发表于 2018-2-25 17:13
请问如何判断TXT的内容已经读完?
如果ress=f_read(fil, databuf,512, &br);
在读完512个字节后,f_re ...

改成判断if(br==0)break;但是只能读一半的内容。。。。
回复

使用道具 举报

7

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2018-1-20
在线时间
14 小时
 楼主| 发表于 2018-2-26 09:10:05 | 显示全部楼层
正点原子 发表于 2018-2-22 09:36
就是判断br的值,为0说明读完了。

原子哥,但是我接收不到完整的TXT文件。我以为是 wifi发送数据 函数
atk_8266_wifiap_send(databuf);的问题,因为我每次都是发送512个字节,但是txt不一定是512的整数。然后我改成用串口,每次发一个字节,但接受到的数据比原文件还大,数据也有错。。。
因为数据不是16进制,我也判断不出是从哪里出错的。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-26 16:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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