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 |
|
SDRAM DMA
Started by ●April 20, 2004
Reply by ●April 20, 20042004-04-20
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
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 <* | |||
|
Reply by ●April 20, 20042004-04-20
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 |
Reply by ●April 20, 20042004-04-20
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 |
Reply by ●April 20, 20042004-04-20
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, 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 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-------------------------- Steve Holle Link Communications, Inc. 1035 Cerise Road Billings, Montana 59101-7378 406.245.5002 s...@link-comm.com -------------------------- |
Reply by ●April 20, 20042004-04-20
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
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 <* | |||
|
Reply by ●April 20, 20042004-04-20
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 |