Maybe its just the way I wrote my code, however I dont see any other way to do it. I suppose I could take out my delay's, but still it would take me around 500us to read + - 100us but not 20us. Im using a 24LS32 serial eeprom from Microchip. Hmm. I should preface this by saying that I haven't actually DONE this, but... The way I read the 93c46 datasheet, reading a byte of data consists of clocking in a 9bit read command (which includes the address), and then clocking out 9 bits of the data (start bit plus 8 data bits, essentially.) The clock can be up to 2MHz, so in theory you could do the byte read in 18 * 1/(2e6) or about 9 microseconds. Now a 4MHz PIC certainly can't generate a 2MHz clock signal in software - I'd guess that it takes about 4 to 5 instructions to do each shift & clock, perhaps more. Call it 8 instructions per bit to come up with an even number (2us), and your random read should take about 36 us. Now, on the 24c32 parts, it looks like a "random read" is about the slowest possible operation you can do, (write device address, "write" comand, word address, device address again (aborts the "write"), clock out data...) On top of that, the clock spec if 5x slower than the 93c46 (400kHz vs 2MHz), so it doesn't sound to me like your code is badly written, it just sounds like you picked the wrong eeprom... (OTOH, the 24c32 part has a trivial "read the next sequential byte" that could be utilized.) I had noticed that there were different varieties of EEPROMs of varying complexity, but this is the first time I've noticed the substantial speed differences! I think I'll have to pay more attention. The 93C familly is fairly low density, but the SPI EEPROM chips (AT25* for atmel) have densities in the same range as the 24C parts, and behave similarly to the 93C parts... (don't seem to be as available, though.) BillW