15.25、 SPI存储器W25X16读写实验.pdf

上传人:紫竹语嫣 文档编号:5514404 上传时间:2020-05-27 格式:PDF 页数:16 大小:646.60KB
返回 下载 相关 举报
15.25、 SPI存储器W25X16读写实验.pdf_第1页
第1页 / 共16页
15.25、 SPI存储器W25X16读写实验.pdf_第2页
第2页 / 共16页
15.25、 SPI存储器W25X16读写实验.pdf_第3页
第3页 / 共16页
15.25、 SPI存储器W25X16读写实验.pdf_第4页
第4页 / 共16页
15.25、 SPI存储器W25X16读写实验.pdf_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《15.25、 SPI存储器W25X16读写实验.pdf》由会员分享,可在线阅读,更多相关《15.25、 SPI存储器W25X16读写实验.pdf(16页珍藏版)》请在三一文库上搜索。

1、 SPI存储器存储器W25X16读写实验读写实验 本节将利用 SPI 来实现对神舟 IV 号板载的 16Mbit 的串行 FLASH 存储芯片 W25X16 的 读写,并将结果通过串口显示在 PC 机上。后续升级,便将显示结果从 LCD 屏上显示出来。 ? 意义与作用意义与作用 SPI总线是Motorola公司推出的三线同步接口,主要应用在FLASH,EEPROM以及一些 数字通信中。 神舟IV号硬件上使用到SPI接口的有: 触摸屏, 音频DA芯片PCM1770, W25X16 以及2.4G无线模块。 SPI总线接口作为一种非常基本的外设接口,但是其应用却是很广泛,非常适合我们存 储一些不常修

2、改的数据,例如存放静态网页、示例歌曲或汉字字库等功能。通过本例程SPI 对W25X16的读写实验,让大家简单了解SPI的通信原理。 ? 实验原理实验原理 SPI(串行外设接口)是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上 只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这 种简单易用的特性,现在越来越多的芯片集成了这种通信协议,STM32也有SPI接口,可以 配置为SPI协议或者I2S音频协议。串行外设接口(SPI)允许芯片与外部设备以半/全双工、同 步、串行方式通信。神舟系列开发板使用的STM32集成的SPI接口可以被配置成主模式,并 为外部从设备

3、提供通信时钟(SCK)。接口还能以多主配置方式工作。它可用于多种用途,包 括使用一条双向数据线的双线单工同步传输,还可使用CRC校验的可靠通信。 STM32集成的SPI接口特征如下: 3线全双工同步传输 带或不带第三根双向数据线的双线单工同步传输 8或16位传输帧格式选择 主或从操作 支持多主模式 8个主模式波特率预分频系数(最大为fPCLK/2) 从模式频率 (最大为fPCLK/2) 主模式和从模式的快速通信 主模式和从模式下均可以由软件或硬件进行NSS管理:主/从操作模式的动态改变 可编程的时钟极性和相位 可编程的数据顺序,MSB在前或LSB在前 可触发中断的专用发送和接收标志 SPI总线

4、忙状态标志 支持可靠通信的硬件CRC 在发送模式下,CRC值可以被作为最后一个字节发送 在全双工模式中对接收到的最后一个字节自动进行CRC校验 可触发中断的主模式故障、过载以及CRC错误标志 支持DMA功能的1字节发送和接收缓冲器:产生发送和接受请求 下面先介绍STM32的SPI接口: 图表 1 STM32 的 SPI 的方框图 通常SPI通过4个引脚与外部器件相连: ? MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接 收数据。 ? MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接 收数据。 ? SCK:串口时钟,作为主设备的输出,从设

5、备的输入 ? NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作 为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。从 设备的NSS引脚可以由主设备的一个标准I/O引脚来驱动。 一旦被使能(SSOE位), NSS 引脚也可以作为输出引脚,并在SPI处于主模式时拉低;此时,所有的SPI设备,如 果它们的NSS引脚连接到主设备的NSS引脚,则会检测到低电平,如果它们被设置 为NSS硬件模式,就会自动进入从设备状态。当配置为主设备、NSS配置为输入引 脚(MSTR=1,SSOE=0)时,如果NSS被拉低,则这个SPI设备进入主模式失败状态: 即MSTR

6、位被自动清除,此设备进入从模式。 时钟信号的相位和极性时钟信号的相位和极性 SPI_CR寄存器的CPOL和CPHA位,能够组合成四种可能的时序关系。CPOL(时钟极性) 位控制在没有数据传输时时钟的空闲状态电平, 此位对主模式和从模式下的设备都有效。 如 果CPOL被清0,SCK引脚在空闲状态保持低电平;如果CPOL被置1,SCK引脚在空闲状 态保持高电平。 如果CPHA(时钟相位)位被置1,SCK时钟的第二个边沿(CPOL位为0时就是下降沿, CPOL位为1时就是上升沿)进行数据位的采样,数据在第二个时钟边沿被锁存。如果CPHA 位被清0,SCK时钟的第一边沿(CPOL位为0时就是下降沿,C

7、POL位为1时就是上升沿) 进行数据位采样,数据在第一个时钟边沿被锁存。 CPOL时钟极性和CPHA时钟相位的组合选择数据捕捉的时钟边沿。下图显示了SPI传输 的4种CPHA和CPOL位组合。此图可以解释为主设备和从设备的SCK脚、MISO脚、MOSI脚 直接连接的主或从时序图。 CPOL时钟极性和CPHA时钟相位的组合选择数据捕捉的时钟边沿。上图显示了SPI传输 的4种CPHA和CPOL位组合。此图可以解释为主设备和从设备的SCK脚、MISO脚、MOSI脚 直接连接的主或从时序图。 注意:注意: 1. 在改变CPOL/CPHA位之前,必须清除SPE位将SPI禁止。 2. 主和从必须配置成相同

