S口故障定位手册.docx

上传人:b****1 文档编号:15240082 上传时间:2023-07-02 格式:DOCX 页数:16 大小:65.26KB
下载 相关 举报
S口故障定位手册.docx_第1页
第1页 / 共16页
S口故障定位手册.docx_第2页
第2页 / 共16页
S口故障定位手册.docx_第3页
第3页 / 共16页
S口故障定位手册.docx_第4页
第4页 / 共16页
S口故障定位手册.docx_第5页
第5页 / 共16页
S口故障定位手册.docx_第6页
第6页 / 共16页
S口故障定位手册.docx_第7页
第7页 / 共16页
S口故障定位手册.docx_第8页
第8页 / 共16页
S口故障定位手册.docx_第9页
第9页 / 共16页
S口故障定位手册.docx_第10页
第10页 / 共16页
S口故障定位手册.docx_第11页
第11页 / 共16页
S口故障定位手册.docx_第12页
第12页 / 共16页
S口故障定位手册.docx_第13页
第13页 / 共16页
S口故障定位手册.docx_第14页
第14页 / 共16页
S口故障定位手册.docx_第15页
第15页 / 共16页
S口故障定位手册.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

S口故障定位手册.docx

《S口故障定位手册.docx》由会员分享,可在线阅读,更多相关《S口故障定位手册.docx(16页珍藏版)》请在冰点文库上搜索。

S口故障定位手册.docx

S口故障定位手册

技术文件

技术文件名称:

S口故障定位手册

技术文件编号:

版本:

V1.0.001

文件质量等级:

共页

(包括封面)

拟制

审核

会签

标准化

批准

深圳市中兴通讯股份有限公司

目录

1概述3

1.1编写目的3

1.2术语和缩写3

1.3参考资料3

2常用命令3

2.1sping命令3

2.2sbreak命令4

2.3scmd命令4

2.4slink命令4

2.5gettime命令5

2.6sheap命令5

2.7memstat命令5

2.8commreset命令6

2.9sid命令6

2.10sod命令7

2.11commver命令7

2.12lapbprint命令7

3故障及其定位8

3.1调试时的故障8

3.1.1硬件原因引起的S口不通8

3.1.2驱动设置引起的S口不通8

3.1.3协议设置引起的S口不通10

3.2使用故障11

3.2.1860CPU11

3.2.2186CPU11

3.2.3定时器的周期11

3.2.4版本12

S口故障定位手册

1概述

1.1编写目的

本文总结了在S口调试使用中出现的各种问题及其解决办法,编写本《S口故障定位手册》的目的在于帮助S口软件开发人员定位软件故障,快速找出发生故障的原因,以及帮助S口的使用人员正确使用该模块。

其中也涉及一些反映在软件上的硬件故障,可以给大家在定位问题时提供一点参考。

1.2术语和缩写

HDLC

LAPB

CTS

SCC

GS_BUFFER

透传

1.3参考资料

《MTLAPB、S_186HDLC模块使用手册》

《MTLAPB、S_186HDLC模块详细设计说明》

《MTLAPB、S_186HDLC模块自测报告》

2常用命令

2.1sping命令

命令用途:

检查测试S口通断以及性能;可用于板间通信测试,ncp板内部环回或外部环回也可用此命令测试(由于协议的原因时间会增加,但可简单测试通断与否),可用大包长时间测试S口性能,查看丢包率等。

Sping是最常用的s口测试命令,sping与其他透传的命令不一样,要经过lapb协议。

Sping命令是完全模仿tcp/ip中的ping命令的。

由于lapb协议超时为3秒,重传次数为3次,所以严格的讲延时设为10s比较合适,一般默认为1s,可修改延时,尤其是对于大包。

命令格式:

sping子架号槽位号cpu号

sping子架号槽位号cpu号–t

sping子架号槽位号cpu号包大小次数时间间隔(10ms为单位)

命令示例:

sping131

示例说明:

Sent:

发送数据包

Received:

接收数据包

Lost:

丢包

Minimum:

最小延时

Maxmum:

最大延时

Average:

平均延时

2.2sbreak命令

命令用途:

中断正在运行的sping

命令格式:

sbreak

命令示例:

sbreak

2.3scmd命令

命令用途:

切换S口测试方式;目前通讯测试命令支持两种方式一种是用于测试S口自身是否正常的0x8013命令(默认),一种是用于测试应用层对通讯命令响应的0x8012命令。

0x8012命令需要应用层自己实现,接到此命令后,将测试内容回送给对方,如果8012没有实现,表现为Sping超时。

不同系统可能命令代码不一样。

命令格式:

scmd8012|8013

命令示例:

scmd8013

2.4slink命令

命令用途:

检查ncp侧对应的单板通信s口状态机状态;虽然此命令只是查看ncp侧对应状态机状态,但也可一定程度上反映与其通信的单板的状态。

命令格式:

slink子架号槽位号CPU号;

命令示例:

slink131

2.5gettime命令

命令用途:

检查单板s口运行时间

命令格式:

gettime子架号槽位号CPU号;

命令示例:

2.6sheap命令

命令用途:

检查单板的堆使用情况;

命令格式:

sheap子架号槽位号CPU号;

命令示例:

sheap131

示例说明:

Total:

总内存字节

Used:

已分配字节

Unused:

未分配字节

通常可利用此命令来判断是否存在内存泄漏。

2.7memstat命令

命令用途:

检查单板内存分配情况;

命令格式:

memstat子架号槽位号CPU号;

命令示例:

示例说明:

App_ReqCount:

应用模块申请分配内存次数

App_MemCount:

应用模块分配的内存总字节

Sport_ReqCount:

S口模块申请分配内存次数

Sport_MemCount:

S口模块分配的内存总字节

Ecc_ReqCount:

ECC口模块申请分配内存次数

Ecc_MemCount:

ECC口模块分配的内存总字节

通常可利用此命令来判断是否存在内存泄漏,和各模块的内存使用情况。

2.8commreset命令

命令用途:

复位通讯模块;

命令格式:

commreset子架号槽位号CPU号通讯模块标识

其中通讯模块标识为1表示复位S口模块,为2表示复位Ecc模块。

命令示例:

示例说明:

单板186侧S口模块和ECC口模块复位,用于确定是否是S口或ECC口模块程序的问题。

2.9sid命令

命令用途:

读寄存器;

命令格式:

sid子架号槽位号CPU号寄存器地址

命令示例:

在Telnet的命令窗口输入sid1121fc80,回车,输出显示窗口显示地址为fc80的寄存器的值

2.10sod命令

命令用途:

写寄存器;

命令格式:

sod子架号槽位号CPU号寄存器地址

命令示例:

在Telnet的命令窗口输入sod1121fc804,回车,输出显示窗口显示地址为fc80的寄存器的值

sidsod命令

示例说明:

可修改寄存器值,比如可将186板由多点接入改为点到点,判断是否由于CTS引起S口不通。

2.11commver命令

命令用途:

查看通讯口版本

命令格式:

commver子架号槽位号CPU号

命令示例:

2.12lapbprint命令

命令用途:

查看S口发送接收帧(帧长<=42字节,可查看lapb监控帧、无符号帧、部分数据帧,sping默认帧长6+26+7+3=42,不包括crc和头尾flag)。

命令格式:

lapbprint1|0

命令示例:

3故障及其定位

3.1调试时的故障

3.1.1硬件原因引起的S口不通

3.1.1.1没有时钟信号

最初调试NCP侧S口驱动时,首先要保证860的Scc有正确的收发时钟,没有时钟S口肯定是不通的。

以2510的ncp板为例,可采用cpu下载fpga或者通过小板直接下载fpga获取收发的外部时钟,由硬件开发人员用示波器测量是否有正确的时钟输出,上背板时需要测量ncp是否给单板送出正确时钟,以保证单板的S口有正确的时钟。

其他系统类似。

Cpu下载fpga时钟时可在NCP程序中设置断点检查下载是否成功,如果不成功在确认硬件无问题的情况下可检查fpga程序的后缀名、是否已经下载并升级到相应的flash区域。

可通过d-get-status命令查看。

从软件上看,如果没有时钟,是不会有Scc发送中断的,可设置断点检查。

3.1.1.2飞线不正确

不论测外部环回还是上背板,必须保证飞线正确,尤其是上背板需要飞线时,不同系统布线不一定相同,如果接错,必然不通。

在2510的调试中出现上背板飞线不正确,导致单板总是检测CTS冲突,单板能够收到ncp发出的数据,但在单板发送应答数据时由于CTS冲突,无法发出。

这种情况可以有两种方式判断,一方面由硬件开发人员用示波器检查收发器、cpu的相关管脚信号如CTS、收发管脚等;另一方面软件开发人员可在186板上设置断点,检查ncp是否发出了正确的数据、186应答数据是否发出(是否有发送中断)。

3.1.1.3其他硬件原因引起不通

由硬件开发人员定位解决。

3.1.2驱动设置引起的S口不通

3.1.2.1SCC管脚配置错误

860侧Scc管脚配置在scccfg.c文件中定义,根据硬件原理图配置。

需要配置4个Scc口的收发管脚(860PA口)和收发时钟(860PC口);采用HDLC总线方式需要配置CTS和RTS(如2500c),采用主从模式时,主(NCP)不需配置RTS和CTS,从(860/850单板)需要配置CTS和RTS。

