STM32驱动W24Q16

发布者:PositiveVibes最新更新时间:2021-07-12 来源: eefocus关键字:STM32  驱动 手机看文章 扫描二维码
随时随地手机看文章

简介:W24Q16是FLASH存储芯片,容量为16Mbit。注意是16Mbit,其实就是2M-byte。W24Q16采用的是spi总线。但是这个spi总线有三种方式。


首先列下该芯片的管脚图:



第一种是标准spi(Standard)。即传统的四根线,CS片选信号,clk时钟信号,DI数据输入信号,DO数据输出信号。这个时候,WP和HOLD有自己的功能。


第二种是双SPI模式(Dual SPI)。这个时候还是用到4根线,CS片选信号,clk时钟信号,不过这里的DI和DO变成双向的IO线了,即用到了IO1和IO2。这个时候,WP和HOLD还是有自己的功能。


第三种是正交SPI模式(Quad SPI,这里暂且这么翻译)。这个时候会用到6根线,即所有信号线都使用了。CS片选信号,clk时钟信号,这个还是一样,不过变化的是,数据线用到了4个,IO0-IO3。所以这个时候,WP和HOLD本身的功能就没有了。


看看这三种模式的传输有什么区别。


其实三个都是用的SPI协议,即首先要CS片选有效,然后在clk的时钟下,发送数据和接收数据,不同的只是信号线的使用。


看看时序图,以读数据为例


第一种



第二种



第三种:



从时序图,就可以看出区别了吧。


在读数据的时候,发命令和发地址都是一样的,都是DI这个管脚接收。但是在读数据的时候,就不一样了。


对于第一种,只有DO一个管脚输出,所以需要8个时钟周期输出一个字节的值。


对于第二种,有两个管脚输出,所以只需要4个时钟周期就输出一个字节的值,


对于第三种,就更快了,有4个管脚,所以只需要两个时钟周期就输出一个字节的值。


所以,看出,其实就是读取数据的快慢而已,同样的时间下,第三种读取最快。但是用的管脚多,第一种最慢,但是用的管脚少。至于命令,地址,这些都是一样的。


写数据也是差不多的。


看看芯片的内存地址是怎么排布的。


在芯片中,最大的单位是块,然后是扇区,最后是页。


看图:



这图就说明很清楚了,


一个块64KB,包括16个扇区,因为一个扇区4KB大。一个扇区又包括16页。因为一个页256字节大。


为什么要定义这么复杂的结构,那是为了以后的操作使用。这个说道指令的时候就知道了。


然后就是芯片的内部寄存器。芯片有两个内部寄存器,这两个内部寄存器记录了一些信息。



第一个寄存器,


第0位:记录了芯片是否忙状态。因为在写入数据和擦除数据的时候,是需要时间的。你不能在上一个数据还没有写成功之前,又马上写入下一个数据。所以这个位就指示了,现在是否在写状态,如果为1的话,说明,现在还在写,所以在这个时候就不能写入数据。为0的话,说明现在芯片空闲,可以写入数据了。


第1位:指示是否可写。该芯片是有保护数据功能的,即写数据不能你想写就能写。你必须要这位为1,指示芯片可写,然后才能写入数据。否则芯片是不响应你写数据的命令的。所以在写入数据和擦除数据之前,需要把这位给置1.另外还要注意的是:每当写完数据或者擦除数据后,该位会自动为0.即变成不可写。所以在每次写之前都要将这位置1.而不能就初始化的时候置1就行了。否则会发现,只写了一次数据,后面在写数据就不行了。


第7-2位和寄存器2的第0位:这几位是指示保护的。上面的写保护,是保护数据不能随意更改,必须要写保护取消。而这几位,是指示在写数据的工程,那么位置是数据是要保护的,不允许更改的。因为有时候,需要某一部分的数据需要保持不变,写数据或者擦除的时候忽略这一部分。这个就干这个功能的。具体看看数据手册就知道了,很简单的。


第二个寄存器


第1位:这个事用来指示现在的操作是否是第三种SPI模式。1的话,是第三种SPI模式,否则不是。


这里为什么只有指示第三种模式,而没有指示第二种模式了,因为第二种模式其实是在第一种模式的变形,所以是通过不同的命令来实现的。


下面就是重要的命令了。


我们知道,对于SPI协议来说,第一个数据,肯定是命令,表示你要对芯片进行什么操作。所以一切的操作都是基于命令的。


这个芯片的命令特别多:


首先是读器件的一些信息的命令。



通过上面这些命令,可以读出器件的一些信息,后面也说明了,读出来的信息为什么。


下面才是重点了



看上面的,命令是不是特别多。


第一个命令:写使能,这个就是之前说的,将内部寄存器位1的值给置1,使能写数据或者擦除数据。


第二个命令,写取消。这个看名字就知道了,将内部寄存器位1的值给置0,禁止写数据和擦除数据。


