ARM技术论坛
直播中

疯壳科技

7年用户 1201经验值
擅长:嵌入式技术
私信 关注
[资料]

【开发教程7】人形街舞机器人-外部 Flash 读写

多自由度人形双足舞蹈机器人
    外部 Flash 读写
    ——疯壳·机器人开发系列
   
   
   
    1SPI 简介
   
    本章将使用 IAP15W4K61S4 单片机的 SPI 接口,对外部 Flash 进行读写操作。
   
    SPI 是一种全双工、高速、同步的通信总线,有两种操作模式:主模式和从模式。在主模式中支持高达 3Mbps 的速率(工作频率为 12MHz 时,如果 CPU 主频率采用 20MHz 到 36MHz,就可以更高,从模式时速度无法太快),还具有传输完成标志和写冲突标志保护。SPI 的功能框图如下图所示:
   
1.png    
    图 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.png    
    图 2
    3软件设计
   
    本次软件设计主要是讲解 SPI 读写外部 Flash,在此之前,先简要介绍 3 个与
   
    SPI 相关的主要寄存器,其它相关寄存器可以参考官方数据手册中的相关章节。
   
    (1)SPI 控制寄存器 SPCTL
   
3.png    
    图 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.png    
    图 4
    (2)SPI 状态寄存器 SPSTAT
   
5.png    
    图 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.png    
    图 6
   
7.png    
    图 7
    DSP:SPTR 寄存器选择位。
   
    0,使用缺省数据指针 DPTR0。
    1,使用另一个数据指针 DPTR1。首先看一下 SPI 初始化函数。
   
代码1.png    
    代码1
   
    SPI 初始化函数,其实就是配置 SPI 相关寄存器的几个位。当然,大家也可以按照自己的实际需求进行配置。
    完成 SPI 初始化之后,就可以使用 SPI 发送接收函数。
   
代码2.png    
    代码2
   
    在 SPI_SendByte(u8 SPI_SendData)函数中,首先是将要发送的数据放入 SPI 数据寄存器SPDAT 中,然后判定 SPI 状态寄存器 SPTAT 中的 SPIF 位。等待数据写入完成之后,清除中断标志和写冲突标志。由于 SPI 为双工通讯,最后就能返回得到的数据。
    关 于 外 部 Flash W25X20CL 的 使 用 , 其 实 就 是 通 过 SPI_SendByte(u8 SPI_SendData)写指令、写地址、写数据。外部 Flash 的使用方法详情可以读数据手册。
    另外,本次实验还用到了串口,串口的使用方法可以阅读前面的章节:串口控制舵机原理。
    4        实验现象
   
    首先打开下载软件 STC-ISP。
   
8.png    
    图 8
    (1)点击 Keil 仿真设置,添加 STC 相关的头文件。STC 的相关头文件路径是我们之前安装 Keil C51 的路径,如果之前采用的默认路径,那么选择 C 盘 Keil 文件夹。
   
9.png    
    图 9
    (2)添加完 STC 相关的头文件,点击弹窗中的确定。
   
10.png           
    图 10
   
    (3)设置单片机的型号、最低波特率、最高波特率如下图所示,硬件选项等选项默认即可。串口号根据实际情况选择。
   
   11.png   
    图 11
    (4)点击打开程序文件,选择我们例程中的.hex 文件。
   
12.png    
    图 12
    (5)点击下载/编程,下载代码。
   
13.png            
    图 13
   
    (6)按一下电路板上面的 RST 按键,完成下载。
   
14.png    
    图 14
    代码下载完成之后,打开串口调试助手,如下图所示。
   
    (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
   
    (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
    (3)点击打开串口。
   
15.png    
    图 15
    完成上述操作,运行代码之后,就会看到串口调试助手区域 4 中会显示出读写 Flash 的数据信息。
   
16.png
    图 16
   
   
    文件下载请点击:
6_外部Flash的读写.pdf (1.34 MB)
(下载次数: 0, 2022-5-16 17:05 上传)
   

更多回帖

发帖
×
20
完善资料,
赚取积分