LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1668|回复: 7

mii-tool能对网卡控制但8139不能用

[复制链接]
发表于 2002-10-16 10:32:37 | 显示全部楼层 |阅读模式
mii-tool -F 100baseTx-FD能调整网卡接口
http://www.scyld.com/diag/index.html
以下为RTL8139网卡串行ROM芯片93c46的写代码
/* libflash.c: Flash memory programming library.

Copyright 1998-2002 by Donald Becker.
This software may be used and distributed according to the terms of
the GNU General Public License (GPL), incorporated herein by reference.
Contact the author for use under other terms.

The author may be reached as becker@scyld.com, or C/O
Scyld Computing Corporation
410 Severn Ave., Suite 210
Annapolis MD 21403

Support and updates available at
http://www.scyld.com/diag/index.html

References:
http://www.atmel.com/atmel/products/prod9.htm
http://www.ssti.com/products/products.html
*/
static const char version_msg[] =
"libflash.c:v2.05 8/11/2002 Copyright Donald Becker, becker@scyld.com";

/* External interface
flash_show(), flash_dump() and flash_program()
ADDR_IOADDR is a 32-bit I/O space register that sets the Flash ROM address.
It is always accessed as outl(val, ADDR_IOADDR)
DATA_IOADDR is an 8-bit I/O register from which the Flash ROM data is read.
It is always accessed with inb or outb e.g. outb(val, DATA_IOADDR)
FILENAME is a filename where the Flash image is stored.
The caller does any register setup required.
*/

/* External interface to this library. Functions and variables: */
/* Show the Flash contents on stdout. */
extern int flash_show (long addr_ioaddr, long data_ioaddr);
/* Read or write the Flash, writing/reading FILENAME. */
extern int flash_program(long addr_ioaddr, long data_ioaddr, char *filename);
extern int flash_dump (long addr_ioaddr, long data_ioaddr, char *filename);

extern int verbose; /* Set to non-zero for info. */
extern int debug; /* Currently unused. */

/* Callback hooks for accessing single words of the flash chip.
Chips that have a I/O space 32 bit address register and do an 8 bit
read/write register will not need this. */
int (*flash_in_hook)(long addr, int offset) = 0;
void (*flash_out_hook)(long addr, int offset, int val) = 0;

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <ctype.h>
#if defined(__linux__) && __GNU_LIBRARY__ == 1
#include <asm/io.h> /* Newer libraries use <sys/io.h> instead. */
#else
#include <sys/io.h>
#endif

/* Size of read() for byte oriented parts.
Page oriented parts read in units of the chip page size.
*/
#define RD_PAGE_SIZE 4096

enum flash_flags { ERASE_FIRST=1, };
struct flash_id_table {
unsigned char vendor_id, device_id;
enum flash_flags flags;
int mem_size, page_size;
char *part_name;
} static flash_id[] = {
{ 0x12, 0x34, 0, 8*1024, 1, "Unknown Flash EEPROM", },
/* Sector program, no erase needed parts. */
{ 0xBF, 0x07, 0, 128*1024, 128, "Silicon Storage Technology SST29EE010", },
{ 0xBF, 0x08, 0, 128*1024, 128, "Silicon Storage Technology SST29LE010", },
{ 0x1F, 0xDC, 0, 32*1024, 64, "Atmel AT29C256", },
{ 0x1F, 0xBC, 0, 32*1024, 64, "Atmel AT29LV256", },
{ 0x1F, 0x5D, 0, 64*1024, 128, "Atmel AT29C512", },
{ 0x1F, 0x3D, 0, 64*1024, 128, "Atmel AT29LV512", },
{ 0x1F, 0xD5, 0, 128*1024, 128, "Atmel AT29C010A", },
{ 0x1F, 0x35, 0, 128*1024, 128, "Atmel AT29LV010A", },
{ 0x1F, 0xDA, 0, 256*1024, 256, "Atmel AT29C020", },
{ 0x1F, 0xBA, 0, 256*1024, 256, "Atmel AT29LV020", },
{ 0x1F, 0x5B, 0, 512*1024, 512, "Atmel AT29C040", },
{ 0x1F, 0x3B, 0, 512*1024, 512, "Atmel AT29LV040", },
{ 0x1F, 0xA4, 0, 512*1024, 256, "Atmel AT29C040A", },
{ 0x1F, 0xC4, 0, 512*1024, 256, "Atmel AT29LV040A", },
/* Bulk-erase, byte-program parts. */
{ 0x1F, 0x03, ERASE_FIRST, 64*1024, 1, "Atmel AT49BV512", },
{ 0,},
};

