w25q128安全寄存器写入多字节例程
时间: 2023-09-18 10:12:37 浏览: 101
w25q128_spiflash 通信例子
下面是一个基于STM32的w25q128多字节安全寄存器写入的例程:
```c
#include "stm32f10x.h"
#include "w25q128.h"
void w25q128_write_enable(void)
{
W25Q128_CS_LOW();
SPI1_ReadWriteByte(W25X_WriteEnable);
W25Q128_CS_HIGH();
}
void w25q128_write_disable(void)
{
W25Q128_CS_LOW();
SPI1_ReadWriteByte(W25X_WriteDisable);
W25Q128_CS_HIGH();
}
uint8_t w25q128_read_sr(void)
{
uint8_t reg;
W25Q128_CS_LOW();
SPI1_ReadWriteByte(W25X_ReadStatusReg);
reg = SPI1_ReadWriteByte(0xff);
W25Q128_CS_HIGH();
return reg;
}
void w25q128_write_sr(uint8_t sr)
{
w25q128_write_enable();
W25Q128_CS_LOW();
SPI1_ReadWriteByte(W25X_WriteStatusReg);
SPI1_ReadWriteByte(sr);
W25Q128_CS_HIGH();
w25q128_write_disable();
}
void w25q128_write_security_reg(uint32_t addr, uint8_t *buf, uint32_t len)
{
uint32_t i;
w25q128_write_enable();
W25Q128_CS_LOW();
SPI1_ReadWriteByte(W25X_SecRegErase);
SPI1_ReadWriteByte((addr & 0xFF000000) >> 24);
SPI1_ReadWriteByte((addr & 0x00FF0000) >> 16);
SPI1_ReadWriteByte((addr & 0x0000FF00) >> 8);
SPI1_ReadWriteByte((addr & 0x000000FF) >> 0);
W25Q128_CS_HIGH();
w25q128_write_enable();
W25Q128_CS_LOW();
SPI1_ReadWriteByte(W25X_SecRegProgram);
SPI1_ReadWriteByte((addr & 0xFF000000) >> 24);
SPI1_ReadWriteByte((addr & 0x00FF0000) >> 16);
SPI1_ReadWriteByte((addr & 0x0000FF00) >> 8);
SPI1_ReadWriteByte((addr & 0x000000FF) >> 0);
for (i = 0; i < len; i++) {
SPI1_ReadWriteByte(buf[i]);
}
W25Q128_CS_HIGH();
w25q128_write_disable();
}
```
这个例程中,`w25q128_write_security_reg()`函数用来写入多字节安全寄存器。首先使用`w25q128_write_enable()`函数让w25q128允许写入,然后发送命令`W25X_SecRegErase`对安全寄存器进行擦除,接着发送命令`W25X_SecRegProgram`对安全寄存器进行编程。最后使用`w25q128_write_disable()`函数禁止写入。需要注意的是,在写入安全寄存器之前,需要先读取状态寄存器并检查是否写入使能位为1。
阅读全文