Serial Ee Prom Programming
This simple tutorial will guide users through the process of interfacing an EEPROM chip to a Raspberry Pi using the GPIO pins and performing operations with Python scripts.
Let's start with some basics on EEPROM:
1) CE, OE, WE - What does it all mean?
Eeprom Pdf
In order to read, write and erase data from an EEPROM chip, we must first bring the chip at the correct state. This is done using 3 control pins typically named Chip Enable, Output Enable and Write Enable.
Chip Enable controls whether or not the chip is powered up. Depending on the type of chip, connecting this pin to the ground or to voltage will turn the chip on or off. Needless to say, that if we want to perform any operation we need to enable the chip. Disabling the chip allows us to power down the chip while leaving it electrically connected to our circuit. This way the chip consumes less power.
Output Enable is a pin used to tell the chip that you want to read from it. Once again, depending on the chip, connecting this pin to the ground or to voltage will tell the chip to present you with the contents of given memory address (more on that later). Disabling the Output completes the read operation.
Eeprom Programming
AT25HP512 Serial EEPROM chip (or similar); Hookup wire; Arduino. This means that to write code for a new SPI device you need to note several things and. In System Programmers - ISP - for serial EEPROMs, including 24C, 25C and 93C EEPROMs plus AT17LVxxx and AT17F FPGA configurator EEPROMs.
Write Enable is similar to Output Enable but used for writing data to the chip. Depending on the type of chip, connecting it to ground or to voltage will make the chip write data to a selected memory address (more on that later).
2) So how do I control the pins?
It is easy! Depending on your EEPROM chip, you enable or disable these pins by connecting them to a voltage source or to the ground. The jargon used for the operation is 'pull up' for connecting to voltage and 'pull down' for connecting to the ground. In some cases (and in our case in particular), pulling up a pin causes the corresponding state to be Disabled instead of Enabled. This may sound counter intuitive since you expect to pull up to turn on something but such is life sometimes.
Warning!!!: Leaving one of these pins disconnected from the circuit does not equal to it being pulled down! If any of the pins are left disconnected from the circuit we call them 'floating' and essentially their state is random and undetermined. For example, RF interference may cause a high or low signal and therefore make the pin act as if it is enabled or disabled. Always connect all the pins to your circuit!
3) It is all about sequencing!
Suppose I want to read some data from my EEPROM, what do I need to do with these pins to make it all work? Performing operations on EEPROM is all about doing things in the right order. So if we wish to read from the chip, our sequence would be as follows:
Set the memory address (pull up/down Address bus pins to form an address in binary format)
Enable chip (power up)
Enable output (read that address)
Read the memory address (the Data bus pins will now be set high/low according to the data in the address)
Disable output (the Data bus output is still enabled at this point so I can read the data)
Disable chip (power down, no output on the Data bus at this point)
Repeat the above for the next address you wish to read.
4) What was that bus you talked about?
Data Bus and Address Bus. The EEPROM chip, along with the CE, OE and WE pins, will also have a set of pins for setting an address and a set of pins for reading/writing data to the selected address. The number of pins for the Address Bus depends on the capacity of the chip. The higher the capacity, the more addresses are needed and therefore the more pins the bus will have. To set an address we pull up/down the pins to represent 1/0. Each address represented by any combination of bits contains 1 byte. So a chip with 2048 addresses will have 2048 byte capacity. The pins on the Address Bus are typically numbered like so: A0, A1, A2, A3,.. A(n)
The Data Bus, in contrast with the Address Bus, can be either input or output, depending on the operation selected. If we choose to write to the chip, we set the address we wish to write to via the Address Bus and then we set the Data Bus by pulling its pins up/down to represent one byte. If we choose to read from the chip, then the Data Bus pins will be set high/low to represent the 1/0 of the byte contained in the address we selected. The pins on the Data Bus as numbered: D0, D1, D2,.. D7
5) One last thing: Most Significant Bit
Most Significant Bit is essentially the bit that represents the highest value in a byte. Different chips may use a different ordering scheme when storing bytes. The documentation of your chip will define if the Most Significant Bit is at the highest or lowest pin number on the Data Bus. Once you know which pin has the MSB, the rest of the pins represent the rest of the bits in ascending or descending order. For example, if the MSB is on pin D7 of the Data Bus, then the Least Significant Bit is going the be on pin D0.