/* A few limits based on the table above. */
#define MAX_PAGE_SIZE 1024
#define MAX_PART_SIZE 512*1024

/* Index of internal functions. */
static int get_part_id(long addr_ioaddr, long data_ioaddr);
void sst_flash_clear(long addr_ioaddr, long data_ioaddr);
static void do_cmd(long addr_ioaddr, long data_ioaddr, int cmd);

static inline void flash_out(long addr_ioaddr, long data_ioaddr, int offset,
int val)
{
if (flash_out_hook) {
(*flash_out_hook)(addr_ioaddr, offset, val);
return;
}
outl(offset, addr_ioaddr);
outb(val, data_ioaddr);
}
static inline int flash_in(long addr_ioaddr, long data_ioaddr, int offset)
{
if (flash_in_hook)
return (*flash_in_hook)(addr_ioaddr, offset);
outl(offset, addr_ioaddr);
return inb(data_ioaddr) & 0xff;
}

static int get_part_id(long addr_ioaddr, long data_ioaddr)
{
int id0, id1;
int old[2];
int i;

old[0] = flash_in(addr_ioaddr, data_ioaddr, 0);
old[1] = flash_in(addr_ioaddr, data_ioaddr, 1);

#if 0
/* Check for an immediate-write Flash by checking for programming delay.
However this check is falsely triggered / unreliable. */
flash_out(addr_ioaddr, data_ioaddr, 0, old[0]);
if (flash_in(addr_ioaddr, data_ioaddr, 0) != old[0]) {
if (verbose)
printf("No BIOS ROM ID, immediate-write flash (%2.2x).\n",
flash_in(addr_ioaddr, data_ioaddr, 0));
for (i = 10000; i > 0; i--)
if (flash_in(addr_ioaddr, data_ioaddr, 0) == old[0])
break;
return -1;
}
#endif

do_cmd(addr_ioaddr, data_ioaddr, 0x90);
/* usleep(10);*/
id0 = flash_in(addr_ioaddr, data_ioaddr, 0);
id1 = flash_in(addr_ioaddr, data_ioaddr, 1);
#if 0 /* Test code only. */
for (i = 0; i < 1000; i++) {
printf("Flash ID is %x %x\r", id0, id1);
id0 = flash_in(addr_ioaddr, data_ioaddr, 0);
id1 = flash_in(addr_ioaddr, data_ioaddr, 1);
}
#endif
if (old[0] == id0 && old[1] == id1) {
/* Some SST parts only respond to the two-part ID command. */
printf("Hmmm, no response to the ID command, trying again..\n");
do_cmd(addr_ioaddr, data_ioaddr, 0x80);
do_cmd(addr_ioaddr, data_ioaddr, 0x60);
usleep(10);
id0 = flash_in(addr_ioaddr, data_ioaddr, 0);
id1 = flash_in(addr_ioaddr, data_ioaddr, 1);
if (old[0] == id0 && old[1] == id1)
printf("ACKKK, this may not be a programmable Flash part!\n");
}

if (verbose > 1)
printf(" BIOS ROM ID %2.2X %2.2X, looking up vendor...\n", id0, id1);

/* Exit ID mode. */
do_cmd(addr_ioaddr, data_ioaddr, 0xF0);
usleep(10);

for (i = 0; flash_id.vendor_id; i++)
if (flash_id.vendor_id == id0 && flash_id.device_id == id1)
break;
if (flash_id.vendor_id == 0) {
printf("Unknown BIOS ROM ID %2.2X %2.2X.\n", id0, id1);
return -1;
}
if (verbose)
printf("BIOS ROM ID %2.2X %2.2X, vendor %s:\n", id0, id1,
flash_id.part_name ? flash_id.part_name : "");
return i;
}

