Art, Have you tried the page write mode for storing your data? True, you need a shadow array the size of the page you are trying to write but it is much faster to write a full page than individual bytes if you have any quanity.. Try these subroutines that I wrote a long time ago for an analog waveform generator using a single 24LC512 utilizing the page mode. This routine will store 7 diferent files, made up of 64 blocks of 128 bytes each. I hope this helps...
CNTRL_BYTE CON $A0 'CONTROL BYTE FOR I2C EEPROM MEMORY (A0/A1 USED FOR CHIP SELECT)
BLOCK VAR BYTE '64 BLOCK ADDRESS BYTE
ADDRESS VAR WORD 'ADDRESS WORD FOR SERIAL EEPROM
CNTROL_BYTE VAR BYTE 'CONTROL BYTE TO SEND TO SERIAL EEPROM
STOR_DATA VAR BYTE[128]'STORAGE DATA ARRAY
FILE VAR BYTE 'FILE STORAGE NUMBER 0 to 7
'************************************************* ********************
WRITE_EEPROM512: 'WRITE TO SERIAL EEPROM
'************************************************* ********************
ADDRESS = FILE << 13 'CALCULATE 12C ADDRESS TO STORE DATA TO
ADDRESS = ADDRESS + (BLOCK << 7) 'CALCULATE 12C ADDRESS TO STORE DATA TO
CNTROL_BYTE = CNTRL_BYTE 'COPY CONTROL BYTE
CNTROL_BYTE.1 = 0' 'SET LSB OF HARDWARE ADDRESS
CNTROL_BYTE.2 = 0' 'SET MSB-1 OF HARDWARE ADDRESS
CNTROL_BYTE.3 = 0' 'SET MSB OF HARDWARE ADDRESS
I2CWRITE SDA,SCL,CNTROL_BYTE,ADDRESS,[STR STOR_DATA\128] 'SAVE DATA TO 12C
PAUSE 6 'ALLOW TIME FOR I2C WRITE ~5Ms.
BLOCK = BLOCK + 1 'INCREMENT BLOCK NUMBER
RETURN
'************************************************* ********************
READ_EEPROM512: 'READ FROM SERIAL EEPROM
'************************************************* ********************
ADDRESS = FILE << 13 'CALCULATE 12C ADDRESS TO STORE DATA TO
ADDRESS = ADDRESS + (BLOCK << 7) 'CALCULATE 12C ADDRESS TO STORE DATA TO
CNTROL_BYTE = CNTRL_BYTE 'COPY CONTROL BYTE
CNTROL_BYTE.1 = 0' 'SET LSB OF HARDWARE ADDRESS
CNTROL_BYTE.2 = 0' 'SET MSB-1 OF HARDWARE ADDRESS
CNTROL_BYTE.3 = 0' 'SET MSB OF HARDWARE ADDRESS
I2CREAD SDA,SCL,CNTROL_BYTE,ADDRESS,[STR STOR_DATA\128] 'LOAD IN ENTIRE BLOCK
RETURN
Dave Purola,
N8NTA
Bookmarks