¿ªÔÆÌåÓý

ctrl + shift + ? for shortcuts
© 2025 Groups.io

Make a backup of your TDS5xx/6xx/7xx memories


 

Hello,

Here's how to do it:

- Compile the code below (you know what to change in the code for various memories)

- Get your NI GPIB adapter and attach it to the scope
- Put NVRAM protection switch (S1002) to forward position
- Turn the scope on

- Run the PC program


Hopefully the result of this is loads and loads of firmware and NVRAM backups uploaded somewhere safe like ko4bb-site.

Have fun.

...

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "ni488.h"

void GpibError(const char * msg); /* Error function declaration */

int Device = 0; /* Device unit descriptor */
int BoardIndex = 0; /* Interface Index (GPIB0=0,GPIB1=1,etc.) */

int main(int argc, char *argv[])
{
FILE *outfile;

int f;

unsigned long addr, straddr, endaddr, data;
unsigned short lenght;
unsigned char checksum;
unsigned char str[0x100];

int PrimaryAddress = 29; /* Primary address of the device */
int SecondaryAddress = 0x7E; /* Secondary address of the device */
unsigned char Buffer1[0x500]; /* Read buffer */


Device = ibdev( /* Create a unit descriptor handle */
BoardIndex, /* Board Index (GPIB0 = 0, GPIB1 = 1, ...) */
PrimaryAddress, /* Device primary address */
SecondaryAddress, /* Device secondary address */
T3s, /* Timeout setting (T10s = 10 seconds) */
1, /* Assert EOI line at end of write */
0); /* EOS termination mode */

if (ibsta & ERR) { /* Check for GPIB Error */
GpibError("ibdev Error");
}

ibclr(Device); /* Clear the device */
if (ibsta & ERR) {
GpibError("ibclr Error");
}

/* Attempt to read TDS544A flash ROM contents */

outfile = fopen("KRNLdump.bin","wb");
printf("&#92;n");

// straddr = 0x01000000L; /* Start of flash ROM */
// endaddr = 0x01FFFFFFL; /* End of flash ROM */

// straddr = 0x04000000L; /* Start of TDS544A NVRAM */
// endaddr = 0x0407FFFFL; /* End of TDS544A NVRAM */

straddr = 0x00000000L; /* Start of Kernel ROM */
endaddr = 0x0003FFFFL; /* End of Kernel ROM */

addr = straddr;

do {
/* Read memory message */

str[0] = 'm'; /* m - read memory command */
str[1] = 0x00; /* checksum - fill later */
str[2] = 0x00; /* message lenght MSB */
str[3] = 0x08; /* message lenght LSB */

str[4] = (unsigned char)(addr >> 24 & 0xFF);
str[5] = (unsigned char)(addr >> 16 & 0xFF);
str[6] = (unsigned char)(addr >> 8 & 0xFF);
str[7] = (unsigned char)(addr & 0xFF);

str[8] = 0x00; /* data lenght - try 16 bytes first */
str[9] = 0x00;
str[10] = 0x04;
str[11] = 0x00;

checksum = str[0] + str[2] + str[3];
for(f = 4; f < 12; f++) checksum += str[f];
str[1] = (unsigned char) checksum;

//printf("&#92;nSending:&#92;n");
//for(f = 0; f < 12; f++) printf("%02X ", str[f]);
ibwrt(Device, str, 12); /* Send */
if (ibsta & ERR) GpibError("ibwrt Error");

/* Read Acknowledge (plus-sign msg) */
ibrd(Device, Buffer1, 1); /* Read up to x bytes from the device */
if (ibsta & ERR) GpibError("ibrd Error");
//printf("&#92;nAck reveiced:&#92;n");
//for(f = 0; f < 1; f++) printf("%02X ", Buffer1[f]);

/* Read reply message */
ibrd(Device, Buffer1, 0x404); /* Read up to x bytes from the device */
if (ibsta & ERR) GpibError("ibrd Error");
//printf("&#92;nReceived:&#92;n");
//for(f = 0; f < 0x404; f++) printf("%02X ", Buffer1[f]);

/* Save buffer contents */
for(f = 4; f < 0x404; f++)
{
fputc(Buffer1[f], outfile);
}

/* Send Acknowledgement (plus-sign msg) */
str[0] = '+';
ibwrt(Device, str, 1); /* Send */
if (ibsta & ERR) GpibError("ibwrt Error");

addr += 0x400;

} while(addr <= endaddr);

fclose(outfile);

ibonl(Device, 0); /* Take the device offline */
if (ibsta & ERR) GpibError("ibonl Error");

system("PAUSE");
}


