#define W25Q_CMD_READ 0x03
#define W25Q_CMD_WRITE_EN 0x06
#define W25Q_CMD_PAGE_PROG 0x02
#define W25Q_CMD_ERASE_SECT 0x20
// 读数据
void w25q_read(uint32_t addr, uint8_t *buf, uint16_t len)
{
uint8_t cmd[4] = {
W25Q_CMD_READ,
(addr >> 16) & 0xFF,
(addr >> 8) & 0xFF,
addr & 0xFF
};
CS_LOW();
HAL_SPI_Transmit(&hspi1, cmd, 4, 100);
HAL_SPI_Receive(&hspi1, buf, len, 100);
CS_HIGH();
}
// 写使能
void w25q_write_enable(void)
{
uint8_t cmd = W25Q_CMD_WRITE_EN;
CS_LOW();
HAL_SPI_Transmit(&hspi1, &cmd, 1, 100);
CS_HIGH();
}
// 页编程
void w25q_page_program(uint32_t addr, uint8_t *buf, uint16_t len)
{
uint8_t cmd[4] = {
W25Q_CMD_PAGE_PROG,
(addr >> 16) & 0xFF,
(addr >> 8) & 0xFF,
addr & 0xFF
};
w25q_write_enable();
CS_LOW();
HAL_SPI_Transmit(&hspi1, cmd, 4, 100);
HAL_SPI_Transmit(&hspi1, buf, len, 100);
CS_HIGH();
}