除了检查源程序,还可在程序运行时检查相应寄存器值来判断配置是否正确,常用的寄存器有:

PADIRPortAdatadirectionregister

PAPARPortApinassignmentregister

PAODRPortAopendrainregister

PADATPortAdataregister

尤其是PAPAR可检查PA管脚配置。

PCDIRPortCdatadirectionregister

PCPARPortCpinassignmentregister

PCSOPortCspecialoptionsregister

尤其是PCPAR可检查PC口管脚配置,PCSO可检查CTS配置。

如果S口不通,在运行时可修改相应寄存器值,如修改CTS配置等来定位和解决故障。

3.1.2.2寄存器配置引起错误

主要集中在860侧Sport.c中的SportOpen函数中,初始化相应寄存器。

channelcfg.Mode=SIOCSYNC;/*+SIOCLOOPBACK;*/

/*设置通道配置模式为HDLC(和环回)*/

channelcfg.Cfg.Hdlc.TxClock=CLK_EXTERNAL;

/*设置发送时钟模式为(内部)外部时钟*/

channelcfg.Cfg.Hdlc.RxClock=CLK_EXTERNAL;

/*设置接收时钟模式为(内部)外部时钟*/

S口调试可先测试CPU内部环回(SIOCSYNC+SIOCLOOPBACK),此状态下使用CPU内部的波特率发生器。

此状态下可检查S口的驱动是否正确,如果此时S口不通那么驱动有问题,可检查初始化端口、配置、GS_BUFFER的设置等。

如果内部环回是通的,可测外部环回或者上背板测试。

S_SCC1ProtoModeReg|=(BIT5|BIT9);

/*Retrasmitionenable,HDLCbusmodeenable*/

S_SCC1GenModeReg_l|=(GSMRL_ENT|GSMRL_ENR|GSMRL_TCI);

/*EnableTX、RX&TransmitClockinverted*/

外部环回或者背板测试使用外部时钟,在Scc8xx.c中attach_lock用于分配时钟,但实际由于硬件的原因,时钟路由算法需要修改或者在Sport.c中直接修改S_SI_ClockRouteReg寄存器得到正确的时钟路由。

NCP侧对于HDLC总线方式需要设置S_SCC1ProtoModeReg,支持重传和总线协议模式;对于主从方式,不能设置S_SCC1ProtoModeReg,否则导致发送数据需要配置CTS管脚,而实际上主从方式的主方是不需要配置cts的。

单板侧无论那种方式都要配置S_SCC1ProtoModeReg,支持重传和总线协议模式,同时管脚支持cts。

Ncp和单板都要配置S_SCC1GenModeReg_l,使能发送和接受否则无法发送接收数据,发送时钟反相在硬件要求下(2500c)需要配置,如果不需要则不配置,否则可能导致S口不通(主要在单板侧)。

如果多个Scc口同时使用,则上述配置需要考虑多个SCC相应配置。

上述寄存器也可在运行中检查修改,便于调试。

例如,有时可采用外部环回内部时钟的方式便于调试。

常用寄存器:

9F0BRGC1-BRG1configurationregister//内部波特率发生器

AECSICR-SIclockrouteregister//时钟路由寄存器

还有S_SCC1ProtoModeReg,S_SCC1GenModeReg_l等寄存器。

3.1.3协议设置引起的S口不通

3.1.3.1HDLC地址错误

不同系统中HDLC地址定义不一定相同。

10G和2500c以及2510的HDLC算法为:

槽位号(8)+SCC号(3)+子架号(3)+cpu号

(2)

一共16bit,槽位号为单板或NCP的实际槽位号,对于可变化槽位的单板由硬件检测槽位号,其槽位号会相应的变化;NCP板的槽位号一般是写死的(与实际槽位一致),但在2510中为了兼容10G的单板,NCP板的槽位号与10G一致为0x09(写死),而不是实际槽位号,实际槽位号会在2510NCP板1+1保护中的主备通讯(另一条HDLC通道)中用到。

SCC号是指SCC口序号。

对于单板,其SCC号一般为1,扩展子架的SCC号为2。

NCP板在2500c中SCC号为1,10G中SCC为0,2510中SCC号为0。

NCP板只有唯一的S口地址。

不论同时使用几个SCC口。

子架号一般为1,有扩展子架时为2。

Cpu一般为1,有两颗CPU时第二颗为2。

最容易引起地址错误的是10G中定义了NCP的SCC号为0而不是1,所以NCP和单板相应的地址定义要一致,否则无法接收数据,可设断点检查发送数据成功,但另一方无法收到数据。

3.1.3.2SCC端口号错误导致初始化错误

