EmbDev.net

Forum: ARM programming with GCC/GNU tools ARM MP3 player


von Jeff M. (farmboy)


Rate this post
useful
not useful
Question about the ARM MP3 player project.


Why not add support for the SD nibble bus to improve performance?

How much headroom is left over on the platform?  I'd like to see an mp3
project that can playback several channels for live mixing.

Jeff

von Martin T. (mthomas) (Moderator)


Rate this post
useful
not useful
Jeff Aroonie wrote:
> Question about the ARM MP3 player project.
>
> Why not add support for the SD nibble bus to improve performance?
AFAIK the AT91SAM7S-serie does not have a MCI.

von Jeff M. (farmboy)


Attached files:

Rate this post
useful
not useful
Martin Thomas wrote:
> Jeff Aroonie wrote:
>> Question about the ARM MP3 player project.
>>
>> Why not add support for the SD nibble bus to improve performance?
> AFAIK the AT91SAM7S-serie does not have a MCI.

That just means it's a little more difficult to do.  Certainly not
impossible, I drive the nibble bus via software bitbang.


Any ideas on headroom during playback of mp3?  I've heard the ARM9E has
plenty.  Dunno about this AT91SAM7S.

von Martin T. (mthomas) (Moderator)


Rate this post
useful
not useful
Jeff Aroonie wrote:
> Martin Thomas wrote:
>> Jeff Aroonie wrote:
>>> Question about the ARM MP3 player project.
>>>
>>> Why not add support for the SD nibble bus to improve performance?
>> AFAIK the AT91SAM7S-serie does not have a MCI.
>
> That just means it's a little more difficult to do.  Certainly not
> impossible, I drive the nibble bus via software bitbang.
So you alread "drive via bitbang". Can you give some rough numbers for
the average transfer-rates achievable during a linear-read of an
unfragmented file from a FAT16 system in 512 byte blocks (=sector size)?
I'm just curious since I currently have an AT91SAM7SE512-board on my
desk where the controller is connected to a extremememory 1GB
"performance" SD-Card though SPI-Bus using very similar code as in the
MP3-player (latest Chan fat-module and block read/write with DMA/PDC).

> Any ideas on headroom during playback of mp3?  I've heard the ARM9E has
> plenty.  Dunno about this AT91SAM7S.
I do not have the hardware here and just now that Andreas had to move
some code to RAM since the flash-slowed down the decoding too much.
Andreas Schwarz created the MP3 player for AT91SAM7S so maybe you can
ask him by e-mail (see end of this page).

von Andreas S. (andreas) (Admin)


Rate this post
useful
not useful
Jeff Aroonie wrote:
> Question about the ARM MP3 player project.
>
>
> Why not add support for the SD nibble bus to improve performance?

The bottleneck is the CPU, not the SD card (4 bit SD card interface
isn't supported on the AT91SAM7 anyway, AFAIK).

> How much headroom is left over on the platform?

You can find some numbers for the read and decoding performance in my
article: http://www.mikrocontroller.net/articles/ARM_MP3/AAC_Player

> I'd like to see an mp3
> project that can playback several channels for live mixing.

You won't see this on an ARM7.

Andreas

von Jeff M. (farmboy)


Rate this post
useful
not useful
> You can find some numbers for the read and decoding performance in my
> article: http://www.mikrocontroller.net/articles/ARM_MP3/AAC_Player

I saw those numbers: 2 ms for about 1KB from the SD card (SPI mode) and
16 ms MP3 decode (low bitrate) per frame.  But without knowing the size
of the frame, or the frequency of all these operations, I can't find the
headroom.


>> I'd like to see an mp3
>> project that can playback several channels for live mixing.
>
> You won't see this on an ARM7.

You saw the graph I posted in the above message?  What exactly is ARM9E
doing which allows so much faster mp3 decoding -- under 10% utilization!
I can't imagine it's just cache related, perhaps they are using a very
optimized decoder library?

von Andreas S. (andreas) (Admin)


Rate this post
useful
not useful
Jeff Mathews wrote:
>
>> You can find some numbers for the read and decoding performance in my
>> article: http://www.mikrocontroller.net/articles/ARM_MP3/AAC_Player
>
> I saw those numbers: 2 ms for about 1KB from the SD card (SPI mode) and
> 16 ms MP3 decode (low bitrate) per frame.  But without knowing the size
> of the frame, or the frequency of all these operations, I can't find the
> headroom.

One MP3 frame is 26ms long.

>>> I'd like to see an mp3
>>> project that can playback several channels for live mixing.
>>
>> You won't see this on an ARM7.
>
> You saw the graph I posted in the above message?  What exactly is ARM9E
> doing which allows so much faster mp3 decoding -- under 10% utilization!
> I can't imagine it's just cache related, perhaps they are using a very
> optimized decoder library?

It probably has some useful DSP instructions, the library is optimized
for them, and the clock rate is a lot higher. Cache is not the reason,
the internal SRAM on the AT91SAM7 doesn't have wait states, it doesn't
get any faster than that.

von Jeff M. (farmboy)


Rate this post
useful
not useful
> One MP3 frame is 26ms long.

So you're at about 70% utilization... excluding processing for things
that aren't related to SD card reading and decoding.

> It probably has some useful DSP instructions, the library is optimized
> for them, and the clock rate is a lot higher. Cache is not the reason,
> the internal SRAM on the AT91SAM7 doesn't have wait states, it doesn't
> get any faster than that.


Right, you're running at about 1/3 their clock speed.  Assuming you
could get your 18ms of processing per frame down to 6ms with the clock
increase of 3X alone, you'd be at about 20%.  Possibly enough headroom
to run three audio channels!

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.