Application Note AN572

Interfacing a serial EPROM to a controller can be a confusing 
task, especially for first time users.  Because communication 
with a parallel memory device is more straightforward, the 
advantages of serial devices are sometimes overlooked because 
of the time required to learn a different protocol.  In order 
to minimize this time, Microchip provides many application 
notes on how to interface a controller to our serial memory 
products.  Since every application is different, questions on 
different aspects of serial memories still arise.  This 
application note provides answers to some of these commonly 
asked questions on using serial EPROMs.  This series of 
questions and answers covers a broad range of topics concerning 
both 2-wire and 3-wire serial EPROMS, and covers material 
and/or circumstances that may not be provided in the data 
book.  

Questions on 2-Wire Devices(24xxxx or 85xxxx)

Q: What happens if a STOP bit is inadvertently sent to the 
device in the middle of a page write command? 
A: It depends on which device you are using.  The older 24Cxx 
devices will write any fully loaded bytes in the page to the 
device.  For example if the stop bit occurs before all bits are 
loaded in the 5th byte, then the first 4 bytes will be written 
and the 5th byte will not.  On the 24LCxxB or 24AAxx devices, 
if the stop bit occurs before all 8 bits in a byte are loaded, 
then the entire command will abort and no bytes will be written.

Q: What happens if a START bit is inadvertently sent to the 
device in the middle of command? 
A: A start bit will always reset the part.  It should be noted 
that if the device has control of the SDA line for an 
acknowledge bit or a read command, it may not be possible to 
send a start bit.

Q: I'm using interrupts in my controller code, and it is 
possible that I may jump out of my serial EEPROM communication 
routine to handle an interrupt.  Is there any problem with 
leaving the device sitting in the middle of a command as long 
as the clock remains stable? 
A: It is perfectly valid to leave a command in the middle 
indefinitely  as long as the clock line remains stable.

Q: I'm using an interrupt routine in my controller code that 
may leave the serial EEPROM in the middle of a read command.  
When I return from the interrupt, is there anyway to reset the 
part to make sure it is in a known state before I start sending 
it commands again? 
A: If the part was in the process of outputting data, you can 
always get it back to standby mode by allowing the SDA line to 
float high and give it 9 clocks.  This assures that the device 
will not receive the acknowledge bit at the end of the current 
byte and will abort the command and go to standby.


Q: I'm using a 24LCxxB in my application.  What happens if the 
WP line goes from low (unprotected) to high (protected) in the 
middle of a write command? 
A: The state of the WP pin is OR'ed with the write control 
circuitry inside the device.  The state of the pin is not 
latched at any point of the command to see if the write should 
be done or not.  Therefore, if the WP pin went high before the 
stop bit was sent to initiate the command, then the array would 
be protected.  If the WP pin went high after the stop bit was 
sent, then the outcome is unpredictable, because the result 
would vary according to how far into command the WP pin went 
high.

Q: I'm attempting to use a serial EEPROM in an application for 
the first time, and am having problems getting it to work.  I 
have followed all the timing diagrams in the databook but when 
I attempt to read data from the device I only read zeros. 
A: When a read command is initiated and all the data is zeros, the 
problem is most likely one of two things: 	      
1) A pull-up resistor on the SDA line is required for the 
device to operate correctly.  Common values are 10K - 20K 
ohms.  If this pull-up is not provided, then the device can 
only output zeros.  	 
2) The controller is not releasing the bus to the device and is 
holding it low.  Check the controller code and make sure that 
the SDA line has been set for input during the read command.

Q: I had been using a 24C04A in my application and have 
switched to the 24LC04B so I can run at a lower voltage.  Now 
the circuit is no longer working correctly.  The read seems to 
work fine but the write seems to not work at all or only 
intermittently. 
A: The problem is probably with the difference in write cycle 
times between the two devices.  The write cycle time for the 
24C04A is about 0.5ms per byte, while the cycle time for the 
24LC04B is around 2-4ms per byte.  Therefore, when you send 
consecutive write commands using the new device, it is ignoring 
all commands that occur while it is in the middle of a write 
cycle.

Q: I'm using a 24LC16B device in my application.  Is there any 
way I can determine when the write cycle is complete instead of 
waiting the maximum 10ms? 
A: Yes, you can determine when the write cycle is complete on 
any of our 2-wire devices by utilizing a simple technique 
called "data polling" or "acknowledge polling."  Data polling 
is done after the stop bit has been sent to the device to 
initiate a write cycle.  You simply send the device a start bit 
followed by a proper control byte with the R/W bit set low.  
You then check the status of the acknowledge bit. If the 
acknowledge bit is high, then the device is still busy 
writing.  You can continue to send the start bit and control 
byte until the device acknowledges. When the acknowledge bit 
reads low, then the device has finished the write cycle.  You 
can now send the address and data bytes if you are going to do 
a write command, or just send the address if you are going to 
do a read command.  Of course you may also send a start bit and 
begin the next command from scratch.


