初级会员
- 积分
- 92
- 金钱
- 92
- 注册时间
- 2017-8-17
- 在线时间
- 50 小时
|
10金钱
使用ATK-ESP8266模块与F4探索者开发板连接,目的是将SD卡里面的文件通过wifi模块发送至电脑。目前遇到以下两个问题摸不着头脑。望做过类似项目的解答
问题一:使用TCP透传模式,将SD卡里的TXT文件发送至电脑端的网络调试助手,数据保存至文件。对比源TXT文件文件发现数据丢失。多次试验发现低概率数据完整,其他都是数据缺失。比如1.05M的TXT文件,传输后再保存就只有1.04M。
问题二:使用TCP透传模式,将SD卡里的WAV音频文件发送至电脑端的网络调试助手,数据保存至空白WAV文件。数据丢失严重(更不用考虑播放了),音频文件的传输不知是否理解错误,不能直接从SD卡读出来就传输吗?是否需要先读出来转为整型数据类型再传输至电脑端?
以下是透传数据部分代码:
void send_wav(void)
{
//发送wav
u8 ress;
FIL fwav; //目录
u8 *databuf;
UINT br;
int i = 0;
long filesize = 0;//文件数据长度初始化
databuf=(u8*)mymalloc(SRAMIN,512); //开辟1024字节内存区域
/*打开一个文本文件*/
if(SD_Init() == 0)
{
//ress = f_open(&fwav,(const TCHAR*)"0:/RECORDER/20201103154800.wav", FA_READ);
ress = f_open(&fwav,(const TCHAR*)"0:/RECORDER/doc.txt", FA_READ);
filesize = fwav.fsize; //数据长度
/* 读取并显示所有的行 */
if(ress == FR_OK)
{
do
{
memset(databuf,0,512); //清空数组
f_lseek(&fwav,i); //将文件指针每次移动i个子节
ress=f_read(&fwav,databuf,512, &br); //读取1024个字节文件数据保存到databuf中
u3_printf("%s",databuf);
i+=512;
//退出透传,检查TCP数据包发完数据,再进入透传
u3_printf("+++");//退出透传
atk_8266_send_cmd((u8*)"AT+CIPMODE=0",(u8*)"OK",20); //关闭透传模式
while(atk_8266_send_cmd((u8*)"AT+CIPCHECKSEQ=1",(u8*)"OK",50));//检查TCP数据包是否发送完。
atk_8266_send_cmd((u8*)"AT+CIPSEND",(u8*)"OK",20); //再次进入透传
}
while(i<filesize);
delay_ms(200);
atk_8266_at_response(1);
//关闭文件
printf("文件发送完成");
f_close(&fwav);
myfree(SRAMIN,&fwav);
myfree(SRAMIN,databuf);
}
}
else
printf("没有SD卡");
}
|
|