void GpibError(const char *msg) {

printf("%s&#92;n", msg);

printf("ibsta = 0x%x <", ibsta);
if (ibsta & ERR ) printf(" ERR");
if (ibsta & TIMO) printf(" TIMO");
if (ibsta & END ) printf(" END");
if (ibsta & SRQI) printf(" SRQI");
if (ibsta & RQS ) printf(" RQS");
if (ibsta & CMPL) printf(" CMPL");
if (ibsta & LOK ) printf(" LOK");
if (ibsta & REM ) printf(" REM");
if (ibsta & CIC ) printf(" CIC");
if (ibsta & ATN ) printf(" ATN");
if (ibsta & TACS) printf(" TACS");
if (ibsta & LACS) printf(" LACS");
if (ibsta & DTAS) printf(" DTAS");
if (ibsta & DCAS) printf(" DCAS");
printf (" >&#92;n");

printf ("Iberr() = %d", iberr);
if (iberr == EDVR) printf(" EDVR <Driver error>&#92;n");
if (iberr == ECIC) printf(" ECIC <Not Controller-In-Charge>&#92;n");
if (iberr == ENOL) printf(" ENOL <No Listener>&#92;n");
if (iberr == EADR) printf(" EADR <Address error>&#92;n");
if (iberr == EARG) printf(" EARG <Invalid argument>&#92;n");
if (iberr == ESAC) printf(" ESAC <Not System Controller>&#92;n");
if (iberr == EABO) printf(" EABO <Operation aborted>&#92;n");
if (iberr == ENEB) printf(" ENEB <No GPIB board>&#92;n");
if (iberr == EOIP) printf(" EOIP <Async I/O in progress>&#92;n");
if (iberr == ECAP) printf(" ECAP <No capability>&#92;n");
if (iberr == EFSO) printf(" EFSO <File system error>&#92;n");
if (iberr == EBUS) printf(" EBUS <Command error>&#92;n");
if (iberr == ESTB) printf(" ESTB <Status byte lost>&#92;n");
if (iberr == ESRQ) printf(" ESRQ <SRQ stuck on>&#92;n");
if (iberr == ETAB) printf(" ETAB <Table Overflow>&#92;n");
if (iberr == ELCK) printf(" ELCK <Lock error>&#92;n");
if (iberr == EARM) printf(" EARM <Ibnotify rearm error>&#92;n");
if (iberr == EHDL) printf(" EHDL <Invalid Handle>&#92;n");
if (iberr == EWIP) printf(" EWIP <Wait already in progress>&#92;n");
if (iberr == ERST) printf(" ERST <Notification cancelled due to reset>&#92;n");
if (iberr == EPWR) printf(" EPWR <Power error>&#92;n");

printf("Ibcnt() = %u&#92;n", ibcnt);
printf("&#92;n");

/* Call ibonl to take the device and interface offline */
//ibonl(Device, 0);

//system("PAUSE");
//exit(1);
}


 

Hi,
I think you might get a good response posting this over at the tek forum which seems to have more TDSxxx information.



-roger


 

Hello,
Only now I saw your code!
I would have spared desoldering and resoldering 12 eeprom!
However, with my eprom programmer, as well as read all the eeprom, I also refreshed rewriting them.
Although the firmware of my TDS524A is not much recently I put it on KO4BB's site.
Now I have 2 TDS544A in repair and I will use your code to backup the firmware.
You also know how to do the firmware restore?
Regards

--- In TekScopes@..., "nukescope" <vtp@...> wrote:

Hello,

Here's how to do it:

- Compile the code below (you know what to change in the code for various memories)

- Get your NI GPIB adapter and attach it to the scope
- Put NVRAM protection switch (S1002) to forward position
- Turn the scope on

- Run the PC program


Hopefully the result of this is loads and loads of firmware and NVRAM backups uploaded somewhere safe like ko4bb-site.

Have fun.

...

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "ni488.h"

void GpibError(const char * msg); /* Error function declaration */

int Device = 0; /* Device unit descriptor */
int BoardIndex = 0; /* Interface Index (GPIB0=0,GPIB1=1,etc.) */

