This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

OMAP-L138, Error during emulation related with Virtual Memory

Other Parts Discussed in Thread: OMAP-L138, OMAPL138

Hi there,

When I have changed the OMAP-L138 Experimenter Kit onto our own development board with LogicPD SOM with OMAP-L138 (the same as on Experimenter Kit) and use XDS100v2 from Spectrum Digital I have following problem with emulating the same project as before:

ARM9_0: Output: Target Connected.
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: Memory Map Cleared.
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: Memory Map Setup Complete.
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: KICK Unlocked.
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: PSC Enable Complete.
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: PLL0 init done for Core:300MHz, EMIFA:25MHz
ARM9_0: Output: mDDR initialization is in progress....
ARM9_0: Output: PLL1 init done for DDR:150MHz
ARM9_0: GEL: Error while executing OnTargetConnect(): Attempted to write unmapped virtual memory at 0xB00000E4.
ARM9_0: Trouble Writing Memory Block at 0xc392373c on Page 0 of Length 0x7ff0: (Error -2030 @ 0x72637365) Internal error: Access to unknown or invalid register was requested. Restart the application. If error persists, please report the error. (Emulation package 5.0.520.0)
ARM9_0: GEL: File: C:\U...\build\Debug\UPPDriver.out: Load failed.
ARM9_0: Unable to terminate memory download: NULL buffer pointer at 0x320

I need to turn off and on the board to make it run and it runs only once. Each time I want to emulate second time after powering it up it show me this message. Any idea where to look for solution?

  • Hi,

    The information you sent indicates two errors:

    - The first error seems to happen when you are connecting to the ARM9 core. The GEL script that initializes the device is trying to initialize the DDR2 controller (0xB00000E4 is in the DDR2 Control Regs area) but is failing to write as it can't find valid memory at the address. Since the error mentions an "unmapped virtual memory", this suggests the MMU is enabled at the moment the GEL script is trying to execute. One important detail is that the MMU remaps the entire memory, but the GEL is not aware of that - therefore it fails when it tries to write to the physical address to configure the DDR controller.

    - The second error happens when loading the code to the DDR address at 0xC392373C (or simply attempting to write to it). This is probably caused by the fact the GEL attempt to configure the DDR controller clashed with the existing running application.

    In general terms, if there is code running on the device that already performed device initialization and enabled the MMU, the act of connecting to the core (which runs the GEL script again) will cause disruption in its running status. To prevent that, you can simply remove the GEL file from your target configuration file or create a new target configuration that uses the plain device configuration (OMAPL138 instead of EVMOMAPL138, for example)

    In your particular case, you can either disable MMU before loading code to the target a second time (menu Tools  --> ARM Advanced Features) or use the configuration with the plain device.

    I think this is what is happening in your development environment.

    Hope this helps,

    Rafael

  • Thanks for your answer. Do you have an idea why this is happening when I have changed the OMAP-L138 experimenter kit onto our own motherboard which is basically using the same OMAP module from LogicPD as experimenter kit? The difference in the motherboard are that our is providing JTAG connection to which we have connected Spectrum Digital XDS100v2 instead of using this version on the experimenter kit. I noticed that there is a difference in the design between those two XDS'es but when I asked about the difference nobody answered why one of it doesn't have the CPLD chip. Does this behaviour is coming up from this difference in the design? Or maybe there is some catch 22 in CCS settings?

    Please note that both platforms were tested using the same project with the same settings and the same code.

  • Damian,

    Damian Gowor said:

    Do you have an idea why this is happening when I have changed the OMAP-L138 experimenter kit onto our own motherboard which is basically using the same OMAP module from LogicPD as experimenter kit?

    I am not 100% sure what hardware changes would influence the GEL operation, but given the emulators you are using are very similar, I wonder if CCS is misconfigured. Read on for details.

    The embedded emulator in the development board is an XDS100v1 and its design does not use a CPLD.

    The standalone SD XDS100v2 is a revised version and it does have the CPLD.

    They would need different configurations in CCS.

    For additional details, check:

    http://processors.wiki.ti.com/index.php/How_to_connect_to_the_OMAP-L138/C6748/AM1808_EVM_board_using_CCS%3F#Connecting_using_CCS4

    https://processors.wiki.ti.com/index.php/XDS100

    Hope this helps,

    Rafael

  • Hi Rafael,

    Thanks for the answer. I need to clarify some things here. 

    You are right that on Experimenter Kit there is XDS100v1 and I am using now XDS100v2 from Spectrum Digital. You can notice that XDS100v1 doesn't have option for emulating ARM9 core but XDS100v2 has that possibility. I have been emulating ARM core on Experimenter Kit. How I did that? I just set up the Emulator.ccxml file for XDS100v2 and it worked. So summarizing XDS100v1 emulator that is placed on Experimenter Kit works perfectly fine with ARM9 configured as XDS100v2 and the XDS100v2 from Spectrum Digital is not working properly configured in the same way. As I mentioned before I am using the same project and the same settings for both boards. So should this be in the second way? Where is the logic here?