在usrSport.cpp:

:

InitCommPort中初始化LAPBinit时,描述SCC口序号的LAPBinit.port_flag要设置正确尤其是在初始化多个SCC口时。

SCC1:

0x0002

SCC2:

0x0004

SCC3:

0x0008

SCC4:

0x0010

如果同时初始化几个SCC口那么相应的bit位为1。

否则SCC口不会初始化,S口不通。

一般情况下,NCP的S口初始化取值位0x0002(2500c,使用SCC1)或者0x0006(2510,使用SCC1和SCC2),注意850只使用一个SCC口-SCC2,取值为0x0004。

3.1.3.3GS_BUFFER设置引起错误

pSOS系统对SCC口HDLC内存管理由GS_BUFFER完成。

在sys_conf中定义GS_Buffer时一定要注意SCC口使用的情况,包括ECC使用的SCC口。

注意RAM和ROM的sys_conf要一致。

需要注意的是GS_BUFFER中25k的buf的配置和GS_BUFFER总数的配置。

建议GS_MBLKS定义为0,这样系统会根据上面定义的各类buffer数目分配,否则GS_MBLKS定义小了容易出现buff不够。

25k的buffer则要综合S口和ECC考虑,对于S口而言,由于驱动预设置接收缓存每个大小为24k,根据不同应用有可能是16个或者32等数目,那么GS_BUFS_25K必须留有余量,以保证接收缓存足够用,否则可能出现S口较有规律的时断时续的现象。

如果多个SCC口则设置相应增加。

#defineGS_BUFS_0128/*numberof32bytebuffers*/

#defineGS_BUFS_32128/*numberof32bytebuffers*/

#defineGS_BUFS_64128/*numberof64bytebuffers*/

#defineGS_BUFS_128128/*numberof128bytebuffers*/

#defineGS_BUFS_256128/*numberof256bytebuffers*/

#defineGS_BUFS_512128/*numberof512bytebuffers*/

#defineGS_BUFS_1024128/*numberof1kbytebuffers*/

#defineGS_BUFS_2048256/*numberof2kbytebuffers*/

#defineGS_BUFS_40960x40/*numberof4kbytebuffers*/

#defineGS_BUFS_81920x40/*numberof8kbytebuffers*/

#defineGS_BUFS_25K0x40/*numberof25kbytebuffers*/

#defineGS_MBLKS0/*numberofmessageblocks*/

#defineGS_MAX_BUFS20/*maxnumberofserialbuffertypes*/

3.2使用故障

3.2.1860CPU

3.2.1.1LAPB_NCP_MODE

如果860模块作为NCP板的软件使用,请在lapb_main.h中定义LAPB_NCP_MODE为ON;如果860模块作为MCU板的软件使用,请在lapb_main.h中定义LAPB_NCP_MODE为OFF。

186模块只能作为MCU板的软件使用。

3.2.1.2LAPB_CPU_MODE_MPC850

如果CPU使用850请在lapb_main.h中定义LAPB_CPU_MODE_MPC850为ON

3.2.1.3定时器、接收任务优先级

通讯模块的优先级各单板软件可以根据软件的运行情况自行决定,但不可太低,否则会丢包或出现超时等故障。

3.2.2186CPU

3.2.2.1HEAPSIZE大小

单板软件必须给系统预留一定的动态可分配内存,越多通讯性能越好,至少预留的内存为最大的报文长度的2倍,根据目前186板的情况,通常为30K左右。

内存的使用情况,可以利用sheap子架号槽位号CPU号、memstat子架号槽位号CPU号等命令查看。

186单板软件的makefile中HEAPSIZE的值越大越好,最好在180以上,200以上较为合适

3.2.2.2Debug模式

186板在debug模式下sport.h中宏_DEBUGMODE_为YES,分配的接收/发送buffer各为16*1k,使用较少内存便于调试,发布时_DEBUGMODE_改为NO,buffer为32*1k。

3.2.2.3定时器未打开

注意如果使用新的通讯模块发现运行灯不闪烁,可能是定时器0未打开,请在初始化S口后打开定时器0,方法如下:

outpw(CH0CON,inpw(CH0CON)&(~0x0008));/*XiangQiMin2003-8-1514:

11*/

outpw(T0CON,inpw(T0CON)|TCON_INH|TCON_EN);

3.2.3定时器的周期

通讯模块默认定时器的周期为10毫秒,如果采用gos封装,定时器的变化由gos自动处理,如果是186板请注意修改constant.h中的有关定义,但不要小于5毫秒,否则通讯模块可能无法正常工作:

#defineTIMER_TICKS10/*定时器中断间隔(毫秒))*/

3.2.4版本

一定要取最新的S口版本和相应库的版本如GOS库。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2