int main(int argc, char *argv[])
{
FILE *outfile;

int f;

unsigned long addr, straddr, endaddr, data;
unsigned short lenght;
unsigned char checksum;
unsigned char str[0x100];

int PrimaryAddress = 29; /* Primary address of the device */
int SecondaryAddress = 0x7E; /* Secondary address of the device */
unsigned char Buffer1[0x500]; /* Read buffer */


Device = ibdev( /* Create a unit descriptor handle */
BoardIndex, /* Board Index (GPIB0 = 0, GPIB1 = 1, ...) */
PrimaryAddress, /* Device primary address */
SecondaryAddress, /* Device secondary address */
T3s, /* Timeout setting (T10s = 10 seconds) */
1, /* Assert EOI line at end of write */
0); /* EOS termination mode */

if (ibsta & ERR) { /* Check for GPIB Error */
GpibError("ibdev Error");
}

ibclr(Device); /* Clear the device */
if (ibsta & ERR) {
GpibError("ibclr Error");
}

/* Attempt to read TDS544A flash ROM contents */

outfile = fopen("KRNLdump.bin","wb");
printf("&#92;n");

// straddr = 0x01000000L; /* Start of flash ROM */
// endaddr = 0x01FFFFFFL; /* End of flash ROM */

// straddr = 0x04000000L; /* Start of TDS544A NVRAM */
// endaddr = 0x0407FFFFL; /* End of TDS544A NVRAM */

straddr = 0x00000000L; /* Start of Kernel ROM */
endaddr = 0x0003FFFFL; /* End of Kernel ROM */

addr = straddr;

do {
/* Read memory message */

str[0] = 'm'; /* m - read memory command */
str[1] = 0x00; /* checksum - fill later */
str[2] = 0x00; /* message lenght MSB */
str[3] = 0x08; /* message lenght LSB */

str[4] = (unsigned char)(addr >> 24 & 0xFF);
str[5] = (unsigned char)(addr >> 16 & 0xFF);
str[6] = (unsigned char)(addr >> 8 & 0xFF);
str[7] = (unsigned char)(addr & 0xFF);

str[8] = 0x00; /* data lenght - try 16 bytes first */
str[9] = 0x00;
str[10] = 0x04;
str[11] = 0x00;

checksum = str[0] + str[2] + str[3];
for(f = 4; f < 12; f++) checksum += str[f];
str[1] = (unsigned char) checksum;

//printf("&#92;nSending:&#92;n");
//for(f = 0; f < 12; f++) printf("%02X ", str[f]);
ibwrt(Device, str, 12); /* Send */
if (ibsta & ERR) GpibError("ibwrt Error");

/* Read Acknowledge (plus-sign msg) */
ibrd(Device, Buffer1, 1); /* Read up to x bytes from the device */
if (ibsta & ERR) GpibError("ibrd Error");
//printf("&#92;nAck reveiced:&#92;n");
//for(f = 0; f < 1; f++) printf("%02X ", Buffer1[f]);

/* Read reply message */
ibrd(Device, Buffer1, 0x404); /* Read up to x bytes from the device */
if (ibsta & ERR) GpibError("ibrd Error");
//printf("&#92;nReceived:&#92;n");
//for(f = 0; f < 0x404; f++) printf("%02X ", Buffer1[f]);

/* Save buffer contents */
for(f = 4; f < 0x404; f++)
{
fputc(Buffer1[f], outfile);
}

/* Send Acknowledgement (plus-sign msg) */
str[0] = '+';
ibwrt(Device, str, 1); /* Send */
if (ibsta & ERR) GpibError("ibwrt Error");

addr += 0x400;

} while(addr <= endaddr);

fclose(outfile);

ibonl(Device, 0); /* Take the device offline */
if (ibsta & ERR) GpibError("ibonl Error");

system("PAUSE");
}


void GpibError(const char *msg) {

printf("%s&#92;n", msg);

printf("ibsta = 0x%x <", ibsta);
if (ibsta & ERR ) printf(" ERR");
if (ibsta & TIMO) printf(" TIMO");
if (ibsta & END ) printf(" END");
if (ibsta & SRQI) printf(" SRQI");
if (ibsta & RQS ) printf(" RQS");
if (ibsta & CMPL) printf(" CMPL");
if (ibsta & LOK ) printf(" LOK");
if (ibsta & REM ) printf(" REM");
if (ibsta & CIC ) printf(" CIC");
if (ibsta & ATN ) printf(" ATN");
if (ibsta & TACS) printf(" TACS");
if (ibsta & LACS) printf(" LACS");
if (ibsta & DTAS) printf(" DTAS");
if (ibsta & DCAS) printf(" DCAS");
printf (" >&#92;n");

printf ("Iberr() = %d", iberr);
if (iberr == EDVR) printf(" EDVR <Driver error>&#92;n");
if (iberr == ECIC) printf(" ECIC <Not Controller-In-Charge>&#92;n");
if (iberr == ENOL) printf(" ENOL <No Listener>&#92;n");
if (iberr == EADR) printf(" EADR <Address error>&#92;n");
if (iberr == EARG) printf(" EARG <Invalid argument>&#92;n");
if (iberr == ESAC) printf(" ESAC <Not System Controller>&#92;n");
if (iberr == EABO) printf(" EABO <Operation aborted>&#92;n");
if (iberr == ENEB) printf(" ENEB <No GPIB board>&#92;n");
if (iberr == EOIP) printf(" EOIP <Async I/O in progress>&#92;n");
if (iberr == ECAP) printf(" ECAP <No capability>&#92;n");
if (iberr == EFSO) printf(" EFSO <File system error>&#92;n");
if (iberr == EBUS) printf(" EBUS <Command error>&#92;n");
if (iberr == ESTB) printf(" ESTB <Status byte lost>&#92;n");
if (iberr == ESRQ) printf(" ESRQ <SRQ stuck on>&#92;n");
if (iberr == ETAB) printf(" ETAB <Table Overflow>&#92;n");
if (iberr == ELCK) printf(" ELCK <Lock error>&#92;n");
if (iberr == EARM) printf(" EARM <Ibnotify rearm error>&#92;n");
if (iberr == EHDL) printf(" EHDL <Invalid Handle>&#92;n");
if (iberr == EWIP) printf(" EWIP <Wait already in progress>&#92;n");
if (iberr == ERST) printf(" ERST <Notification cancelled due to reset>&#92;n");
if (iberr == EPWR) printf(" EPWR <Power error>&#92;n");

printf("Ibcnt() = %u&#92;n", ibcnt);
printf("&#92;n");

/* Call ibonl to take the device and interface offline */
//ibonl(Device, 0);

//system("PAUSE");
//exit(1);
}


 

--- In TekScopes@..., "nukescope" <vtp@...> wrote:

/* Read memory message */

str[0] = 'm'; /* m - read memory command */
str[1] = 0x00; /* checksum - fill later */
str[2] = 0x00; /* message lenght MSB */
str[3] = 0x08; /* message lenght LSB */

str[4] = (unsigned char)(addr >> 24 & 0xFF);
str[5] = (unsigned char)(addr >> 16 & 0xFF);
str[6] = (unsigned char)(addr >> 8 & 0xFF);
str[7] = (unsigned char)(addr & 0xFF);

str[8] = 0x00; /* data lenght - try 16 bytes first */
str[9] = 0x00;
str[10] = 0x04;
str[11] = 0x00;
btw, where you found the "m" command ?


 

--- In TekScopes@..., "nukescope" <vtp@...> wrote:


- Get your NI GPIB adapter and attach it to the scope
- Put NVRAM protection switch (S1002) to forward position
- Turn the scope on

- Run the PC program

hmm, my first reply was not posted properly, so let's try again.

I've tested your code on TDS754A (fw 4.1e), unfortunately it
didn't worked for me. First of all, when the S1002 is in unprotected
position TDS7xx is no booting, this seems to be the typical case.
While with "protected" position the "m" command you using is not
getting any proper data from TDS.

To double check the results/error, i've edited the code to check
the IDN, which was working, so there is no issue with my setup.

On TDS7xx seems to be a hidden unlock, so i've changed your code
to send PASSWORD PITBULL, but still the "m" command buffer
contains bad data instead of ROM/NVRAM content.


jlachmann2001
 

Hi,
I had exactly the same experience with my TDS684a, however, I finally understood what happened and succeeded to backup my RAM & ROM:
In the unprotected mode, my scope doesn't boot either, however, it enters some kind of monitor mode where it responds to a fixed GPIB address (as used in the original code) and correctly replies to the "m" command.

Regards,
´³¨¹°ù²µ±ð²Ô

--- In TekScopes@..., "suzuatama" <suzuatama@...> wrote:



--- In TekScopes@..., "nukescope" <vtp@> wrote:


- Get your NI GPIB adapter and attach it to the scope
- Put NVRAM protection switch (S1002) to forward position
- Turn the scope on

- Run the PC program

hmm, my first reply was not posted properly, so let's try again.

I've tested your code on TDS754A (fw 4.1e), unfortunately it
didn't worked for me. First of all, when the S1002 is in unprotected
position TDS7xx is no booting, this seems to be the typical case.
While with "protected" position the "m" command you using is not
getting any proper data from TDS.

To double check the results/error, i've edited the code to check
the IDN, which was working, so there is no issue with my setup.

On TDS7xx seems to be a hidden unlock, so i've changed your code
to send PASSWORD PITBULL, but still the "m" command buffer
contains bad data instead of ROM/NVRAM content.


 

Hi ´³¨¹°ù²µ±ð²Ô,

indeed, with unchanged code it seems to work, for me at least partialy. The address increments properly but the data seems to stay unchanged, after each every 0x400 again the same buffer. I've made backup before with EPROM burner, so can compare results.

regards
T.

--- In TekScopes@..., "jlachmann2001" <j.lachmann@...> wrote:



Hi,
I had exactly the same experience with my TDS684a, however, I finally understood what happened and succeeded to backup my RAM & ROM:
In the unprotected mode, my scope doesn't boot either, however, it enters some kind of monitor mode where it responds to a fixed GPIB address (as used in the original code) and correctly replies to the "m" command.

Regards,
´³¨¹°ù²µ±ð²Ô

--- In TekScopes@..., "suzuatama" <suzuatama@> wrote:



--- In TekScopes@..., "nukescope" <vtp@> wrote:


- Get your NI GPIB adapter and attach it to the scope
- Put NVRAM protection switch (S1002) to forward position
- Turn the scope on

- Run the PC program

hmm, my first reply was not posted properly, so let's try again.

I've tested your code on TDS754A (fw 4.1e), unfortunately it
didn't worked for me. First of all, when the S1002 is in unprotected
position TDS7xx is no booting, this seems to be the typical case.
While with "protected" position the "m" command you using is not
getting any proper data from TDS.

To double check the results/error, i've edited the code to check
the IDN, which was working, so there is no issue with my setup.

On TDS7xx seems to be a hidden unlock, so i've changed your code
to send PASSWORD PITBULL, but still the "m" command buffer
contains bad data instead of ROM/NVRAM content.


 

Hello,

- Get your NI GPIB adapter and attach it to the scope
- Put NVRAM protection switch (S1002) to forward position
- Turn the scope on
- Run the PC program
Oh FFS, what is so difficult about following these instructions?

I have got all kind of correspondence where people have tried to "fix" the code provided by letting their scopes boot up fully, or altering the GPIB address or whatever.

The code works by communicating with the kernel ROM and with the KERNEL ROM ONLY as made sure by the S1002 instruction above!

And that is where the 'm' command resides along with others that let upload and execute code to the kernel RAM (obviously for use with secondary bootloader in order to rewrite flash contents) or simply write to memory if needed (useful for rewriting the NVRAM contents) and so on.


 

got it, it seems to be Agilent 488 mode issue.

Not sure if it's only issue on my computer, with my adapter, with my drivers or a general issue.

However, i've compiled for MSDOS and PCII/A adapter and it worked.

--- In TekScopes@..., "suzuatama" <suzuatama@...> wrote:

Hi ´³¨¹°ù²µ±ð²Ô,

indeed, with unchanged code it seems to work, for me at least partialy. The address increments properly but the data seems to stay unchanged, after each every 0x400 again the same buffer. I've made backup before with EPROM burner, so can compare results.

regards
T.


--- In TekScopes@..., "jlachmann2001" <j.lachmann@> wrote:



Hi,
I had exactly the same experience with my TDS684a, however, I finally understood what happened and succeeded to backup my RAM & ROM:
In the unprotected mode, my scope doesn't boot either, however, it enters some kind of monitor mode where it responds to a fixed GPIB address (as used in the original code) and correctly replies to the "m" command.

Regards,
´³¨¹°ù²µ±ð²Ô

--- In TekScopes@..., "suzuatama" <suzuatama@> wrote:


 

a single line of text like

/* don't change the next 2 lines, 29,0x7E is special hard-wired debug address */

would make the difference and save your time, anyway.


Regards the "NVRAM" backup, in the TDS700A Field Adjustment Software the address of NVRAM is 67108880, which is 0x04000010L.
However, this didn't made sense for me so i've tried the TDS544A address space (0x04000000L to 0x0407FFFFL).

I've compared the resulting NVRAM dump with the one i made before with EPROM burner, but they are completly different.
In the "TDS 520B Mod CM Component Service Manual" the NVRAM address space is however defined as 0x04000000L to 0x040FFFFFL, so i thought "why not try the second part from 0x0407FFFFL to 0x040FFFFFL".

This time the resulting dump is matching the one i've made before with EPROM burner (and as this dump was already restored to replacement NVRAM, and the TDS works, i assume that it was ok).

I would say, at least for TDS754A fw 4.1e, it make sense to backup both NVRAM spaces.

--- In TekScopes@..., "nukescope" <vtp@...> wrote:



Hello,

- Get your NI GPIB adapter and attach it to the scope
- Put NVRAM protection switch (S1002) to forward position
- Turn the scope on
- Run the PC program
Oh FFS, what is so difficult about following these instructions?

I have got all kind of correspondence where people have tried to "fix" the code provided by letting their scopes boot up fully, or altering the GPIB address or whatever.


 

oh well ... it's all on the schematic.
On TDS754A the address space 0x04000000L to 0x040FFFFFL is DS1486
and 0x0407FFFFL to 0x040FFFFFL is NVRAM DS1650/DS1250.

--- In TekScopes@..., "suzuatama" <suzuatama@...> wrote:


Regards the "NVRAM" backup, in the TDS700A Field Adjustment Software the address of NVRAM is 67108880, which is 0x04000010L.
However, this didn't made sense for me so i've tried the TDS544A address space (0x04000000L to 0x0407FFFFL).

I've compared the resulting NVRAM dump with the one i made before with EPROM burner, but they are completly different.
In the "TDS 520B Mod CM Component Service Manual" the NVRAM address space is however defined as 0x04000000L to 0x040FFFFFL, so i thought "why not try the second part from 0x0407FFFFL to 0x040FFFFFL".

This time the resulting dump is matching the one i've made before with EPROM burner (and as this dump was already restored to replacement NVRAM, and the TDS works, i assume that it was ok).

I would say, at least for TDS754A fw 4.1e, it make sense to backup both NVRAM spaces.


 

Hello,

--- In TekScopes@..., "suzuatama" <suzuatama@...> wrote:
got it, it seems to be Agilent 488 mode issue.
Not sure if it's only issue on my computer, with my adapter, with my drivers or a general issue.
However, i've compiled for MSDOS and PCII/A adapter and it worked.

I used devcpp to compile the code, it's good for small things like this and very easy to set up. NI library "gpib-32.obj" needs to be linked with the compiled code.

The adapter I used is NI GPIB-USB-HS, OS is winXP.

I guess it can be ported to other adapters as long as the GPIB settings (addresses, EOI and EOS) stay.

Glad you got it working though.


 

You all may be interested to know that an Ebay seller of "Tektronix battery modules" has a list of models which (according to Tek, he says) do not store cal constants in either the NVRAM or the RTC/NVRAM, hence no danger of losing cal with chip replacements. Interesting stuff I have not had time to verify.

Den

--- In TekScopes@..., "nukescope" <vtp@...> wrote:



Hello,

--- In TekScopes@..., "suzuatama" <suzuatama@> wrote:
got it, it seems to be Agilent 488 mode issue.
Not sure if it's only issue on my computer, with my adapter, with my drivers or a general issue.
However, i've compiled for MSDOS and PCII/A adapter and it worked.

I used devcpp to compile the code, it's good for small things like this and very easy to set up. NI library "gpib-32.obj" needs to be linked with the compiled code.

The adapter I used is NI GPIB-USB-HS, OS is winXP.

I guess it can be ported to other adapters as long as the GPIB settings (addresses, EOI and EOS) stay.

Glad you got it working though.


 

I saw the auction but his statements are contradictory.
He does have a list of scopes that he claims do not keep calibration information in the NVRAMs and he says there is no need to save the contents when swapping the new NVRAMs in.

Then why this statement? "THE BATTERIES WEAR OUT and cause your oscilloscope not to function properly"

If there is no need to save the contents of the NVRAMs when swapping why even bother swapping them, and why would the scope not function properly when the batteries are dead?

--Victor

--- In TekScopes@..., "denyhstk" <denyhstk@...> wrote:

