Electronics > Repair

Has anyone replaced HP8591(E) SRAM by FRAM?

<< < (8/9) > >>

Miti:

--- Quote from: MarkL on January 16, 2025, 06:52:03 pm ---The programmer approach is a good idea.

Since the memory module is writable on a byte basis, you could read/write the image in two slices, first lower bytes and then upper bytes.  On the TL866, you could select a 256k x 8 NVRAM chip, such as the 5V Dallas DS1249AB or DS1249Y.  The DS1249 is a 32-pin DIP and does not need a mystery adapter, and I think is supported by the TL866 (and a lot of other programmers).

If you wanted a contiguous SRAM image for some reason, there are tools to re-interleave the lower and upper byte-wide images.

--- End quote ---

That's a very good idea, thank you Mark!
I got stuck with the 16 bit idea and it didn't occur to me that by reading/ writing 8 bits at a time I don't need the adapter anymore.
In fact I think TL866 II Plus is 8 bit and the adapter multiplexes the upper and lower block. :-+

Edit: Tested with an FRAM chip and it works.  :clap:
Edit 1: And if I select DS1250 instead of DS1249, the /LB , /UB multiplexing can be done automatically using the address MSB and it creates a single file.

MarkL:
Interesting idea on using the MSB to control the upper/lower byte selection.  But when connecting the memory module, how does the upper byte get multiplexed onto the DS1250 [D7..D0] pins on the programmer?

I thought of another thing wrt the memory module: LUSERRAM0 and LUSERRAM1 are mutually exclusive, so they can't be wired to address lines.  More properly, those are really select inputs so they should be handled by connecting them to the pin assigned to /CE pin on the programmer.

At the moment, I'm seeing a four pass solution using a DS1245Y or DS1245AB (128k x 8 ).

    Programmer      Module         
    ----------      ----------
1)  /CE        -->  LUSERRAM0   
    [D7..D0]   ---  [MD7..MD0]
    /WE        -->  LLW         
    /OE        -->  LOE         
    [A16..A0]  -->  [MA17..MA1]
 
2)  /CE        -->  LUSERRAM1   
    [D7..D0]   ---  [MD7..MD0]
    /WE        -->  LLW         
    /OE        -->  LOE         
    [A16..A0]  -->  [MA17..MA1]

3)  /CE        -->  LUSERRAM0   
    [D7..D0]   ---  [MD15..MD8]
    /WE        -->  LUW         
    /OE        -->  LOE         
    [A16..A0]  -->  [MA17..MA1]
 
4)  /CE        -->  LUSERRAM1   
    [D7..D0]   ---  [MD15..MD8]
    /WE        -->  LUW         
    /OE        -->  LOE         
    [A16..A0]  -->  [MA17..MA1]


For the read operations on the original module, I would probably tie LLW and LUW high through a resistor to whatever is supplying power to the module, independent of what the programmer is doing, just to make sure no writes are triggered by accident.

Edit:  I guess it's really 8 passes, if you want to multiply by a pass for read and a pass for write.

MarkL:
I'll throw this out there, but it's also possible to read the entire SRAM via GPIB.  It could serve as a backup, but to be honest I've never tried to put the GPIB output back into SRAM to see if it works.

There is an undocumented command:

  mbrd START,BYTES

where START is the starting address, and BYTES is the number of bytes to dump.  Both are in decimal.  Results are returned in "A-block" format.  See the programmer manual for details on A-block (page 3-24), but I'll summarize by saying it's a binary format and limited to 32767 bytes.  So, BYTES can't exceed 32767.

The SRAM module is mapped into the processor memory starting at 0x00f80000 (16252928 decimal), and ends at 0x00ffffff (16777215 decimal).  That's 524288 bytes.

If you wanted to try dumping all of SRAM, you would need to set up a loop and submit GPIB commands like this:

  mbrd 16252928,16384
  mbrd 16269312,16384
  mbrd 16285696,16384
  ...
  mbrd 16760832,16384

It would be interesting to know if this roughly matches whatever you extract from the original module.  Of course it won't be exact because it's a running system.  And you could also try writing the mbrd output into the new module with the programmer and see if everything is there, like your cal constants and EMC personality.

Obviously none of this is needed for your approach.  I disassembled my SRAM module reader long ago and I'm mostly curious if this works, having discovered the hidden mbrd command sometime later.

So, if you're in the mood in the future...

Miti:

--- Quote from: MarkL on January 17, 2025, 08:24:47 pm ---Interesting idea on using the MSB to control the upper/lower byte selection.  But when connecting the memory module, how does the upper byte get multiplexed onto the DS1250 [D7..D0] pins on the programmer?

--- End quote ---

Two 4451 to multiplex 16 bit to 8 bit. The selection line is A18 ( DS1250 has A18 to A0 address lines).


--- Quote from: MarkL on January 17, 2025, 08:24:47 pm ---I thought of another thing wrt the memory module: LUSERRAM0 and LUSERRAM1 are mutually exclusive, so they can't be wired to address lines.  More properly, those are really select inputs so they should be handled by connecting them to the pin assigned to /CE pin on the programmer.

--- End quote ---

Yes they can. LUSERRAM0 is connected directly to A17 and LUSERRAM1 through an inverter to the same A17.
/CE cannot be used in this case.


--- Quote from: MarkL on January 17, 2025, 08:24:47 pm ---For the read operations on the original module, I would probably tie LLW and LUW high through a resistor to whatever is supplying power to the module, independent of what the programmer is doing, just to make sure no writes are triggered by accident.

--- End quote ---

Yes, for reading the source, LLW and LUW are connected through pull-ups to Vcc and disconnected from /WE for write protection For writing I have to create the logic between /WE and A18 that holds LLW or LUW low as needed. Something similar to what’s in my FRAM schematic.

Edit: I’ll put it in a schematic, I may be missing something, it’s all in my head for now.

MarkL:
Certainly with the addition of various logic it's possible to make any scenario work.

Since moving the SRAM contents only needed to be done once, I was trying to keep it simple and make the programmer do all the work without building any additional circuitry.  My 8 step proposal uses jumpers and a resistor or two.

Navigation

[0] Message Index

[#] Next page

[*] Previous page

There was an error while thanking
Thanking...
Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod