This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Trying to get RL-FlashFS working on LPC2300

I'm building some code to read the SD Card on an MCB2300.   I'm using the RL-FlashFS library.

I have configured CCLK to 48MHZ and PCLK_MCI to CCLK, and changed the #defines in MCI_LPC23xx.c to read:

#define __MCLK    48000000
#define __CPUCLK  48000000

My code to initialise the card reads:

	uint32_t retv = finit(NULL);

The SD LED on the MCB2300 board comes on when the call is made and then there's a *long* pause and eventually the function returns a value of 2.

I'm using 4.74 of the library and uVision 5

Help please, I am totally baffled.

Thanks, David

Parents
  • The code is busy waiting in the ReadBlock function in source file MCI_LPC23xx.c:

    static BOOL ReadBlock (U32 bl, U8 *buf, U32 cnt) {
      /* Read one or more 512 byte blocks from Flash Card. */
      U32 i;
    
      /* Set MCI Transfer registers. */
      MCI_DATA_TMR  = DATA_RD_TOUT_VALUE;
      MCI_DATA_LEN  = cnt * 512;
    
      /* Start DMA Peripheral to Memory transfer. */
      DmaStart (DMA_READ, buf);
      MCI_DATA_CTRL = 0x9B;
    
      for (i = DMA_TOUT; i; i--) {
        if (GPDMA_RAW_INT_TCSTAT & 0x01) {
          /* Data transfer finished. */
          return (__TRUE);
        }
      }
      /* DMA Transfer timeout. */
      return (__FALSE);
    }
    

    After 10M iterations it gives up and returns FALSE.

    Surely I'm not the first to hit this issue?

    D.

Reply
  • The code is busy waiting in the ReadBlock function in source file MCI_LPC23xx.c:

    static BOOL ReadBlock (U32 bl, U8 *buf, U32 cnt) {
      /* Read one or more 512 byte blocks from Flash Card. */
      U32 i;
    
      /* Set MCI Transfer registers. */
      MCI_DATA_TMR  = DATA_RD_TOUT_VALUE;
      MCI_DATA_LEN  = cnt * 512;
    
      /* Start DMA Peripheral to Memory transfer. */
      DmaStart (DMA_READ, buf);
      MCI_DATA_CTRL = 0x9B;
    
      for (i = DMA_TOUT; i; i--) {
        if (GPDMA_RAW_INT_TCSTAT & 0x01) {
          /* Data transfer finished. */
          return (__TRUE);
        }
      }
      /* DMA Transfer timeout. */
      return (__FALSE);
    }
    

    After 10M iterations it gives up and returns FALSE.

    Surely I'm not the first to hit this issue?

    D.

Children
No data