第三个命令:读状态寄存器1的值。刚刚说了,内部有两个状态寄存器,这里是读取第一个。发完命令后读取的第一个字节值就是了。


第四个命令:读状态寄存器1的值。这里是读取第二个。发完命令后读取的第一个字节值就是了。


第五个命令:写状态寄存器。这里就是写那两个状态寄存器的值。配置芯片的工作模式。发完命令后在发送的写入的值就是了。不过注意寄存器的顺序。


第六个命令:页写入。FLASH和一般的存储芯片不一样,是不能随意写的,是要按页写的,即从页的首地址开始写。不能从其他位置写。写入的数据最多是256字节。超过256字节,就把超过的数据从页的首地址从新开始写。而且,在写数据之前,是要将写数据的地方给擦除的。即只有擦除过的地方,写的数据才正确,没有擦除过的地方,写的数据就不正确。因为页地址是256字节。所以这里的命令后面跟着的3个字节的地址,对256取余是要为0的。即页对齐。


第七个命令: 正交SPI方式页写入。和页写入一样的,只是数据由4根线传输。


第8-11命令:是擦除数据命令。这里就可以看出,为什么之前看到的芯片的地址那么复杂,需要块,扇区,页。就是方便擦写的。因为在写数据之前,是要擦写数据的。那么怎么擦写,这就是关键了。这里从命令可以看出,配置了4种擦写。后面跟着的就是擦写的地址。


后面的命令就不介绍了。


然后是读命令了



这里读命令,就分有那种SPI模式读了。这个也很简单,就不介绍了。。


以上的dummy,是说明,这个数据是什么不重要。一般设为0xff。


搞定了这些基础知识后,编程那就很简单了。


首先是封装stm32自带的spi库函数。封装为发一个数据,同时把数据读取回来。但是要注意库函数是只有标准SPI模式的。如果要用两种模式的话,需要自己写了。


+ 查看代码


uint8_t spi_write_byte(uint8_t data)


{


while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE) == RESET);


SPI_I2S_SendData(SPI1,data);


while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE) == RESET);


return SPI_I2S_ReceiveData(SPI1);


}


代码如上,就是调用了SPI库函数。发送的是data值,函数返回读取的值。


剩下的就是封装命令,写数据,读数据就可以了。。代码就不说了,因为真是有点简单,因为最低层的SPI发送函数已经写好了,就只要不断的调用就行了。

关键字:STM32  驱动 引用地址:STM32驱动W24Q16

上一篇:单片机按键扫描程序状态机方法
下一篇:基于STM32F103的智能停车场车位引导系统

推荐阅读最新更新时间:2024-11-12 16:06

