To program the Atmel AT49BV512 (or similar) flash chip, all you need is an Intel PRO/100 NIC with a boot prom socket, and the fboot utility from Intel. If you're not in the mood for a story, you can skip to the end for details.
I bought a 3.5" IDE Firewire/USB2.0 enclosure (below) from compgeeks.com, and I was pretty pleased with it. It was some taiwanese no-name thing with a Prolific firewire/usb chipset. I put an 80G drive in it, ripped my CDs to it, shared it to the Audiotron, and life was good...
But then I decided to get another one. And it would not work with the first - only one could be connected to the bus at the same time. Turns out this is because both devices have the same GUID, which is supposed to be globally unique. With two of the same GUID on the bus, they can't both be identified. Since this thing didn't have the greatest support (no brand name as far as I can tell), I was on my own.
I see that prolific now has "firmware updates" for some versions of this chipset (PL-3507) here. The changelog seems to indicate that they have resolved the issue:
1. Fix the problem of 'Unique ID with 1394 Serial No.'
For two or more same PL-3507 IDE device on the same 1394 bus, the EUID64 should be unique.
The 1394 Serial No. is now used in the EEPROM to construct the unique EUID64 bytes (64bits = 8 bytes).
bytes #0 ~2 : Company ID (00 50 77 for Prolific)
bytes #3 : Device Type (HD/CD-ROM/DVD/MO...)
bytes #4~7 : 1394 Serial No. (modified by PL3507 EEPROM Writor)
SO that might be a -supported- way around the problem. Not NEARLY as much fun though!
Undaunted, I cracked open the enclosure again for a closer look. Armed with the PDF specsheet for the Prolific chip, I realized that the socketed chip on the interface board was probably programmed with the GUID. The chip in the socket is an Atmel AT49BV512, and a little bit of googling around led me to the etherboot page, where I learned that these same chips are used for boot proms on Intel epro100 NICs.
Hm... so how do we program it? Turns out that Intel has DOS utilities to read and write the boot proms on these cards in situ. Woohoo!
So, off to the computer surplus store to find a NIC with a socket on it.
Found one for a whopping $2.50 and brought it home. Made a DOS 6.22 boot floppy from www.boodisk.com, used cabextract to unpack the utilities I got from Intel, and copied them to the disk.
To transplant the chip, I should have used a plcc extractor tool. Instead, I used a bent paper clip, and very nearly destroyed the chip. It did survive the transplant, though, and after stuffing it into the socket on the NIC, I put the NIC in my pc and booted the DOS disk with the Intel utilities.
The first utility I tried was IBAUtil.exe, part of the proboot.exe package I found at Intel's web site. It let me save off the existing "boot image" to a file using ibautil.exe -save. Then I used ghex to look at the image. Searching for the full GUID (0050770e00071002) yielded no results, but looking for just the last part, '071002' turned up a hit. I edited this to '071003', and copied the image back to the floppy. Typed ibautil.exe -restore and... no luck! Argh! Some sort of checking in the utility decided that this was not a boot rom image. Argh! And t make matters worse, I had already overwritten the chip with a bona-fide boot rom image by mistake.
Well, we can't give up now, certainly.
I tried another utility, this one was fboot.exe from the proutil.exe package, also extracted with cabextract. This one let me restore my previously saved image. I popped the chip back out of the socket, stuffed it in the firewire enclosure, hooked it up, took a deep breath, and.... yes! It worked!
[root@sandeen]# grep GUID /proc/bus/ieee1394/devices Node[01:1023] GUID[0050770e00071002]: Node[02:1023] GUID[001106664000390d]: Node[00:1023] GUID[0050770e00071003]:
There are my two devices, with unique GUIDs. And it didn't take an $800 flash programmer to do it.
So, to program this type of chip, all you need is a e100 NIC with a boot prom socket, and the fboot utility from Intel. When you use fboot to save the image, it names the file based on the macid of the card - this seems to be the only requirement for being able to write data back to the chip - it needs to be in a file named in this way. Use the save feature to discover the magic filename, and put your data in a file of the same name. Then use the restore feature to program your data into the chip. Apparently the image file can contain any data you like, so in this way you can program these chips with very inexpensive hardware!
The fboot readme indicates that this should work for any of the following chips:
VENDOR: PART#: ------- --------- AMD 28F020 ATMEL AT49BV512 ATMEL AT29LV512 ATMEL AT49LV010 ATMEL AT49LV020 ATMEL AT49LV040 ATMEL AT49LV001N CATALYST 28F256 CATALYST 28F512 CATALYST 28F010 CATALYST 28F020 INTEL 28F010 INTEL 28F020 SGS 28F512 SST 29LE512 SST 39SF512 SST 39VF512 SST 39VF010 SST 39VF020 ST MICRO 28F512 ST MICRO 29W512BNot bad for $2.50!