This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

T89C51CC01 not run on external code memory

I had successfuly use FM0 - Flash memory user spaces to start an application that can read the external ROM, read/write external RAM and control and T6963 based LCD display. But I can not make the same program run inside the external ROM - even the program is just few instructions to toggle an LED.
Even an P87C591 with internal flash, it is just simply tie EA to 0V and program must fetch from external memory.
The external flash is AT29C010A-90, crystal is 20MHz.

I checked:
- PSEN and ALE signal correct. AT29C010A OE is connected to PSEN and RD through HC08.
- Same problems when X2 set or clear by FLIP2.4.
- HC139 and HC573 are used as address decoding and chip selection (Program running in internal flash FM0 do not have problems, is there any chance hardware incorrect?)
- Remove the RAM and LCD display, simply blinking and LED connected to P3.4. Program work inside internal flash FM0 but not for external ROM.
- Because AT29C010A is 256k, two address line A16 & A17 are connected to two port line P3.2 and P3.3. I know this so I copy the program bin file to address 0x00000, 0x10000, 0x20000 and 0x30000. P3.2 and P3.3 are both high after reset and program must be start at "0x30000".

Anyone know this and fixed?

  • For execution in external code memory, EA tie to 0V before and after power on (reset) with voltage monitor MAX810.
    According to ATMEL data sheet, even HSB (Hardware security byte) shows security level is 4, it is still not reasonably because it write "external execution is disabled if code roll over beyond 7FFFh".

    CSEG AT 0 LJMP PowerON

    CSEG AT 0100h
    PowerON:

    Loop_0: MOV R6,#0
    Loop_1: MOV R7,#0
    Loop_2: DJNZ R7,Loop_2 DJNZ R6,Loop_1

    CPL SIG_LED

    JMP Loop_0

    Above code size large enough to roll over? It work in FM0 but not in external ROM.