[volt-nuts] Backing up HP3458A NVRAM

Poul-Henning Kamp phk at phk.freebsd.dk
Sat Aug 15 23:00:27 UTC 2009


Old NVRAM batteries are a common affliction for HP3458A units, and
various hardware fixes have been floated.

The trouble of course, is that if you loose the content of the
chip that contains your calibration constants, you will need
a new calibration of your meter, even though the error domain
is entirely within the outguard part.

However, I belive there also is a software workaround, and I'm
documenting it here, so that you can perform step 1, even if step
2 has not been found and tested yet.

The 3458A has a number of undocumented commands, amongst these:

	XYZZY		(try it :-)

	MREAD
	MWRITE
	JSR

MREAD allows you to read one 16bit memory word, for instance:

	MREAD	4
	MREAD	6

will get you the two halfwords of the RESET vector.

The Calibration NVRAM is located in the top byte of the memory at
address 0x60000...0x60fff, so by issuing 2048 GPIB commands:

	MREAD 393216
	MREAD 393218
	...
	MREAD 397308
	MREAD 397310

And recording the output, you can create a backup copy of the
entire calibration NVRAM on your computer.

Now, if the battery in your NVRAM finally dies, your system will
come up with some variant of a calibration error.

You can then either unsolder the NVRAM, program another suitable
device (FRAM ?) with the content of your backup file, and 
mount that in the PCB(-socket) instead.

OR, and this is the interesting part:

It should then be possible to write this backup copy back using
MWRITE commands, RESET the 3458A and continue working, as long as
you do not unplug power from it.

I have not tried this yet, because I have not yet figured out the
magic sequence to writing-enable the NVRAM, there is a layer of
sw/hw protection to prevent just that.

So that awaits confirmation at some point.

But those of you with ancient NVRAMs, can at least make a
backup copy now, before you need it.

It is not my impression that the other two NVRAMs are as important,
they "only" contain stored functions and similar stuff, but if you
want a copy of those as well, I belive they are located in full words
from 0x120000...0x12ffff (1179648...1245182 decimal)

Enjoy,

Poul-Henning

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.



More information about the volt-nuts mailing list