0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文讲透SPI总线和IIC总线通信4

jf_78858299 来源:金沙滩工作室 作者:宋雪松 2023-02-13 10:41 次阅读

下面将对W25Q128的常用操作方式进行介绍。

1、只发送指令——写使能、写失能

写使能是指状态寄存器中的WEL位置1(发送写使能指令后硬件自动设置),失能就是清零操作。在发送页写,扇区擦除,块擦除,片擦除,写状态寄存器,擦写安全寄存器指令之前,必须先等待WEL 位置1 ,这些操作完成后,WEL会自动硬件清零。写失能是将状态寄存器中的WEL软件清零,写失能这个操作很少用到,大多数情况都是硬件自动完成。

根据SPI的操作时序,将指令(06h或04h)通过DI(MOSI)发送给W25Q128,期间DO(MISO)处于高阻状态,时序图如图6-11和图6-12所示。

图片

图6-13 写使能时序

图片 图6-14 写失能时序

2、发送指令,返回数据——读状态寄存器

读状态寄存器指令允许读8位状态寄存器位。读状态寄存指令在任何时间都可使用,可以用05H/35H/15H分别读取W25Q128的三个状态寄存器。实际上用的最多的只有05H读取状态寄存器1的第0位(BUSY位),用来查看相应指令周期是否结束,芯片是否可以接收新的指令。

根据SPI的操作时序,将指令05H通过DI发送,而后通过DO读回状态寄存器的值,时序图如图6-15所示。注意通常我们只读一个字节,时序图后续字节为芯片备用扩展的。

图片

图6-15 读状态寄存器时序图

3、发送指令+数据——写状态寄存器

写状态寄存器的作用主要实现对Flash某些区域的数据或者状态保护,一旦写入保护状态,在状态解除之前,这块区域是禁止写入和擦除的。这部分在本教程中没有应用,有兴趣的读者可以根据时序图和手册资料了解一下,时序图如图6-16所示。

图片

图6-16 写状态寄存器时序图

4、读数据

读数据指令允许从存储器读一个字节和连续多个字节。

首先要确认BUSY位为0,然后根据SPI的操作时序,首先写入指令代码03H,而后紧跟3个字节的地址。当W25Q128收到地址后,会将相应地址处的数据根据SPI时序输出来;如果连续读多个字节,那每经过8个时钟周期地址自动加1,并且输出相应数据,一直到CS拉高,时序图如图6-17所示。

图片

图6-17 读数据时序图

5、写入数据(页编程

W25Q128一次写入的数据只能小于等于256字节,并且不能一次性跨页写入。当遇到跨页时,应先写满一页,等待BUSY位为0,再次往下一页写。(如果写满一页继续往下写则会跳到缓存区的页首位置开始写,之前数据会被覆盖)

在写入数据之前,该页必须被擦除过,然后根据写入地址和写入的字节数计算是否跨页以及页数。根据SPI的操作时序,首先通过写使能将WEL置1,然后写入指令代码02H,而后紧跟着3个字节的地址,而后接着发送要存储的数据,时序图如图6-18所示。

图片

图6-18 页编程时序图

写入数据完毕后,W25Q128将数据从缓存搬移到非易失区所消耗的时间要了解一下,在手册的84页有介绍,大概是(30+(x-1)*2.5)us ~ (50+(x-1)*12) us之间(x为写入的字节),搬移完成后,WEL位会自动清零,BUSY自动清零。

6、扇区擦除、块擦除

可以使用20H、52H和D8H分别对扇区擦除、32K块擦除和64K块擦除。根据SPI的操作时序,在写入擦除指令之前首先通过写使能将WEL置1,然后写入指令代码20H/52H/D8H中的一个,而后紧跟着3个字节的擦除首地址。

地址发送完毕后,必须将CS拉高,擦除指令才开始执行,并且需要一定的擦除时间,在这个时间内,只能读状态寄存器,其他操作均不能进行。扇区、32K块和64K的擦除典型时间分别是100ms、120ms和150ms,最大时间分别是400ms、1.6s、2s。当擦除完成,WEL和BUSY位自动清零,就可以再次接收新的操作指令,时序图如图6-19所示。

图片

图6-19 扇区和块擦除时序图

7、全片擦除

可以使用C7H/60H指令对整片进行擦除操作。根据SPI的操作时序,在写入擦除指令之前首先通过写使能将WEL置1,然后写入指令代码C7H或者60H,发送完毕拉高CS后,擦除指令开始执行。

整片擦除过程中,只能读状态寄存器,其他操作均不能进行。整片擦除的典型时间是40秒,最大时间是200秒。当擦除完成后,WEL和BUSY位自动清零,就可以再次接收新的操作指令,时序图如图6-20所示。

图片

图6-20 全片擦除时序图

接下来根据W25Q128的时序编写驱动程序,该驱动文件可以驱动W25Qxx系列的Flash存储芯片,不同型号的ID不同,W25Qxx初始化时会通过判断芯片ID来识别是否通信成功。

图片

图片

图片

图片

图片

图片

6.9.3 串口控制Flash读写实验

由于Flash与EEPROM实现的功能类似,本节通过改写串口发送指令控制EEPROM读写数据的例程,设计了串口发送指令控制Flash读写。帮助大家更好的体会串口实用例程以及Flash读写流程。

Flash读数据指令格式:“f-read 地址 字节长度”,其中地址范围为0~1610241024,e2read、地址、字节长度之间由空格隔开,比如从地址1开始读取5字节数据:f-read 1 5。单片机收到指令后执行多字节读操作,通过串口助手返回读出的数据。

Flash写数据指令格式:“f-write 地址 数据”,地址范围为0~1610241024,f-write、地址、数据之间同样由空格隔开,比如从地址1开始写入hello:f-write 1 hello。单片机收到指令后执行多字节写操作,写入成功后通过串口助手返回“f-write done.”

如果发送指令格式错误,返回“bad parameter.”,如果发送指令错误,将返回发送的数据。由于程序中设定的串口接收和发送缓冲区最大为256字节,因此该实验单次读取或者写入的字节数应小于256字节。

图片

图片

图片

图片

106.10 逻辑分析仪测试SPI信号

当进行SPI通信出现异常时,可以通过逻辑分析仪进行通信时序上的问题查找,如图6-18所示。从图上可以看出SCK空闲时是高电平,即CPOL=1;从CLK的跳沿箭头上可以看出,是后沿读取数据,即CPHA=1。数据分析可以通过MISO和MOSI解析后的数据判断出。通过分析仪的数据解析功能,可以直观看到STM32与Flash之间的通信数据,从而进一步确定问题所在。

图片

图6-21 Kingst LA5016逻辑分析仪解析SPI数据

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6002

    文章

    43980

    浏览量

    620888
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1615

    浏览量

    89661
  • EEPROM
    +关注

    关注

    9

    文章

    928

    浏览量

    80329
  • IIC
    IIC
    +关注

    关注

    11

    文章

    285

    浏览量

    37806
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99973
收藏 人收藏

    评论

    相关推荐

    SPI总线学习笔记

    SPI是一种全双工的串行通信总线,最早由Motorola提出,虽然应用广泛,但没有一个统一的总线标准。相较于IIC
    发表于 09-20 15:17 505次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>总线</b>学习笔记

    IIC总线SPI总线的比较

    现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。原因是这两种
    发表于 09-26 09:30 599次阅读
    <b class='flag-5'>IIC</b><b class='flag-5'>总线</b>和<b class='flag-5'>SPI</b><b class='flag-5'>总线</b>的比较

    SPIIIC比较

    数据传输。具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别
    发表于 10-13 17:25

    IIC总线SPI总线通信详解

    IIC总线SPI总线通信介绍
    发表于 12-23 07:02

    串行通信中的IIC总线工作原理是什么

    串行通信中的IIC总线工作原理51本身不带IIC总线 ,使用程序模拟IIC
    发表于 12-08 07:52

    IIC总线具有哪些特点

    4路模拟输入、路DAC输出和IIC总线接口。其主要的功能特性如下:单电源供电,典型值为5V。通过3个硬件地址引脚编址。8位逐次逼近式A
    发表于 12-09 07:40

    什么是IIC总线

    - 什么是IIC总线IIC总线是同步通信种特殊形式,具有接线口少、控制简单、器件封装形式小、
    发表于 01-24 08:27

    iic总线通信程序

    iic总线通信,要的人速度下载看看哦。
    发表于 03-21 13:50 30次下载

    深度解析IICSPI总线协议的区别与应用场景

    IIC vs SPI: 哪位是赢家?我们来对比一下IICSPI的一些关键点: 第一,总线拓扑结构/信号路由/硬件资源耗费
    的头像 发表于 12-22 16:48 1.8w次阅读
    深度解析<b class='flag-5'>IIC</b>和<b class='flag-5'>SPI</b><b class='flag-5'>总线</b>协议的区别与应用场景

    STC89C52的IIC总线写EEPROM

    串行通信中的IIC总线工作原理51本身不带IIC总线 ,使用程序模拟IIC
    发表于 11-25 15:51 11次下载
    STC89C52的<b class='flag-5'>IIC</b><b class='flag-5'>总线</b>写EEPROM

    IIC通信总线寻址

    IIC的使用IIC总线简介IIC通信时序IIC总线
    发表于 12-04 16:06 12次下载
    <b class='flag-5'>IIC</b><b class='flag-5'>通信</b><b class='flag-5'>总线</b>寻址

    一文讲透SPI总线IIC总线通信1

    从应用上来讲,UART通信多用于板间通信,比如单片机和计算机,这个设备和另外一个设备之间的通信。而IICSPI多用于板内
    的头像 发表于 02-13 10:39 2068次阅读
    一文讲透<b class='flag-5'>SPI</b><b class='flag-5'>总线</b>和<b class='flag-5'>IIC</b><b class='flag-5'>总线</b><b class='flag-5'>通信</b>1

    一文讲透SPI总线IIC总线通信2

    从应用上来讲,UART通信多用于板间通信,比如单片机和计算机,这个设备和另外一个设备之间的通信。而IICSPI多用于板内
    的头像 发表于 02-13 10:40 1285次阅读
    一文讲透<b class='flag-5'>SPI</b><b class='flag-5'>总线</b>和<b class='flag-5'>IIC</b><b class='flag-5'>总线</b><b class='flag-5'>通信</b>2

    一文讲透SPI总线IIC总线通信3

    从应用上来讲,UART通信多用于板间通信,比如单片机和计算机,这个设备和另外一个设备之间的通信。而IICSPI多用于板内
    的头像 发表于 02-13 10:41 1064次阅读
    一文讲透<b class='flag-5'>SPI</b><b class='flag-5'>总线</b>和<b class='flag-5'>IIC</b><b class='flag-5'>总线</b><b class='flag-5'>通信</b>3

    浅谈SPI总线通信接口及其协议

    上篇内容我们介绍了IIC总线通信接口及其协议,这一篇文章我们介绍另一种项目开发中非常常见的通信接口——SPI
    的头像 发表于 03-22 16:11 1197次阅读
    浅谈<b class='flag-5'>SPI</b><b class='flag-5'>总线</b><b class='flag-5'>通信</b>接口及其协议