Пример #1
0
/**
  * @brief  Writes more than one byte to the FLASH with a single WRITE cycle 
  *         (Page WRITE sequence).
  * @note   The number of byte can't exceed the FLASH page size.
  * @param  pBuffer: pointer to the buffer  containing the data to be written
  *         to the FLASH.
  * @param  WriteAddr: FLASH's internal address to write to.
  * @param  NumByteToWrite: number of bytes to write to the FLASH, must be equal
  *         or less than "sFLASH_PAGESIZE" value.
  * @retval None
  */
void sFLASH_WritePage(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)
{
  /*!< Enable the write access to the FLASH */
  sFLASH_WriteEnable();

  /*!< Select the FLASH: Chip Select low */
  sFLASH_CS_LOW();
  /*!< Send "Write to Memory " instruction */
  sFLASH_SendByte(sFLASH_CMD_WRITE);
  /*!< Send WriteAddr high nibble address byte to write to */
  sFLASH_SendByte((WriteAddr & 0xFF0000) >> 16);
  /*!< Send WriteAddr medium nibble address byte to write to */
  sFLASH_SendByte((WriteAddr & 0xFF00) >> 8);
  /*!< Send WriteAddr low nibble address byte to write to */
  sFLASH_SendByte(WriteAddr & 0xFF);

  /*!< while there is data to be written on the FLASH */
  while (NumByteToWrite--)
  {
    /*!< Send the current byte */
    sFLASH_SendByte(*pBuffer);
    /*!< Point on the next byte to be written */
    pBuffer++;
  }

  /*!< Deselect the FLASH: Chip Select high */
  sFLASH_CS_HIGH();

  /*!< Wait the end of Flash writing */
  sFLASH_WaitForWriteEnd();
}
Пример #2
0
/**
* @brief	Enables the write access to the FLASH.
* @param	None
* @retval None
*/
void sFLASH_WriteStatusForWrite(void)
{  
#if 1
        /*!< Enable the write access to the FLASH */
        sFLASH_WriteEnable(0);

        /*!< Select the FLASH: Chip Select low */
        sFLASH_CS_LOW();

        /*!< Send "Write Enable" instruction */
        sFLASH_SendByte(sFLASH_CMD_WRSR);
        /*!< Send "Write Enable" instruction */
        sFLASH_SendByte(0x00);
        sFLASH_SendByte(0x02);

        /*!< Deselect the FLASH: Chip Select high */
        sFLASH_CS_HIGH();

        sFLASH_WaitForWriteEnd(0);

#endif	
	/*!< Select the FLASH: Chip Select low */
	sFLASH_CS_LOW();
	/*!< Send "Write Enable" instruction */
	sFLASH_SendByte(sFLASH_CMD_RDCR);
	/*!< Send "Write Enable" instruction */
	sFLASH_SendByte(sFLASH_DUMMY_BYTE);
	/*!< Deselect the FLASH: Chip Select hig */
	sFLASH_CS_HIGH();
}
Пример #3
0
/***********************************************
函数名称:sFLASH_EraseSector
功    能:擦除W25Q64 FLASH整个芯片,
需要大概20s左右的时间。
入口参数:无
返 回 值:unsigned char:读出的数据。	
备    注:无
************************************************/
void sFLASH_EraseFlash(void)
{   //芯片写使能
  	sFLASH_WriteEnable();
  	//芯片使能 
  	W25Q64_WCS_Clr();
  	//发送扇区擦除指令
  	sFLASH_SendByte(sFLASH_CMD_CE);

  	//芯片禁止 
  	W25Q64_WCS_Set();
  	//等待写完成
  	sFLASH_WaitForWriteEnd();
}
Пример #4
0
void sFLASH_GlobalUnprotect(void)
{
	sFLASH_WriteEnable();
	
	sFLASH_CS_LOW();
	
	sFLASH_SendByte(sFLASH_CMD_WRSR);
	
	sFLASH_SendByte(0);

	/*!< Deselect the FLASH: Chip Select high */
	sFLASH_CS_HIGH();
	
}	
Пример #5
0
/**
  * @brief  Erases the entire FLASH.
  * @param  None
  * @retval None
  */
void sFLASH_EraseBulk(void)
{
  /*!< Send write enable instruction */
  sFLASH_WriteEnable();

  /*!< Bulk Erase */
  /*!< Select the FLASH: Chip Select low */
  sFLASH_CS_LOW();
  /*!< Send Bulk Erase instruction  */
  sFLASH_SendByte(sFLASH_CMD_BE);
  /*!< Deselect the FLASH: Chip Select high */
  sFLASH_CS_HIGH();

  /*!< Wait the end of Flash writing */
  sFLASH_WaitForWriteEnd();
}
Пример #6
0
/**
 * @brief  Erases the entire FLASH.
 * @param  None
 * @retval None
 */
