DSPRelated.com
Forums

SDRAM DMA

Started by andor_bariska April 20, 2004
Friends,

I have to initialize a section in SDRAM connected to a 65L from a
host processor.

It is not possible to do so directly. One first has to download a
block of data into 65L internal memory (also via DMA), and afterwards
setup an external port DMA which copies from 65L internal to external
(SDRAM) memory.

This works in theory (one can use the simulator to simulate external
port DMA into SDRAM). Since the segment in SDRAM is fairly large and
does not fit into the 65L internal memory, I have to do piecewise
transfers in smaller blocks.

After I have downloaded the first block of data into internal memory,
I setup an external port DMA into SDRAM, and the block seems to get
copied into the external memory. I then download a second block of
data into internal memory, which works as well. However, when I setup
and enable the external port DMA, the DMA hangs. The external port
counter register remains constant, and the DMASTAT shows busy for the
external port.

Has anybody done successful DMA transfers from a host processor to
SDRAM? Any gotchas?

Regards,
Andor

WEISS ENGINEERING LTD. - Professional Digital Audio Products
Florastrasse 42 8610 Uster Switzerland
phone: +41 1 940 20 06, fax: +41 1 940 22 14
mailto: web: <http://www.weiss.ch/>
Maillist: http:/groups.yahoo.com/group/weiss-audio





Hi Andor,

if you are booting from the host then the SDRAM could be initialised as part of the boot process (just define your data structure(s) in SDRAM space).

Either way you must make sure that the SDRAM is configured correctly (in the boot kernel).

Regards,

Alex Young
DSP software Engineer
Consultant for Philips Digital Systems Laboratories


"andor_bariska" <a...@weiss.ch>

20/04/04 12:47

       
        To:        a...@yahoogroups.com
        cc:        (bcc: Alex Young/LEU/PDSL/PHILIPS)
        Subject:        [adsp] SDRAM DMA

        Classification:        

Friends,

I have to initialize a section in SDRAM connected to a 65L from a
host processor.

It is not possible to do so directly. One first has to download a
block of data into 65L internal memory (also via DMA), and afterwards
setup an external port DMA which copies from 65L internal to external
(SDRAM) memory.

This works in theory (one can use the simulator to simulate external
port DMA into SDRAM). Since the segment in SDRAM is fairly large and
does not fit into the 65L internal memory, I have to do piecewise
transfers in smaller blocks.

After I have downloaded the first block of data into internal memory,
I setup an external port DMA into SDRAM, and the block seems to get
copied into the external memory. I then download a second block of
data into internal memory, which works as well. However, when I setup
and enable the external port DMA, the DMA hangs. The external port
counter register remains constant, and the DMASTAT shows busy for the
external port.

Has anybody done successful DMA transfers from a host processor to
SDRAM? Any gotchas?

Regards,
Andor

WEISS ENGINEERING LTD. - Professional Digital Audio Products
Florastrasse 42 8610 Uster Switzerland
phone: +41 1 940 20 06, fax: +41 1 940 22 14
mailto:a...@weiss.ch web: <http://www.weiss.ch/>
Maillist: http:/groups.yahoo.com/group/weiss-audio _____________________________________
Note: If you do a simple "reply" with your email client, only the author of this message will receive your answer.  You need to do a "reply all" if you want your answer to be distributed to the entire group.

_____________________________________
About this discussion group:

To Join:  Send an email to a...@yahoogroups.com

To Post:  Send an email to a...@yahoogroups.com

To Leave: Send an email to a...@yahoogroups.com

Archives: http://groups.yahoo.com/group/adsp

Other Groups: http://www.dsprelated.com/groups.php3

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/adsp/

<*> To unsubscribe from this group, send an email to:
    a...@yahoogroups.com

<*


On Tue, 20 Apr 2004, andor_bariska wrote:

> I have to initialize a section in SDRAM connected to a 65L from a
> host processor.
>
> It is not possible to do so directly. One first has to download a
> block of data into 65L internal memory (also via DMA), and afterwards
> setup an external port DMA which copies from 65L internal to external
> (SDRAM) memory.
>
> This works in theory (one can use the simulator to simulate external
> port DMA into SDRAM). Since the segment in SDRAM is fairly large and
> does not fit into the 65L internal memory, I have to do piecewise
> transfers in smaller blocks.
>
> After I have downloaded the first block of data into internal memory,
> I setup an external port DMA into SDRAM, and the block seems to get
> copied into the external memory. I then download a second block of
> data into internal memory, which works as well. However, when I setup
> and enable the external port DMA, the DMA hangs. The external port
> counter register remains constant, and the DMASTAT shows busy for the
> external port.

I've not done it, so I don't know. But I'd check the last couple of
words and see if they fully finished. I have seen problems with the
DMA control lines with large blocks of data. They need to be really
clean signals. Scope your DMA control lines and see if there's
a lot of noise or bouncing (reflections). Most likely the previous
DMA didn't really finish, so the new commands aren't being accepted.

Patience, persistence, truth,
Dr. mike


Hi Alex!

Thanks for your reply. Comments below.

> Hi Andor,
>
> if you are booting from the host then the SDRAM could be
> initialised as part of the boot process (just define your data
> structure(s) in SDRAM space).

Well, that's basically what I'm trying to do. The host boots the DSP
by downloading code from an external flash via external port DMA into
the DSP. The problem is that writing to SDRAM cannot be achieved with
a direct DMA into SDRAM, you first have to DMA the data into internal
memory, and then setup an external port DMA which moves the data from
the internal memory into the external memory (SDRAM).

Or am I missing something?

>
> Either way you must make sure that the SDRAM is configured
> correctly (in the boot kernel).

I'm not using a boot kernel. The host loads the code via DMA into the
DSP. Once the DSP is running (and has initialized its SDRAM
correctly) it sets a flag for the host indicating that it is ready
for the external port DMAs to write to SDRAM.

Regards,
Andor


We ard successfully using the Host Port Boot method which sounds very similar to what you are doing.  You might want to take a look at how the bootloader source for the 65L as an example of how to DMA from the host port.
 
At 04:47 AM 4/20/2004, andor_bariska wrote:
Friends,

I have to initialize a section in SDRAM connected to a 65L from a
host processor.

What language are you using.  If C or C++ could this just be initialized data placed in external memory?  The compiler would take care of the initialization then.
It is not possible to do so directly. One first has to download a
block of data into 65L internal memory (also via DMA), and afterwards
setup an external port DMA which copies from 65L internal to external
(SDRAM) memory.

This works in theory (one can use the simulator to simulate external
port DMA into SDRAM). Since the segment in SDRAM is fairly large and
does not fit into the 65L internal memory, I have to do piecewise
transfers in smaller blocks.

After I have downloaded the first block of data into internal memory,
I setup an external port DMA into SDRAM, and the block seems to get
copied into the external memory. I then download a second block of
data into internal memory, which works as well. However, when I setup
and enable the external port DMA, the DMA hangs. The external port
counter register remains constant, and the DMASTAT shows busy for the
external port.

Are you sure the problem isn't on the host side?  I believe that host port DMA transfers are clocked by the host.
Has anybody done successful DMA transfers from a host processor to
SDRAM? Any gotchas?

Regards,
Andor

WEISS ENGINEERING LTD. - Professional Digital Audio Products
Florastrasse 42 8610 Uster Switzerland
phone: +41 1 940 20 06, fax: +41 1 940 22 14
mailto:a...@weiss.ch web: <http://www.weiss.ch/>
Maillist: http:/groups.yahoo.com/group/weiss-audio _____________________________________
Note: If you do a simple "reply" with your email client, only the author of this message will receive your answer.  You need to do a "reply all" if you want your answer to be distributed to the entire group.

_____________________________________
About this discussion group:

