本函数实质是不断检测Flash状态寄存器的Busy位,直到Flash的内部写时序完成,从而确保下一通信操作正常,这里WIP_Flag宏定义为0x01。 主机通过发送读状态寄存器命令Read Status Register(05h),返回它的8位状态寄存器值。 本函数检测的就是状态寄存器的Bit0位,即BUSY位。Flash在执行内部写时序的时候,除了读状态寄存器的命...
址会自动增加的,不过要注意,不能读的数据超过了 W25Q16 的地址范围哦!否则读出来的数 据,就不是你想要的数据了。 有读的函数,当然就有写的函数了,接下来,我们介绍 W25QXX_Write 这个函数,该函数 的作用与 W25QXX_Flash_Read 的作用类似,不过是用来写数据到 W25Q128 里面的,其代码如 下: u8 W25QXX_BUFFE...
RT-Thread中有F1的SPI驱动和W25QXX的驱动,一次写好任意项目都通用。
上电,读取W25Q16设备ID,并通过串口打印出来; 写数据: SFLASH_WriteNByte((uint8_t*)"ABCDEF", 0, 6); 通过该函数在W25Q16的0地址处 连续写入6字节“ABCDEF”数据。(测试的时候:第一次下载之后让程序运行一次,即写入W25Q16数据。再将该函数屏蔽、下载。断电重新让程序运行看读出来的数据是否是前面写入的数...
STM32F10x_SPI (硬件接口 + 软件模拟)读写Flash(25Q16) 描述 Ⅰ、写在前面 SPI(Serial Perripheral Interface)串行外设通信接口,主要实现设备(主从)之间的通信。硬件上由CS、SCK、MISO、MOSI四根通信线连接而成。关于SPI更多介绍不再详细描述,本文主要以STM32F103为主机、W25Q16为从机进行SPI通信实验。
这个Flash读写实验我们用到的芯片是W25Q128,这是一款采用SPI协议进行读写的Flash芯片,存储容量为128Mbit,合计16Mbyte,工作电压2.7V~3.6V。这个实验我们采用STM32内置的SPI模块来进行对芯片的读写操作,STM32F1的SPI功能很强大,SPI时钟最高可以到18MHz,支持DMA,可以配置为SPI协议或者I2S协议。
int main(void){ /* 配置串口为:115200 8-N-1 */ USART_Config(); printf("\r\n 这是一个8Mbyte串行flash(W25Q64)实验\r\n"); /* 8M串行flash W25Q128初始化 */ SPI_FLASH_Init(); /* 获取 Flash Device ID */ DeviceID = SPI_FLASH_ReadDeviceID(); Delay( 200 );...
SPI总线:STM32本身支持SPI硬件时序,本文示例代码里同时采用模拟时序和硬件时序两种方式读写W25Q64。 模拟时序更加方便移植到其他单片机,更加方便学习理解SPI时序,通用性更高,不分MCU; 硬件时序效率更高,每个MCU配置方法不同,依赖MCU硬件本身支持。 存储器件:采用华邦W25Q64 flash存储芯片。
由原理图可知w25Q128 CS片选引脚为PB14、MISO是PB4、MOSI是PB5.二、程序编写1、spi初始化以及读写函数1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55...
else Print8x16String(x1,y1,RED,BLACK,"Error!");} 美中不足的是写FLASH还是没能用上DMA原因不详...