Sat*_*ish 1 microcontroller spi stm32 flash-memory eeprom
我使用WinBond W25Q64JV SPI Flash芯片来存储数据,微控制器是STM32F101RCT6。当我尝试将数据存储在华邦芯片中时,它工作正常,我可以在华邦芯片中读取和写入数据,但如果我想覆盖同一地址中的新数据,它不会被覆盖,并且会提供旧数据新数据未写入同一内存中。如果我使用擦除选项,则会擦除所有地址位置中的所有数据,我无法擦除特定地址数据。删除所有地址数据后,我可以写入新数据,但我正在丢失所有其他位置的数据,因此请指导我覆盖同一地址位置中的新数据/特定地址的擦除选项,我的代码如下
HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_RESET);
Spi_data[0]=0x06; //Write Enable
HAL_SPI_Transmit(&hspi2,Spi_data,1,1000);
HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_RESET);
Spi_data[0]=0x02; //Page Program
Spi_data[1]=0x00;
Spi_data[2]=0x10;
Spi_data[3]=0x14;
Spi_data[4]=0x43;
HAL_SPI_Transmit(&hspi2,Spi_data,5,10000);
HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_RESET);
Spi_data[0]=0x03;//Read Data
Spi_data[1]=0x00;
Spi_data[2]=0x10;
Spi_data[3]=0x14;
HAL_SPI_Transmit(&hspi2,Spi_data,4,100);
HAL_SPI_Receive(&hspi2,GSdata,4,100);
HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_SET);
Run Code Online (Sandbox Code Playgroud)
当我尝试覆盖 0x1014 位置中的新数据时,如果我使用以下擦除选项,它不会被覆盖,它会擦除所有内存地址数据
HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_RESET);
Spi_data[0]=0x20;//Erase
Spi_data[1]=0x00;
Spi_data[2]=0x10;
Spi_data[3]=0x14;
HAL_SPI_Transmit(&hspi2,Spi_data,4,1000);
HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_SET);
Run Code Online (Sandbox Code Playgroud)
请指导我覆盖同一地址中的新数据/特定地址的擦除选项
来自产品数据表
8.3 扇区擦除(20h)
扇区擦除指令将指定扇区(4K 字节)内的所有存储器设置为全 1 (FFh) 的擦除状态。
这是闪存,而不是 eeprom,因此有最小擦除块大小,即 4 KB。没有办法擦除单个字节。