int flash_show(long addr_ioaddr, long data_ioaddr)
{
unsigned char old_inval[16], inval[16];
int addr, did_dots = 0;
int i, part_id, mem_size;

part_id = get_part_id(addr_ioaddr, data_ioaddr);
mem_size = (part_id < 0) ? 64*1024 : flash_id[part_id].mem_size;

for (addr = 0; addr < mem_size; addr+=16) {
for (i = 0; i < 16; i++) {
inval = flash_in(addr_ioaddr, data_ioaddr, addr + i);
}
if (addr == 0 || memcmp(inval, old_inval, sizeof(old_inval))) {
printf("0x%3.3x: ", addr);
for (i = 0; i < 16; i++)
printf("%2.2x ", inval);
for (i = 0; i < 16; i++)
printf("%c", isalnum(inval) ? inval : '.');
printf("\n");
memcpy(old_inval, inval, sizeof(old_inval));
did_dots = 0;
} else if (! did_dots) {
did_dots = 1;
printf("...\n");
}
}
printf("\nBIOS ROM dump done.\n");
return 0;
}

int flash_dump(long addr_ioaddr, long data_ioaddr, char *filename)
{
char wbuf[4096];
int fd, i, offset, cnt;
int part_id = get_part_id(addr_ioaddr, data_ioaddr);
int mem_size = (part_id < 0) ? 8*1024 : flash_id[part_id].mem_size;

printf("Saving the boot flash ROM into file '%s'...", filename);
fflush(stdout);
if ((fd = open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0444)) < 0) {
perror("flash_dump");
return -1;
}
for (offset = 0; offset < mem_size; offset += cnt) {
int blk_size = sizeof(wbuf) < 128*1024 - offset
? sizeof(wbuf) : 128*1024 - offset;
for (i = 0; i < blk_size; i++) {
wbuf = flash_in(addr_ioaddr, data_ioaddr, offset + i);
}
cnt = write(fd, wbuf, i);
if (cnt < 0) {
perror("save_flash");
return -1;
}
}
printf("done.\n");
return 0;
}

/* Bulk erase the flash ROM. */
void sst_flash_clear(long addr_ioaddr, long data_ioaddr)
{
do_cmd(addr_ioaddr, data_ioaddr, 0x80);
do_cmd(addr_ioaddr, data_ioaddr, 0x10);
usleep(20000); /* 20 msec. */
}

