Bus Pirate Edu Kit Exercise no.9
In this exercise we'll demonstrate how to interface the Bus Pirate with the 25LC040A 512 byte EEPROM IC over the SPI protocol. This EEPROM is organized in 32 pages each 16 bytes long, meaning that at any single time only 16 bytes can be read or written to the IC.
The protocol used to communicate with the IC is the standard SPI protocol at a maximum of 10MHz clock speed.
The internal communication protocol is defined in the datasheet. The first byte sent to the device is the command byte and it defines further communication. There are 6 commands pictured above, which are divided in 3 groups.
The first group is used to read and write data to the EEPROM. When sending or receiving data from the IC the Bus Pirate needs to send the command byte followed by the address of where the data should be written or read to. The subsequent bytes are the data that is either written to or read from the EEPROM.
The second group of commands are the write enable and disable. This is a singly byte command. You simply send 0x06 to enable writing to the EEPROM, or 0x04 to disable it.
The third group is intended for reading and writing to the status register. To read the status register you send the appropriate command and the following revived byte is the contents of the status register. To write to it, you send the appropriate command followed by the value of the status register you'd like to set.
|IC Location||Breadboard wiring legend|
- The (+) and (-) next to PIN1 and PIN2 are intended for devices such as LEDs, where PIN1 should be the anode and connected to a higher potential then PIN2.
Bus Pirate Terminal
HiZ>m<<<the mode command
x. exit(without change)
(1)>5<<<select the SPI mode<<<
(1)>4<<<set the SPI speed to 1 MHz<<<
1. Idle low *default
2. Idle high
(1)>1<<<set clock polarity to idle low
Output clock edge:
1. Idle to active
2. Active to idle *default
(2)>2<<<set output clock edge to active to idle
Input sample phase:
1. Middle *default
(1)>1<<<select the middle input sample phase
2. /CS *default
(2)>2<<<select the inverted CS signal (active low)
Select output type:
1. Open drain (H=Hi-Z, L=GND)
2. Normal (H=3.3V, L=GND)
(1)>2<<<set the output type to normal
SPI>W<<<turn on the power supplies
POWER SUPPLIES ON
First we need to setup the SPI protocol as per 25LC040A's datasheet. Once the protocol is setup we turn on the power supplies via the 'W' command.
Next we send the 'write enable' (0x06) command, which allows us to write data to the EEPROM.
SPI>[0x02 0 1 2 3 4 5]
Next we'll write 5 bytes to the EEPROM starting at the 0x00 address. To do this we first need to send the 'write data' command (0x02), followed by the address (0x00) where we want to write the data. This is followed by the five bytes we want to write into the EEPROM (0x01, 0x02, 0x03, 0x04, and 0x05).
SPI>[0b11 0 r:5]
READ: 0x01 0x02 0x03 0x04 0x05
To check if our data was successfully written we'll read the 5 bytes we just sent to the EEPROM. First sent byte is the 'read data' command, next the starting address of the data we want to read (0x00).
The subsequent 5 bytes are the data located in the memory addresses 0x00 - 0x04, and they correspond to the data we have previously written.
x. exit(without change)