自动化和智能驱动技术成为“工业4.0”关键点
在“ 工业4.0 ”的大趋势下,智能制造成为时代主旋律和制造业的主攻方向。而制造业中,自动化、智能驱动技术将发挥着越来越重要的作用,这是一场围绕可持续生产力效率提高的创新挑战,从而为传统产业的升级改造和新兴产业的长远发展提供不竭动力。   “工业4.0”的基本概念,即模块化信息物理系统,该系统可以在配合操作员的同时实现彼此之间的实时通信,自动作出判断,从而按需调整生产过程。     为了设计出理想的新产品,制造商在选择相关的运行控制设备时需要综合考虑以下几点:   逻辑控制已无法满足需求 几年前,业界仍普遍使用可编程逻辑控制器(PLC)来控制机器设备。通常情况下,PLC会连接一个独立的运行控制器,而该控制器通过现场总线来调整和
[嵌入式]
I2C协议的解析
I2C协议的产生 I2C通讯协议由Phiilps公司开发,由于引脚少,硬件实现简单,可拓展性强,不需要 USART,CAN等通讯协议的外部收发设备,被广泛使用在多个集成电路IC间的通讯。 I2C协议的物理层 1)支持设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中,可链接多个I2C通讯设备 支持多个通讯主机及多个通讯从机 2)I2C总线只使用两条总线线路,一条双向串行数据线SDA,一条串行时钟线SXL。 数据线就是用来表示数据,时钟线用来数据收发同步 3)每个设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问 4)总线通过上拉电阻接到电源。当I2C设别空闲的时候输出高阻态,而当所有的设备都空闲
[单片机]
I2C协议的解析
日本电产新宝推出用于无人搬运台车及自主移动机器人的驱动模块新产品 
日本电产新宝推出用于无人搬运台车及自主移动机器人的驱动模块新产品              日本电产新宝为新推出的、用于无人搬运台车(以下简称“AGV”)及自主移动机器人(以下简称“AMR”)的驱动模块产品进行了扩充,新增了直流24V规格的产品阵容。 随着物流业、制造业等仓储设施在自动化、省人化方面的市场需求不断增多,AGV及AMR行业发展趋势整体向好,2021年的市场规模为30亿美元, 据预测,其在2027年的市场规模将有望突破180亿美元。 新推出的驱动模块,除了原有的直流48V规格,还新增了24V规格的产品阵容,能在与外围设备使用较多的直流24V相同的电压环境下进行驱动 。驱动部采用了日本电产新宝擅长的应用
[机器人]
日本电产新宝推出用于无人搬运台车及自主移动机器人的<font color='red'>驱动</font>模块新产品 
两个PIC引脚驱动LED灯应用电路设计图
简介:本设计实例展示了仅使用两条MCU的I/O口线驱动六只LED灯的新方法,这种方法尤其适用于任何引脚有限的芯片。这种方法使用了两条I/O口线以及一对互补双极型晶体管。通过多路复用的方法可点亮一只以上的LED灯。 本设计实例展示了仅使用两条MCU的I/O口线驱动六只LED灯的新方法,这种方法尤其适用于任何引脚有限的芯片。这种方法使用了两条I/O口线以及一对互补双极型晶体管。通过多路复用的方法可点亮一只以上的LED灯。之前的一个设计实例展示了如何使用两条I/O口线驱动四只LED灯。 图1:测试选择PIC10F200($0.3500),固件以两个独立、简单的汇编程序源代码的方式提供。 注意:VDD必须在2V和3V之间。例如,
[单片机]
两个PIC引脚<font color='red'>驱动</font>LED灯应用电路设计图
浅谈驱动电机的冷化、扁线化、多合一集成化
随着新能源汽车行业的快速发展,对于驱动电机的峰值功率、运行效率、响应速度和振动噪音等多项性能提出了更高的要求,从而驱动电机也逐步走向油冷化、扁线化、多合一集成化。 驱动电机油冷散热 油冷可直接接触驱动电机内部,是首选散热方式。驱动电机冷却系统主要可分为风冷和液冷两大类。风冷散热采用空气作为冷却介质,通过空气对流散热,其构造简单、成本低,运行维护方便,但冷却效果一般,主要运用于小功率级别的电动车。液冷散热又可以分为冷却水和油两种,水冷成本低且无污染,但由于电机内绝缘的需求,水冷只能在电机壳外壁水套内进行散热;而油冷因为其良好的绝缘性,可以直接在电机内部进行接触散热,效果更佳,因此也成为驱动电机散热首选。 上图:电机的油冷方
[嵌入式]
浅谈<font color='red'>驱动</font>电机的冷化、扁线化、多合一集成化
汽车LED照明驱动系统的设计与突破
一直以来,汽车的刹车灯、转向信号灯、倒车灯以及车尾雾灯都采用21W到27W、亮度为280至570流明的钨丝灯泡作为光源。车尾灯、泊车灯、车侧显示灯以及转向信号闪灯采用4W至10W、亮度为40至130流明的钨丝灯泡,汽车头灯则采用高亮度的氙气荧光管(HID)。但在汽车照明中,越来越多地采用 LED作为光源。尾部中央高位刹车灯是最早采用LED的汽车灯。另外,在车灯市场上,其他车外照明和指示灯如刹车灯、转向信号灯以及车内照明灯都已改用 LED灯泡。近年来,车外照明灯,如白天行车灯(DRL),以及车头近光灯都开始改用LED灯泡。预计汽车大灯也会很快改用高亮度LED灯。此外,在车身内部,一些车内显示器的背光也开始采用LED作为光源,如仪表盘
[电源管理]
汽车LED照明<font color='red'>驱动</font>系统的设计与突破
stm32使用FPU时注意事项
除了网上的教程外,还要特别注意,当运算中有浮点的数字时要把,数字后面加上一个f。例如表达式中有4.321参与运算。。当你不在4.321后加f时,stm32F405的片子不知道把他当做单精度float用FPU来运算,,默认可能是当做double来运算(我不确定),运算速度还是很慢。。切记所有浮点数字后面加上f,,,,有时候keil会提示warning: #1035-D: single-precision operand implicitly converted to double-precision 这句话的意思就是单精度运算隐式转换成了双精度运算了。这个时候就要在单精度数字后面加个f keilmdk的设置中完整的define是
[单片机]
基于STM32的学习型通用红外遥控设备的设计实现
CPU: STM32 调试平台: STM32F103ZET和STM32F103VBT 软件平台: Keil uVision4 电路设计: Altium Designer v6.9 二、学习型红外遥控设备的各个模块实现 2.4 红外脉宽存储及FLASH的读写 根据STM32型号的不同,FLASH容量由16K到1024K不等。 FLASH模块主要由三部分组成:主存储器、信息块、闪存存储器接口寄存器。FLASH模块组织: 详细内容见《STM32中文参考手册》小节《2.3.3 嵌入式闪存》。 主存储器用来存放代码和数据常数,对于大容量产品,划分为256页,每页2K字节;中小容量产品每页则是1K。信息块的启动程序代码用来存储ST
[单片机]
基于<font color='red'>STM32</font>的学习型通用红外遥控设备的设计实现
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved