Continuing from this thread (
http://forums.rockbox.org/index.php?topic=25547.0) which has grown a bit old and neglected, I am seeking to finish it up but would like a little more advice.
With the original Fuze modded to 16MB, I ultimately succeeded, however the 32MB Fuzes are not there yet.
These Fuzes will boot fine and work (even with the original firmware), but as soon as the extra memory is needed, the player will crash with "undefined instruction", "data abort", and sometimes even "prefetch abort". This will happen 3-4 seconds into playback, presumably when the players are attempting to buffer the rest of the audio data into ram. Using a 16MB limit in the firmware's makefile (with or without a similarly-limited bootloader) results in longer playback time, but then they run into a crash sooner or later, especially when loading certain songs or when seeking. It is clear that the player is not able to use the 32MB of memory the way I have it set-up and although it will also work with the 16MB settings I've used with the first Fuze, it is still unstable even with those settings.
The 32MB modules I ended up using are MT48LC16M16A2 chips. I have them currently in two players and both are showing the same symptoms.
I've noticed that the 32MB chips, unlike the 16MB or 8MB versions, have address pin A12 on physical pin number 36. The lower capacity chips stop at A11 and pin 36 is not connected. It seems all of the 32MB and 64MB chips have this address pin (even the ESMT M12L2561616A, the big brother to the original M12L64164A chip that comes with the Fuze). If this pin is not connected to the CPU, I would assume there would be a hard limit of 16MB for this player (right?) Is there a way to be sure without a scope?
Could the problem be something else?
I got the 32MB players booted by changing this line in memory-init.S:
ldr r1, =DRAM_ORIG+(0x2300*MEM)
to
ldr r1, =DRAM_ORIG+(0x2300 << 4)
OR
ldr r1, =DRAM_ORIG+(0x2300*16)
(It should be set to a static number but this way it is easier to interpret)
NO OTHER SETTINGS THERE SEEM TO WORK. Theoretically the MEM variable would and should be 32 but a bootloader compiled that way will not boot a Fuze at all! You will get a dark black screen if you try it. Is this the reason why I can't get the 32MB Fuzes to be completely stable and usable or is this a symptom of a bigger problem?
_____
It appears after closely examining a fuze board, pin 36 may not be connected. This seems to be a common problem with memory upgrades as I've discovered many memory mods have been botched by manufacturer shortsightedness time and time again. I should have seen this problem coming as a friend of mine ran into it before with another mod, but I did not realize there was a hard limit of 16MB for devices without the extra pin connected. Damn BGA packaged CPU won't let me sneak another wire under there! That's why they make them isn't it
. Well, 16MB runs a lot more than 8MB and I have some spare 16s from another project. At least there was some progress.
____
I have confirmed for certain that the A12 pin is not connected to the ram, and in fact there are no locations or traces on the board that can be tapped to access it. The datasheet for the CPU can be found at
http://www.austriamicrosystems.com/eng/content/download/16763/295720/file/AS3525_Datasheet_v1_13.pdf , lookup the 15x15pin pinout on page 173. You are looking for the J-5 ball, labeled "mpmc_addr_12".
I think I know of a way to finish this mod up, but I might need to sneak a wire under the BGA. Stay tuned. Could take a little while though.