Xonar EEPROM Failure
Xonar D2(X) EEPROM Failure
Sometimes, Xonar D2 or D2X cards randomly fail to be recognized.
The driver refused to load or to install, and in Device Manager, the card is shown as an unknown sound card or as "C-Media Oxygen audio device". Putting the card into another slot or another computer does not help.
This happens when the EEPROM on the card gets overwritten.
(This EEPROM stores the PCI subsystem vendor and product IDs;
when it gets overwritten, the main chip cannot read the subsystem IDs
and uses a default ID (13F6:8788) which is not recognized by the Xonar driver.)
Causes
When the driver accesses the fourth DAC chip in a certain way, the EEPROM incorrectly thinks that it is accessed, too, and interprets the data that is sent as a write command.
Several factors must come together for this to happen:
- The fourth DAC and the EEPROM share a certain data line from the CMI8788 (AV200) chip.
(This happens only on the Xonar D2 and D2X, which adopted this design from C-Media's reference design; on later Xonar models, Asus has used a different communication method that does not use the shared pin.) - The driver writes some registers of the 4th DAC chip.
(The Linux driver does this much more often than the Windows driver, so it is more likely that this problem occurs after you have run Linux.
I have updated the Linux driver to never access the DAC this way, but the new driver version is not yet in any published kernel.) - The EEPROM chip thinks that it is being accessed. For this to happen, there must be a signal on the XEECS pin (which is not shared). In theory, this cannot happen, but it happens anyway, sometimes. Apparently, this is more likely with certain mainboards or computers, probably due to higher electric noise levels; the exact cause is unknown.
Restoring the EEPROM
I have written a small Linux program that tries to restore the original contents of the EEPROM:
- boot Linux (either from hard drisk or from a live CD);
- download the package directly from <http://www.alsa-project.org/~clemens/oxygen_restore_eeprom.tar.gz>, or download it from Windows and copy it over with a USB stick;
- open a console;
- unpack the package:
tar xvzf oxygen_restore_eeprom.tar.gz
cd oxygen_restore_eeprom - run the program, as root:
- either run first
su
, then./oxygen_restore_eeprom_32
- or run
sudo ./oxygen_restore_eeprom_32
- either run first
- follow the instructions on the screen.
The package also contains a 64-bit version (oxygen_restore_eeprom_64
) for the unlikely case that you're running a 64-bit-only Linux.
Please [tell me] if it worked.
Warranty
none
Bug Reports
So far, five users have reported this problem:
http://vip.asus.com/forum/view.aspx?board_id=21&id=20080815123512921
http://vip.asus.com/forum/view.aspx?board_id=21&id=20081109201810093
http://vip.asus.com/forum/view.aspx?board_id=21&id=20090108020749752
http://bugzilla.novell.com/show_bug.cgi?id=462365