0

Any experience still seems to be insufficient to answer those strange issues that pop up in serial communication buses. We are trying to implement a data copy from an external flash in to the SRAM. Below are the details how we have configured our system.

  1. Controller : RH850 (D1M1), PLL speed at 60MHz
  2. External Flash (IS25LP128)
  3. SPI speed: 5MHz (clocks observed using oscilloscope)
  4. Data size: 4 MB

Now, in theory, if my SPI is operating at 5MHZ it should copy 5MBits/Sec. We are trying to copy 4MB so essentially it will be 32 Mega Bits. So in theory, our transfer should take about 7 seconds. Ok we have some implication overheads. My driver code can accept only up to 64Kb per read call so we chose to copy 40Kb for about 100 times to achieve this and we run this in a for loop.. Ok let me add a whooping 5 seconds of overhead (Sorry RH850!) so in total 12 seconds; well, lets add some more buffer and make it a comfort zone of 15 sec (Max expected!). But then when we run the code, its taking a whole 40seconds to finish the copy. We have checked the clock and it is 5MHz as expected and at least they are continuous.

Has anyone here faced this? Where can we look in to? Well I know I have some flash-driver provided by my vendor to dig in to but before I do that, I wanted to be sure! Any help will be really appreciated.

Shankar
  • 1
  • 1

1 Answers1

0

At a first glance, I can think about minimum 10 things which may be responsible for this. One thing I'm sure, this problem is complex. There is no simple "one line solution". The main suspect is what is not yours: the flash driver. So, isolate "pieces" one by one and verify them, starting from the bottom. Is there operating system? DMA in use? Issue with memory or resource arbitration/sharing? Interrupts are in use or polling? Any higher priority jobs are running? Data read from registers or memory mapped? Generic SPI peripheral or special serial flash is used by the driver (I don't know RH850, some uC has it)?
Your post is not precise enough, so maybe these questions will help you. What I would do? My own driver!

  • Thanks a ton for the leads... Am sorry I should have posted the details on the scheduling. I do hav an OS but I am doing this thing even before the periodic tasks start. I do it at the end of my initialization phase and my for loop fully stall the processor without letting anything else to interfere. Am using a polling method. I ensure job completed before I get to next iteration. I have not plugged the SPI to DMA but at the moment, am ready to sacrifice my controller time locked in this loop. No higher priority jobs can disturb it until am out of the loop (that is the way we schedule tasks). – Shankar Mar 17 '21 at 09:10