新手上路
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2016-6-30
- 在线时间
- 5 小时
|
//Sector Read
void Flash_Read_Sector( uint32_t nSector, uint8_t* pBuffer )
{
uint16_t i;
//扇区号转为地址
nSector *= W25QXX_SECTOR_SIZE;
aTxBuffer[0] = W25X_ReadData;
aTxBuffer[1] = ( ( nSector & 0xFFFFFF ) >> 16 );
aTxBuffer[2] = ( ( nSector & 0xFFFF ) >> 8 );
aTxBuffer[3] = ( nSector & 0xFF );
aTxBuffer[4] = 0x00;
for( i = 5; i < 5 + W25QXX_SECTOR_SIZE; i++ )
{
aTxBuffer[i] = 0xff;
}
NORFLASH_CS_EN( );
if( HAL_SPI_TransmitReceive_DMA( &SpiHandle, (uint8_t*)aTxBuffer, (uint8_t *)aRxBuffer, 5 + W25QXX_SECTOR_SIZE ) != HAL_OK )
{
Error_Handler( (uint8_t*)__FILE__, __LINE__ );
}
while( !txrxOK )
{
;
}
txrxOK = 0;
memcpy( pBuffer, &aRxBuffer[5], 4096 );
}
//Sector Write
void Flash_Write_Sector( uint32_t nSector, uint8_t* pBuffer )
{
int i, j;
//扇区号转为地址
nSector *= W25QXX_SECTOR_SIZE;
//一个扇区需要几个页
for( j = 0; j < W25QXX_PAGES_PER_SECTOR; j++ )
{
W25QXX_Write_Enable( );
aTxBuffer[0] = W25X_PageProgram;
aTxBuffer[1] = ( ( nSector & 0xFFFFFF ) >> 16 ); //selcet high 8 bit from 24
aTxBuffer[2] = ( ( nSector & 0xFFFF ) >> 8 ); //selcet high 8 bit from 16
aTxBuffer[3] = ( nSector & 0xFF );
for( i = 0; i < W25QXX_PAGE_SIZE; i++ )
{
aTxBuffer[4 + i] = pBuffer[i];
}
pBuffer += W25QXX_PAGE_SIZE;
nSector += W25QXX_PAGE_SIZE;
NORFLASH_CS_EN( );
if( HAL_SPI_TransmitReceive_DMA( &SpiHandle,
(uint8_t*)aTxBuffer,
(uint8_t *)aRxBuffer,
4 + W25QXX_SECTOR_SIZE ) != HAL_OK
)
{
Error_Handler( (uint8_t*)__FILE__, __LINE__ );
}
while( !txrxOK )
{
;
}
txrxOK = 0;
W25QXX_Wait_Busy( );
}
}
|
|