Strictly necessary cookies are on by default and cannot be turned off. Functional, Performance and Tracking/targeting/sharing cookies can be turned on below based on your preferences (this banner will remain available for you to accept cookies). You may change your cookie settings by deleting cookies from your browser. Then this banner will appear again. You can learn more details about cookies HERE.
Strictly necessary (always on)
Functional, Performance and Tracking/targeting/sharing (default off)
I've just finished testing my firmware as desired. I have been working with the FX2 dev board. It runs fine, I even managed to load the firmware from the large eeprom with a 24LC64.
Now, I tried running the same firmware without the externa ram. The dev board has to jumpers that control access to external ram, MM0 and MM1. So, if you place jumpers in those headers it is soposed to work without external ram. Well it doesn't work! Not from eeprom nor loades with the cypress control panel.
My .hex file is 10k (9679 bytes). My .iic file is 4k (3159 bytes). In the uvision2 the compiles tells me this: Program size: data=43.6 xdata=4635 code=3130. So one thing I don't get is the dada=43.6! What is it in? 43.6 what? I've never seen a .6 byte! So, I presume that my code is 3130bytes and xdata space is 4635bytes, this gives me 7765 bytes, that could fit in the 8k FX2. But I' not very familiar with the memory in this chip so I guess there are some blocks not usable or something.
Well I decided to use the FX2LP chip instead, so my code could easily fit in 16K. I made a board with the FX2LP chip and the eprom only just to see if it enumerates properly, but no!
I write the eeprom with the same firmware in the FX2 Dev Board and then put the eeprom to my little test board with the FX2LP chip. And I get device not recognized. If I run the little FX2LP board with no eeprom I get the default Cypress No-EEPROM device.
Now I went back to uVision2 and chaged the BL51 settings in the target options. It was set to code at 0x4000 and xdata to 0x5000 as default, so I guessed that was the thing, so I changed it to code at 0x0000 and xdata to 0x0400 which is above 0x03CA (3130 bytes of code). This didn't work either yet it compiled with no errors and It works in the FX2 Dev Board but only with external ram settings in MM0 and MM1 jumpers off. So this means it is still using external ram.
I need help either to set options un uVision2 of to understand how to run my firmware without external ram.
46.3 means that you've 46 bytes and 3 bits of the 256 bytes of memory on the 8051 built into the FX2. From the 8051's point of view, this is "internal RAM". The 16K for code/data RAM inside the FX2LP appears external to the 8051.
Some of the 256 bytes of internal memory is bit-addressable (by using the BOOL type in C, if you're using the Keil compiler).
The xdata value being shown in the compilation statement is external memory being used. The 16k is internal memory and the register memory is internal to FX2LP but is addressed like external memory. If only this is used you won't need external RAM but if you declare variable and other code which resides in external memory you'll need a external RAM. We'll have to look at the code to understand the modifications required to make it run fully in internal memory.