You all may be interested to know that an Ebay seller of "Tektronix battery modules" has a list of models which (according to Tek, he says) do not store cal constants in either the NVRAM or the RTC/NVRAM, hence no danger of losing cal with chip replacements. Interesting stuff I have not had time to verify.

Den


--- In TekScopes@..., "nukescope" <vtp@> wrote:



Hello,

--- In TekScopes@..., "suzuatama" <suzuatama@> wrote:
got it, it seems to be Agilent 488 mode issue.
Not sure if it's only issue on my computer, with my adapter, with my drivers or a general issue.
However, i've compiled for MSDOS and PCII/A adapter and it worked.

I used devcpp to compile the code, it's good for small things like this and very easy to set up. NI library "gpib-32.obj" needs to be linked with the compiled code.

The adapter I used is NI GPIB-USB-HS, OS is winXP.

I guess it can be ported to other adapters as long as the GPIB settings (addresses, EOI and EOS) stay.

Glad you got it working though.


 

Some oscilloscopes like the 2232 and I would guess the 2224 and 2221A
do not store any calibration information in their NVRAM but do store
the oscilloscope's configuration there. If the backup battery dies,
then the oscilloscope will loose its configuration settings and report
a CMOS error on startup. That can be mildly annoying but in all other
respects the oscilloscope will work fine.

On Wed, 10 Oct 2012 04:03:59 -0000, "victor_j_silva"
<daejon1@...> wrote:

I saw the auction but his statements are contradictory.
He does have a list of scopes that he claims do not keep calibration information in the NVRAMs and he says there is no need to save the contents when swapping the new NVRAMs in.

Then why this statement? "THE BATTERIES WEAR OUT and cause your oscilloscope not to function properly"

If there is no need to save the contents of the NVRAMs when swapping why even bother swapping them, and why would the scope not function properly when the batteries are dead?

--Victor

--- In TekScopes@..., "denyhstk" <denyhstk@...> wrote:

You all may be interested to know that an Ebay seller of "Tektronix battery modules" has a list of models which (according to Tek, he says) do not store cal constants in either the NVRAM or the RTC/NVRAM, hence no danger of losing cal with chip replacements. Interesting stuff I have not had time to verify.

Den


--- In TekScopes@..., "nukescope" <vtp@> wrote:



Hello,

--- In TekScopes@..., "suzuatama" <suzuatama@> wrote:
got it, it seems to be Agilent 488 mode issue.
Not sure if it's only issue on my computer, with my adapter, with my drivers or a general issue.
However, i've compiled for MSDOS and PCII/A adapter and it worked.

I used devcpp to compile the code, it's good for small things like this and very easy to set up. NI library "gpib-32.obj" needs to be linked with the compiled code.

The adapter I used is NI GPIB-USB-HS, OS is winXP.

I guess it can be ported to other adapters as long as the GPIB settings (addresses, EOI and EOS) stay.

Glad you got it working though.


 

In the auction the seller does his job trying to sell his merchandise.
If the data in NVRAM are lost you can always resort to a friend with the proper tools for the calibration of the instrument (the options need some more tricks).
The real problem is the firmware on the 12 EEPROM.
They now have 19 years old and the producers guarantee retention of the data 10 years or more but are only statistical data.
If we do not refresh the firmware, probably in a short time these scopes will not longer make the boot.
Therefore I share the idea of Nukescope to make a backup and a database of the firmware.

--- In TekScopes@..., "denyhstk" <denyhstk@...> wrote:

You all may be interested to know that an Ebay seller of "Tektronix battery modules" has a list of models which (according to Tek, he says) do not store cal constants in either the NVRAM or the RTC/NVRAM, hence no danger of losing cal with chip replacements. Interesting stuff I have not had time to verify.


 

Interesting, it certainly is possible if the newer scopes have a sectored 5V flash. These scopes are old enough not to have a read-while-write type of flash so there is either another flash for the cal data or during calibration the code runs on SRAM. My old TDS544A definitely had a 12V erase/pgm bulk block flashes and stores calibration information in NVRAM. IIRC, the NVRAM was DS1650 for which TI BQ4015 should work also but be a lot cheaper than the Dallas part.

Regarding the NVRAM, I had trouble reading it in a programmer so that was my primary reason for digging up the GPIB memory read commands and protocol. Make good use of the code, I spent a lot of time decompiling the kernel ROM in order to find out everything necessary.

