Ich habe zwar noch nicht selber damit gearbeitet, aber ich habe hier ein Projekt von einem Kollegen, bei dem ein externes 64k RAM am AT90CAN128 läuft. Vergleichen wir doch einfach mal die Einstellungen.

Erst mal habe ich mit mfile einen etwas anderen Makefile-Eintrag für 32k bekommen:
EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x8090ff
Was auch logisch ist, denn 0x8090ff - 0x801100 = 0x7FFF = 32767

Mein Kollege hat sämtliche WaitStates ausgeschaltet. Wobei mir auffällt, dass Du WaitStates für den Lower Sector angegeben hast, obwohl gar kein Lower Sector aktiviert ist....

Ansonsten ist die einzige Abweichung, dass mein Kollege den BusKeeper eingeschaltet hat (XMBK in XMCRB).

Versuch mal Dein Glück mit diesen Einstellungen.
Wenn's nicht klappt, zeige mal bitte Deinen Schaltplan.

askazo