Thread 中讨论的其他器件:WL1835、 WL1271
我们目前正在使用“无线 BeagleBone Black”测试和评估自己,然后才采用 wl1835芯片组。
测试环境如下所示。 我们以每秒10兆位的速度对距离约50cm 的1450字节的数据包进行了单向通信测试、网状模式下只有两个无线 BeagleBone Black 集。 测试程序是一个类似“iperf”的性能测试程序。
问题是、即使在短距离内信号强度为-30dBm 或更高的情况下、仍然存在大约10e-5的持续数据包丢失。
我们可以检查在发生数据包丢失时是否存在 WL18xx FW 不是 TX_SUCCESS 返回。(请参阅下面的 driver/net/wireless/ti/wl18xx/tx.c 代码)
当然、在2.4GHz 无线电信道环境中、带内频率信道上还有其他 AP 和干扰信号。
但是、假设 wl1835 MAC/PHY 中的 CSMA-CA 冲突避免和重新传输机制正常工作、则很难理解丢包的数量。
我们目前怀疑 MAC 层重新传输是否正常工作。
我们不确定 wl1835驱动程序的 max_TX_retries 参数( /drivers/net/wireless/ti/wl18xx/main.c Tx 的参数之一)是否意味着 CSMA-CA MAC 中继限制。 但我们假设它是、并进行了一些测试。
当通过将 max_TX_retries 参数更改为100 (驱动程序的默认值为100)来测量数据包丢失率时、我们发现数据包丢失率随着 max_TX_retries 值的减小而增加。
但是、当将 max_TX_retries 增大到200时、数据包丢失率与100相同。
我们还尝试增加 CW_MIN / CW_max 参数、但没有任何变化。
我们的问题如下:
1.是否在 WL1835固件中应用了 MAC 层重传机制?
2.如果应用了 max_TX_retries 参数,是否可以在 Linux WL18xx 驱动程序的 main.c 中设置,以定义 MAC 层重发重试次数?
3.除了 max_TX_retries 外,还有任何参数可以改善数据包丢失率问题吗?
4.在哪里可以找到一些说明 WL1835芯片组配置文件中定义的参数的文档? 示例) max_TX_retries
5、在哪里可以找到可从 WL1835 DebugFS 中读取的固件统计信息列表说明? (/sys/kernel/debug/ieeee80211/phys0/wlcore/wl18xx/fw_stats 文件夹)
我们附加了一些 TX_SUCCESS 检查相关代码、这些代码可在 wl18xx 驱动程序代码中找到、我们修改的 max_TX_retries 变量的位置以及 DebugFS 参数列表。
内核版本是 4.19.94.
drivers/net/wireless/ti/wl18xx/tx.c 第91行
----------------------------------------
静态空 wl18xx_TX_COMPLETE_PACKET (struct wl1271 *WL、u8 TX_STAT_BYTE)
77{
78 结构 ieee80211_TX_INFO *INFO;
79 struct sk_buff *skb;
80 int id = TX_STAT_BYTE 和 WL18XX_TX_STATUS_DESC_ID_MASK;
81 bool TX_SUCCESS;
82 结构 wl1271_TX_HW_DEScr * TX_DESC;
83.
--------
90 /*零位表示 Tx 成功*/
91 TX_SUCCESS =!(TX_STAT_BYTE 和 BIT (WL18XX_TX_STATUS_STAT_BIT_IDX));
max_TX_retries 的位置
/drivers/net/wireless/ti/wl18xx/main.c 第309~行
--------------------------------------
.max_TX_retries = 100、
.ap_aging _ period = 300、
tid_conf_count = 4、
tid_conf ={
[CONF_TX_AC_BE]={
.queue_id = CONF_TX_AC_be、
.cannel_type = CONF_CHANGE_TYPE_EDCF、
TSID = CONF_TX_AC_be、
.ps_scheme = CONF_PS_Pscheme_legacy、
.ack_policy = CONF_ACK_policy_legacy、
.apsd_conf ={0、0}、
}、
[CONF_TX_AC_BK]={
.queue_id = CONF_TX_AC_BK、
.cannel_type = CONF_CHANGE_TYPE_EDCF、
TSID = CONF_TX_AC_BK、
.ps_scheme = CONF_PS_Pscheme_legacy、
.ack_policy = CONF_ACK_policy_legacy、
.apsd_conf ={0、0}、
--------------------------------------
DebugFS WL1835 固件统计信息
aggr_size_rx_size RX_FILTER_DUP_FILTER
aggr_size_tx_agg_len RX_FILTER_IBSS_FILTER
aggr_size_TX_AGG_RATE RX_FILTER_max_arp_queue_dep
CALIB_CALIB_COUNT RX_FILTER_MC_FILTER
CALIB_FAIL_COUNT RX_FILTER_protection_filter
CLEAR_FW_STATS RX_RATE RX_FRAes_PER_RARates
dfs_num_for_radar_detections RX_RX_BEAST_EARLY_TERM
diversion_num_for_packets_per_ant rx_rx_cmplt
diversion_total_num_for_togetes rx_rx_cmplt_task
ERROR_BAR_RETRY RX_RX_Defrag
ERROR_BURST_MISMATCH RX_Rx_dufrag_end
ERROR_elp_while NVIC_PENDING RX_RX_DONE
ERROR_elp_while RX_exchange RX_RX_LOAD_FRAME
ERROR_elp_while TX RX_RX_HDR_溢出
error_elp_while TX_exchange RX_RX_OUT_OUT_OUT_OUT_mpdu_nodes
ERROR_ERROR_FRAME_CTRL RX_RX_phy_HDR
ERROR_ERROR_FRAME_RAME_TING_Protection Rx_PRE_complt
ERROR_ERROR_FRAME_NON_CTRL RX_RX_RTS_TIMEOUT
ERROR_Null FRAME_CTS_START RX_RX_TIMEOUT
ERROR_null 帧_TX_START RX_RX_TIMEOUT_WA
ERROR_num_FRAME_CTS_nul_flid RX_RX_TKIP_replays
ERROR_Rx_cmplt_db_overflow_cnt Rx_Rx_XFR
ERROR_Rx_DELOW_FRAME_Len Thermal adc_source_unexpected
ERROR_tbc_exchange 不匹配 Thermal;false;IRQ
ERROR_TX_ABORT_FAILURE 热力_IRQ_THR_HIGH
ERROR_TX_RESUE_FAILURE 热力_IRQ_THR_LOW
ISR_IRQ 散热_TX_RESUME
流水线_dec_packet_in 散热_TX_STOP
流水线_dec_packet_in_fifo_full TX_frag_Bad_mblk_num
流水线_dec_packet_out TX_frag_cache_hit
流水线_碎片整理_至_ rx_xfer_swi TX_frag_cache_d怀念
流水线_enc_rx_stat_fifo_int TX_frag_called
流水线_enc_tx_stat_fifo_int TX_FRAG_FAILED
流水线_hs_TX_STAT_Fifo_int TX_frag_init_called
流水线_流水线_ fifo_full TX_FRAG_IN_PROCESS_called
流水线_后_处理_ swi TX_frag_key_not _ found
流水线_pre_proc_swi tx_frag_mpdu_alloc_failed
流水线_pre_to _dufrag_swi TX_frag_need_fragment
流水线_Rx_complete_stat_fifo_int TX_FRAG_TKIP_called
流水线_秒_ frag_swi TX_TX_BURST_programmed
PWR_ap_sleep_active_conf TX_TX_cfe1
PWR_AP_SLEEP_COUNTER TX_TX_cfe2
PWR_AP_SLEEP_USER_conf TX_TX_cmplt
PWR_CONNECT_OUT_OW_SYNC TX_TX_DATA_STREGed
PWR_CONT_怀念_BCND_Spread TX_TX_DATA_programmed
PWR_MISSING_BCN_cnt TX_TX_DONE_DATA
PWR_rcvd_awarn_bcn_cnt TX_TX_DONE_INT_TEMPLATE
PWR_rcvd_bcn_cnt TX_TX_DONE_TEMPLATE
PWR_SLEEP_CYCLE 平均值 TX_TX_EXAC
PWR_SLEEP_percent TX_TX_EXP_EXPIR期
PWR_SLEEP_TIME_avg TX_TX_EXACT_PENDING
PWR_SLEEP_TIME_COUNT TX_TX_prepared_descs
漫游_RSSI_level TX_TX_RETRY 数据
Rx_decrype_key_not _found TX_TX_RETRY PER_RATE
RX_dufrag_called TX_TX_RETRY 模板
RX_dufrag_decrype_failed TX_TX_START_DATA
RX_dfrag_init_called TX_TX_START_FW_gen
RX_dfrag_in_process_called TX_TX_START_INT_TEMPLATES
RX_dufrag_need_decrypt TX_TX_START_Null_FRAME
RX_dufrag_need_defrag TX_TX_Starts
RX_dfrag_TKIP_called TX_TX_START_TEMPLATES
RX_FILTER_accum_arp_pend_Requests TX_TX_STOP
RX_FILTER_ARP_FILTER TX_TX_TEMPLICE_STREDED
RX_FILTER_BEAST_FILTER TX_TX_TEMPLICE_PROGRADED
RX_FILTER_DATA_FILTER