Q: I'm confused about when the acknowledge bit from the device 
actually occurs; can you clarify this? 
A: The device will attempt to take over the SDA line for the 
acknowledge bit on the falling edge of the clock for the last 
bit in the byte.  It will then release the SDA line on the 
falling edge of the clock given for the acknowledge bit.  For 
example, when the control byte is sent to the device, it will 
take the SDA line low on the falling edge of the clock for the 
R/W bit. It will then release the SDA line on the next falling 
edge of the clock (the acknowledge bit).  The same sequence 
occurs for sending the device a byte of data or address.

Q: I am using a 24LC01B in my application which has an 8 byte 
page buffer.  What happens if I load more than 8 bytes into the 
device before giving it the stop bit? 
A: For all 24LCxxB products, the 24C04A and the 85C92, the page 
buffer will wrap around to the beginning of the buffer and 
begin to overwrite the data that has previously been loaded  
For the 24C01A/02A and 85C72/82, the write command will abort 
if more bytes than the page buffer will hold are loaded.

Q: Can I send a stop bit and a start bit with the same clock 
pulse? 
A: Yes, this is valid as long as setup and hold times for both 
the start and stop bits are obeyed.

Q: What happens if I give the device a start bit and then a 
stop bit in the same clock pulse? 
A: The 24Cxx devices will ignore the stop bit, the 24LCxxB 
products will accept the stop bit and go to standby mode.

Q: Does the address pointer get incremented after a current 
address read command? 
A: A current address read command can be halted by sending a 
stop bit or by sending a high acknowledge bit after the data 
has been sent by the device.  On the 24Cxx devices, ending the 
read command with a stop bit will increment the address pointer 
to the next address.  Ending the command with a high ack bit 
will not increment the address. For the 24LCxxB products, 
ending the command with either the stop bit or the high ack bit 
will increment the address pointer.

Q: I am using the 24LC16B and want to write to the part using 
the page write mode.  Can I start a page write at any location 
in the device? 
A: You can start a page write at any location in the device, 
but you need to be aware that the part is arranged in 16-byte 
pages and you cannot cross a page boundary.  If you attempt a 
page write that goes beyond the end of the current page, data 
loaded will 'roll around' to the beginning of the current page 
instead of going to the next one.  For example;  the first page 
in the device starts at address 0x00 and ends at 0x0F.  If you 
start a page write at address 0x0E, the first byte loaded will 
be written at address 0x0E, the second at 0x0F and the third 
byte loaded will roll around to the beginning of the page and 
be written to address 0x00. 
 

Questions and Answers for 3-Wire devices (93xxxx)

Q: What would happen if during a write command I inadvertently 
sent either too many or too few clocks to the device before 
dropping the CS line? 
A: If you send too many clocks to the device and then drop the 
CS line to initiate the write cycle, the extra clocks will be 
ignored but the command will execute.  If you do not send 
enough clocks and then drop the CS line, then the command will 
abort and no write will take place.

Q: I am using a 93LC56 device in my application and am having 
problems getting it to work correctly.  The read sequence seems 
to work fine but I unable to write any data to the part. 
A: A problem such as this is usually caused by either not 
giving the part the required number of bits for the command 
before dropping the CS line, or not dropping the CS line at 
all.  The write command will not commence until the CS line is 
brought low.

Q: I am currently using a 93C46 device and am looking to go to 
the 93LC46 device so I can run at a lower voltage.  What are 
the main differences between these devices? 
A: There are several operational differences between these 
devices that you should be aware of: 	
1) The 93LC46 operates in both x8 and x16 modes; the 94C46 is 
x16 only. 	
2) The 93LC46 supports the sequential read function, the 93C46 
does not. 	
3) The write cycle on the 93LC46 begins on the falling edge of 
the CS line; the write cycle for the 93C46 begins on 
the rising edge of the last clock.

Q: Is the 93LC46 drop-in compatible with the 93C46 or would I 
be better off using the 93LC46B? 
A: The 93LC46 and 93LC46B are the same device with one 
exception; the ORG pin on the 93LC46B is internally floated so 
it will only operate in the x16 mode.  This allows the user to 
leave pin 7 floating, just like you would on the 93C46.  For 
this reason, the 93LC46B is a closer match than the 93LC46.  
Please note the other operational differences described in the 
previous question.

Q: I am confused as to whether I have to toggle the CS line low 
in-between every command. 
A: Yes, the CS line must go low for at least 250 ns between 
each command.  If you are doing a write command and you bring 
CS low to activate the data polling mode, you must toggle CS 
low again after the ready signal has been given by the device 
before the next start bit can be sent.

