Addr[16:23]
Dummy = SPIReadWriteByte(SPI2, ((uint8_t *)&Address)[1]); //write Addr[8:15]
Dummy = SPIReadWriteByte(SPI2, ((uint8_t *)&Address)[2]); //write Addr[0:7]
for(i=0; i Dummy = SPIReadWriteByte(SPI2, Buf[i]); //write the data to be sent } SPICSHigh(Chip); //bring the chosen chip's CS pin high SPIWaitBusy(Chip); //判忙 } ///---------------------------------------------------------------------------------------------------------- //Function: 擦除flash一个sector //Param: //Return: //note ///---------------------------------------------------------------------------------------------------------- SPI_EXT void SPIEraseSector(uint8_t Chip, uint32_t Address) { SPIWriteEnable(Chip); //write enable SPIWaitBusy(Chip); //判忙 SPICSLow(Chip); //bring the chosen chip's CS pin down Dummy = SPIReadWriteByte(SPI2, SPI_CMD_4K_ERASE); //write 4K_Erase command Dummy = SPIReadWriteByte(SPI2, ((uint8_t *)&Address)[0]); //write Addr[16:23] Dummy = SPIReadWriteByte(SPI2, ((uint8_t *)&Address)[1]); //write Addr[8:15] Dummy = SPIReadWriteByte(SPI2, ((uint8_t *)&Address)[2]); //write Addr[0:7] SPICSHigh(Chip); //bring the chosen chip's CS pin high SPIWriteDisable(Chip); SPIWaitBusy(Chip); //判忙 } ///---------------------------------------------------------------------------------------------------------- //Function: 擦除flash一个block //Param: //Return: //note ///---------------------------------------------------------------------------------------------------------- SPI_EXT void SPIEraseBlock(uint8_t Chip, uint32_t Address) { SPIWriteEnable(Chip); SPIWaitBusy(Chip); //判忙 SPICSLow(Chip); //bring the chosen chip's CS pin down Dummy = SPIReadWriteByte(SPI2, SPI_CMD_64K_ERASE); //write 64K_Erase command Dummy = SPIReadWriteByte(SPI2, ((uint8_t *)&Address)[0]); //write Addr[16:23] Dummy = SPIReadWriteByte(SPI2, ((uint8_t *)&Address)[1]); //write Addr[8:15] Dummy = SPIReadWriteByte(SPI2, ((uint8_t *)&Address)[2]); //write Addr[0:7] SPICSHigh(Chip); //bring the chosen chip's CS pin high SPIWriteDisable(Chip); SPIWaitBusy(Chip); //判忙 } ///---------------------------------------------------------------------------------------------------------- //Function: 擦除flash整片芯片 //Param: //Return: //note ///---------------------------------------------------------------------------------------------------------- SPI_EXT void SPIEraseChip(uint8_t Chip) { SPIWriteEnable(Chip); SPIWaitBusy(Chip); //判忙 SPICSLow(Chip); Dummy = SPIReadWriteByte(SPI2, SPI_CMD_CHIP_ERASE); SPICSHigh(Chip); SPIWaitBusy(Chip); //判忙 SPIWriteDisable(Chip); } /*---------------------------------------------------------------------------------------------------------- 向SPI_FlashBuf里面写入数据 ------------------------------------------------------------------------------------------------------------*/ //SPI_EXT SPIWriteToBuf /*---------------------------------------------------------------------------------------------------------- 向SPI_FlashBuf里面写入数据 ------------------------------------------------------------------------------------------------------------*/ SPI_EXT void SPIWriteToBuf(uint8_t array[],uint8_t array_len) { uint8_t i; for(i=0;i< array_len;i++) SPI_FlashBuf[i] = array[i]; SPI2CR1_SPIE=1;//给SPI缓冲区写完数据,打开中断,将数据写入到Flash里面。 } /*---------------------------------------------------------------------------------------------------------- SPI Flash写入地址 ------------------------------------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------------------------------- SPI中断函数 ------------------------------------------------------------------------------------------------------------*/ SPI_EXT void SPI2_Interrupt() { static uint32_t Address = 0x000000; SPIWritePage(0,Address, SPI_FlashBuf,Write_To_FlashDataSize); //Address = Address + 0x000100 ; // if(Address>=0x800000) // Address=0x000000; SPI2CR1_SPIE=0;//SPI中断函数给Flash写完数据后关闭中断。 }