int flash_program(long addr_ioaddr, long data_ioaddr, char *filename)
{
int fd, i;
int offset = 0, eofflag = 0;
int part_id = get_part_id(addr_ioaddr, data_ioaddr);
int page_size = part_id > 0 ? flash_id[part_id].page_size : 128;
int flags = flash_id[part_id].flags;

if (verbose)
fprintf(stderr, "%s", version_msg);
if (part_id < 0) {
fprintf(stderr, " This is an unknown flash chip, which cannot be "
"programmed.\n");
return -1;
}

if ((fd = open(filename, O_RDONLY)) < 0) {
perror("flash_program");
return -1;
}

if (page_size == 1) { /* This is a byte-by-byte part. */
unsigned char rbuf[RD_PAGE_SIZE];

if (flags & ERASE_FIRST)
sst_flash_clear(addr_ioaddr, data_ioaddr);

do {
int rcnt = read(fd, rbuf, sizeof(rbuf));

if (rcnt < 0) {
perror("flash_load");
fprintf(stderr, "read(%d,%d,%d)\n",
fd, offset, (int)sizeof(rbuf));
return -1;
} else if (rcnt == 0) {
eofflag++;
break;
}
for (i = 0; i < rcnt; i++) {
int j;
do_cmd(addr_ioaddr, data_ioaddr, 0xA0);
flash_out(addr_ioaddr, data_ioaddr, offset++, rbuf);
/* Poll for the write to complete, look for stable read. */
for (j = 0; j < 100000; j++)
if (flash_in(addr_ioaddr, data_ioaddr, 0) ==
flash_in(addr_ioaddr, data_ioaddr, 0))
break;
if (verbose > 2)
printf("Write %2.2x to %d completed after %d ticks.\n",
rbuf, offset, j);
}

} while (! eofflag && offset < MAX_PART_SIZE);
printf("\rFinished programming %d bytes into the flash ROM.\n",
offset);
return 0;
}

do {
int rcnt, cnt = 0;
unsigned char rbuf[MAX_PAGE_SIZE];

/* The flash image should be in a file, and we should never
encounter short reads. But it's a disaster if we do, so we guard
against it. */
do {
rcnt = read(fd, rbuf + cnt, page_size - cnt);
if (rcnt < 0) {
perror("flash_load");
fprintf(stderr, "read(%d,%p,%d)\n",
fd, rbuf + cnt, page_size - cnt);
return -1;
} else if (rcnt == 0) {
eofflag++;
break;
}
cnt += rcnt;
} while (page_size - cnt > 0);

if (cnt == 0 && eofflag)
break;

/* At this point rbuf[] is either a full block, or the tail of
data to be written. We cannot allow blocks to span the 128 byte
flash pages. */
do_cmd(addr_ioaddr, data_ioaddr, 0xA0);
for (i = 0; i < cnt; i++) {
flash_out(addr_ioaddr, data_ioaddr, offset + i, rbuf);
}
if (verbose) {
printf("\rWriting a block of %d bytes at offset %#x..",
cnt, offset);
if (verbose > 1)
printf("%2.2x %2.2x %2.2x %2.2x %2.2x .",
rbuf[0], rbuf[1], rbuf[2], rbuf[3], rbuf[4]);
fflush(stdout);
}
/* Pause for 200usec. to allow the write to start. */
usleep(200);
/* And then poll for the write to complete, look for stable read. */
for (i = 0; i < 100000; i++)
if (flash_in(addr_ioaddr, data_ioaddr, 0) ==
flash_in(addr_ioaddr, data_ioaddr, 0))
break;
if (verbose > 2)
printf("Write completed after %d ticks.\n", i);
/* Verify the write. */
for (i = 0; i < cnt; i++) {
unsigned char val = flash_in(addr_ioaddr, data_ioaddr, offset + i);
if (val != rbuf) {
fprintf(stderr, "\n Flash ROM write failed at offset %d, "
"0x%2.2x vs. 0x%2.2x.\n", offset + i, val, rbuf);
return -1;
}
}
offset += cnt;
} while (! eofflag && offset < MAX_PART_SIZE);

printf("\rFinished programming %d bytes into the flash ROM.\n",
offset);
return 0;
}

static void do_cmd(long addr_ioaddr, long data_ioaddr, int cmd)
{
flash_out(addr_ioaddr, data_ioaddr, 0x5555, 0xAA);
flash_out(addr_ioaddr, data_ioaddr, 0x2AAA, 0x55);
flash_out(addr_ioaddr, data_ioaddr, 0x5555, cmd);
/* Alternate command is simply
flash_out(addr_ioaddr, data_ioaddr, 0, cmd); */
}

/*
* Local variables:
* compile-command: "cc -O -Wall -c libflash.c"
* c-indent-level: 4
* c-basic-offset: 4
* tab-width: 4
* End:
*/
 楼主| 发表于 2002-10-16 11:31:19 | 显示全部楼层

本段代码是写93C46的

8针PROM芯片上(EEPROM 93c46),拥有电擦写能力,使用串行存取和64位×16的数字构造(共128 bytes),此芯片包含了PCI设备功能、制造标识符、设备等级、子设备需要的所有数据。
发表于 2002-10-16 12:55:13 | 显示全部楼层
其实是能用的,就看我们是怎么设置了。不知道兄弟用上面的代码想做什么?
 楼主| 发表于 2002-10-16 13:24:06 | 显示全部楼层

