TOC PREV NEXT INDEX

Put your logo here!


7 DIAGNOSTICS

This chapter describes the diagnostics facilities of the driver under the VxWorks shell.

7.1 rmnVersion

This function prints the version of the rmn driver:

lte71->rmnVersion

@(#) rmn $Revision: 1.0 $

7.2 rmnDevShow

This function shows a brief list of all installed devices:

lte71->rmnDevShow
Device Add Space Base Add Memory(KB) Int Vectors Int Level NodeID
------- --------- ---------- ---------- ----------- --------- ------
/rmn0 A32 0x02000000 256 [208 - 211] 4 0
/rmn1 A32 -SIMULA- 256 [212 - 215] 4 0
total number of RMN devices: 2

7.3 rmnDevDump

This function shows the content of the device registers in a formatted way:

lte71->rmnDevShow("/rmn0")

Device: /rmn0, board address 0x02000000
=========================================

0x00000001 boardID : 0x18
0x00000004 nodeID : 0x00 = 0

0x00000005 CSR - Board Control and Status Register
-------------------------------------------------
| | rcv | tx | tx | bad | own | | |
| led | half| half|empty| data| data| mask| fast|
| | full| full| | | | | |
-------------------------------------------------
| 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
-------------------------------------------------

0x00000007 cmdNode : 0x00 = 0

0x00000023 ICR - Interrupt 0 Control Register
-------------------------------------
| | flag|vect | int | int | int |
| flag| auto|0=int|enabl| auto|level|
| |clear|1=ext| |clear|[0-7]|
-------------------------------------
| 0 | 0 | 0 | 0 | 0 | 4 |
-------------------------------------




0x00000027 ICR - Interrupt 1 Control Register
-------------------------------------
| | flag|vect | int | int | int |
| flag| auto|0=int|enabl| auto|level|
| |clear|1=ext| |clear|[0-7]|
-------------------------------------
| 0 | 0 | 0 | 1 | 0 | 4 |
-------------------------------------

0x00000026 Interrupt 1 SenderID : 0x00 = 0

0x0000002b ICR - Interrupt 2 Control Register
-------------------------------------
| | flag|vect | int | int | int |
| flag| auto|0=int|enabl| auto|level|
| |clear|1=ext| |clear|[0-7]|
-------------------------------------
| 0 | 0 | 0 | 0 | 0 | 4 |
-------------------------------------

0x0000002a Interrupt 2 SenderID : 0x00 = 0

0x0000002f ICR - Interrupt 3 Control Register
-------------------------------------
| | flag|vect | int | int | int |
| flag| auto|0=int|enabl| auto|level|
| |clear|1=ext| |clear|[0-7]|
-------------------------------------
| 0 | 0 | 0 | 0 | 0 | 4 |
-------------------------------------

0x0000002e Interrupt 3 SenderID : 0x00 = 0

0x00000033 IVR - Interrupt 0 Vector Register : 0xd0
0x00000037 IVR - Interrupt 1 Vector Register : 0xd1
0x0000003b IVR - Interrupt 2 Vector Register : 0xd2
0x0000003f IVR - Interrupt 3 Vector Register : 0xd3

7.4 rmnMemDump

This function shows the complete content in hexadecimal format of the register memory from the board's base address to the last byte before the user memory (0x40 bytes in total):

lte71->rmnMemDump("/rmn0")

|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |a |b |c |d |e |f |
|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
02000000: ff 18 ff ff 00 65 ff 00 71 4c 7d 91 80 24 0a 19 *.....e..qL}..$..*
02000010: 46 08 6a 8b 14 0a 0d 02 b0 0f 75 8b c8 e3 d3 4b *F.j.......u....K*
02000020: ff ff ff 04 ff ff 00 14 ff ff 00 04 ff ff 00 04 *................*
02000030: ff ff ff d0 ff ff 00 d1 ff ff 00 d2 ff ff 00 d3 *................*

7.5 rmnDevDescrDump

This function shows the content of the device descriptor:



lte71->rmnDevDescrDump("/rmn0")

rmnDEVICE_DESCRIPTOR of /rmn0 device
======================================

lcudrvDEVICE_HEADER header:
DEV_HDR header:
DL_NODE node:
DL_NODE *next = 0x004c0f4a
DL_NODE *previous = 0x0069a5ec
short drvNum = 11;
char *name = /rmn0;
BOOL used = TRUE;
int accessMode = 0x0 = NOT OPEN;
int numShared = 0;
char name[15] = /rmn0;

int addrSpace = A32;
void *baseAddr = 0x02000000;
int memOption = 256 KB;
int intrNumber = 208;
int intrLevel = 4;
void *localAddr = 0x02000000;

SEM_ID semAccess = 0x004c0cd0 (CREATED);

