SPI方式读取外部FLASH抓取时序图

使用STM32的SPI控制器,对外部的W25X16 FLASH(2M字节)芯片进行操作。以下为逻辑分析仪抓取的时序。

以下是该FLASH芯片的命令表。

1、          1、读取器件ID。

先拉低片选信号CS,再发送命令0XAB,再发送三个字节的dummy。读取第四个字节数据,数据就是device ID。最后拉高CS,结束一次操作。

以下是发送命令0XAB放大的图。可以看出CLK空闲状态是高电平(CPOL = 1),偶数边沿为采样时刻(CPHA = 1)。

2、          2、读取jedec标准ID

先拉低片选信号CS,再发送命令0X9f,读取三个数据。最后拉高CS,结束一次操作。

第一个数据:生产厂商

第二个数据:存储器类型

第三个数据:容量

3、         3、 写使能

Flash在写数据,擦除,写状态寄存器之前,首先要打开写使能。打开写使能的方法也很简单,发送命令0x06即可。

4、         4、 写数据

拉低片选,发送命令0x02,表示写操作。发送3个字节的地址。因为选用的flash芯片大小为2M,地址范围为0x00_0000 – 0x1f_ffff。所以需要24位表示地址。因此要发送3个字节来表征写入的地址。

三个地址发送完毕后,就开始发送要写入的数据。

数据写完毕后,拉高片选即可。

在写数据完成后,要读取flash芯片的状态寄存器,判断器件状态。

读取状态寄存器,所用命令为0x05,第二个SPI周期即为读取的状态寄存器值,可以一直读取该状态寄存器的值。

当读到状态寄存器的值为0x00后,表示器件完成写操作。

5、          5、扇区擦除

使用命令0x20对扇区进行擦除。

擦除是从写入扇区地址开始到扇区结束地址之间的内容擦除。即如果写入擦除的地址是0x00_0010,那么就会将0x00_0010 – 0x00_0FFF(一个扇区大小是4k)之间的内存区域擦除为0xff。

6、

6、块擦除

和扇区擦除一样,只是发的命令为0xd8,擦除的最大大小是64KB。

7、          7、芯片擦除

擦除整个芯片,发送命令0xc7。

8、         8、 读数据

FLASH的读数据有三种方式:

第一种是普通读方式:

先拉低片选信号CS,再发送命令0X03,发送读取数据的地址,3个字节。后面每个SPI周期,就是读取的数据。

第二种是快速读方式(fast read):

先拉低片选信号CS,再发送命令0X0b,发送读取数据的地址,3个字节。发送一个dummy的SPI周期,后面每个SPI周期,就是读取的数据。

快速读方式,要等待5个SPI周期后,才开始读取有效信息。而普通读模式下,只需等待4个SPI周期后,就可以读取有效信息了。

第三种是快速双通道读方式(fast read dual output)

拉低片选CS,发送命令0x3b,发送读取数据的地址,3个字节。发送一个dummy的SPI周期,后面每个SPI周期,就是读取的数据。

从时序图。看出这种读方式下,MOSI和MISO都参与了读数据的传输。所以在这种模式下,一个SPI可以读取两个字节。

第一个字节              第二个字节

MISO    (1D7, 1D5, 1D3, 1D2)    (2D7, 2D5, 2D3, 2D2)

MOSI        (1D6, 1D4, 1D2, 1D0)    (2D6, 2D4, 2D2, 2D0)

下面通过波形图比较一下三种读取数据方式:

普通read读取的波形图。第一个有效数据在第5个SPI处,值为0x69, 第二个有效数据在第6个SPI处,值为0x20。

Fast read读取的波形图。第一个有效数据在第6个SPI处,值为0x69,第二个有效数据在第7个SPI处,值为0x20。

Fast read dual读取的波形图。MOSI和MISO同时参与数据的读取。第一个有效数据和第二个有效数据在第6个SPI处。

MISO   0 1 1 0  0 1 0 0         ( 1D7, 1D5, 1D3, 1D1)    ( 2D7, 2D5, 2D3, 2D1)

MOSI   1 0 0 1  0 0 0 0   (1D6, 1D4, 1D2, 1D0)  (2D6, 2D4, 2D2, 2D0)

组合得到第一个数据   01 10 10 01  0x69

组合得到第二个数据   00 10 00 00  0x20

从抓取的波形图,来学习SPI驱动外部的FLASH,是可以很直观的看到数据传输的过程,从而对SPI协议及外部的FLASH驱动有更深的了解。

可以下载pdf,查看清晰波形图片信息。

