Archive for August, 2012
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.
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
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.
- Instruments for the GSXR
- Light pipe tail light for the GSXR
- M17x 6990m / 6970m overheating
- PAR / Spectrum analyzer
- Acrylic polishing and scratch removal
- 330W power supply for M17x update
- Continuous vs. batch water changes
- 330 Watt power supply for Alienware M17x
- mbed 1-wire EPROM driver (DS2502)
- M17x inverter brightness fix
- October 2015 (1)
- May 2015 (1)
- March 2014 (2)
- December 2013 (1)
- July 2013 (1)
- November 2012 (1)
- October 2012 (4)
- September 2012 (1)
- August 2012 (3)
- June 2012 (1)
- March 2012 (1)
- February 2012 (1)
- January 2012 (1)
- October 2011 (3)
- July 2011 (1)
- June 2011 (3)
- May 2011 (2)
- April 2011 (1)
- December 2010 (1)
- August 2010 (1)
- July 2010 (3)
- April 2010 (2)
- March 2010 (2)
- January 2010 (2)
- December 2009 (2)
- October 2009 (2)
- September 2009 (1)
- August 2009 (15)