mii-tool设不了的

linux下不改驱动8139不能到100baseTx-FD的!
以上代码是写EEPROM的!不是写Eprom的!
 楼主| 发表于 2002-10-21 10:20:54 | 显示全部楼层

ifconfig eth0 allmulti

ifconfig eth0 allmulti
能用可是mii-tool就是不行???
发表于 2002-10-21 22:54:50 | 显示全部楼层
不懂,请有经验的弟兄来指教几招。。。。我也菜的不行。。。。
 楼主| 发表于 2002-10-26 14:21:22 | 显示全部楼层

NOKIA 6110接口

接口引脚: Desktop Charger
----------------------
| |

| |
CHARGER--| + 手机顶部

- V V 1 2 3 4 5 6 V
(o) | | [= = = = = =] | |
7 8 9 10 11 12
1 - 充电/系统地
2 - 附属输出 (3.4V...10V - 50mA)
3 - External Microphone Input and Accessory Identification *1,7...2,05 V Headset Adapter Connected
*1,15...1,4 V Compact Handsfree Unit Connected
*2.22...2.56 V Infra Red Link Conneceted
4 - External RF Control Input *0...0.5V External RF in use *2.4...3.2V Internal Antenna in use
5 - FBUS Transmit
6 - Serial Control Bus *Logic Low Level: 0....0.5V *Logic High Level:2.4V....3.2V
7 - Not Connected
8 - Signal Ground
9 - External Speaker and Mute Control
Mute ON (HF SPEAKER MUTE ):0...0,5 V d.c.
Mute OFF (HF SPEAKER ACTIVE ): 1,0...1,7 V d.c.
10 - Hook Signal *Hook Off (Handset in Use): 0....0.5V *Hook On (Handset in Use): 2.4V....3.2V
11 - FBUS Receive
12 - Charging Supply Voltage (Max 16V)
------------------------------------------------
要先打开工程模式。然后翻 到测试功能497。接着你就可以享受大约90分钟的免费电话
在你的NOKIA手机中直接输入“*#746025625”,这串数值可以关掉SIM卡里的CLOCK,借以让电池更省电。
在6110底部有一排金属触点如图:
  触点 I O I I I I I I I I
  编号 1 2 3 4 5 6 7 8 9
  用镊子或是把个订书钉弄弯,将4和5短路一秒钟(锁住键盘时也管用 的)可出车载菜单(当时只是屏幕会亮,菜单要自己找),将3和4短路一 秒钟可出耳机菜单
诺基亚5110,6110左上角显示“2”字样,且无法打出电话,能呼入   
这是由于你把手机的“通话设置”里的“当前号码”项改成了号码2造成的只需将其调回号码1后确认即可,或者用另一张卡插入此机找到网络后换回即可。另提醒用户在熟练掌握该功能之后,不妨将其改为号码2以免让别人乱用您的手机、节约话费自己要用再改成号码1即可(注意:此项功能不影响呼入)   

诺基亚5110,6110由于用户自己调乱引起故障的“万能解决方法”   
“万能解决方法”就是将手机设置调到“出厂设置”,即进入“手机设置”的“出厂设置”输入保密码(在售机时所带的小黄单上有5位数)或为初始值12345即可。完成后凡是由于功能调整造成的故障即可解决,
 楼主| 发表于 2002-10-26 14:48:01 | 显示全部楼层

