完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
多自由度人形双足舞蹈机器人 ——疯壳·机器人开发系列 外部 Flash 读写 1SPI 简介 本章将使用 IAP15W4K61S4 单片机的 SPI 接口,对外部 Flash 进行读写操作。 SPI 是一种全双工、高速、同步的通信总线,有两种操作模式:主模式和从模式。在主模式中支持高达 3Mbps 的速率(工作频率为 12MHz 时,如果 CPU 主频率采用 20MHz 到 36MHz,就可以更高,从模式时速度无法太快),还具有传输完成标志和写冲突标志保护。SPI 的功能框图如下图所示: 图 1 SPI 接口其实是一个 8 位移位寄存器和数据缓冲器,数据可以同时发送和接收。在 SPI 数据的传输过程中,发送和接收的数据都存储在数据缓冲器中。 对于主模式,如果要发送一个字节的数据,只需要将这个数据写到 SPDAT 寄存器中。主模式下/SS 信号不是必须的,但是在从模式下,必须在/SS 信号变为有效并接受到合适的时钟信号后,方可进行数据传输。在从模式下,如果一个字节传输完成后,/SS 信号变为高电平,这个字节立即被硬件逻辑标志为接收完成, SPI 接口准备接收下一个数据。 2硬件设计 本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS 用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash 的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。具体的硬件连接如下图所示。 图 2 3软件设计 本次软件设计主要是讲解 SPI 读写外部 Flash,在此之前,先简要介绍 3 个与 SPI 相关的主要寄存器,其它相关寄存器可以参考官方数据手册中的相关章节。 (1)SPI 控制寄存器 SPCTL 图 3 SSIG:SS 引脚忽略控制位。 SSIG=1,MSTR(位 4)确定器件为主机还是从机。SSIG=0,SS 脚用于确定器件为主机还是从机。 SPEN:SPI 使能位。 SPEN=1,SPI 使能。 SPEN=0,SPI 被禁止,所有 SPI 引脚都作为 I/O 使用。 DORD:设定 SPI 数据发送和接收的位顺序。DORD=1,数据字的最低位最先发送。DORD=0,数据字的最高位最先发送。 MSTR:主/从模式选择位。CPOL:SPI 时钟极性。 CPOL=1,SCLK 空闲时为高电平。SCLK 的前时钟沿为下降沿而后沿为上升沿。 CPOL=0,SCLK 空闲时为低电平。SCLK 的前时钟沿为上升沿而后沿为下降沿。 CPHA:SPI 时钟相位选择。 CPHA=1,数据在 SCLK 的前时钟沿驱动,并在后时钟沿采样。 CPHA=0,数据在/SS 为低时被驱动,在 SCLK 的后时钟沿被改变,并在前时钟沿被采样。 SPR1、SPR0:SPI 时钟频率选择控制位。如下图所示: 图 4 (2)SPI 状态寄存器 SPSTAT 图 5 SPIF:SPI 传输完成标志 当一次串行输出完成时,SPIF 置位。此时,如果 SPI 中断被打开,则产生中断。当 SPI 处于主模式且 SSIG=0 时,如果/SS 为输入并被驱动为低电平,SPIF 也将置位,表示“模式改变”。SPIF 标志通过软件向其写入“1”清零。WCOL:SPI 写冲突标志。 在数据传输的过程中如果对 SPI 数据寄存器 SPDAT 执行写操作,WCOL 将置位。WCOL 标志通过软件向其写入“1”清零。 (3)控制 SPI 功能切换的寄存器 AUXR1(P_SW1) 图 6 图 7 DSP:SPTR 寄存器选择位。 0,使用缺省数据指针 DPTR0。 1,使用另一个数据指针 DPTR1。首先看一下 SPI 初始化函数。 代码1 SPI 初始化函数,其实就是配置 SPI 相关寄存器的几个位。当然,大家也可以按照自己的实际需求进行配置。 完成 SPI 初始化之后,就可以使用 SPI 发送接收函数。 代码2 在 SPI_SendByte(u8 SPI_SendData)函数中,首先是将要发送的数据放入 SPI 数据寄存器SPDAT 中,然后判定 SPI 状态寄存器 SPTAT 中的 SPIF 位。等待数据写入完成之后,清除中断标志和写冲突标志。由于 SPI 为双工通讯,最后就能返回得到的数据。 关 于 外 部 Flash W25X20CL 的 使 用 , 其 实 就 是 通 过 SPI_SendByte(u8 SPI_SendData)写指令、写地址、写数据。外部 Flash 的使用方法详情可以读数据手册。 另外,本次实验还用到了串口,串口的使用方法可以阅读前面的章节:串口控制舵机原理。 4 实验现象 首先打开下载软件 STC-ISP。 图 8 (1)点击 Keil 仿真设置,添加 STC 相关的头文件。STC 的相关头文件路径是我们之前安装 Keil C51 的路径,如果之前采用的默认路径,那么选择 C 盘 Keil 文件夹。 图 9 (2)添加完 STC 相关的头文件,点击弹窗中的确定。 图 10 (3)设置单片机的型号、最低波特率、最高波特率如下图所示,硬件选项等选项默认即可。串口号根据实际情况选择。 图 11 (4)点击打开程序文件,选择我们例程中的.hex 文件。 图 12 (5)点击下载/编程,下载代码。 图 13 (6)按一下电路板上面的 RST 按键,完成下载。 图 14 代码下载完成之后,打开串口调试助手,如下图所示。 (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。 (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。 (3)点击打开串口。 图 15 完成上述操作,运行代码之后,就会看到串口调试助手区域 4 中会显示出读写 Flash 的数据信息。 图 16 更多完整学习资料和对应开源套件,请登陆官网:“疯壳” 如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系 文件下载请点击:
6_外部Flash的读写.pdf
(1.35 MB, 下载次数: 3
)
|
|
相关推荐
|
|
182 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1207 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
493 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-网络编程示例之开发板测试
420 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-网络编程示例之网络socket程序编程
957 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11733 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-18 15:19 , Processed in 0.905076 second(s), Total 64, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号