EEPROM verify error on COM
Bobb Fwed
Posts: 1,119
I am using 24LC512-I/SM EEPROM and I have had a problem a few times. Under certain circumstances I erase the used EEPROM space with the code below.
About 50% of the time after the EEPROM has been erased, I can no longer program the EEPROM, I get this error: "EEPROM verify error on COM #". It programs the RAM fine, it says it programs the EEPROM, but then as soon as it tries verifying the EEPROM it fails. The propeller will not boot off the EEPROM.
Any ideas how I can fix the problem (without replacing the EEPROM -- it is potted and thus I don't have any access to it), and/or prevent the problem with changes to the below software.
MEM method:
using attached i2c program (mildly modified Basic i2c Driver)
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
April, 2008: when I discovered the answers to all my micro-computational-botherations!
Some of my objects:
MCP3X0X ADC Driver - Programmable Schmitt inputs, frequency reading, and more!
Simple Propeller-based Database - Making life easier and more readable for all your EEPROM storage needs.
String Manipulation Library - Don't allow strings to be the bane of the Propeller, bend them to your will!
Fast Inter-Propeller Comm - Fast communication between two propellers (1.37MB/s @100MHz)!
About 50% of the time after the EEPROM has been erased, I can no longer program the EEPROM, I get this error: "EEPROM verify error on COM #". It programs the RAM fine, it says it programs the EEPROM, but then as soon as it tries verifying the EEPROM it fails. The propeller will not boot off the EEPROM.
Any ideas how I can fix the problem (without replacing the EEPROM -- it is potted and thus I don't have any access to it), and/or prevent the problem with changes to the below software.
PRI _erase | i, empty[noparse][[/noparse]16] '' erase EEPROM memory longfill(@empty, 0, 16) REPEAT i FROM $0 TO $4500 STEP 64 MEM.write(i, @empty, 64)
MEM method:
PUB write (addr, valueAddr, size) | time '' write page to EEPROM with watchdog IF i2c.WritePage(i2c#EEPROM, addr, valueAddr, size) ABORT time := cnt repeat while i2c.WriteWait(i2c#EEPROM, addr) ' wait for watchdog if cnt - time > clkfreq / 10 ABORT RETURN true
using attached i2c program (mildly modified Basic i2c Driver)
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
April, 2008: when I discovered the answers to all my micro-computational-botherations!
Some of my objects:
MCP3X0X ADC Driver - Programmable Schmitt inputs, frequency reading, and more!
Simple Propeller-based Database - Making life easier and more readable for all your EEPROM storage needs.
String Manipulation Library - Don't allow strings to be the bane of the Propeller, bend them to your will!
Fast Inter-Propeller Comm - Fast communication between two propellers (1.37MB/s @100MHz)!
Comments
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
April, 2008: when I discovered the answers to all my micro-computational-botherations!
Some of my objects:
MCP3X0X ADC Driver - Programmable Schmitt inputs, frequency reading, and more!
Simple Propeller-based Database - Making life easier and more readable for all your EEPROM storage needs.
String Manipulation Library - Don't allow strings to be the bane of the Propeller, bend them to your will!
Fast Inter-Propeller Comm - Fast communication between two propellers (1.37MB/s @100MHz)!
I could see how that may happen, it starts clocking wrong and screws up the data. My crystal is fine. The software I can put on the RAM verifies the timing is all correct.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
April, 2008: when I discovered the answers to all my micro-computational-botherations!
Some of my objects:
MCP3X0X ADC Driver - Programmable Schmitt inputs, frequency reading, and more!
Simple Propeller-based Database - Making life easier and more readable for all your EEPROM storage needs.
String Manipulation Library - Don't allow strings to be the bane of the Propeller, bend them to your will!
Fast Inter-Propeller Comm - Fast communication between two propellers (1.37MB/s @100MHz)!
Nice catch, I wonder if this has a similar effect of a loose crystal. (in both situations the prop would run from the act of programming (generating emi) into the XI circuitry?)
The problem seems to be in the EEPROM or how the Propeller communicates with the EEPROM. The _erase method doesn't erase the entire EEPROM, just the part with the software on it.
Has anyone had problems with damaging an EEPROM if the power is cut while a write is taking place?
There is any way to "format" the EEPROM to set it back to its original state is there?
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
April, 2008: when I discovered the answers to all my micro-computational-botherations!
Some of my objects:
MCP3X0X ADC Driver - Programmable Schmitt inputs, frequency reading, and more!
Simple Propeller-based Database - Making life easier and more readable for all your EEPROM storage needs.
String Manipulation Library - Don't allow strings to be the bane of the Propeller, bend them to your will!
Fast Inter-Propeller Comm - Fast communication between two propellers (1.37MB/s @100MHz)!
This is potentially an expensive problem. EEPROMS going bad, only solution is to replace entire circuit board potted enclosure.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
April, 2008: when I discovered the answers to all my micro-computational-botherations!
Some of my objects:
MCP3X0X ADC Driver - Programmable Schmitt inputs, frequency reading, and more!
Simple Propeller-based Database - Making life easier and more readable for all your EEPROM storage needs.
String Manipulation Library - Don't allow strings to be the bane of the Propeller, bend them to your will!
Fast Inter-Propeller Comm - Fast communication between two propellers (1.37MB/s @100MHz)!
Has this happened to more than a single board?
Attached is the schematic. It's not the complete board, but it is everything pertaining to programming the Propeller and the EEPROM.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
April, 2008: when I discovered the answers to all my micro-computational-botherations!
Some of my objects:
MCP3X0X ADC Driver - Programmable Schmitt inputs, frequency reading, and more!
Simple Propeller-based Database - Making life easier and more readable for all your EEPROM storage needs.
String Manipulation Library - Don't allow strings to be the bane of the Propeller, bend them to your will!
Fast Inter-Propeller Comm - Fast communication between two propellers (1.37MB/s @100MHz)!
Can someone with a 24LC512 try running the code above. I want to know if it is somehow the wiring (can't see how) or something in the software, or what!?
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
April, 2008: when I discovered the answers to all my micro-computational-botherations!
Some of my objects:
MCP3X0X ADC Driver - Programmable Schmitt inputs, frequency reading, and more!
Simple Propeller-based Database - Making life easier and more readable for all your EEPROM storage needs.
String Manipulation Library - Don't allow strings to be the bane of the Propeller, bend them to your will!
Fast Inter-Propeller Comm - Fast communication between two propellers (1.37MB/s @100MHz)!