1 CCA

  CCA(空间信道评估)在CSMA/CA中比较非常重要,事关整机吞吐量,所以对其实现进行简单分析。CCA好像应该有2种:CCA-CS,是属于PLCP层的,捕获到能量且能量值高于-82dB后,确定空间忙;CCA-ED,属于协议层,捕获到-62dB信号后,需要判定空间忙,并等待。

  修改CCA等级,可以让它对“弱信号”失聪,从而可以在干扰环境中提高吞吐量。

2 具体实现

ar9300_update_cca_threshold(struct ath_hal *ah, int16_t nfarray[NUM_NF_READINGS], u_int8_t rxchainmask)

  nf=ah->nf_2GHz.max  OR ah->nf_5GHz.max        频段噪底

  nf_max_primary = nf_max_extension = nf;  主信道噪底=辅信道噪低=频段噪底

  chainmask = rxchainmask & ahpriv->ah_caps.hal_rx_chain_mask; 天线数

  for (chan = 0; chan < 2 /*ctl,ext*/; chan++) 基于nfarry[]获得最高nf,利用nf更新 nf_max_primary 和nf_max_extension

  nf_nominal = -101(HT20) OR  -98(HT40)  标称噪低(极限)

  if (nf_max_primary < nf_nominal)

  cca_detection_margin_pri = ahpriv->ah_config.ath_hal_cca_detection_margin + (nf_nominal - nf_max_primary);

  主信道cca检测余量值=配置检测余量+极限噪底-当前主信道噪底

  else

  cca_detection_margin_pri = ahpriv->ah_config.ath_hal_cca_detection_margin;

  主信道cca检测余量值=配置检测余量 (一般都是这里)

  if (nf_max_extension < nf_nominal)

  cca_detection_margin_ext = ahpriv->ah_config.ath_hal_cca_detection_margin + (nf_nominal - nf_max_extension);

  辅信道cca检测余量值=配置检测余量+极限噪底-当前辅信道噪底

  else

   cca_detection_margin_ext = ahpriv->ah_config.ath_hal_cca_detection_margin;

  辅信道cca检测余量值=配置检测余量  (一般都是这里)

  derived_max_cca = (ahpriv->ah_config.ath_hal_cca_detection_level - ahpriv->ah_config.ath_hal_cca_detection_margin - (-130);

  计算出的最大cca=配置的检测等级值 – 配置的检测余量 - (-130)

  max_cca_cap = derived_max_cca < 90 ? derived_max_cca : 90;

  最大cca门限=(计算出的最大cca值 与90之间的小者)

  cca_threshold_primary = (ahpriv->ah_config.ath_hal_cca_detection_level - cca_detection_margin_pri - nf_max_primary);

  主信道CCA门限=配置的CCA检测余量值-计算出的主信道检测余量值-当前主信道噪低

  cca_threshold_primary = cca_threshold_primary < max_cca_cap ? (cca_threshold_primary > 0 ? cca_threshold_primary : 0) : max_cca_cap;

  主信道CCA门限 =(主信道CCA门限 与最大cca门限间的小者)

  主信道CCA门限 =(主信道CCA门限 与0 间的大者)

  cca_threshold_extension = (ahpriv->ah_config.ath_hal_cca_detection_level - cca_detection_margin_ext - nf_max_extension);

  辅信道CCA门限=配置的CCA检测余量值-计算出的辅信道检测余量值-当前辅信道噪低

  cca_threshold_extension = cca_threshold_extension < max_cca_cap ? (cca_threshold_extension > 0 ? cca_threshold_extension : 0) : max_cca_cap;

  辅信道CCA门限 =(辅信道CCA门限 与最大cca门限间的小者)

  辅信道CCA门限 =(辅信道CCA门限 与0 间的大者)

  更新寄存器

   AR_PHY_CCA_0.AR_PHY_CCA_THRESH62= cca_threshold_primary

  主信道CCA值写入BB_cca_b0的0x0007F000位。这个寄存器应该是同时支持CCA_CS和CCA_ED的,这里所写入的也许就是CCA_ED,因为它命名为THRESH62;如果是CS,则为THRESH80才吻合;同样,该寄存器的0x1FF00000位好像不可改写,也不会随THRESH62值跳变,也许就是PLCP中的CCA_CS值,即真实的载波能量值。

  AR_PHY_EXTCHN_PWRTHR1.AR_PHY_EXT_CCA0_THRESH62=cca_threshold_extension

  辅信道CCA值写入BB_ext_chan_pwr_thr_1的0x000000FF位

  AR_PHY_EXT_CCA0.AR_PHY_EXT_CCA0_THRESH62_MODE=0x0

  BB_cca_ctrl_2_b0的0x00040000位置0。模式0/1的具体意思不明白,也许是自动和固定。

3 引申

  仅涉及到BB_cca_b0,BB_ext_chan_pwr_thr_1和BB_cca_ctrl_2_b0。因此,在需要强制提高CCA的场景下,仅需求关闭CCA自动调整功能(缺省模式),然后手工修改这3个寄存器即可。

  当然,开启CCA自动调整(CCAThEna ),也可以获得吞吐量提升,但要预设好适合当前场景的CCADetLevel值即可。  

CCA更新流程分析的更多相关文章

  1. WebGL 启动载入触发更新流程分析

    WebGL 启动载入触发更新流程分析 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载 ...

  2. Android7.0 Phone应用源码分析(二) phone来电流程分析

    接上篇博文:Android7.0 Phone应用源码分析(一) phone拨号流程分析 今天我们再来分析下Android7.0 的phone的来电流程 1.1TelephonyFramework 当有 ...

  3. Android7.0 Phone应用源码分析(一) phone拨号流程分析

    1.1 dialer拨号 拨号盘点击拨号DialpadFragment的onClick方法会被调用 public void onClick(View view) { int resId = view. ...

  4. SQL Server中CURD语句的锁流程分析

    我只在数据库选项已开启“行版本控制的已提交读”(READ_COMMITTED_SNAPSHOT为ON)中进行了观察. 因此只适用于这种环境的数据库. 该类数据库支持四种不同事务隔离级别,下面分别观察数 ...

  5. spark 启动job的流程分析

    从WordCount開始分析 编写一个样例程序 编写一个从HDFS中读取并计算wordcount的样例程序: packageorg.apache.spark.examples importorg.ap ...

  6. Android 4.4 Kitkat Phone工作流程浅析(六)__InCallActivity显示更新流程

    本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. ...

  7. openstack之nova-api服务流程分析

    nova-api公布api服务没实用到一个些框架,基本都是从头写的.在不了解它时,以为它很复杂,难以掌握.花了两三天的时间把它分析一遍后,发现它本身的结构比較简单,主要难点在于对它所使用的一些类库不了 ...

  8. Android7.0 Phone应用源码分析(三) phone拒接流程分析

    本文主要分析Android拒接电话的流程,下面先来看一下拒接电话流程时序图 步骤1:滑动按钮到拒接图标,会调用到AnswerFragment的onDecline方法 com.android.incal ...

  9. Android7.0 Phone应用源码分析(四) phone挂断流程分析

    电话挂断分为本地挂断和远程挂断,下面我们就针对这两种情况各做分析 先来看下本地挂断电话的时序图: 步骤1:点击通话界面的挂断按钮,会调用到CallCardPresenter的endCallClicke ...

随机推荐

  1. Flask 学习 十五 性能

    记录影响性能的数据库查询 app/main/views.py from flask_sqlalchemy import get_debug_queries @main.after_app_reques ...

  2. es6对象字面量增强

    相对于ES5,ES6的对象字面量得到了很大程度的增强.这些改进我们可以输入更少的代码同时语法更易于理解.那就一起来看看对象增强的功能.对象字面量简写(Object Literal Shorthand) ...

  3. 再议Python协程——从yield到asyncio

    协程,英文名Coroutine.前面介绍Python的多线程,以及用多线程实现并发(参见这篇文章[浅析Python多线程]),今天介绍的协程也是常用的并发手段.本篇主要内容包含:协程的基本概念.协程库 ...

  4. nyoj n-1位数

    n-1位数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的 ...

  5. H5 FormData对象的作用及用法

    JS: function uploadFileAndParam() { var url = "http://localhost:42561/api/upload/UploadPost&quo ...

  6. 操作MP3文件的元数据

    参见:http://jingyan.baidu.com/article/03b2f78c4d5eae5ea237aee7.html 一.MP3文件的元数据 一个规则的MP3文件大致含有3个部分: TA ...

  7. 使用 vi 命令

    一.vi是什么 vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器. Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实 ...

  8. Tomcat(1-1)重置Tomcat8.5管理员的用户名和密码

    1.访问 http://localhost:8080/,点击 [manager app],提示输入用户名和密码,admin/admin后报错.  2.解决办法:重置Tomcat8.5管理员的用户名和密 ...

  9. API验证及AES加密

    API验证 API验证: a. 发令牌: 静态 PS: 隐患 key被别人获取 b. 动态令牌 PS: (问题越严重)用户生成的每个令牌被黑客获取到,都会破解 c. 高级版本 PS: 黑客网速快,会窃 ...

  10. scrapy 选择器官方文档

    当抓取网页时,常见的任务是从HTML源码中提取数据.现有的一些库可以达到这个目的: BeautifulSoup lxml Scrapy 提取数据有自己的一套机制.它们被称作选择器(seletors), ...