IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> FPGA——SPI总线详解(概念) -> 正文阅读

[嵌入式]FPGA——SPI总线详解(概念)

目录

SPI简介

SPI4种模式:

SPI时序

使用SPI总线实现对flash的控制

flash芯片管脚:

?flash芯片存储

写使能模块

?读状态模块

擦除模块

页读模块

页写模块


SPI简介

SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许 MCU 以全双工的同步串行方式, 与各种外围设备进行高速数据通信。
?
SPI 主要应用在 EEPROM, Flash, 实时时钟(RTC), 数模转换器(ADC), 数字信号处理器(DSP) 以及数字信号解码器之间. 它在芯片中只占用四根管脚 (Pin) 用来控制以及数据传输, 节约了芯片的 pin 数目, 同时为 PCB 在布局上节省了空间. 正是出于这种简单易用的特性, 现在越来越多的芯片上都集成了 SPI技术。

SPI就是串行外围设备接口,它是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,这四根线的定义分别是:

?MISO:(master input slave output)主设备数据输入,从设备数据输出;

?MOSI:(master output slave input)主设备数据输出,从设备数据输入;

?SCLK:(时钟是master给的)时钟信号,由主设备产生;(所以只有mater可以通信ru)

?CS? :从设备片选信号,由主设备控制。

?如上图,可以挂很多个slave,但是一个时刻,只有一个slave跟master进行通信

SPI4种模式

第一个沿接收数据CPHA(clock phase)=0

第二个沿接收数据CPHA(clock phase)=1

空闲时钟为高CPOL(clock polarity)=1

空闲时钟为低CPOL=0

一般使用0模式时钟空闲为低,第一个时钟沿接收数据

SPI时序

SPI总线处于空闲状态时,片选信号CS要维持高电平CLK信号低电平

当SPI总想开始工作时,首先是片选CS拉低,然后是CLK时钟按照规定的时钟频率输出,传输的数据通过DI数据进行发送;当数据发送完成后,片选CS拉高代表结束,同时CLK信号输出为低电平。

一个时钟只发送一个bit,一般先发送高位,再发送低位。

使用SPI总线实现对flash的控制

主要实现了对W25Q64FV-Flash芯片的控制功能,该芯片的主要功能有Wr_ebnable(写使能操作)、page_program(页写操作)、erase(擦除操作)、read_status(读状态操作)、read_data(读数据操作)。

flash芯片管脚:

包括片选信号,数据输入输出信号,时钟和地,输入保持信号,写保护信号

?

?flash芯片存储

W25Q64FV-Flash芯片有128个块,每个块里面有16个扇区,每个扇区有16页,一页256个字节

所以总的存储空间为:一共的字节(128*16*168*256)÷1024(K)÷1024(M)=8MB=64Mbit

写使能模块

写使能时序图:

当片选线拉低了,开始向总线输出DI(06h/04h),输出clk采集数据

?读状态模块

读取状态寄存器指令允许读取 8 位状态寄存器。

通过将 /CS 驱动为低电平并将状态寄存器 1 的指令代码“05h”或状态寄存器 2 的指令代码“35h”在 CLK 的上升沿移入 DI 引脚来输入指令。 然后,状态寄存器位在 CLK 的下降沿在 DO 引脚上移出,最高有效位 (MSB) 在前,如图所示。

读状态发送指令05h或者35h,发送完成后总线向读状态发送8位读状态寄存器数据,由此可以知道总线的状态。状态寄存器可以连续读取,如图所示。指令通过驱动/CS为高电平完成

状态寄存器位如图 :

读取状态寄存器指令可随时使用,即使在编程、擦除或写入状态寄存器周期正在进行时。 这允许检查 BUSY 状态位以确定循环何时完成以及设备是否可以接受另一条指令。

擦除模块

擦除分为扇区擦除;32KB擦除;64KB擦除;整片擦除

