本帖最后由 胡斯哲 于 2014-2-25 16:17 编辑
sxhhhjicbb 发表于 2014-2-25 15:53 
写命令用错了也是一种可能。
写命令跟野火的程序几乎一样
就几个宏有差别- /*******************************************************************************
- * Function Name : SPI_FLASH_BufferWrite
- * Description : Writes block of data to the FLASH. In this function, the
- * number of WRITE cycles are reduced, using Page WRITE sequence.
- * Input : - pBuffer : pointer to the buffer containing the data to be
- * written to the FLASH.
- * - WriteAddr : FLASH's internal address to write to.
- * - NumByteToWrite : number of bytes to write to the FLASH.
- * Output : None
- * Return : None
- *******************************************************************************/
- void SPI_FLASH_BufferWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)
- {
- uint8_t NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0;
- Addr = WriteAddr % SPI_FLASH_PageSize;
- count = SPI_FLASH_PageSize - Addr;
- NumOfPage = NumByteToWrite / SPI_FLASH_PageSize;
- NumOfSingle = NumByteToWrite % SPI_FLASH_PageSize;
- if (Addr == 0) /* WriteAddr is SPI_FLASH_PageSize aligned */
- {
- if (NumOfPage == 0) /* NumByteToWrite < SPI_FLASH_PageSize */
- {
- SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);
- }
- else /* NumByteToWrite > SPI_FLASH_PageSize */
- {
- while (NumOfPage--)
- {
- SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PageSize);
- WriteAddr += SPI_FLASH_PageSize;
- pBuffer += SPI_FLASH_PageSize;
- }
- SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);
- }
- }
- else /* WriteAddr is not SPI_FLASH_PageSize aligned */
- {
- if (NumOfPage == 0) /* NumByteToWrite < SPI_FLASH_PageSize */
- {
- if (NumOfSingle > count) /* (NumByteToWrite + WriteAddr) > SPI_FLASH_PageSize */
- {
- temp = NumOfSingle - count;
- SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);
- WriteAddr += count;
- pBuffer += count;
- SPI_FLASH_PageWrite(pBuffer, WriteAddr, temp);
- }
- else
- {
- SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);
- }
- }
- else /* NumByteToWrite > SPI_FLASH_PageSize */
- {
- NumByteToWrite -= count;
- NumOfPage = NumByteToWrite / SPI_FLASH_PageSize;
- NumOfSingle = NumByteToWrite % SPI_FLASH_PageSize;
- SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);
- WriteAddr += count;
- pBuffer += count;
- while (NumOfPage--)
- {
- SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PageSize);
- WriteAddr += SPI_FLASH_PageSize;
- pBuffer += SPI_FLASH_PageSize;
- }
- if (NumOfSingle != 0)
- {
- SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);
- }
- }
- }
- }
|