8、的时序模式。 3. SCK的空闲状态必须和SPI_CR1寄存器指定的极性一致(CPOL为1时, 空闲时应上拉 SCK为高电平;CPOL为0时,空闲时应下拉SCK为低电平)。 4. 数据帧格式(8位或16位)由SPI_CR1寄存器的DFF位选择,并且决定发送/接收的数据 长度。 数据帧格式数据帧格式 根据SPI_CR1寄存器中LSBFIRST位,输出数据位时可以MSB在先也可以LSB在先。根 据SPI_CR1寄存器的DFF位,每个数据帧可以是8位或是16位。所选择的数据帧格式对发送 和/或接收都有效。 关于STM32的SPI详细资料请详见【中文】STM32F系列ARM内核32位高性能微控制 器参

9、考手册V10_1.pdf一文的第457页。 本例程中,我们采用STM32的SPI1作为主模式来读取外部SPI FLASH芯片(W25X16), 实现读写功能。下面简单说明SPI1部分的配置情况: 在主配置时,在SCK脚输出串行时钟。 配置步骤配置步骤: 配置 SPI 串行时钟波特率; 定义数据传输和串行时钟间的相位关系。 设置 8 位或 16 位数据帧格式; 如果需要 NSS 引脚工作在输入模式, 硬件模式下, 在整个数据帧传输期间应把 NSS 脚连接到高电平,在软件模式下,需设置 SPI_CR1 寄存器的 SSM 位和 SSI 位。如 果 NSS 引脚工作在输出模式,则只需要设置 SSOE

10、位; 必须设置 MSTR 位和 SPE 位 (只当 NSS 脚被连接到高电平, 这些位才能保持置位) 。 在这个配置中,MOSI引脚是数据输出,而MISO引脚是数据输入。 接下来简单了解一下W25X16芯片。 W25X16是华邦公司推出的容量为16Mb, 也就是2M 字节的芯片,容量大小跟AT45DB161是一样的。 W25X16芯片将2M的容量分为32个块(Block),每个块大小为64K字节,每个块又分 为16个扇区(Sector),每个扇区4K个字节。W25X16的最少擦除单位为一个扇区,也就是 每次必须擦除4K个字节。这样我们需要给W25X16开辟一个至少4K的缓存区。 W25X16的

11、擦写周期为10000次,具有20年的数据保存期限,支持电压为2.73.6V, W25X16支持标准的SPI,还支持双输出的SPI,最大SPI时钟可以到75Mhz(双输出时相当于 150Mhz),详细的W25X16的介绍,请参考“神舟IV号光盘外围器件数据手册”文件下 的W25X16 SPI Flash数据手册.pdf。 ? 硬件设计硬件设计 神舟IV号开发板载有SPI FLASH芯片W25X16,该芯片的容量为2M字节(16MBit),与 AT45DB161属于同一级别,W25X16的管脚定义如下: 其管脚含义如下: 根据以上定义,神舟IV号开发板与W25X16理解的原理图如下: 图表 2 S

12、PI FLASH 电路原理图 神舟 IV 号开发板的 GPIO 管脚与 W25X16 对应关系如下 W25X16管脚 GPIO管脚 SPI信号 说明 SCK PA5 SPI1_SCK SO PA6 SPI1_MISO SI PA7 SPI1_MOSI SPI1接口信号 /CS PB9 由于SPI1上除了W25X16以外,还包括SPI 接口的 网口芯片,因此W25X16使用了一个GPIO管脚PB9 作为它的片选控制信号。 注意由于神舟IV号上有W25X16和SD卡公用了SPI1,通过不同的CS进行区分,请勿同 时使用使这两个接口的CS有效,引起芯片读写访问失败。 ? 软件设计软件设计 本例程在库

13、文件的基础上,我们根据实际使用,还需要增加两个文件,一个是SPI外设 驱动文件“stm32f10x_spi.c”,另外一个则是W25X16芯片的驱动代码“spi_flash.c”。 我们先看SPI外设驱动文件,包括spi_flash.c.c文件和spi_flash.c.h头文件。其中 spi_flash.c.h文件,主要是头文件的声明,以及SPI1相关函数的声明;spi_flash.c则是相关函 数的具体实现。 为程序便于大家修改和移植为程序便于大家修改和移植,此处使用宏定义来定义SPI管脚: 根据W25X16数据手册,其命令字如下: 此处使用宏定义来定义W25X16的命令字: 其中SPI_F