The flashes in my TDS544A were AM28F010 which tend to keep their contents very well, actually so well that they are difficult to erase after 20 years of use (in another application).

But still, backing all the stuff up would be good. Maybe sometime someone (or me) even writes a secondary bootloader so we can rewrite the flashes.

-NS

PS. I like the sellers associated risk list, particularly item #3.

--- In TekScopes@..., "denyhstk" <denyhstk@...> wrote:
You all may be interested to know that an Ebay seller of "Tektronix battery modules" has a list of models which (according to Tek, he says) do not store cal constants in either the NVRAM or the RTC/NVRAM, hence no danger of losing cal with chip replacements. Interesting stuff I have not had time to verify.

Den


 

I'm amazed at the life of these Dallas parts (16 years or more?). I designed in a number of Dallas parts in the 1990 timeframe. They started to lose data retention about 7 to 8 years later.

The difference has to be in the environment. We were building telecom test equipment, used indoors and out, and frequently left to die for long periods of time.

The Tek scopes on the other hand, may have frequently been left on in an indoor environment. I'm convinced that internal leakage in the switch / logic probably keeps the batteries "topped off" (I know, they are lithium). Others have voiced this theory in the past.

So, if you want good batteries, buy a scope with a dim CRT ;)

Den

--- In TekScopes@..., "nukescope" <vtp@...> wrote:



Interesting, it certainly is possible if the newer scopes have a sectored 5V flash. These scopes are old enough not to have a read-while-write type of flash so there is either another flash for the cal data or during calibration the code runs on SRAM. My old TDS544A definitely had a 12V erase/pgm bulk block flashes and stores calibration information in NVRAM. IIRC, the NVRAM was DS1650 for which TI BQ4015 should work also but be a lot cheaper than the Dallas part.

Regarding the NVRAM, I had trouble reading it in a programmer so that was my primary reason for digging up the GPIB memory read commands and protocol. Make good use of the code, I spent a lot of time decompiling the kernel ROM in order to find out everything necessary.

The flashes in my TDS544A were AM28F010 which tend to keep their contents very well, actually so well that they are difficult to erase after 20 years of use (in another application).

But still, backing all the stuff up would be good. Maybe sometime someone (or me) even writes a secondary bootloader so we can rewrite the flashes.

-NS

PS. I like the sellers associated risk list, particularly item #3.


--- In TekScopes@..., "denyhstk" <denyhstk@> wrote:
You all may be interested to know that an Ebay seller of "Tektronix battery modules" has a list of models which (according to Tek, he says) do not store cal constants in either the NVRAM or the RTC/NVRAM, hence no danger of losing cal with chip replacements. Interesting stuff I have not had time to verify.

Den


 

I'm new to these scopes, but have lots of programming/debugging experience.
This program works fine with my TDS784C. I just got kernel file created.
Scope has to be off when protection switch is moved to the front. Turning scope on puts in on GPIB:29 in that special mode where "m" command works. After that it's straight forward.
How do I put file on ko4bb site?

My scope is fine, but stuck in running Vref calibration. I wonder if I can cancel that calibration without actually redoing it (Looks like it is major pain). Nukescope, you did look at disassembled code. Any ideas on how to clear Vref running state?
Thanks!

--- In TekScopes@..., "suzuatama" <suzuatama@...> wrote:

oh well ... it's all on the schematic.
On TDS754A the address space 0x04000000L to 0x040FFFFFL is DS1486
and 0x0407FFFFL to 0x040FFFFFL is NVRAM DS1650/DS1250.


--- In TekScopes@..., "suzuatama" <suzuatama@> wrote:


Regards the "NVRAM" backup, in the TDS700A Field Adjustment Software the address of NVRAM is 67108880, which is 0x04000010L.
However, this didn't made sense for me so i've tried the TDS544A address space (0x04000000L to 0x0407FFFFL).

I've compared the resulting NVRAM dump with the one i made before with EPROM burner, but they are completly different.
In the "TDS 520B Mod CM Component Service Manual" the NVRAM address space is however defined as 0x04000000L to 0x040FFFFFL, so i thought "why not try the second part from 0x0407FFFFL to 0x040FFFFFL".

This time the resulting dump is matching the one i've made before with EPROM burner (and as this dump was already restored to replacement NVRAM, and the TDS works, i assume that it was ok).

I would say, at least for TDS754A fw 4.1e, it make sense to backup both NVRAM spaces.