void sFLASH_EraseBulk(void)
{
    /* Enable the write access to the FLASH */
    sFLASH_WriteEnable();

    /* Bulk Erase */
    /* Select the FLASH: Chip Select low */
    sFLASH_CS_LOW();
    /* Send Bulk Erase instruction  */
    sFLASH_SendByte(sFLASH_CMD_BE);
    /* Deselect the FLASH: Chip Select high */
    sFLASH_CS_HIGH();

    /* Wait till the end of Flash writing */
    sFLASH_WaitForWriteEnd();
}
Пример #7
0
/***********************************************
函数名称:sFLASH_64KBEraseSector
功    能:擦除W25Q64 FLASH的一个块。
入口参数:无
返 回 值:无
备    注:无
************************************************/
void sFLASH_64KBEraseSector(FLADDR SectorAddr)
{   //芯片写使能
sFLASH_WriteEnable();
//芯片使能 
W25Q64_WCS_Clr();
//发送扇区擦除指令
sFLASH_SendByte(sFLASH_CMD_BE);
//发送24位地址
sFLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
sFLASH_SendByte((SectorAddr & 0xFF00) >> 8);
sFLASH_SendByte(SectorAddr & 0xFF);
//芯片禁止 
W25Q64_WCS_Set();
//等待写完成
sFLASH_WaitForWriteEnd();
}
Пример #8
0
/***********************************************
函数名称:sFLASH_WritePage
功    能:向W25Q64 FLASH写入一页数据。
入口参数:pBuffer:存放写入的数据的缓冲区,
			WriteAddr:开始写入的地址,
	NumByteToWrite:写入的字节数
返 回 值:无:读出的数据。	
备    注:无
************************************************/
void sFLASH_WritePage(unsigned char* pBuffer, FLADDR WriteAddr, unsigned int NumByteToWrite)
{//芯片写使能,写之前需写使能,否则无法写入 
sFLASH_WriteEnable();
//芯片使能 
W25Q64_WCS_Clr();
//发送写指令 
sFLASH_SendByte(sFLASH_CMD_PAGEPRO);
//发送24位地址 
sFLASH_SendByte((WriteAddr & 0xFF0000) >> 16);
sFLASH_SendByte((WriteAddr & 0xFF00) >> 8);
sFLASH_SendByte(WriteAddr & 0xFF);
//循环按字节写入 
while (NumByteToWrite--)
{sFLASH_SendByte(*pBuffer);
 pBuffer++;
}
//芯片禁止 
W25Q64_WCS_Set();
//等待写完成
sFLASH_WaitForWriteEnd();
}
Пример #9
0
/**
  * @brief  Erases the specified FLASH sector.
  * @param  SectorAddr: address of the sector to erase.
  * @retval None
  */
void sFLASH_EraseSector(uint32_t SectorAddr)
{
  /*!< Send write enable instruction */
  sFLASH_WriteEnable();

  /*!< Sector Erase */
  /*!< Select the FLASH: Chip Select low */
  sFLASH_CS_LOW();
  /*!< Send Sector Erase instruction */
  sFLASH_SendByte(sFLASH_CMD_SE);
  /*!< Send SectorAddr high nibble address byte */
  sFLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
  /*!< Send SectorAddr medium nibble address byte */
  sFLASH_SendByte((SectorAddr & 0xFF00) >> 8);
  /*!< Send SectorAddr low nibble address byte */
  sFLASH_SendByte(SectorAddr & 0xFF);
  /*!< Deselect the FLASH: Chip Select high */
  sFLASH_CS_HIGH();

  /*!< Wait the end of Flash writing */
  sFLASH_WaitForWriteEnd();
}
Пример #10
0
void sFLASH_EraseBlock32k(unsigned int SectorAddr)
{
	__IO unsigned int status;
	/*!< Send write enable instruction */
	sFLASH_WriteEnable();
	/*!< Sector Erase */
	/*!< Select the FLASH: Chip Select low */
	sFLASH_CS_LOW();
	/*!< Send Sector Erase instruction */
	sFLASH_SendByte(sFLASH_CMD_32K_ERASE);
	/*!< Send SectorAddr high nibble address byte */
	sFLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
	/*!< Send SectorAddr medium nibble address byte */
	sFLASH_SendByte((SectorAddr & 0xFF00) >> 8);
	/*!< Send SectorAddr low nibble address byte */
	sFLASH_SendByte(SectorAddr & 0xFF);
	/*!< Deselect the FLASH: Chip Select high */
	sFLASH_CS_HIGH();

	/*!< Wait the end of Flash writing */
	sFLASH_WaitForWriteEnd();
}