To Join:  Send an email to a...@yahoogroups.com

To Post:  Send an email to a...@yahoogroups.com

To Leave: Send an email to a...@yahoogroups.com

Archives: http://groups.yahoo.com/group/adsp

Other Groups: http://www.dsprelated.com/groups.php3
 
Yahoo! Groups Links  

--------------------------
Steve Holle
Link Communications, Inc.
1035 Cerise Road
Billings, Montana  59101-7378
406.245.5002
s...@link-comm.com
--------------------------



Hi Andor,

unless ADI have changed the way in which the kernel operates, the following happens:
1. The DSP autonomously loads (via DMA) 256 instruction words (the boot kernel) into memory from the boot device.
2. The kernel reads single 32-bit words from the boot device (via DMA) and copies most of these (using a data move instruction) to the destination (internal or external).
3. The boot kernel in over-written by a final DMA transfer of 256 instruction words.

The SDRAM can be written to in step 2 as the data from flash is DMA transferred word-by-word into a single scratch location in internal memory and then copied by a data move to external memory.

Regards,

Alex Young
DSP software Engineer
Consultant for Philips Digital Systems Laboratories


"andor_bariska" <a...@weiss.ch>

20/04/04 15:25

       
        To:        a...@yahoogroups.com
        cc:        (bcc: Alex Young/LEU/PDSL/PHILIPS)
        Subject:        [adsp] Re: SDRAM DMA

        Classification:        

Hi Alex!

Thanks for your reply. Comments below.

> Hi Andor,
>
> if you are booting from the host then the SDRAM could be
> initialised as part of the boot process (just define your data
> structure(s) in SDRAM space).

Well, that's basically what I'm trying to do. The host boots the DSP
by downloading code from an external flash via external port DMA into
the DSP. The problem is that writing to SDRAM cannot be achieved with
a direct DMA into SDRAM, you first have to DMA the data into internal
memory, and then setup an external port DMA which moves the data from
the internal memory into the external memory (SDRAM).

Or am I missing something?

>
> Either way you must make sure that the SDRAM is configured
> correctly (in the boot kernel).

I'm not using a boot kernel. The host loads the code via DMA into the
DSP. Once the DSP is running (and has initialized its SDRAM
correctly) it sets a flag for the host indicating that it is ready
for the external port DMAs to write to SDRAM.

Regards,
Andor

_____________________________________
Note: If you do a simple "reply" with your email client, only the author of this message will receive your answer.  You need to do a "reply all" if you want your answer to be distributed to the entire group.

_____________________________________
About this discussion group:

To Join:  Send an email to a...@yahoogroups.com

To Post:  Send an email to a...@yahoogroups.com

To Leave: Send an email to a...@yahoogroups.com

Archives: http://groups.yahoo.com/group/adsp

Other Groups: http://www.dsprelated.com/groups.php3

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/adsp/

<*> To unsubscribe from this group, send an email to:
    a...@yahoogroups.com

<*


alex.young wrote:
> Hi Andor,
>
> unless ADI have changed the way in which the kernel operates, the
> following happens:
> 1. The DSP autonomously loads (via DMA) 256 instruction words (the
> boot kernel) into memory from the boot device.
> 2. The kernel reads single 32-bit words from the boot device (via
> DMA) and copies most of these (using a data move instruction) to
> the destination (internal or external).
> 3. The boot kernel in over-written by a final DMA transfer of 256
> instruction words.

Ah ok, we are not talking about the same thing. You are describing
EPROM booting, while I'm using host booting. In host booting, a host
processor downloads code and data into the DSP via external port DMA
(in slave mode), in contrast to EPROM booting, where the DSP is
repsonsible for getting data and code from an EPROM via external port
DMA (in master mode).

I'm currently trying to find a work around to my problem by using
core SDRAM copy loops instead of DMA - this is ok for my application,
where SDRAM is initialized at boot time, and no further access from
the host to the SDRAM is necessary.

Regards,
Andor