Open-SDR/openwifi项目FPGA控制技巧详解
前言
在无线通信系统开发中,对FPGA进行精细控制是优化性能的关键。本文将深入探讨open-sdr/openwifi项目中常用的FPGA控制技巧,帮助开发者更好地理解和掌握这一开源SDR平台的底层控制能力。
1. CCA与LBT阈值控制
1.1 基本概念
CCA(空闲信道评估)和LBT(先听后说)是WiFi系统中重要的信道访问机制。通过调整阈值可以控制设备对信道状态的判断。
1.2 操作指南
- 查看当前阈值:
./set_lbt_th.sh
dmesg
输出示例会显示当前阈值对应的dBm值。
- 设置新阈值(如-70dBm):
./set_lbt_th.sh 70
- 恢复驱动自动控制:
./set_lbt_th.sh 0
- 完全禁用CCA(设置-1dBm):
./set_lbt_th.sh 1
技术要点:阈值设置直接影响设备对信道忙闲的判断,不当设置可能导致冲突或性能下降。
2. 重传与ACK控制
2.1 重传控制
在驱动层修改retry_limit_hw_value
变量可控制重传次数:
- 0:禁用重传
- 1:最多重传1次
2.2 FPGA寄存器控制
查看当前寄存器值:
./sdrctl dev sdr0 get reg xpu 11
设置重传次数为1:
./sdrctl dev sdr0 set reg xpu 11 9
禁用ACK发送:
./sdrctl dev sdr0 set reg xpu 11 25
应用场景:监控模式和数据包注入时可能需要禁用ACK。
3. 关键时序参数控制
3.1 参数说明
- NAV:网络分配向量
- DIFS:分布式协调功能帧间间隔
- EIFS:扩展帧间间隔
- CW:竞争窗口
3.2 控制方法
查看状态:
./nav_disable.sh
./difs_disable.sh
./eifs_disable.sh
./cw_disable.sh
禁用参数(输入1):
./nav_disable.sh 1
启用参数(输入0):
./nav_disable.sh 0
注意事项:这些参数禁用后将改变标准的CSMA/CA行为,需谨慎使用。
4. 竞争窗口配置
4.1 查看当前配置
./cw_max_min_cfg.sh
4.2 自定义配置
示例设置队列3~0的CW max/min:
./cw_max_min_cfg.sh b5654332
4.3 恢复Linux控制
./cw_max_min_cfg.sh 0
技术细节:配置值采用对数域表示,实际CW值为2^n-1。
5. 接收增益控制
5.1 手动模式
设置30dB增益:
./set_rx_gain_manual.sh 30
5.2 自动模式
./set_rx_gain_auto.sh
5.3 增益参考获取
rx_gain_show.sh
调优建议:根据工作频段考虑偏移量(2.4GHz:-5dB,5GHz:-14dB)。
6. 发射功率控制
6.1 设置衰减
20dB衰减:
./sdrctl dev sdr0 set reg rf 0 20000
6.2 驱动加载时设置
insmod sdr.ko init_tx_att=20000
6.3 提高发射功率
修改tx_intf寄存器13的值可提高功率,但可能影响EVM。
7. 高级控制技巧
7.1 发射LO和端口控制
查看状态:
./set_tx_port.sh
./set_tx_lo.sh
7.2 天线选择
切换发射天线:
./sdrctl dev sdr0 set reg drv_tx 4 1 # tx1
./sdrctl dev sdr0 set reg drv_tx 4 0 # tx0
7.3 频率限制
限制工作频率:
./set_restrict_freq.sh 5220
7.4 接收灵敏度
设置灵敏度阈值:
./sdrctl dev sdr0 set reg drv_rx 0 70
7.5 发射速率
非HT包速率控制:
./sdrctl dev sdr0 set reg drv_tx 0 N
HT包速率控制(加16使用短GI):
./sdrctl dev sdr0 set reg drv_tx 1 N
7.6 任意IQ样本发射
支持最多512个样本的任意波形发射,用于测试目的。
总结
本文详细介绍了open-sdr/openwifi项目中FPGA的各种控制技巧,从基础的CCA阈值调整到高级的IQ样本发射,涵盖了无线通信系统开发中的关键控制点。掌握这些技巧可以帮助开发者更好地优化系统性能,进行各种实验和研究。使用时请注意各项参数之间的相互影响,建议在充分理解机制的基础上进行调优。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考