In order to program a device, we must read the JEDEC fuse file and shift the bits into the chip, flashing each low and high data register one by one. We can see a memory map of the EEPROM fuse array in the figure below. Taken from the ISP Architecture and Programming application note.
Fig 9 – ispLSI Memory Map
We can get a few key pieces of information from this map. First, it verifies that both the address bits and data bits are shifted in LSB first. However, there is one ambiguity concerning the row addressing that is not clearly discussed. The rows of data are accessed by putting a single address bit high. To access what is called row 0, the address data you shift would be 000….0001. Since we’re shifting LSB first, that would consit of clocking a single 1 and then many 0′s. Accessing row 1 would require 000….0010, row 2 would be 000…00100 and so on.
Since the address shift register always shifts down it’s a big hassle to load a hundred address bits every time. What we’ve done instead is to essentially flash it in reverse, from highest row to lowest row. First we load 101 0′s and a single 1 (to access the highest data row), then load and flash the high and low 40-bit chunks. Then we reload the ADRSHFT command and only load a single 0 using one clock. This shifts our lonely 1 down to the next lowest address row, and we go and program that. It’s much easier than decoding that 102-length single bit address for each row.
Now we discuss the JEDEC file. This file is a text file containing data for all the fuses in the device. It starts with some comments that we’ve stripped out here in order to get to the good stuff: The fuse data. In this file, a text 1 represents a single bit 1 and a text 0 represents a single bit 0, naturally. Takes a lot of space but is easily readable.
Below you’ll see the first few lines of a .jed file for the 2032 device. It’s already broken into 40-bit chunks, each representing one of the high/low order data registers. Here we will examine the first 4 lines which should give you a pretty good idea on how to parse it.
The first line (L00000) tells you the address line to activate. To activate address 0, Shift a single 1 and 101 0′s into the addr register. The second line is the high order fuse data for addr 0 and the third line is the low order data. The fourth line is the high order fuse data for address 1. Lather, rinse, and repeat.
*L00000
1111111111111110111111111110011111111111
1111111111111111001111111111101111111111
1110111101111011110111101110111110111101
Let’s break up that first line into 4-bit chunks.
1111 1111 1111 1110 1111 1111 1110 0111 1111 1111
The leftmost bit is bit 0, the first bit shifted in. The rightmost bit is bit 39, the MSB of the high order data. If we were to parse it into hex and reverse the order so the LS character is now on the right, (while keeping in mind that the left most bit is shifted in first)… We’d get FFE7FF7FFF. This is the format that the software expects so keep it in mind when poking around in the source code.
You should also keep in mind that in the software tool starts working on the highest address first in order to make the addressing easy. You may think that we simply start at the end of the JED file and work backwards – half right! The last line of the JED file is actually the low order data of addr 102. Second to last is the high order data of addr 102. So the source code is going to be parsing bits, re-ordering hex characters, and then sending data out of the bottom of the array. Try not to get confused!
Let’s move on to the software tool itself.
Continued on Next Page…





Helpful material discussed I am really delighted to go through this particular write-up..many thanks with regard to providing all of us nice tips.Great walk-through. I truly appreciate this article.
[...] is a wiring diagram for connecting the Sparkfun FT232RL Breakout Board (see our other posts on this device) to an SN75176 RS-488 bus transceiver. This simple combination gives you a homebrew USB DMX [...]
[...] the FT232 chip, as has been previously described in: Bit Banging SPI on Arduino’s FT232 and Lattice CPLD programmer using FT232. So let’s get to the [...]