时间: 2024-12-17 06:23:08

SPI方式读取外部FLASH抓取时序图的相关文章

Java配置方式读取外部的资源配置文件

通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: package cn.qlq; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.

小白爬虫第一弹之抓取妹子图【更新版】

最近对爬虫感兴趣,参考了  http://cuiqingcai.com/3179.html   这篇文章,琢磨的小试身手,但是按照原文发现图片下载下来全是打不开的图片,这不是我想要的啊,尝试直接把图片的链接在浏览器中打开,发现已经看过的没有问题,新打开的就不行了,一直怀疑是在cookie方面做了文章,在request里也确实发现了有两个cookie的身影,但就是怎么找也找不到这两个cookie怎么来的,一度想放弃,爬个别的站算了,对妹子们的不舍还是又坚持研究了半天,在浏览器里的抓包工具里一直查看

php抓取网站图片源码

<?php /*完成网页内容捕获功能*/ function get_img_url($site_name){ $site_fd = fopen($site_name, "r"); $site_content = ""; while (!feof($site_fd)) { $site_content .= fread($site_fd, 1024); } /*利用正则表达式得到图片链接*/ $reg_tag = '/<img.*?\"([^\&q

使用webpasser抓取某笑话网站整站内容

使用webpasser框架抓取某一笑话网站整站内容.webpasser是一款可配置的爬虫框架,内置页面解析引擎,可快速配置出一个爬虫任务.配置方式将页面解析和数据存储分离,如果目标网站改版,也可以快速修复. 配置说明如下(该例子完整配置见http://git.oschina.net/passer/webpasser): 1.先写总的抓取参数:网页编码是gbk,请求超时时间是5秒,请求失败重试5次,抓取失败后等待时间10秒,设置10个线程抓取,每次抓取后不等待.这里不设置请求头信息.cookie,

使用Chrome快速实现数据的抓取(四)——优点

些一个抓取WEB页面的数据程序比较简单,大多数语言都有相应的HTTP库,一个简单的请求响应即可,程序发送Http请求给Web服务器,服务器返回HTML文件.交互方式如下: 在使用DevProtocol驱动Chrome抓取数据时,交互过程则如下图所示: 此时Chrome在中间充当了一个代理的角色,看上去变得更加复杂了,实际上却对于我们的蜘蛛程序大有帮助.本文就简单的总结下这种方式存在如下优点. 获取动态生成的网页内容 现在很多的网页内容的内容并不是一开是就能直接通过最初的Http请求直接获取到的,

怎么看时序图--nand flash的读操作详解(转载)

出处:http://blog.chinaunix.net/uid-28852942-id-3992727.html这篇文章不是介绍 nand flash的物理结构和关于nand flash的一些基本知识的.你需要至少了解 你手上的 nand flash的物理结构和一些诸如读写命令 操作的大概印象,你至少也需要看过 s3c2440中关于nand flash控制寄存器的说明. 由于本人也没有专门学过这方面的知识,下面的介绍也是经验之谈. 这里 我用的 K9F2G08-SCB0 这款nand flas

多媒体编程——ios摄像头图像抓取工具类

工具类提供预览图像画面,自动处理旋转,并且以主动方式抓取图像(这样帧率可以无限大) 系统的接口多是异步接收图像,像我这种强迫症怎么受得了,必须吧被动接收图像的方式改成主动抓取. 头文件 #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundation.h> //这些比例都是4:3的比例. typedef enum TKVideoFrameSize { tkVideoFrame480x360 = 480 <

C#语言实现对网页图片的随机抓取。基础办法,但还有一点小问题,欢迎大家指正

//当点击读取的时候,抓取网页源代码        string wangzhi;        string respHtml;        private void 读取网页源代码ToolStripMenuItem_Click(object sender, EventArgs e)        {            textBox2.Clear();  //读 取之前清空            wangzhi = comboBox1.Text;            HttpWebR

怎么看时序图--nand flash的读操作详解 (转)

这篇文章不是介绍 nand flash的物理结构和关于nand flash的一些基本知识的.你需要至少了解 你手上的 nand flash的物理结构和一些诸如读写命令 操作的大概印象,你至少也需要看过 s3c2440中关于nand flash控制寄存器的说明. 由于本人也没有专门学过这方面的知识,下面的介绍也是经验之谈. 这里 我用的 K9F2G08-SCB0 这款nand flash 来介绍时序图的阅读.不同的芯片操作时序可能不同,读的命令也会有一些差别. 当然其实有时候像nand flash