RTK调试所用的一些指令

本文详细介绍了RTK无线网络调试过程中涉及的指令,包括调整传输功率、切换加密模式、关闭swqueue、禁用TDMA DIG、调整DIG、设置EDCA参数、启用特殊功能、检查自适应性、固定速率以及记录RSSI和Sniffer日志等关键步骤。

1、调整tx_power相关指令:

a、針對有k過的板子進行power的調整

# iwpriv wlan0 shift_pwr_idx add,2 //Power增加1dB

# ifconfig wlan0 down up

# iwpriv wlan0 shift_pwr_idx sub,4 //Power減少2dB

# ifconfig wlan0 down up

b、開關Tx Power Control

iwpriv wlan0 set_mib tx_pwr_ctrl=0

ifconfig wlan0 down up

c、关闭txpwrlmt

setmib disable_txpwrlmt 1

ifconfig wlan0 down up

d、关闭TX2PATH

iwpriv wlan0 set_mib tx2path=0

ifconfig wlan0 down up

2、确认一下加密模式:wpa2-aes

尝试设置成不加密会不会变好。

cat /proc/wlan0/mib_auth

3、尝试将swqueue关闭:

setmib swqen 0    (iwpriv wlan0 set_mib swqen =0)

ifconfig wlan0 down up

4、禁用TDMA DIG 

(如果AP和STA相距沒有很遠的話)

iwpriv wlan0 set_mib original_dig_restore=1

 ifconfig wlan0 down up

5、DIG调整:

首先先打开rssi dump log信息,查看FA周围干扰情况来调整DIG:

(以下wlan0、wlan1按照具体板子注意修改)

rssi打开指令:

rssi 1 (iwpriv wlan0 set_mib rssi_dump=1)

或者:rssi1 1 (iwpriv wlan1 set_mib rssi_dump=1)

调整DIG指令:

2.4G

iwpriv wlan1 set_mib dig_enable=0

ifconfig wlan1 down up

iwpriv wlan1 write_reg b,c50,20 //ob c50 20//嘗試1c 20 30 36 3e

iwpriv wlan1 write_reg b,c58,20 //ob c58 20//嘗試1c 20 30 36 3e

5G:

iwpriv wlan0 set_mib dig_enable=0

ifconfig wlan0 down up

iwpriv wlan0 write_reg b,c50,20 //ob c50 20//嘗試1c 20 30 36 3e

iwpriv wlan0 write_reg b,e50,20 //ob e50 20//嘗試1c 20 30 36 3e

6、调整edca参数:

关闭txop:

iwpriv wlan0 set_mib manual_edca=1

ifconfig wlan0 down up

idd 508

od 508 321f <--抢快

od 508 642b  <--默认值

修改txop:

2.4G

od 508 3f642b

od 508 5e642b

5G

od 508 138642b

od 508 300642b

7、TX special function check (TXBF/STBC/LDPC)

ifconfig wlan0 down up

iwpriv wlan0 set_mib txbf=1

iwpriv wlan0 set_mib stbc=1

iwpriv wlan0 set_mib ldpc=1

8、check adaptivity

默认值0:getmib adaptivity_enable

setmib swqen 0    (iwpriv wlan0 set_mib adaptivity_enable=2)

ifconfig wlan0 down up

9、固定速率:fix rate:

txforce 255是关闭 :iwpriv wlan0 set_mib txforce=255

不需要wlan down up

iwpriv wlan0 set_mib txforce=XX

10、记录rssi log和sniffer log

抓取sta_info信息:

97fnt:

cat /proc/wlan0/sta_info

97fn+8812brh:

cat /proc/wlan0/sta_info    cat /proc/wlan1/sta_info

rssi log

rssi 1    (iwpriv wlan0 set_mib rssi_dump=1)

rssi1 1    (iwpriv wlan1 set_mib rssi_dump=1)

sniffer log

现场测试环境:抓取一下,无线网卡与AP的连接过程的sniffer无线封包。

DUT穿墙测试过程的sniffer无线封包。

