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

External memory on a XC16x Board

Hi Everybody,

I'm still experimenting with Infineon's XC161 Starter Kit using the Keil C166 compiler, v4.27 (linker version 4.28). Almost everything I need works OK now, except the external bus controller. Below I'll describe my situation:

Hardware
========

I've connected the RAM to the processor by setting switch S101.8. This is the configuration for the multiplexed mode, so I also switched S103.1 and S103.2 off for 16 bits multiplexed mode.

The CS-lines are enabled by off-switching S102.6 and S102.7. I use 4-bit address lines by setting S102.4 and S102.5.

S102.8 is switched on to use /WR and /BHE as /WRL and /WRH.


Software
========

In the startup file (START_V2.A66) I configured the EBC as follows:


$SET (CONFIG_EBC = 1)
_SAPEN      EQU    4
_CSPEN      EQU    5
_ARBEN      EQU    0
_SLAVE      EQU    0
_EBCDIS     EQU    0
_WRCFG      EQU    1
_BYTDIS     EQU    0
_ALEDIS     EQU    0
_RDYDIS     EQU    0
_RDYPOL     EQU    0
_APDIS      EQU    0
_DHPDIS     EQU    0


CS1 as follows:


$SET (CONFIG_CS1 = 1)
_ADDR1      EQU    0x400000
_SIZE1      EQU    256*KB
_ENCS1      EQU    1
_RDYEN1     EQU    0
_RDYMOD1    EQU    0
_BTYP1      EQU    3
_PHA1       EQU    3
_PHB1       EQU    1
_PHC1       EQU    3
_PHD1       EQU    1
_PHE1       EQU    25
_RDPHF1     EQU    3
_WRPHF1     EQU    3


Maximum bus times to control the RAM, so it isn't a timing problem. In the target options (under 'External Memory") I set the following values for #1:

Start: 0x400000
Size : 0x40000

In my C-code I also set the P6 pins to output.

I've looked over my problem several times but couldn't trace the things going wrong. I also tried other memory configurations (8 bit mux, 8 bit demux and 16 bit demux) but all of them with no success.

Final thing to tell about are the contents of my .M66-file. All data is located in valid areas (I can see vars in the 0x400000 area), but one line is very strange:


  VALUE       PUBLIC SYMBOL NAME               REP   TGR  CLASS   SECTION
=======================================================================
-- cut --
  3F8000H     ?C_NDATABASE                     CONST ---  ---     ---
-- cut --


I don't know if 0x3F8000 should be an address, that is used somewhere else, but IF so, then it's not valid. I didn't configure this value anywhere; it's generated by Keil's Linker.

Well, phiew, that was a lot of writing, so I hope somebody can help me? :)

Kind Regards,
Dennis Ebben

Parents
  • Hi Stefan,

    I never really understood the DPP's. I think that it's really clear now (also to other readers of this thread). Thanks again. :)

    What version of the datasheets do you use?? You mentioned chapter 4.5 (which is correct in version v1.1, feb 2002). Since the release of that manual there have been released 2 new versions:

    * v2.0, 3-2003
    * v2.1, 6-2003

    The last one is the one I use now. In this version it's chapter 4.7 that handles about data addressing.

    There are still some things that cannot be found in the new manuals, like the ADC-bug that's also known from the XC164 (ADBSY is set after x clock cycles, not immediately after starting an ADC-conversion).

    Kind Regards,
    Dennis

Reply
  • Hi Stefan,

    I never really understood the DPP's. I think that it's really clear now (also to other readers of this thread). Thanks again. :)

    What version of the datasheets do you use?? You mentioned chapter 4.5 (which is correct in version v1.1, feb 2002). Since the release of that manual there have been released 2 new versions:

    * v2.0, 3-2003
    * v2.1, 6-2003

    The last one is the one I use now. In this version it's chapter 4.7 that handles about data addressing.

    There are still some things that cannot be found in the new manuals, like the ADC-bug that's also known from the XC164 (ADBSY is set after x clock cycles, not immediately after starting an ADC-conversion).

    Kind Regards,
    Dennis

Children
  • Hi Dennis,

    cool that you understand now the DPP's.
    It is really not complicated.
    I need at my start two times and than I calculated three examples and now I have it.
    ( If questions concerning to this, do not hesitate to ask me )

    I used the XC167 manual for this, since the register mappings are similar.
    So if you write a program for a module, which is available on the other XC16x too,
    you can be sure in 98% of cases it will run there.
    So at XC161 the CAPCOM6 will not work and at
    XC164 the I2C module.

    Bugs, problems and workaround (if any) you can find in the errata sheets.
    Please have additional a look of the step code of your device.

    But you are right with the manuals specially for XC161.
    There in the new version is the complete description of SCU missing.
    I reported to Infineon and it will be updated with next release.

    Stefan

  • Hi Stefan,

    I know that the other XC16x devices are almost the same, but it's weird that there isn't any link on the site on the XC161 page to errata sheets of the other (similar) devices.

    Also the starter kit isn't described on the Infineon site. The info about this controller and applications are really poor. But perhaps this will change in the future, for it's a new controller.

    Does Infineon also have a forum, like Keil? If so, maybe we can discuss this there. :)

    Kind Regards,
    Dennis

  • Hi Dennis,

    Infineon unfortunately has no discussion forum, so we have to discuss here, or we can do it by mail.
    The kit indeed is only described at the
    CD-ROM you find at the kit.

    But I wonder, that the eratas are not on the web, since I got them from there.

    I can mail you the last I have, if you are interested.

    Stefan

  • Hi Stefan,

    I've only found XC164 and XC167 errata sheets. No XC161. Searched for them again a few minutes ago, but still couldn't find them. :S

    Kind Regards,
    Dennis

  • Hi Dennis,

    I send you my Erratas concerning Xc161CJ
    step AA,AB and AC.

    Please check your account.

    Stefan

  • Hi Stefan,

    I received your mail with errata sheets. I really can NOT find them on Infineon's site. Even when I log in to My Infineon I still can't find them.

    Seems like you have more permissions to view/download files than I have. :)

    Thanks a lot for de documents. I'll read them tomorrow morning.

    Kind Regards,
    Dennis

  • Hi Dennis,

    it is not your mistake. At the moment there are really no erratas available for XC161CJ.
    I got them some time before and save them all for such times. ;-}

    Stefan

  • Hi Dennis,

    I did a mistake.
    The board works with 16-bit muxed bus.
    Not demuxed.

    Sorry for this,
    Stefan

  • Hello Stefan,
    I've red the thread very carefully, but at the moment I'm a little bit confused about the right configurations for accessing the external RAM.
    I've an XC164 Starterkit, Rev. 200 without FLASH and I got the RAM not working yet. Do you have an working configuration and because everything depends from everything, I need the DIP Switch configuration, the right settings in Start_A2.a66, the Target configuration and if I have something to code in main(),like special PORT configuration, it was also interesting, to get it.
    Thank you very much in advance
    Steffen

  • Hi Steffen,

    Board Settings
    ------------------------
    | JUMPERSETTINGS |
    ------------------------
    Jumper 401 ( 1-2 ) ON
    Jumper 402 ( 1-2 ) ON
    Jumper 501 ( 1-2 ) ON

    ------------------------
    | DIPSWITCH - SETTING's |
    ------------------------
    DIP102:
    =======
    1-3
    Clock-Configuration: ON OFF ON Fin = 8 - 12 MHz
    4-5
    SALSEL: OFF OFF
    2 Bit Segmentadresslines A17 ... A16
    6-7
    CSEL: ON OFF 2 CS - Lines
    8
    WRC: OFF /WR and /BHE work as /WR and /BHE
    =============================================
    SUM: ON OFF ON OFF OFF ON OFF OFF 10100100
    =============================================

    DIP103:
    =======
    1-2
    Bus-Konfiguration: OFF OFF 16 Bit databus - multiplexed
    3-6
    Startup Mode: OFF OFF OFF OFF Standart Start
    7
    Adaptermode: OFF Standartoperation
    8
    ROC: OFF /RSTOUT remains LOW until
    deactivation by USER-software
    =============================================
    SUM: OFF OFF OFF OFF OFF OFF OFF OFF 00000000
    =============================================

    DIP101:
    =======
    1-8
    external memory configuration
    OFF OFF OFF OFF OFF ON ON OFF
    /CS0 = ext. RAM
    /CS1 = ext. FLASH (not usefull)=============================================
    SUM: OFF OFF OFF OFF OFF ON ON OFF 00000110
    =============================================

    DIP104/105:
    ===========
    These settings depend from the selected segment address lines. For two bit lines
    SALSEL = OFF OFF ( 2 Bit A17 ... A16 )
    set DIP-switches as follows:
    =============================================
    DIP104: ON ON OFF OFF OFF OFF OFF OFF 11000000
    DIP105: OFF OFF ON ON ON ON ON ON 00111111
    ( allways mirrored )
    =============================================

    DIP106:
    =======
    1-4
    OFF OFF OFF OFF 0000 Normal program execution
    ON OFF OFF OFF 1000 bootstraploader mode for programming
    the micro e.g. with memtool


    DIP104:
    =======
    1 2 3 4
    Enable/Disable Peripherie
    | | | |
    nc nc CAN1 CAN2
    for XC164
    enable = ON disable = OFF
    J1850
    for XC161

    Set as you need

    Startup file I generated with DAvE.
    You should enable the EBC and
    set the phases for CS0 (RAM)timing to:
    phase a: 0
    phase b: 1
    phase c: 1
    phase d: 0
    phase e: 1
    phase f: 1 read
    phase f: 0 write

    Than no special port settings are required.
    ( I setup the data/ address port with DAvE too, so it stands in startup file)

    Hope this helps, otherwise leave a message here and I will answer asap.
    (But tomorrow ;-} )

    Stefan

  • Hi Stefan,
    thank you for all the information, it works fine.
    Based on this, I'll try to get the board working with demultiplexed memory access.
    Do you think, there are some speed differences between multiplexed and demultiplexed memory access?
    Best regards
    Steffen

  • Hi Steffen,

    no matter about this. I do not know, whether the layout gives the possibility to work in demultiplexed mode.
    But if you got it, it would be nice to have a short info about it.

    Speed differences:

    Yes there are some, since you have not to need latching the addresses.
    But since the memory need some cycles per phase, it may be possible that you have to delay the phases in demuxed access mode.
    So I can not exactly determine, if this would be a really improvement of the time.

    Stefan

  • Hi Stefan,

    I haven't been here for 2 weeks, because of my holidays. That's the reason I haven't replied since [7/24/03 8:07:42]. Now I'm back, so here is my reply: :)

    I'm using the board in 16-bit demux. This works fine (didn't try 16-bit mux). I just switched the dip switches to the right configuration and changed the CS0-settings in the startup file.

    Kind Regards,
    Dennis Ebben

  • Hi Dennis,

    thanks for feedback, that will be interested to Steffen too.
    I never tried the demuxed mode.
    So I do a test !

    I am really thought, that only mux-mode was possible. :-{

    If both modes works, this would be great.

    Stefan.

    Hi Steffen do you have any results with this ?

  • Hi Stefan,

    My board has been shipped with 2 external RAM's. One is routed in mux-mode and one in demux-mode. Depending on the dip-switches one of the two is selected.

    Works fine here. :)

    Kind regards,
    Dennis