工程模式

  许多朋友都听说过工程模式,但对工程模式究竟如何开启又有哪些作用就不太清楚了,这里我以Nokia手机工程模式为例给大家介绍一下工程模式的开启和使用技巧。

  几乎所有的Nokia手机都有工程模式(经测试,Nokia的5110、5130、6110、6130、6138、6150、3210、8210、8850、6210、3310、8250均具备工程模式),不过它是隐藏在菜单中,需要特殊的方法打开工程模式后你才能看见。

  Net Monitor在诺基亚51××/6100中共有88个画面(6100软件版本在V5.0以后则为89个画面),6150则为89个画面,而8210则有编号为140的画面,实际上有些为空,但比6150多。前19个画面称为Operator Net Monitor,以系统网络功能为主,后面的则被称为R&D Net Monitor,以手机软硬件的资料为主。

  注意:很多朋友都以为工程模式能修改手机功能或增强信号,其实,工程模式只能显示GSM900/1800网络的执行情形或显示手机内某些有用信息作为参考用,不能修改手机功能或增强手机信号。同时,由于手机本身并非精密的仪器,所有显示的数值仅是近似值,而且因为现在的网络技术不断更新,而手机软件是原先设计的,可能也会有不符的情况发生,因此切记,工程模式仅能作参考使用。

  Nokia工程模式的打开

  Nokia的工程模式在菜单中显示为“Net Monitor”,中文手机也是如此,Net monitor直译就是“网络监视器”,也比较符合实际。工程模式开启后为常驻,不需再输入任何密码,当然你也可以通过和开启类似的方法再把其关闭。

  目前能开启Nokia工程模式的软件很多,如著名的 Logo Manager就可以通过数据线或笔记本自带的红外线打开工程模式,功能十分强大。另外有一个专门用于数据线开启工程模式的小程序94xft.exe,不过只能在DOS下使用。

  手机良伴作为手机发烧友的装备也越来越流行,但原来的软件并不能开启工程模式,双扬公司也专门为手机良伴提供了一个开启工程模式的小程序,名为NetMon.exe,不过只对具备红外线功能的诺基亚手机有用。

  运行NetMon.exe,可选择对应机型并有打开Field Test Mode和Engineer Mode以及关闭三项操作,其中Field Test Mode只打开1-19个画面,而Engineer Mode则可打开全部89个画面。

工程模式简介

  工程模式打开后,手机使用上没有什么太大的不同,只是手机上会有些新鲜的画面,这些画面并不会影响你使用手机,即它只会在屏幕上不需显示其他功能时才会出现。例如,当开始拨电话时,Net monitor就会消失,直到电话拨完,电话号码消失,而工程模式的信息才会出现在屏幕上(注意,在显示工程模式信息时,来电显示、分组图标、通话时间不会被显示出来)。

  Net monitor包含两种模式:资料显示模式(data display mode)和执行模式(execute mode)。

  进入资料模式的方法是在菜单选项中按上下键切换到Net monitor,按确认进入。在资料显示模式中,可以在主画面中看到测试的值,例如channel(频道),Power Level,Cell ID等,利用上下键可轻松地转换测试项目(左上角的数字就是表示显示的是第几个画面),而不必再回到菜单选项。但是在资料显示模式中,有的画面虽然看得到,但不能进行任何执行或设定。

  执行模式是在工程模式中直接输入数字的启动方法进入,是一次显示一种的形式,若要在执行模式下进行另一种的测试时,则必须重新启动Net monitor选项,然后再进入该选项一次,如我们下面要讲到的输入18进入开关背景灯的画面等等。

