Post Reply 
FRAM71 Initialization
10-31-2015, 11:44 PM (This post was last modified: 01-25-2017 01:43 AM by Sylvain Cote.)
Post: #1
FRAM71 Initialization
Warning
With the release of the FRAM71B this article is out-of-date and need to be revisited.
I am currently doing a 41CL project and will update this article when the other project is completed.
I strongly suggest to read the FRAM71B thread to get the latest information.

Goal
The goal of this procedure is to reset the FRAM71 to its initial configuration.

Background
The usage of Ferroelectric Random Access Memory by the FRAM71 module is a blessing and a curse.
The blessing of the module, is that you can remove the module without loosing its content and configurations.
The curse of the module, is that you can remove the module without loosing its content and configurations.
While learning the huge possibilities of the module, I got lost many times and I had a lot of frustrations.
It took me quite some time to figure how to put back the FRAM71 to its initial state, so here it is ...

Revisions
2015-11-08 Added "Disclaimer" & minor formatting adjustments.
2015-11-07 Added "Revisions" & "Additional Informations" sections & minor adjustments.
2015-11-01 Add acknowledgments
2015-10-31 Initial release, corrected typo
2017-01-24 Out of date warning

Acknowledgments
I would like to thank ...
Hans Brüggemann for making this fantastic module.
Dave Frederickson and Robert Prosperi for their invaluable help and their infinite patience.

Disclaimer
This procedure was done in good faith.
I do not offer any warranty of any kind.
If you follow this procedure as written, it should work.
If not, send me a PM, or better, post a message in the forum and I will help you, within the limit of my knowledge of course.

Hardware & Software
HP-71B HandHeld Computer (Tested on firmware 1BBBB and 2CDCC)
FRAM71 Module (Hardware: v104 / Firmware: all versions)
The following procedure assume the FRAM71 module is plugged into the the card reader port.
The following procedure also assume that no front port modules are present.
The presence of the HP-IL interface is not affecting.

Procedure
Finally, the initialisation procedure.

Assumed jumpers configuration
Code:
Description            -> Jumper settings
Disable SysRAM         -> [J1: Open] & [J2: Close]
Disable E0000  Mapping -> [CN2-5: Open]
Disable SysRAM Writing -> [CN2-4: Open]
Enable  HPBus  Writing -> [CN2-3: Open]
Enable  IRAM   Mapping -> [CN2-2: Open]
Select  FRAM   Chip    -> [CN2-1: Open=Bottom_512KB / Close=Top_512KB]

Disable IRAM Mapping
Code:
[OFF]                 -> Power off the computer
Add jumper to [CN2-2] -> [CN2-2: Close]
[ON]                  -> Activate the configuration

Map the second half of the FRAM memory
Code:
POKE "2C000","98999A9B9C9D9E9F00" [ENTER] -> Map memory 8 * 32KB = 256KB
[OFF] [ON]                                -> Activate the configuration

Erase FRAM contents
Code:
[ON]+[/] [3] [ENTER] -> "Memory Lost" - erase mapped FRAM71 memory
[ON]                 -> Remove message
MEM [ENTER]          -> Should display a little than more than 270000 bytes (256KB+17.5KB)

Map the first half of the FRAM memory
Code:
POKE "2C000","909192939495969700" [ENTER] -> Map memory 8 * 32KB = 256KB
[OFF] [ON]                                -> Activate the configuration

Erase FRAM contents
Code:
[ON]+[/] [3] [ENTER] -> "Memory Lost" - erase mapped FRAM71 memory
[ON]                 -> Remove the message
MEM [ENTER]          -> Should display a little than more than 270000 bytes (256KB+17.5KB)

Enable IRAM Mapping
Code:
[OFF]                      -> Power off the computer
Remove jumper from [CN2-2] -> [CN2-2: Open]
[ON]                       -> Activate the configuration
MEM [ENTER]                -> Should display a little than more than 16500 bytes (17.5KB)

Validate FRAM71 first erasure
Code:
POKE "2C000","98999A9B9C9D9E9F00" [ENTER] -> Map the second half of the FRAM memory
[OFF] [ON]                                -> Activate the configuration
MEM [ENTER]                               -> Should display a little than more than 270000 bytes (256KB+17.5KB)
SHOW PORT [ENTER]                         -> 1BBBB: should show no ports in the 5.XX range
                                          -> 2CDCC: all ports with the 5.XX range should have the type 0 (RAM)

Validate FRAM71 second erasure
Code:
POKE "2C000","909192939495969700" [ENTER] -> Map the first half of the FRAM memory
[OFF] [ON]                                -> Activate the configuration
MEM [ENTER]                               -> Should display a little than more than 270000 bytes (256KB+17.5KB)
SHOW PORT [ENTER]                         -> 1BBBB: should show no ports in the 5.XX range
                                          -> 2CDCC: all ports with the 5.XX range should have the type 0 (RAM)

Unmap FRAM71 memory
Code:
POKE "2C000","00000000000000000000000000000000" [ENTER] -> remove FRAM71 memory from the memory map
[OFF] [ON]                                              -> Activate the configuration
MEM [ENTER]                                             -> Should display a little than more than 16500 bytes (17.5KB)

The FRAM71 is now back to its initial configuration! Smile

Additional Informations
Two tricks I have used to simplify this procedure.

Trick #1
When the 71B goes through its initialization procedure, all memory modules are mapped according to their types, sizes, etc.
RAM modules starting with “B3DDDDDE” are considered as IRAM and as you known all IRAM modules are protected against INIT 3 (Memory Lost).
Fortunately, the FRAM71 module has a jumper (CN2-2) that has been created to go around this protection.
By closing the jumper, the FRAM71 make the 71B ignore the IRAM identifier, and the 71B add these IRAMs to the main RAM, thus make them erasable by INIT 3.

Trick #2
One of the FRAM71 rules is that: You shall never map the "F-Block #2" to a "Chip #"
The main reason is that portion of F-Block #2 (2C000 to 2C01F) is used to configure the FRAM71 module itself and mapping this section to the main memory will make the 71B and the FRAM71 to misbehave.
If you look carefully, in the second erasure, I have broken that rule by mapping it ["9091(92)939495969700"] to main memory.
The mapping duration is very small because we map it, then we power cycle, then we reinitialize the memory (INIT 3) effectively clearing the configuration space (2C000 to 2C01F) of the FRAM71 at the same time.
That is why after we remove the CN2-2 jumper, instead of having 273.5KB of RAM we only have 17.5KB RAM.

Sylvain
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 1 Guest(s)