sdio与wifi接收同时工作,会增加wifi接收的丢包率吗?

jason2
Posts: 44
Joined: Thu Oct 26, 2017 11:02 am

sdio与wifi接收同时工作,会增加wifi接收的丢包率吗?

Postby jason2 » Sat Dec 08, 2018 2:37 am

实验描述:
1·一个esp32作为wifi的发送,一个esp32作为wifi的接收,采用esp_80211_tx。采用80211g,每一包payload大小960bytes。
2·发送不停的地发送数据包,每60包内,数据包与数据包之间没有时间间隔。
3·接收端有一个sdio_transfer_task。接收端每接收到一包,进入wifi_sniffer_packet_handler,通知sdio_transfer_task。sdio_transfer_task向sdio从设备写入两个block。接受端esp32作为接收端主设备。
4·wifi task分配到cpu1 ,sdio_transfer_task分配到cpu0。
5·IDF:基于IDFv3.1
6·如果wifi接收与sdio没有同时工作,那么丢包率很低
代码节选:
1·接收端代码:

Code: Untitled.c Select all



void wifi_sniffer_packet_handler(void* buff, wifi_promiscuous_pkt_type_t type)
{

if (type != WIFI_PKT_DATA)
return;

const wifi_promiscuous_pkt_t *ppkt = (wifi_promiscuous_pkt_t *)buff;
const wifi_ieee80211_packet_t *ipkt = (wifi_ieee80211_packet_t *)ppkt->payload;
const wifi_ieee80211_mac_hdr_t *hdr = &ipkt->hdr;

if(!((hdr->addr2[4]==0x00)&&(hdr->addr2[5]==0x00)))
{
return ;
}




if(NORMALSENDPACKETS==ipkt->payload[0])//it means it is not the retrans packet
{

pack_count++;
register uint32_t i=0;
register uint8_t pac_seq=ipkt->payload[1];
if(pac_seq==59)
{
ets_printf("cb=%d\n",60-pack_count);
pack_count=0;
}
xEventGroupSetBits(frame_event_group,FRAME_RECEIVED_BIT);
}

}
static void sdio_transfer_task(void *pvParameters)
{

while(true)
{

xEventGroupWaitBits(frame_event_group,FRAME_RECEIVED_BIT, pdTRUE, pdTRUE,portMAX_DELAY);


uint8_t sdiotmp[1024]
esp_err_t user_sdmmc_write_error=sdmmc_write_sectors(card,sdiotmp,1,2);
if(user_sdmmc_write_error)
{
esp_restart();
}
}
}
2·发送端代码:

Code: Untitled.c Select all


int32_t user_esp_wifi_80211_tx(void * data,size_t datasize,uint32_t picture_count)
{
wifi_internal_rate_t rate;

// struct timeval test_promis_start;
// struct timeval test_promis_end;
// struct timeval promis_result_time;
int32_t fail_count=0;
int pack_num=datasize/PACKSIZE;




#ifdef CHANGERTATE

rate.fix_rate = RATE_MCS7;
esp_wifi_internal_set_rate(100, 1, 4, &rate);
#endif

for(int i=0;i<pack_num;i++)
{

packetH[DATAOFFSET]=NORMALSENDPACKETS;
packetH[DATAOFFSET+1]=i;
memcpy(packetH+DATAOFFSET+2,data+i*PACKSIZE,PACKSIZE);
int result = esp_wifi_80211_tx(WIFI_MODE_NULL, packetH, sizeof(packetH), true);

if(result)
{
fail_count++;

}
}


return fail_count;

}
2·sdkconfig文件在附件之中

问题:
1·sdio与wifi接收同时工作,会增加wifi接收的丢包率吗?
2·是不是因为sdio与wifi接收同时工作,sdio输出20mhz的时钟,影响了wifi的接收灵敏度吗?
3·wifi代码不开源,wifi_sniffer_packet_handler是在wifi接收中断中执行的吗?
4·wifi中断优先级比sdio_host中断的优先级要高吗?
Attachments
乐鑫问题.rar
(15.59 KiB) Downloaded 1277 times

