au home spot cube (RTL8196C) 无线路由的微调参数备份和恢复

au home spot cube是几年前日本KDDI公司配套给用户的设备,大概2015年时候估计换设备,这个小东西就变成洋垃圾大批量地进入了国内。到现在,淘宝上只需要不到15元一个,如无意外是市面上性价比最高的5G双频路由器。

我弄了两台回来当玩具,折腾两天的结论是,用来当AP做5G Wifi接入,还是挺稳挺靠谱的,其他各种折腾不大值得花时间。首先是硬件配置较低,32M RAM+8M Flash基本就断了开发多用途的念想,然后是RTL8196C主控+RTL8192DR无线的配置,没什么社区支持的力量…

小路由器主要的折腾资源都在恩山论坛的帖子。有Realtek的芯片SDK版本的ROM,以及一些其他品牌的移植。不过使用评价上,基本上所有ROM都不令人满意的,首要问题就是5G信号远没有官方ROM强。

官方SDK我测试过还可以,但是因为缺乏定制脚本的原因吧,比如硬件AP/Router模式的选择按钮无效、WPS无效、每次重启模式固定为网关,无法保存..等等小问题,并不实用。然后刷回别人提供的原版编程器固件,欸,好像信号也并没有恢复原状。

经过研究,不同版本的硬件对无线信号是有微调参数的,刷机后微调参数变成别人版本的参数,如果参数区别较大,就会出现信号不好的情况。幸好开始折腾前我把flash内的配置都导出了到文本中保存起来了。【[Embedded System] 手動設定 Calibration Power】。

主要是有TX_POWER字样的键值,用grep命令过滤后得到需要还原的数据。(下面代码我删除了很长的输出)

$ grep -i tx_power auhome_a66NRc_orig_all.txt > auhome_xxx_txpower.txt
$ cat auhome_xxx_txpower.txt
HW_WLAN0_TX_POWER_CCK_A=...
HW_WLAN0_TX_POWER_CCK_B=...
HW_WLAN0_TX_POWER_HT40_1S_A=...
HW_WLAN0_TX_POWER_HT40_1S_B=...
HW_WLAN0_TX_POWER_DIFF_HT40_2S=...
HW_WLAN0_TX_POWER_DIFF_HT20=...
........

最重要一点,还需要把16进制数据转换成10进制输入,以及一些结尾0值要清理否则flash命令会segmentation fault … 如果手工算那真是体力活啊,这时候要体现码农垃圾佬的价值了:

#!/usr/bin/env python3
with open("auhome_xxx_txpower.txt") as f:
    for line in f.readlines():
        line = line.strip()
        key, val = line.split('=')
        
        #每2位十六进制数转换成十进制
        decvals = [
                int('0x'+val[i:i+2], 16)
                for i in range(0, len(val), 2) ]
        olen = len(decvals)
        
        #全0的字段可清空
        if not any(decvals):
            decvals = []
            
        #结尾的0可清空
        while len(decvals) > 1 and decvals[-1] == 0:
            decvals.pop()
        
        #清除过结尾0的值最后加1个0值
        if len(decvals) < olen:
            decvals.append(0)
            
        strvals = map(str, decvals)
        
        #打印写入命令
        cmd = "flash sethw {} {}".format(key, " ".join(strvals))
        print(cmd)

因为数据太长了,web管理里面的syscmd.asp中无法输入处理(短的几条还行),还是在TTL线终端里面粘贴进去(一次性还不能复制太多行,会导致死机,一次三四行那样吧)。把路由器重启后,信号果然就恢复如初了。

其他的折腾思路可以是把官方ROM中检测模式开关,启动脚本等地方完善,然后把初始ROM的5G微调数据写入SDK版本ROM中,理论上是能够完美使用的… 不过个人觉得不大值得这个折腾…还是用官方吧!

PS:部分控制参数的含义整理

 AP物理参数

#以下参数参考了github中rtl8192的源码中的定义
#https://github.com/pvaret/rtl8192cu-fixes

#双频共存 默认:1
#仅使用5G可设置成0
flash set WLAN0_COEXIST_ENABLED 0 

#WIfi物理频点分配模式  默认:2
#   0:SINGLEMAC_SINGLEPHY 单MAC单链路
#   1:DUALMAC_DUALPHY 双MAC双链路
#   2:DUALMAC_SINGLEPHY 双MAC单链路
#   改成1最高链接可达300M,但是因为有线网口是100M的,测不出区别
flash set WLAN0_MAC_PHY_MODE 1

#空时编码(sTBc)发射分集技术  默认:0 
#   理论上有用但是实测不出来有什么区别
flash set WLAN0_STBC_ENABLED 0

#BEAMFORMING技术:默认0 
#   保持关闭就好,因为BEAM不同网卡支持有兼容问题)
flash set WLAN0_TX_BEAMFORMING 0

频带与区域

#频带区域 似乎没实际意义,是让wlbasic.asp的网页的js显示出36/149高低段频带
# 源码内有全部的参数的定义,其中中国区域对应应为12
# https://github.com/pvaret/rtl8192cu-fixes/blob/756f2ec582b3861c033214effb511ec27aed9938/include/rtw_mlme_ext.h#L103
# 实际使用中中国的合法频带是比较多的,其实兼容各种配置
flash sethw HW_WLAN0_REG_DOMAIN 2

#实际频道,40M低可选36 / 44 / 149 / 157 / 165
flash set WLAN0_CHANNEL 149

#频带捆绑,即开启40M,使用相邻两个频段,默认1
flash set WLAN0_CHANNEL_BONDING 1

#控制信道处于上/下,默认1,1=Lower  0=Upper
flash set WLAN0_CONTROL_SIDEBAND 1

#虚拟AP2的开关
#  本来应该无关紧要的,VAP2是一个KDDI公司设置的调试虚拟AP
#  但是如果设置为1关闭,会导致5G AP能连上能获取IP但是就不能上网通信,神奇BUG(也许跟ROM系统内br1桥有关)
#flash set WLAN0_VAP2_WLAN_DISABLED 0

5G频段兼容性

因为历史原因,中国在2014年修订了民用无线电频段标准后,5G可用的可用频段增加了很多;然而很多在2014之前生产的网卡/驱动,都没跟的上更新,特别Windows自带的驱动往往无法看到36/44频段之类的现象。比如淘宝很常见卖不到30元的AR5B22 / AR9462,传说中Killer卡(并不是),都是属于这类。但是强制给windows安装上对应芯片的新版启动,却工作得很好。有个高通网卡驱动的网站收集得非常齐全

另外发现我的AR5B22 网卡无法连接CONTROL_SIDEBAND 为Upper的设置,Windows会强制重置网卡。无解。

标签: , ,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.