14、LASH_Init初始化SPI1接口为主模式读写FLASH芯片。 根据W25X16数据手册,读取SPI_FLASH的ID方法如下: 对应读取SPI_FLASH的ID的函数为SPI_FLASH_ReadDeviceID。 其中W25X_JedecDeviceID的值为0x9F SPI接口读取FLASH的一个字节的函数,如下所示: SPI接口写入FLASH的一个字节的函数,如下所示: SPI接口读取FLASH的指定字节长度的函数如下所示: 下面将对主函数MAIN函数进行简单分析。本例程还是将从串口打印信息,点灯操作, 这些在之前例程中已经讲解了,在此不累赘。那么主程序中,上电初始化操作,包括前面提

15、 到的一些配置后,将开始读取Flash的ID,作为Flash是否存在,或是其他异常问题的判断。 如果读取到ID,说明Flash在位,否则,不在位。当Flash准备好后,我们将通过SPI1接口, 把提前设置好的字符串“uint8_t Tx_Buffer = “nr STM32F10x SPI Flash Test Example: nr communication with an Winbond W25X16 SPI FLASH“;” 中的数据写到Flash W25X16中;然后我们将写到W25X16的字符组读取出来,并在串口显示出来并使用 Buffercmp函数与写入的数据比较。下面简单了解

16、一下代码,详细的代码设计,请详阅main() 函数。 首先看一下Buffercmp函数, 该函数比较指定长度的两个字符串, 相同返回 “PASSED” , 不相同返回“FAILED”,这样我们根据返回值就可以知道读写是否正确。 以下是主函数MAIN的内容及讲解: 以 上 步 骤 首 先 初 始 化 Uart 串 口 和 指 示 灯 , 并 熄 灭 全 部 指 示 灯 。 然 后 使 用 “SPI_FLASH_Init”初始化SPI_FLASH。 接着读取Flash的ID号,其中sFLASH_ID为常量0xEF3015(参看W25X16数据手册第16 页)。根据读取的Flash的ID号作为作为W

17、25X16在位判断,如果在位则开始测试,如果不在 位,则打印“W25X16 Test Failed!”提示测试失败。 如果读取Flash的ID号正确,则点亮LED1开始测试: 以上程序首先是擦除需要测试的扇区,把提前设置好的字符串“uint8_t Tx_Buffer = “nr STM32F10x SPI Flash Test Example: nr communication with an Winbond W25X16 SPI FLASH“;”中的数据写到Flash W25X16中;然后我们将其再次从 W25X16读取出来,并在串口显示出来并使用Buffercmp函数与写入的数据比较。

18、如果比较结果成功否能说明程序已经没有问题呢?如果比较结果成功否能说明程序已经没有问题呢? 答:不能,或者说不一定。答:不能,或者说不一定。因为有可能该扇区之前的内容已经是字符串“uint8_t Tx_Buffer = “nr STM32F10x SPI Flash Test Example: nr communication with an Winbond W25X16 SPI FLASH“;”,而之后的擦除和写入都失败,最后读出比较得到 的结果也是PASSED! 所以我们需要再次将该扇区的内容擦除(擦除后其内容应该为0xFF),再读出并判断 其内容是不是0xFF,如果是0xFF则测试通过,

19、否则测试失败Failed。 程序 “if(PASSED = TransferStatus1) & (PASSED = TransferStatus2)” 就是判断以上 两个步骤的测试都是PASSED最终测试结果才是PASSED,此时点亮LED2并且打印 “W25X16 Test Suceed!”提示测试成功;否则测试失败Failed,此时点亮LED4并且打印 “Failed: W25X16 Test Failed!”提示测试失败。程序如下所示。 ? 下载与验证下载与验证 神舟IV号光盘源码目录包含本实验的工程源码,在神舟IV号光盘源码25、SPI存储器 W25X16.rarProject25、

20、SPI存储器W25X16EWARMv5STM32F107VC-ARMJISHU Exe目录下 的ARMJISHU_SPI存储器W25X16.hex文件即为前面我们分析的SPI存储器W25X16读写实验 编译好的固件,我们可以直接将固件下载到神舟IV号开发板中,观察运行效果。 如果使用JLINK下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。下载固件 到神舟IV号开发板小节进行操作。 如果使用USB下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行操 作。 如果使用串口下载固件,请按错误!未找到引用

21、源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行 操作。 如果在IAR开发环境中, 下载编译好的固件或者在线调试, 请按错误! 未找到引用源。错误! 未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 如果在MDK开发环境中,下载编译好的固件或者在线调试,请按错误!未找到引用源。错误!未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 ? 实验现象实验现象 下载固件后,连接串口到PC机,按照要求设置波特率为115200,上电运行神舟IV号开 发板,串口将输出提示信息如下,如果测试成功点亮LED2并且打印“W25X16 Test Suceed!” 提示测试成功;否则点亮LED4并且打印“Failed: W25X16 Test Failed!”提示测试失败。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料


经营许可证编号:宁ICP备18001539号-1