I'm develping my application with nrf52832 and nrf SDK v17.
I'm testing SPI interface so that I can use the external flash.
When I using SPI without BLE stack,the waveform looks like this:
But when I add BLE stack to application,the wave form changed..It looks like this:
The relevant code being executed when the situation shown in the figure occurred is as follows
void hal_spi_init(void)
{
nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG;
spi_config.ss_pin = SPI_SS_PIN;
spi_config.miso_pin = SPI_MISO_PIN;
spi_config.mosi_pin = SPI_MOSI_PIN;
spi_config.sck_pin = SPI_SCK_PIN;
APP_ERROR_CHECK(nrf_drv_spi_init(&spi, &spi_config, spi_event_handler, NULL));
}
void SpiFlash_WriteOneByte(uint8_t Dat)
{
uint8_t len = 1;
spi_tx_buf[0] = Dat;
spi_xfer_done = false;
APP_ERROR_CHECK(nrf_drv_spi_transfer(&spi, spi_tx_buf, len, spi_rx_buf, len));
while(!spi_xfer_done)
;
}
void SpiFlash_Write_Enable(void)
{
spi_xfer_done = false;
SpiFlash_WriteOneByte(SPIFlash_WriteEnable_CMD);
while(!spi_xfer_done)
;
}
void SPIFlash_Erase_Sector(uint8_t Block_Num,uint8_t Sector_Number)
{
SpiFlash_Write_Enable();
spi_tx_buf[0] = SPIFlash_SecErase_CMD;
spi_tx_buf[1] = Block_Num;
spi_tx_buf[2] = Sector_Number<<4;
spi_tx_buf[3] = 0x00;
spi_xfer_done = false;
APP_ERROR_CHECK(nrf_drv_spi_transfer(&spi, spi_tx_buf, 4, spi_rx_buf, 4));
while(!spi_xfer_done)
;
nrf_delay_ms(10);
return ;
}
uint8_t SpiFlash_Write_Page(uint8_t *pBuffer, uint32_t WriteAddr, uint32_t WriteBytesNum)
{
uint8_t len;
SpiFlash_Write_Enable();
spi_tx_buf[0] = SPIFlash_PageProgram_CMD;
spi_tx_buf[1] = (uint8_t)((WriteAddr&0x00ff0000)>>16);
spi_tx_buf[2] = (uint8_t)((WriteAddr&0x0000ff00)>>8);
spi_tx_buf[3] = (uint8_t)WriteAddr;
memcpy(&spi_tx_buf[4],pBuffer,WriteBytesNum);
len = WriteBytesNum + 4;
spi_xfer_done = false;
APP_ERROR_CHECK(nrf_drv_spi_transfer(&spi, spi_tx_buf, len, spi_rx_buf, 0));
while(!spi_xfer_done)
;
return RET_SUCCESS;
}
uint8_t SpiFlash_Read(uint8_t *pBuffer,uint32_t ReadAddr,uint32_t ReadBytesNum)
{
uint8_t len;
spi_tx_buf[0] = SPIFlash_ReadData_CMD;
spi_tx_buf[1] = (uint8_t)((ReadAddr&0x00ff0000)>>16);
spi_tx_buf[2] = (uint8_t)((ReadAddr&0x0000ff00)>>8);
spi_tx_buf[3] = (uint8_t)ReadAddr;
len = ReadBytesNum + 4;
spi_xfer_done = false;
APP_ERROR_CHECK(nrf_drv_spi_transfer(&spi, spi_tx_buf, len, spi_rx_buf, len));
while(!spi_xfer_done)
;
memcpy(pBuffer,&spi_rx_buf[4],ReadBytesNum);
return RET_SUCCESS;
}
hal_spi_init();
nrf_delay_ms(100);
SPIFlash_Erase_Sector(0,0);
nrf_delay_ms(100);
flash_tx_buf[0] = 0;flash_tx_buf[1] = 0;flash_tx_buf[2] = 0;flash_tx_buf[3] = 0;flash_tx_buf[4] = 1;
SpiFlash_Write_Page(flash_tx_buf,0x00,5);
SpiFlash_Read(flash_rx_buf,0x00,5);