初级会员

- 积分
- 162
- 金钱
- 162
- 注册时间
- 2020-3-13
- 在线时间
- 32 小时
|

楼主 |
发表于 2020-8-26 10:49:22
|
显示全部楼层
本帖最后由 yaakovH 于 2020-8-27 11:03 编辑
原子哥,我现在是用的文件系统读
1.初始化sd卡时,设置模式为DMA模式了;
errorstatus=SD_PowerON(); //SD卡上电
if(errorstatus==SD_OK)errorstatus=SD_InitializeCards(); //初始化SD卡
if(errorstatus==SD_OK)errorstatus=SD_GetCardInfo(&SDCardInfo); //获取卡信息
if(errorstatus==SD_OK)errorstatus=SD_SelectDeselect((u32)(SDCardInfo.RCA<<16));//选中SD卡
if(errorstatus==SD_OK)errorstatus=SD_EnableWideBusOperation(SDIO_BusWide_4b); //4位宽度,如果是MMC卡,则不能用4位模式
if((errorstatus==SD_OK)||(SDIO_MULTIMEDIA_CARD==CardType))
{
SDIO_Clock_Set(SDIO_TRANSFER_CLK_DIV); //设置时钟频率,SDIO时钟计算公式:SDIO_CK时钟=SDIOCLK/[clkdiv+2];其中,SDIOCLK固定为48Mhz
errorstatus=SD_SetDeviceMode(SD_DMA_MODE); //设置为DMA模式
printf("sd errorstatus : %d \r\n",errorstatus);
//errorstatus=SD_SetDeviceMode(SD_POLLING_MODE);//设置为查询模式
}
2.读取文件采取的文件系统读
if(FR_OK == f_open(&fsrc, "0:file.txt", FA_OPEN_EXISTING | FA_READ))
{
printf("file.txt f_open ok !\r\n");
while(1)
{
memset(txt_buf,'0',1024);
///delay_ms(2);
ress = f_read(&fsrc, txt_buf, 1024, &br); 配置sd卡 DMA模式后,这里获取到数据的方式 应该就是sd卡透传过来的
printf("br=%d \r\n",br);
if(ress || br == 0)
{
if(ress)
printf("file.txt f_read failed!\r\n");
if(br == 0)
{
printf("br == 0!");
delay_ms(200);
}
f_close(&fsrc);
myfree(SRAMIN,txt_buf);
printf("f_close fil");
break;
} send_data_size = br;
sent = M8266WIFI_SPI_Send_BlockData(txt_buf, (u32)send_data_size, 5000, link_no, NULL, 0, &status); 这里是 WiFi模块将数据传输给手机,我没想明白的就是 我就算配置spi的DMA,使能DMA,感觉这里txt_buf就直接用了,也没用到SPI的DMA透传 《《《《《==迷惑点
…………
=============================
3.我这边所谓的数据透传,就是
3.1 卡里面存放的有多个文件,大小不一(txt格式,里面许多数据)
3.2 读卡,这里希望是DMA透传的方式进行传输(主控到WiFi模块,WiFi模块是spi接口的,现用的是spi2,spi1用于flash了)
3.3 读到的数据通过WiFi模块传给手机(3.3部分已经测试过,能达到600k-700kb/s)
现在主要问题是主控到WiFi模块的透传;
刚开始我采用的sd卡模式是查询模式,后面改成DMA模式,传输速度没有变化(这里的改成DMA模式只是 在初始化地方 设置了下 模式为DMA模式,不确定切换模式是否还需要其他操作步骤)
现在想要完成 主控到WiFi的读卡透传
我有试过 将下面1024变成 50*1024
具体现象:主控到手机的总时间 与之前相比差不多,时间主要花费在 主控到WiFi模块部分
代码贴:
txt_buf = mymalloc(SRAMIN,1024);
if(FR_OK == f_open(&fsrc, "0:file.txt", FA_OPEN_EXISTING | FA_READ))
{
printf("file.txt f_open ok !\r\n");
while(1)
{
memset(txt_buf,'0',1024);
///delay_ms(2);
ress = f_read(&fsrc, txt_buf, 1024, &br); 这里
…………
============
|
|