littlesky
Espressif staff
Espressif staff
Posts: 51
Joined: Fri Jun 09, 2017 7:49 am

Re: sdio与wifi接收同时工作,会增加wifi接收的丢包率吗?

Postby littlesky » Thu Dec 13, 2018 6:21 am

1·sdio与wifi接收同时工作,会增加wifi接收的丢包率吗?
—— sdio 任务的优先级是多少?若是比较低的话不会增加 wifi 接收的丢包率。
2·是不是因为sdio与wifi接收同时工作,sdio输出20mhz的时钟,影响了wifi的接收灵敏度吗?
—— 不会。
3·wifi代码不开源,wifi_sniffer_packet_handler是在wifi接收中断中执行的吗?
—— 不是,是在 wifi 任务中执行的。
4·wifi中断优先级比sdio_host中断的优先级要高吗?
—— 优先级是一样的。
建议:
1. sdio 任务优先级设低一些,至少低于 23.
2. sniffer 回调函数中将收到的包复制一份给 sdio 任务处理,因为这个包在回调函数返回后会被立即释放掉。
3. menuconfig 中将 wifi rx buffer 个数设大一些,设为 25。

jason2
Posts: 44
Joined: Thu Oct 26, 2017 11:02 am

Re: sdio与wifi接收同时工作,会增加wifi接收的丢包率吗?

Postby jason2 » Mon Dec 17, 2018 5:50 am

感谢您的回复!
1. sdio 任务优先级设低一些,至少低于 23.
--------优先级已经设置到了非常低。设置成了10。10是否还是不够低?
2. sniffer 回调函数中将收到的包复制一份给 sdio 任务处理,因为这个包在回调函数返回后会被立即释放掉。
---这个明白,目前只是做试探性试验而已,sdio_task要传的数据是直接定义在一片固定的内存之中的。
3. menuconfig 中将 wifi rx buffer 个数设大一些,设为 25。
---wifi rx buffer设成25,有一定改善,改善不大。

请问:
是否是因为sdio传送过程中会产生sdio host的中断,影响了wifi_sniffer_packet_handler的执行效率,进而影响了接收的丢包率呢?

liuzhifu
Espressif staff
Espressif staff
Posts: 39
Joined: Tue Dec 13, 2016 2:18 am

Re: sdio与wifi接收同时工作,会增加wifi接收的丢包率吗?

Postby liuzhifu » Fri Dec 21, 2018 11:45 am

Hi Jason2,

这个问题可能是由于你使用了 xEventGroupSetBits/xEventGroupWaitBits 来同步信息有关。 请改成使用 Queue 的方式在两个 task 之间进行数据传输。

jason2
Posts: 44
Joined: Thu Oct 26, 2017 11:02 am

Re: sdio与wifi接收同时工作,会增加wifi接收的丢包率吗?

Postby jason2 » Sat Dec 22, 2018 8:07 am

queue 的方式比 xEventGroupSetBits/xEventGroupWaitBits 来同步信息 要更快吗?为什么呢?

igrr
Espressif staff
Espressif staff
Posts: 2077
Joined: Tue Dec 01, 2015 8:37 am

Re: sdio与wifi接收同时工作,会增加wifi接收的丢包率吗?

Postby igrr » Sat Dec 22, 2018 11:48 am

In the case when event group is used from ISR, FreeRTOS will defer the action of setting the bit and will execute it from Timer task (priority=1). The reason for this is explained in FreeRTOS documentation, see section "avoiding non-determinism" in this page: https://www.freertos.org/FreeRTOS-Event-Groups.html.

FreeRTOS Queues do not have this limitation.

littlesky
Espressif staff
Espressif staff
Posts: 51
Joined: Fri Jun 09, 2017 7:49 am

Re: sdio与wifi接收同时工作,会增加wifi接收的丢包率吗?

Postby littlesky » Thu Dec 27, 2018 1:28 pm

But in this case, event group is not used in ISR.

Who is online

Users browsing this forum: Bing [Bot] and 1 guest