(1)扇区擦除(20h

除 Sector Erase 指令将指定扇区(4K 字节)内的所有内存设置为 1FFh擦除状态。 在器件接受扇区擦除指令(状态寄存器位 WEL 必须等于 1)之前,必须执行写使能指令。 该指令通过将 /CS 引脚驱动为低电平并将指令代码“20h”移位到 24 位扇区地址 (A23-A0) 来启动(见图 2)。 扇区擦除指令序列如图 21a 和 21b 所示。

?? 在最后一个字节的第八位被锁存后,/CS 引脚必须被驱动为高电平。 如果不这样做,将不会执行扇区擦除指令。 在 /CS 被驱动为高电平后,自定时扇区擦除指令将在 tSE 的持续时间内开始(参见交流特性)。 在扇区擦除周期进行时,仍可访问读取状态寄存器指令以检查 BUSY 位的状态。? BUSY 位在扇区擦除周期中为 1,当周期结束且器件准备好再次接受其他指令时变为 0。 扇区擦除周期完成后,状态寄存器中的写使能锁存 (WEL) 位被清除为 0。如果寻址页面受块保护(CMP、SEC、TB、BP2? 、BP1 和 BP0) 位(参见状态寄存器存储器保护表)

(2)擦除32KB52h

块擦除指令将指定块(32K 字节)内的所有存储器设置为 1 (FFh) 的擦除状态。 在器件接受块擦除指令(状态寄存器位 WEL 必须等于 1)之前,必须执行写使能指令。 该指令通过将 /CS 引脚驱动为低电平并将指令代码“52h”移位到 24 位块地址 (A23-A0) 来启动。 块擦除指令序列如图 22a 和 22b 所示。

?? 在最后一个字节的第八位被锁存后,/CS 引脚必须被驱动为高电平。 如果不这样做,将不会执行块擦除指令。 在 /CS 被驱动为高电平后,自定时块擦除指令将在 tBE1 的持续时间内开始(参见交流特性)。 在块擦除周期进行时,仍可访问读取状态寄存器指令以检查 BUSY 位的状态。? BUSY 位在块擦除周期中为 1,当周期结束且器件准备好再次接受其他指令时变为 0。 在块擦除周期完成后,状态寄存器中的写使能锁存 (WEL) 位被清除为 0。

(3)擦除64KBD8h

块擦除指令将指定块(64K 字节)内的所有存储器设置为全 1 (FFh) 的擦除状态。 在器件接受块擦除指令(状态寄存器位 WEL 必须等于 1)之前,必须执行写使能指令。 该指令通过将 /CS 引脚驱动为低电平并将指令代码“D8h”移位到 24 位块地址 (A23-A0) 来启动。 块擦除指令序列如图 23a 和 23b 所示。

?? 在最后一个字节的第八位被锁存后,/CS 引脚必须被驱动为高电平。 如果不这样做,将不会执行块擦除指令。 ?

(4)擦除整片(C7h或者06h

Chip Erase 指令将器件内的所有存储器设置为 1 (FFh) 的擦除状态。 在器件接受芯片擦除指令(状态寄存器位 WEL 必须等于 1)之前,必须执行写使能指令。 该指令通过将 /CS 引脚驱动为低电平并移位指令代码“C7h”“60h”来启动。 芯片擦除指令序列如图所示。

?

页读模块

页读指令(03h)

Read Data 指令允许从存储器中顺序读取一个或多个数据字节。 该指令通过将 /CS 引脚驱动为低电平,然后将指令代码“03h”后跟一个 24 位地址(A23-A0)移入 DI 引脚来启动。 代码和地址位在 CLK 引脚的上升沿被锁存。 接收到地址后,寻址存储器位置的数据字节将在 CLK 的下降沿以最高有效位 (MSB) 为先在 DO 引脚上移出。 在每个数据字节移出后,地址会自动递增到下一个更高的地址,从而允许连续的数据流。 这意味着只要时钟继续,就可以通过一条指令访问整个存储器。 该指令通过将 /CS 驱动为高电平来完成。

?? 读取数据指令序列如图 10 所示。如果在擦除、编程或写入周期进行中 (BUSY=1) 时发出读取数据指令,则该指令将被忽略,并且不会对当前周期产生任何影响。 读取数据指令允许从直流到最大 fR 的时钟速率(参见交流电气特性)。

?? 读取数据 (03h) 指令仅在标准 SPI 模式下受支持。

页写模块

首先发送02H的指令,后面是24位数据首地址,后面至多可以跟256个字节(256*8位)的数据

页写指令只能从一个字节到 256个字节(一页)的数据。如果这一页已经被写了,虽然没写满也不能再写这页了。

?在器件接受页写指令(状态寄存器位 WEL=1)之前,必须执行写使能指令。 该指令通过将 /CS 引脚驱动为低电平,然后将指令代码“02h”后跟一个 24 位地址 (A23-A0) 和至少一个数据字节移入 DI 引脚来启动。 当数据被发送到设备时,/CS 引脚必须在指令的整个长度内保持低电平。Page Program 指令序列如图下所示。

?? 如果要对整个 256 字节页面进行编程,则最后一个地址字节(8个最低有效地址位)应设置为 0。如果最后一个地址字节不为零,并且时钟数超过剩余页面长度,则寻址将换行到页面的开头。 在某些情况下,可以编程少于 256个字节(部分页面),而不会对同一页面内的其他字节产生任何影响。?如果发送到设备的字节数超过 256 字节,则寻址将返回到页面的开头并覆盖先前发送的数据。

?? 与写入和擦除指令一样,/CS 引脚必须在最后一个字节的第 8 位被锁存后驱动为高电平。 如果不这样做,将不会执行页面编程指令。在页面编程周期进行时,仍可访问读取状态寄存器指令以检查 BUSY 位的状态。? BUSY 位在页写周期中为 1,当周期结束且器件准备好再次接受其他指令时变为 0。 页写周期完成后,状态寄存器中的写使能锁存 (WEL) 位被清除为 0。

?

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:03:54  更:2022-07-20 19:04:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 16:50:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计