工程模式常用指令

  1.离开工程模式:输入00,确认。

  2.关闭工程模式:输入241,确认(注意,这种方式将关闭工程模式直到你再次用特殊方法打开)。

  3.显示在线帮助信息:在工程模式中,按住*键不放,画面将切换到该画面栏位的缩写或代号,并有简短的帮助信息供使用者查阅,此求助画面将停留至使用者再次长按*键始离开(注意51xx系列的V5.00~5.02版本无在线帮助信息)。

  4.常用画面

  在Net monitor中可看到每个画面代表的信息(以前19个画面为例):

  画面01:使用中基地台和频道的信息。

  画面02:更多有关使用中基地台和频道的信息。

  画面03:使用中基站和邻近两个最强的频道的信息。

  画面04:邻近第三、四、五个频道的信息。

  画面05:邻近第六、七、八个频道的信息。

  画面06:可用及不可用网路选择的显示。

  画面07:使用中频道的系统信息。

  画面08:无资料。

  画面09:无资料。

  画面10:显示呼叫重复间隔数值,TMSI,周期性位置更新的时间(periodic location update timer),AFC,AGC等信息。

  画面11:国家识别码,网路代码,基地台编号等信息。

  画面12:加密状况(ciphering)、跳频(hopping)DTX状态及IMSI侦测状况的相关信息。

  画面13TX状态的显示。

  画面14:画面指示的切换(61xx无)。

  画面15:无资料。

  画面16:无资料。

  画面17:切换BTS_TEST(Lock Channel)状态。

  画面18:切换背景灯光的关闭(6110/6138无)。

  画面19:切换基站限制的可用状态(toggle cell barred status)。

Net monitor实用三例

  限于篇幅,这里仅介绍显示基站信号的画面1、开关背景灯的画面18和显示电池真实容量的画面20。

  1.显示基站信号等常用数值

  这是最基本的信息了,主要是手机当前正使用的基站和频道的信息,分为待机和通话时两个画面。

  说明:请对照在线帮助图和待机和通话的实际图来理解,不少数值在待机和通话状态下代表的信息并不相同。

  CH 显示频道编号,GSM900的范围是1~124,GSM1800的范围是512~885,如果该运营商有开启跳频(Freq。Hopping),通话中频道编号前会用“H”来识别,并显示跳频所使用的频道编号。

  RxL 显示接收强度(单位:-dBm),范围从-110~0,因为该位置只能显示3位,显示100实际上是-100,一般低于-100手机已无信号。

  TxPwr 显示通话中手机的功率发射强度(Power Level),显示范围0~19。

  TS 时槽(Time Slot),TS=0~7,其中TS=0为BCCH所使用。

  TA Time Advance,时间前置量,显示手机和基站间距离。该数值乘以500可换算为米,不过因受电波反射吸收等影响,TA值仅供参考用,TA值范围0~63。(我们使用不同的手机在多个地点测试,得出的TA值基本吻合)

  RQ 通话品质,0~7,数值越大,通话品质越差。

  RLT Radio Link Timeout。 如果是负的值,则显示0。最大值为64。当手机没有通话时,则会显示xx。

  C1 路径损失参数(Path Loss Criterion),供手机决定频道选定的参数,其计算比较复杂,在此略过。

  C2 小区重新选择参数(Cell Reselection Criterion)。

  CHT - Channel Type,显示现在使用中频道类型,共有*AGCH、*SDCC和*TXX三种。

  通话中CHT项变化:AGCH->SDCC->TFR(TEFR)->挂断电话->BCCH->CCCH

  开机时CHT项变化:AGCH->SDCC->BCCH->CCCH

  BCCH -(Broadcast Control Channel)广播控制用频道。

  CBCH -(Cell Broadcast Channel)小区广播频道。

  SEAR -(Searching)手机正在搜寻网路讯号。

  NSPS -(No Service & Power Save),无系统服务,手机处于省电模式。

  TEFR为通话中语音编码速率,有HR、FR、EFR等,我们知道,在诺基亚手机中可以通过输入*3370#来打开或输入#3370#关闭加强型全速率方式,但到底我们的手机现在是在何种状态下工作,用此方法可以查明。

  2.持续打开背景灯光

  使用方法:进入Net monitor,输入18,再按确定键,打开或关闭灯光。

  注意事项:该画面预设值为OFF,若开启成ON后,灯光将一直开启直到使用者将状态改成OFF,此功能对于夜间的使用者很方便,尤其在车上的时候。

  3.查看目前手机电池实际容量

  目前电池标称着高容量、超薄技术,其实Nokia手机只要开启工程模式后,就可以让实际的电池容量无所遁逃了,用这招可让你避免买到一些假冒伪劣电池,使用技巧相当简单,进入工程模式第20页,左下角显示的数字就是电池容量(mAh)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表