rmnINT_REGS_PTRS intrRegPtrs[4]:
[0]uint8_t *ctrlRegPtr = 0x02000023;
[0]uint8_t *senderIDRegPtr = 0x02000000;
[0]uint8_t *vectRegPtr = 0x02000033;
[1]uint8_t *ctrlRegPtr = 0x02000027;
[1]uint8_t *senderIDRegPtr = 0x02000026;
[1]uint8_t *vectRegPtr = 0x02000037;
[2]uint8_t *ctrlRegPtr = 0x0200002b;
[2]uint8_t *senderIDRegPtr = 0x0200002a;
[2]uint8_t *vectRegPtr = 0x0200003b;
[3]uint8_t *ctrlRegPtr = 0x0200002f;
[3]uint8_t *senderIDRegPtr = 0x0200002e;
[3]uint8_t *vectRegPtr = 0x0200003f;

rmnINT_DATA intrData[4]:
[0]BOOL used = FALSE;
[0]rmnUSER_ISR *userISR = 0x00000000 (NOT ATTACHED);
[0]void *userArg = 0x00000000;
[0]SEM_ID semID = CREATED;
[0]uint32_t n_Sent = 0;
[0]uint32_t n_Served = 0;
[0]uint32_t n_SemGive = 0;
[0]uint32_t n_UserISR = 0;
[1]BOOL used = TRUE;
[1]rmnUSER_ISR *userISR = 0x0046d9c4 (ATTACHED);
[1]void *userArg = 0x007acb5c;
[1]SEM_ID semID = CREATED;
[1]uint32_t n_Sent = 0;
[1]uint32_t n_Served = 0;
[1]uint32_t n_SemGive = 0;
[1]uint32_t n_UserISR = 0;
[2]BOOL used = FALSE;
[2]rmnUSER_ISR *userISR = 0x00000000 (NOT ATTACHED);
[2]void *userArg = 0x00000000;
[2]SEM_ID semID = CREATED;
[2]uint32_t n_Sent = 0;
[2]uint32_t n_Served = 0;
[2]uint32_t n_SemGive = 0;
[2]uint32_t n_UserISR = 0;
[3]BOOL used = FALSE;
[3]rmnUSER_ISR *userISR = 0x00000000 (NOT ATTACHED);
[3]void *userArg = 0x00000000;
[3]SEM_ID semID = CREATED;
[3]uint32_t n_Sent = 0;
[3]uint32_t n_Served = 0;
[3]uint32_t n_SemGive = 0;
[3]uint32_t n_UserISR = 0;
int nodeID = 0;
BOOL maskError = FALSE;
BOOL fastMode = TRUE;

7.6 rmnTestBoard

This function performs the test of the user memory and of the reflective memory network, computing also the loopback time, that is the time needed to distribute a data item (1, 2 or 4 bytes) to all the nodes in the network ring (in the example below the network consists of 3 nodes):

lte71->rmnTestBoard("/rmn0")
Device /rmn0: test board and link
0x79414c (tShell): WARN: rmnCmdTestBoard: Device at 0x02000000
--- loopback time = 7100 nsec ---

7.7 rmnPrintError

This function prints a verbose explanation of the selected error code:

lte71->rmnPrintError(-206)
rmnERROR_INTERRUPT_CONFIGURED: the interrupt source was already configured!

7.8 rmnPrintCommand

This function prints a verbose explanation of the selected ioctl-command code:

lte71->rmnPrintCommand(106)
rmnCMD_CONFIG_INTERRUPT: configure an interrupt source.

7.9 Troubleshooting

· VME BERR
The basic way to use the reflective memory is to perform direct R/W operations, after getting the information about the user memory base address. A R/W access to a wrong VME address results in a bus error, which will stop the user application:
Access Fault
Program Counter: 0x00071a42
Status Register: 0x3000
Access Address : 0x01ffffff
Special Status : 0x0485

5a320 _vxTaskEntry +10 : _shell (1, 0, 0, 0, 0, 0, 0, 0, 0, 0)
444ca _shell +12e: 444e8 ([1, 0, 3, 7f, 0])
44666 _shell +2ca: _execute ([79406e, 1, 0, &_ioGlobalStdSet, eeee2a61])
44784 _execute +a6 : _yyparse ([0, 1, 0, 79406e, 0])
73b30 _yyparse +b98: 7195e ([4708c4, 4708e4, 0, f, f])
shell restarted.

The user is responsible not to exceed the address space corresponding to the board's user memory. The boundaries of the user memory must be retrieved by using the two ioctl commands: rmnCMD_ADDR_GET_USER_MEM_BASE and rmnCMD_ADDR_GET_USER_MEM_TOP.

· Reflective memory network ring is open
Before using the reflective memory, the ioctl command rmnCMD_TEST_BOARD should be issued in order to check the optical link integrity. A broken link event cannot be detected during a normal R/W access. The only possibility is to monitor the bit 2 of the Control and Status Register (own data bit), but this results to be too heavy, if it is implemented for every memory access. The suggested solution is to create a separate monitoring task which checks periodically the link integrity, by using the ioctl command rmnCMD_TEST_LINK.



Quadralay Corporation
http://www.webworks.com
Voice: (512) 719-3399
Fax: (512) 719-3606
sales@webworks.com
TOC PREV NEXT INDEX