Problem with CS8900A 5v in 8-bit

Jan 29, 2004 4 Replies

Hi Group,



We are using CS8900A 5V version and it is interfaced to Philips 89C51RD2 in *8-bit* mode - No Interrupts. CS8900A reads/writes registers, transmits and receives packets continuously (works very fine) for few minutes, say 1-2 minutes and then suddenly stops responding. If I try reading any registers at this *moment* it reads 0x00000000, stops transmitting and receiving. If I remove the 5V supply to the CS8900A and reconnect it, it starts again .. but only for few minutes.



In the initialization of CS8900A both software and hardware reset has been applied.



If anyone has ever experienced the same problem or even hasn't, Please help...



Lawrie.


I experienced the same symptons as you see, with a cs8900A, but it had to do with a (now corrected) bug on a VxWork driver supplied by the manufacturer. The bug prevented the packets to go out when certain conditions where met and forced a dead-lock. Perhaps you are using or re-using that driver...?

-- Ignacio G.T.

Could it be this issue?

"Before issuing a skip command read the RxStatus and RxLength of the current frame."

Best regards, Spehro Pefhany

"it's the network..." "The Journey is the reward" speff@interlog.com Info for manufacturers: http://www.trexon.com Embedded software/hardware/analog Info for designers: http://www.speff.com

Hardware wise, make sure that RD/ and particularly WR/ are not bouncing low a second time.

-------------------------------------------------------------------------------- Even if I just keep on reading the registers ,say the Product ID, in a continuous while loop, I do get the correct value 0x0E630009 for few minutes then suddenly it shows 0x00000000, even if a *Reset* is applied to the Microcontroller, thus reinitializing CS8900A, it shows the same 0x00000000 value. Only on *PowerUP* reset it starts again properly ....but continuing with the same problem after few minutes.

Where as RD/ and WR/ are concerned .... here is the sequence.....

Write Routine ....

ClrAEN();

SetIOR(); //Disable *IOR by sending high on the pin SetIOW(); //Disable *IOW by sending high on the pin CS_ADDR = (CS_ADDR & 0xF0) | regaddr; //Put the even address of register CS_DATA = regdata; //Put the lower byte of the data ClrIOW(); //Active low on IOW delay(100);

ClrAEN();

SetIOW(); SetIOR(); CS_ADDR = (CS_ADDR & 0xF0) | (regaddr + 1);//Put the odd address of the reg CS_DATA = regdata >> 8; //Put the higher byte of the data ClrIOW(); delay(100); SetIOW();

Read Routine ....

CS_DATA = 0xFF; //Set the data port as input port

SetIOW(); //Disable *IOR by sending high on the pin SetIOR(); //Disable *IOW by sending high on the pin CS_ADDR = (CS_ADDR & 0xF0) | regaddr; //Put Even address of register ClrIOR(); //Active Low on IOR delay(100); wdata = CS_DATA; //Collect lower byte of data

CS_DATA = 0xFF;

SetIOW(); SetIOR(); CS_ADDR = (CS_ADDR & 0xF0) | regaddr + 1; ClrIOR(); delay(100); wdata |= (0xFF00 & (CS_DATA

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required