This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

How to read&Write External Flash with NRF52832 SPI0 ?

Hi,

My problems are as follows:

SDK :nRF5_SDK_15.0.0_a53641a.

IDE:MDK 5.2.6

Chip:nrf52832  SPI0

External Flash :W25Q64

Now ,I can read the chip ID  correctly ,but when I transfer 256 bytes to External Flash ,as if only can write 251 bytes successfully, 

  • Is there something wrong with my code oprtion?
    Thank  you!

  • ...
Parents
  • void SPI_FLASH_PageWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)

    {

        uint16_t  len = NumByteToWrite;

        uint16_t len_cut = 0;  

        uint32_t  addr = WriteAddr;

        uint8_t   *pic_point_w = pBuffer;

    SPI_FLASH_WriteEnable();

       Flash_Delsy_ms(500);

        do {

     memset(FLASH_SPI_Tx_Buf,0x00,255);

            FLASH_SPI_Tx_Buf[0] = WRITE;

            FLASH_SPI_Tx_Buf[1] = (uint8_t)((addr & 0x00FF0000) >> 16);

            FLASH_SPI_Tx_Buf[2] = (uint8_t)((addr & 0x0000FF00) >> 8);

            FLASH_SPI_Tx_Buf[3] = (uint8_t)  addr ;

            len_cut = (len >= (0xFB - 4)) ? (0xFB) : (len + 4);

            memcpy(&FLASH_SPI_Tx_Buf[4], pic_point_w, (len_cut - 4));

            SPI_FLASH_CS_LOW;

            FLASH_spi_xfer_done = false;

            APP_ERROR_CHECK(nrf_drv_spi_transfer(&FLASH_spi, FLASH_SPI_Tx_Buf,len_cut, FLASH_SPI_Rx_Buf, len_cut));

             while(FLASH_spi_xfer_done == false);

            SPI_FLASH_CS_HIGH;

            addr += (len_cut - 4);

            pic_point_w += (len_cut - 4);

     len -= (len_cut - 4);

       Flash_Delsy_ms(10);

           } while(len > 0);

        SPI_FLASH_CS_HIGH;

        SPI_FLASH_WaitForWriteEnd();

    }

Reply
  • void SPI_FLASH_PageWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)

    {

        uint16_t  len = NumByteToWrite;

        uint16_t len_cut = 0;  

        uint32_t  addr = WriteAddr;

        uint8_t   *pic_point_w = pBuffer;

    SPI_FLASH_WriteEnable();

       Flash_Delsy_ms(500);

        do {

     memset(FLASH_SPI_Tx_Buf,0x00,255);

            FLASH_SPI_Tx_Buf[0] = WRITE;

            FLASH_SPI_Tx_Buf[1] = (uint8_t)((addr & 0x00FF0000) >> 16);

            FLASH_SPI_Tx_Buf[2] = (uint8_t)((addr & 0x0000FF00) >> 8);

            FLASH_SPI_Tx_Buf[3] = (uint8_t)  addr ;

            len_cut = (len >= (0xFB - 4)) ? (0xFB) : (len + 4);

            memcpy(&FLASH_SPI_Tx_Buf[4], pic_point_w, (len_cut - 4));

            SPI_FLASH_CS_LOW;

            FLASH_spi_xfer_done = false;

            APP_ERROR_CHECK(nrf_drv_spi_transfer(&FLASH_spi, FLASH_SPI_Tx_Buf,len_cut, FLASH_SPI_Rx_Buf, len_cut));

             while(FLASH_spi_xfer_done == false);

            SPI_FLASH_CS_HIGH;

            addr += (len_cut - 4);

            pic_point_w += (len_cut - 4);

     len -= (len_cut - 4);

       Flash_Delsy_ms(10);

           } while(len > 0);

        SPI_FLASH_CS_HIGH;

        SPI_FLASH_WaitForWriteEnd();

    }

Children
No Data
Related