竞品对比测试时候穿墙测试过程的sniffer无线封包。

/*================================================================================ NC P63 红 P64 CS P65 绿 P62 VDD 蓝 P61 GND 触摸 P60 主频:8M/4T TKCOM = P65 P60做触摸按键 短按切换模式:白-红-绿-蓝-黄-粉红-七彩慢闪,循环 长按触摸按键:3秒开关机 ,开机白灯 ================================================================================ */ #include "XC8PT8500.H" #include "XJ_DEFINE.H" #include "XC8PT8500_TOUCH_LIB.H" #include "XC8PT8500_TOUCH_LIB_CFG.H" //================================================================================ volatile __at(0x10) unsigned char A_BUFF; //中断ACC保护RAM volatile __at(0x11) unsigned char R3_BUFF; //中断STATUS保护RAM volatile __at(0x12) unsigned char Reg_1MS_Count; //1ms计数RAM volatile __at(0x13) unsigned char Reg_10MS_Count; //10ms计数RAM volatile __at(0x14) unsigned char R_GOTOLOWPOWERMODE_COUNT; //超时低功耗计数RAM //=============================================================================== // IO 端口定义 #define red PORT6_4 #define green PORT6_2 #define blue PORT6_1 // 按键所用 unsigned int Reg_Key1Cnt; unsigned char Reg_Key1check; unsigned char Reg_Key1_10MS; unsigned char Reg_Led_Mode; unsigned char Reg_Duty; unsigned char LED_Duty; unsigned char red_duty,green_duty,blue_duty; unsigned int qicai_time; // 七彩周期时间 unsigned char light_count; // 调取亮度 unsigned char led_count; // 调取LED unsigned char qicai_number; // 七彩次数 unsigned char qicai_on_off; // 七彩顺闪开关 unsigned char Key1_Long_time; unsigned char Reg_Led_Mode_check; __at(0x15) ob8 Reg_Bit1; #define Bit_1MS Reg_Bit1.b0 #define Bit_10MS Reg_Bit1.b1 //============================================================= //按键使用 #define bit_key1_press Reg_Bit1.b2 //key1按键按下标志位 #define Bit_Flag Reg_Bit1.b3 #define bit_Key1_Long Reg_Bit1.b4 //长按标志位 #define Bit_Inc_Dec Reg_Bit1.b5 //==================================================================== //以下不可修改,若未使能串口调试,则释放该地址RAM #if TKLib_UartDebugSwitch == 1 unsigned char R_UART_TX_BUF; unsigned char R_UART_TX_CNT; unsigned char R_UART_TX_DELAY; #endif //==================================================================== #if (TKLib_OPENED_TK_AMOUNT == 1) extern unsigned char RTkGBuff0[6]; #endif #if (TKLib_OPENED_TK_AMOUNT == 2) extern unsigned char RTkGBuff0[6]; extern unsigned char RTkGBuff1[6]; #endif #if (TKLib_OPENED_TK_AMOUNT == 3) extern unsigned char RTkGBuff0[6]; extern unsigned char RTkGBuff1[6]; extern unsigned char RTkGBuff2[6]; #endif #if (TKLib_OPENED_TK_AMOUNT == 4) extern unsigned char RTkGBuff0[6]; extern unsigned char RTkGBuff1[6]; extern unsigned char RTkGBuff2[6]; extern unsigned char RTkGBuff3[6]; #endif #if TKLib_TouchLowerPower extern unsigned char RTkLPGBuff0[4]; #endif //================================================================================ void CLR_RAM(void); void IO_Init(void); void TCC_Init(void); void TK_BASETIMER(void); void WDT_WakeUp_Handle(void); void file_irRec(void); void T1_Init(void); void file_Key1Scan(void); void file_Key1Scan_Long(void); void file_LED_Charge(void); //================================================================================ //初始化RAM:10H~5FH //================================================================================ void CLR_RAM() { for(RSR=0x90;RSR<0xDF;RSR++) //清零 BANK0 RAM {IAR = 0;} IAR = 0; } //================================================================================ //端口初始化 //================================================================================ void IO_Init(void) { PORT6 = 0x00; //P6口输出低 P6CR = 0x00; // P6DCR= 0xfd; } //================================================================================ //TC0初始化 //================================================================================ void TCC_Init(void) { WDE = 0X00; CONT = 0x00; //TCC 2分频 TCC = 156; //1/2 * 2 * (256-156) = 100us 公式:1/IRC频率 * 预分频 * (256-初值) ISR = 0xfe; //清TC0中断标志位 IMR = 0x01; //使能TCC } //================================================================================ //TC1初始化 //================================================================================ void T1_Init(void) { /* PWMCON = 0x88; //pwm=1/8*2(分频)*4clock*100=100us PRD = 100; // ISR = 0x00; //清TC0中断标志位 IMR = 0x09; //使能TCC */ } //================================================================================ //中断服务程序 //================================================================================ void int_isr(void) __interrupt { __asm__("org 0x08"); PUSH(_A_BUFF,_R3_BUFF); //中断入栈保护 //============================================================================ if(TCIF == 1) //判断TCIF是否为0 { TCC += 156; //1/2 * 2 * (256-156) = 100us 公式:1/IRC频率 * 预分频 * (256-初值) ISR = 0xfe; //清TC0中断标志位 if(++Reg_1MS_Count >= 10) { Reg_1MS_Count = 0; Bit_1MS = 1; } if(Reg_Led_Mode>0) { switch(Reg_Led_Mode) { case 1:red = 1;green = 1;blue = 1;break; //白色 case 2:red = 1;green = 0;blue = 0;break; //红 case 3:red = 0;green = 1;blue = 0;break; //绿 case 4:red = 0;green = 0;blue = 1;break; //蓝 case 5:red = 1;green = 1;blue = 0;break; //黄 case 6:red_duty = 10;green_duty = 2;blue_duty = 2;break; // 粉红 // case 7:red_duty = 1;green_duty = 1;blue_duty = 1;break; // 七彩 } if(Reg_Led_Mode==6) { if(LED_Duty<10) LED_Duty++; else LED_Duty = 1; if(LED_Duty<=red_duty) red = 1; else red = 0; if(LED_Duty<=green_duty) green = 1; else green = 0; if(LED_Duty<=blue_duty) blue = 1; else blue = 0; } if(Reg_Led_Mode==7) { if(qicai_time>LED_light[light_count]) { red = red_light[led_count]; green = green_light[led_count]; blue = blue_light[led_count]; } else { red = red_light[led_count+1]; green = green_light[led_count+1]; blue = blue_light[led_count+1]; } if(qicai_time<50) qicai_time++; else { qicai_time = 1; qicai_number++; if(qicai_number>=8) { qicai_number = 0; light_count++; if(light_count>=50) { light_count = 0; led_count++; if(led_count>=3) led_count = 0; } } } } } else { red = 0; green = 0; blue = 0; } } if(T1IF == 1) //判断T1IF是否为1,pwm周期中断 { ISR = 0xf7; //ISR的bit3:T1IF清零 } if(TKIF == 1) //判断TkIF是否为0 { ISR = 0x0f; //清标志 } ISR = 0x19; //清标志 //=============================================== ============================= POP(_A_BUFF,_R3_BUFF); //中断出栈保护恢复 } //================================================================================ //MAIN主程序 //================================================================================ void main() { IO_Init(); CLR_RAM(); TkInit(); //[仿真时单步执行该语句较慢,可用Step Over执行] TCC_Init(); T1_Init(); EI(); //打开总中断 LED_Duty = 0; qicai_time = 0; light_count = 0; led_count = 0; qicai_number = 0; qicai_on_off = 0; Key1_Long_time = 0; Reg_Key1Cnt = 0; Reg_Key1check = 0; Reg_Led_Mode = 0; // Reg_Duty = 188; Bit_Inc_Dec=0; // Reg_Led_Mode = 7; //调试闪法 while(1) { CWDT(); TkScanAndSignalHandle(); //触摸主函数扫描,主循环间隔时间不宜过长,否则影响触摸响应时间 if(Bit_OneScanDone) //判断一轮是否转换结束 { Bit_OneScanDone = 0; #if TKLib_UartDebugSwitch == 1 //串口使能 TK_UartDebug(); #endif if(RKeyOnFlg == 0) //触摸按键全部松开 { if(Bit_10MS) { Bit_10MS = 0; #if TKLib_TouchLowerPower if(--R_GOTOLOWPOWERMODE_COUNT == 0) //触摸按键松开超过设定时间,允许进入触摸低功耗模式 { R_GOTOLOWPOWERMODE_COUNT = T_GOTOLOWPOWERMODE_C_Init_DF; Bit_LowPowerModeReset = 0; //0:进入低功耗前会先复位参考 ; 1:直接进入低功耗 (不容易进低功耗则可考虑置1) Bit_LowPowerModeRun = 1; //允许进入触摸低功耗模式 } #endif } } else { #if TKLib_TouchLowerPower R_GOTOLOWPOWERMODE_COUNT = T_GOTOLOWPOWERMODE_C_Init_DF; #endif } #if TKLib_TouchLowerPower if(Bit_LowPowerModeRun) { if((Reg_Led_Mode==0)&&(F_TK0_On==0)&&(Reg_Key1Cnt==0)&&(Reg_Key1check==0)) //额外睡眠条件 { //============================================================================================ //下面可加进入低功耗模式前其它需要处理的操作 //(触摸相关的TkLowPowerMode()会自行处理WDT 与 CPU 工作模式 用户不需要处理) //如低功耗模式下端口处理,外设模块等 //端口唤醒配置详情参考规格书或功能demo //============================================================================================ TkLowPowerMode(); //进入触摸低功耗模式 //============================================================================================ //下面可加退出低功耗模式后,其它需要恢复的操作 // Reg_Key1Cnt = 1; } //============================================================================================ } #endif ScanContinue(); //重置检测 } if(Bit_1MS) { Bit_1MS = 0; TK_BASETIMER(); if(++Reg_10MS_Count >= 10) { Reg_10MS_Count = 0; Bit_10MS = 1; file_Key1Scan(); //10ms一次,触摸按键短按滤波3次 ,长按是90次*10ms = 900ms } } } } //================================================================================ //功能:校准和长按时钟 //说明:触摸库需要的时基,不可删除,但可以调整位置,即只需要产生下列时基即可 //================================================================================ void TK_BASETIMER(void) { if(++RTK_CaliBaseTime_Cnt >= TKLib_CaliBaseTime) { RTK_CaliBaseTime_Cnt = 0; RTkCBTFlag = TKLib_TK_EN_MASK; if(++RTK_LongKeyBaseTime_Cnt >= TKLib_LongKeyBaseTime) { RTK_LongKeyBaseTime_Cnt = 0; RTkLBTFlag = TKLib_TK_EN_MASK; } } } //================================================================================ //功能:此程序是在触摸低功耗模式下,需要处理的操作,如有需要可增加操作程序 //说明:如有外部按键需退出触摸低功耗模式,可在此处增加相关程序确定是否需要退出触摸低功耗模式 // 可根据需求,判断系统是否需要强制唤醒(清Bit_LowPowerModeRun,强制唤醒系统) //================================================================================ void WDT_WakeUp_Handle(void) { #if TKLib_TouchLowerPower //为降低休眠的功耗,程序采用分组采样法,将所有需要唤醒的口最多分为两组去检测,能够有效降低功耗。 //当一组采样口大于1时,其采样数据不可作为单通道的数据,所以休眠时的数据跟正常工作时的数据是分开的, //如果进休眠时的环境值跟唤醒时的环境值相差比较大,那么就会出现唤醒后触摸释放不掉的问题。 //如果每组采样都只有一个通道时,采样的值可用作正常工作的值,可以通过下面的指令在休眠状态下更新正常工作的环境值。 // RTkGBuff0[0] = RTkLPGBuff0[0]; //只有一个按键时使用 // RTkGBuff0[1] = RTkLPGBuff0[1]; //只有一个按键时使用 // RTkGBuff0[2] = RTkLPGBuff0[0]; //只有一个按键时使用 // RTkGBuff0[3] = RTkLPGBuff0[1]; //只有一个按键时使用 // RTkGBuff1[5] = RTkLPGBuff0[2]; //有两个通道时使用 // RTkGBuff1[4] = RTkLPGBuff0[3]; //有两个通道时使用 // RTkGBuff1[3] = RTkLPGBuff0[2]; //有两个通道时使用 // RTkGBuff1[2] = RTkLPGBuff0[3]; //有两个通道时使用 //TKLib_TKLPGroup0_MASK,TKLib_TKLPGroup1_MASK使能唤醒脚也要按照顺序来, //比如TKLib_TKLPGroup0_MASK = 0x01;TKLib_TKLPGroup1_MASK = 0x02;是对的。 //比如TKLib_TKLPGroup0_MASK = 0x02;TKLib_TKLPGroup1_MASK = 0x01;是错的。 //注意:以上程序仅限于唤醒通道<=2时使用,并且每组检测只能检测一个通道。 //如果需要唤醒的口大于2时,不能使用上面的方法去更新环境值,我们可以利用外界唤醒变化缓慢的特性,间隔一段时间清Bit_LowPowerModeRun退出休眠去更新环境值。 //Bit_LowPowerModeRun = 0; //可根据需求,判断系统是否需要强制唤醒(清Bit_LowPowerModeRun,强制唤醒系统) #endif } //================================================================================ //功能:按键短按检测程序 //说明: //================================================================================ void file_Key1Scan(void) { if(F_TK0_On&&Reg_Key1check==0) //按下标志位为1 { if(++Reg_Key1Cnt>=300) { if(Reg_Led_Mode==0) { Reg_Led_Mode = 1; red = 1; green = 1; blue = 1; } else { red = 0; green = 0; blue = 0; LED_Duty = 0; qicai_time = 0; light_count = 0; led_count = 0; qicai_number = 0; qicai_on_off = 0; Reg_Led_Mode = 0; } // file_LED_Charge(); // LED输出放在定时器里面 Reg_Key1Cnt = 0; Reg_Key1check = 3; } } else { if(!F_TK0_On) //按下标志为0,释放判断 { if(Reg_Key1Cnt>=3&&Reg_Key1Cnt<300&&Reg_Led_Mode>0) { if(Reg_Led_Mode<2) Reg_Led_Mode++; else Reg_Led_Mode = 0; LED_Duty = 0; qicai_time = 0; light_count = 0; led_count = 0; qicai_number = 0; qicai_on_off = 0; // file_LED_Charge(); // LED输出放在定时器里面 Reg_Key1Cnt = 0; Reg_Key1check = 3; } if(Reg_Key1check>0) Reg_Key1check--; Reg_Key1Cnt = 0; } } } //================================================================================ //功能:按键长按检测程序 //说明: //================================================================================ void file_Key1Scan_Long(void) { if(bit_Key1_Long) //已经确认是长按 { //执行渐变程序 if(Bit_Inc_Dec) //为1时执行渐亮 { if(Reg_Duty<188) { Reg_Duty++; file_LED_Charge(); } } else //为0时执行渐暗 { if(Reg_Duty>6) { Reg_Duty--; file_LED_Charge(); } } } } //================================================================================ //功能:led输出子程序 //说明: //================================================================================ void file_LED_Charge(void) //正输出 { if(Reg_Led_Mode==0) //关机 { red = 0; green = 0; blue = 0; } if(Reg_Led_Mode==1) //白色 { red = 1; green = 1; blue = 1; } }改一下代码短触摸一次P61亮,短触摸第二次P61灭进入睡眠,其他功能都不要
最新发布
07-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值