Archive for August, 2012

6970m vBIOS ISP / Pm25LD010

My latest project is trying to get an AMD 6970m graphics card working in my first release Alienware M17x. I needed a way to program the flash memory on the card that holds the BIOS, since the system won’t post with the card installed. The flash is a Pm25LD010 which is a 1Mb SPI 3.3V flash chip. I had the programmer I built for the last project with the M17x motherboard BIOS issue, but the SST25VF016B it was programmed for has a different program/erase operation. It’s also a bigger flash.

I modified the code for programming the SST25VF016B so that it works with the Pm25LD010 in the same programmer. If you build the programmer from my previous post this code will program the flash on the 6970m.

The code is C for linux. Just make from the directory, or the zip file here also has a compiled executable.

Tags: , ,

Friday, August 24th, 2012 Electronics 1 Comment

Alienware M17x BIOS / EC corrupted flash fix

I recently bricked my M17x trying to update the EC firmware for the PS2 scan rate fix. I created a USB Crisis rescue disk from the Dell package and booted from it. The Phoenix Phlash utility then informed me that it couldn’t flash when memory managers were present, and that I could press any key to exit. So I pressed a key. Instead of exiting however the program started trying to program the BIOS flash. It quickly locked up, and after I cycled power I got no response at all from the computer.

I found out once I tore down the machine that I had an original Dell (a.k.a. R1) motherboard. The incomplete BIOS load for the R2 completely confused it, as the embedded controller wasn’t recognizing the power button or keyboard for Crisis rescue (FN+B). It wouldn’t do anything at all. Time to find the flash memory that stores the configuration information.
A little examination revealed that the low level functions on this motherboard are managed by an ITE IT8512E embedded controller. This device controls typical BIOS functions like ACPI, fan PWM, keyboard controller/scanner, PS2 input from the touchpad, etc. The controller consists of two domains, the host processor (BIOS) and an 8032 microcontroller (EC). It is not entirely clear from the datasheet how the two domains are integrated; I’m not sure if it’s a logical separation or if there is actually two processors on the device. At any rate the two domains share a common internal flash memory that is mapped from the external flash ROM. On my board this external memory was an SST 25VF016B which is an SPI flash. › Continue reading

Tags: ,

Thursday, August 16th, 2012 Electronics 5 Comments

SPI programmer for SST25VF016B

Thanks to my M17x I needed a way to program an SST25VF016B. The 25VF016B is a 3.3V SPI flash and I didn’t have anything that would program it. Thanks to some code I found at Sergey Malinov’s website I was able to build a programmer for this chip.

I built Malinov’s code in Linux. I also found some C code for driving the chip on Microchip’s website, but I didn’t use it. It is written for the Keil compiler. There is also Verilog code if you feel like doing this with a programmable logic device.
Malinov’s code uses a parallel port. Based on my CNC experience, I know it is really easy to kill a parallel port so I made my own interface for the parallel port to the flash. The buffer I used is a TI CD74HC366QDRQ1, a high-speed inverting three state buffer. Here is the schematic diagram.

The SPI programmer code runs on the command line. The options are read, write, id, status, and erase with read/write requiring a filename argument. To program a device you must first erase it or the data won’t be written correctly. Then write the image to the chip and verify it with read. You can use the “diff” command in Linux to verify the memory contents. There is also dhex, a nice program for verifying two binary files side-by-side.


Thursday, August 16th, 2012 Electronics No Comments