In my project, I need to store (and read) large amount of data ( >128 Mbits). Of course, I need external flash memory (I think SD card won't work because speed is an issue in my project).

So I plan to use parallel flash memory with a dsPIC33 MCU (I'll use the DSP capabilities to compute data that will be store in the flash memory). My data will be 16 bits word but the sdPIC only ave an 8bits parallel memory bus)

I'm looking for information/documentation about the proper way to use flash memory like :

  • How to correctly store 16bits data word with an 8bits bus
  • what is the fastest way to do it ? word by word? multiple word at the same time ?

It's my first project where time is an issue, I only used SPI memory in the past.

Thanks a lot if you have answers or tips for me.


  • \$\begingroup\$ How wide is the external memory interface? \$\endgroup\$ Sep 12, 2015 at 9:04
  • \$\begingroup\$ Which specific dsPIC33 and external Flash are you looking at? \$\endgroup\$
    – tcrosley
    Sep 12, 2015 at 9:37
  • \$\begingroup\$ I will choose the dsPIC and the memory when I'll have all the information needed. I'm still in the process of gathering information. \$\endgroup\$
    – Max
    Sep 12, 2015 at 11:06
  • \$\begingroup\$ SD cards can provide good speed but latency and thus buffer size can be a problem. \$\endgroup\$ Sep 12, 2015 at 11:46
  • \$\begingroup\$ In the future, please distinguish between the two terms memory and flash as memory can be used to relate to either data storage or RAM (random access memory). In EE we only try to use memory when relating to RAM. \$\endgroup\$
    – Funkyguy
    Sep 12, 2015 at 16:46

1 Answer 1


Take this points in consideration before starting:

  1. You must ensure stream speed you going to generate (how many kBytes per second?).
    I know people reached 700 kBytes per second write speed on generic SD card on PIC MCU
    http://www.microchip.com/forums/m626688.aspx. Maybe its enough for you.
  2. Are you sure that selected MCU can handle a stream you mentioned?
  3. Are going to generate burst data (large amount in little time, then pause)?
    if Yes, then use RAM for buffering data, then write it to any slow storage.
  • \$\begingroup\$ 1 - I need more than 800 kBITS per second to have the time to process data \$\endgroup\$
    – Max
    Sep 12, 2015 at 11:08
  • \$\begingroup\$ 1 - I need more than 800 kBITS per second to have the time to process data 2 - I can change the MCU if it can't handle the stream 3 - The plan is to record analog data during a long period of time (up to 30s, 12 or 16bit, 48khz), then process it with the new analog input and store the processed data (no need of the first data anymore)... and so on with an other analog input... With no delay between 2 analog input. If you know it, it's like a LOOP effect for guitar. \$\endgroup\$
    – Max
    Sep 12, 2015 at 11:17
  • \$\begingroup\$ 800 kbits is just 100 kBytes, so 700 kBytes per second will be good enough for you. And it looks like you going to handle music samples. \$\endgroup\$ Sep 12, 2015 at 11:57
  • \$\begingroup\$ Yes, I'll start working on that ! \$\endgroup\$
    – Max
    Sep 12, 2015 at 12:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.