技术标签: APB-SPI Master配置接口—项目实战 spi
数据接收和发送是SPI IP 核最基本的功能。嵌入式CPU通过系统总线对SPI IP核内部模块进行数据的读写、模块功能的控制等操作,SPI IP 核则支持CPU和外设之间按照SPI协议进行通信,进而实现两者之间的数据交换。
基于某种总线的SPI IP核着重研究内部功能模块,通过有限状态机去控制主机和从机、主机和CPU 之间的通信。本项目基于APB总线的SPI IP核实现了双工通信、支持8位数据、中断功能等功能。
SPI(Serial Peripheral Interface)协议是一种高速高效率、全双工的通信总线,允许CPU与低速的外围设备之间进行同步串行数据的传输,主要是用同步的时钟信号对串行的数据同时进行发送和接收操作,从而实现全双工
。
SPI接口在芯片内部只占用四根线,主要有两条数据线、一根片选线和一根时钟信号线。这四根线分别对应SPI协议传输时的四种信号,分别有主机输出信号MOSI、从机输入信号MISO、片选信号SS_n以及输出的时钟信号SCK。
SPI协议里定义了主模式和从模式两种工作方式,在协议里规定工作在主模式下的模块是主机,工作在从模式下的模块是从机。主机和从机之间按照SPI时序要求进行数据交换。一个典型的SPI系统应包括一个主机、一个或多个从机。该项目的APB_SPI IP 核支持主机、从机两种工作方式,下图1是主机为CPU,接口采用APB总线接口的SPI系统结构图。
嵌入式 CPU通过APB、SPI 接口与外设进行数据通信,当工作在主模式时,嵌入式CPU 可以通过片选信号SS_n,选择从机进行通信,工作从模式时,则等待被主机选中进行通信。SPI通信协议的实质就是主机和从机之间交换数据,主机发送一个数据的同时,必然也会收到一个数据,从机接收一个数据必须也要先发一个数据。因此,SPI只有主模式和从模式之分,没有读写数据的说法。在任何时间里SPI系统都只支持单主机操作,否则会发生系统错误。
SPI总线上的数据传输由串行时钟SCK进行同步处理,串行时钟SCK由SPI主机产生,每个时钟周期仅发送1bit数据。在SPI协议中规定CPOL(时钟极性)和CPHA(时钟相位)两个控制位。CPOL和CPHA的不同组合代表了SPI数据的四种传输模式,主要有:
这四种传输模式,使用最广泛的是SPI0和SPI3模式。在使用SPI系统的时候,可根据数据传输的要求,通过对时钟极性和时钟相位寄存器位的配置就可以得到所需的传输模式。不同模式下的时序图参考SPI协议详解。
此外,SPI数据传输方式还有MSB传输和LSB传输两种。MSB传输表明主机和从机首先传输数据的最高位,LSB恰恰相反,主机和从机首先传输数据的最低位。在SPI系统寄存器里需要设置相应的寄存器位,通过配置寄存器来决定数据传输的方式。
SPI IP核的基本功能是实现数据传输,即在同步串行时钟的触发下,根据用户配置的信息,串行发送和接收数据。本项目APB_SPI IP核实现功能具体如下:
全双工同步串行
操作完成数据通信;信息量可变
,最多支持128bit;最高位(MSB)或者最低位(LSB)
;上升沿
或者下降沿,MOSI与MISO互不影响;当模块工作在主机模式下时,SPI IP 核按如图2所示和从机模块连接。
当模块工作在从机模式下时,SPI IP核按如图3所示和主机模块连接。
完成IP核整体设计后,下一步目标是根据功能需求将IP核顶层模块划分为若干个功能块,图4所示为APB_SPI IP核内部模块划分结构图。
简化版如下:
在模块划分结构图中,输出信号则包括配置主模块时输出的片选信号SS_n_out,以及发送模块输出信号MOSI,输入信号包括配置为从机时的片选信号、从机的时钟极性、时钟相位信号以及接收模块的输入信号MISO,IP核内部各个功能模块实现功能目标如下:
1)、APB接口模块:主要负责APB总线和SPI模块通信
,需要对APB总线信号进行译码,使得APB 总线的读写命令能够正确被SPI模块接收并执行,APB接口模块存储着IP核寄存器的地址信息,控制着寄存器的读写
。
2)、寄存器模块:存放着IP核重要的配置信息。CPU可通过寄存器模块实现对IP核的功能配置和状态控制,使用IP核前必须先配置该模块
。
3)、发送FIFO:是数据深度、位宽均可配置的先进先出缓存,用来缓存 CPU通过APB总线发送过来的数据,直到发送模块将其读出,可以使CPU一次性写入数
据传输的全部数据,提高CPU工作效率。
4)、接收FIFO:是数据深度、位宽均可配置的先进先出缓存,用来存储 SPI从机发送的数据,直到CPU通过总线将其一次性读出。
5)、发送模块:因为模块可配置成SPI主/从模式,所以,发送模块里面含有主机发送子模块和从机发送子模块。配置为主机时,主机发送模块负责把APB总线写入发送FIFO的数据读出,并且进行数据并转串操作,按照SPI数据传输时序发送给SPI从机
,此时从机发送模块不工作。配置从机模式时,从机发送模块仍需要将写入发送FIFO的数据读出,并进行数据的并转串操作,然后,在主机发送的串行时钟触发下,按照SPI数据传输时序发送给SPI主机。
6)、接收模块:因为模块可配置为SPI主/从模式,所以,接收模块既有主机接收子模块,也有从机接收子模块。配置为主机时,主机接收子模块将SPI从机发送过来的串行数据转换成并行数据,然后写入到接收FIFO中,以便CPU通过APB总线读出数据
。配置为从机时,从机接收子模块在主机发送的串行时钟的触发下,将发送过来的串行数据转换成并行数据,写入到接收FIFO中。
7)、中断请求模块:负责产生数据传输过程中的中断请求信号,有六种独立的中断请求信号,分别有发送FIFO空中断信号、发送FIFO满中断信号、接收FIFO空中断信号、接收FIFO满中断信号、多主竞争中断信号和主从配置不一致中断信号,中断请求模块会产生一个综合的中断请求信号,是这六种中断请求信号进行或逻辑操作的结果,发送给CPU。
SPI IP核的状态转换、功能选择、数据传输都是通过配置相应的寄存器得以实现的,寄存器模块的正确设计对IP核实现功能至关重要。根据功能需要将寄存器分为以下几种:
IP核内部划分了寄存器模块,寄存器模块存放着IP核所有的寄存器,使用IP核之前必须对寄存器模块进行配置,否则IP核无法正常工作。在APB接口模块中为每个寄存器分配了地址,当CPU发送的地址与寄存器模块中的寄存器匹配上后,数据就按照APB写操作时序写入了对应的寄存器中。从而控制整个IP核工作的过程。
下面说明SPI IP 核内部寄存器模块中寄存器的具体信息。
1)、控制寄存器CTRL
,存储着数据传输过程中的控制信息。详细说明如表:
2)、 数据发送寄存器TX:存储下一次传输将要发送的数据,发送数据长度受控制寄存器中的CHAR_LEN域段控制。
3)、 数据接收寄存器RX:存储最后一次传输收到的数据,接收数据长度受控制寄存器中的CHAR_LEN域段控制。
4)、时钟分频寄存器DIVIDER:SPI时钟与系统时钟具有一定关系,fspi = fsystem/((DIVIDER+1)*2),分频系数DIVIDER默认为0。
5)、从设备选择寄存器SS:
APB 接口模块是IP核与CPU连接的重要模块,CPU可以通过它对IP核执行一系列操作,例如配置IP核寄存器信息、写入数据、接收数据、读取寄存器中状态信息等。APB接口模块的主要功能有:定义了寄存器模块中各个寄存器的地址信息,CPU可以通过接口模块对相应的寄存器进行读写操作,产生符合APB总线的写入数据时序
,按照这个时序对发送FIFO写入数据,也产生符合APB总线的读取时序,CPU可以按照这个时序从接收FIFO中读取数据。
APB接口模块实现对寄存器读写功能的具体过程:将各个寄存器的地址保存在相应的地址常量中,例如控制寄存器CTRL的地址就保存在SPICTRL_ADDR 常量中。APB HOST要配置IP核寄存器信息时,APB接口模块会将地址总线发送的地址信息与存储寄存器地址的常量进行比较。当地址信息与某个寄存器地址常量比对上后,APB接口模块会生成该寄存器的写入使能信号,将写使能信号与写数据总线上的数据一起送到寄存器模块中,从而完成对该寄存器的配置。读取寄存器信息,需要执行相同的操作,不同的是接口模块会产生读取使能,发送给APB HOST的数据信息会滞后读取使能一个时钟周期,这也完全符合APB总线的读数据时序。
APB接口模块实现发送/接收数据功能的具体过程:在接口模块里对发送/接收FIFO定义了地址,把地址赋给了常量。当APB HOST要执行读写功能时,APB接口模块会根据APB地址总线信号进行寻址,并根据相应的读写命令,读取或发送数据到相应 FIFO中去,从而完成接收/发送数据的操作。
APB接口模块执行数据写入操作主要是将CPU写入的数据发送给寄存器或发送FIFO。APB总线写操作时序图参考APB协议详解。
文章浏览阅读275次。Spring整合Hibernate_spring整合hibernate
文章浏览阅读78次。做 java 开发的,经常会用 Eclipse 或者 MyEclise 集成开发环境,一些实用的 Eclipse 快捷键和使用技巧,可以在平常开发中节约出很多时间提高工作效率,下面我就结合自己开发中的使用和大家分享一下 Eclipse 中常用到的快捷键和技巧。15 个 Eclipse 常用开发快捷键使用技巧1、alt+?或alt+/:自动补全代码或者提示代码这个是我最得意的快捷键组..._eclipese 使用技巧大全
文章浏览阅读567次,点赞6次,收藏11次。解决方案:CO模块使用前台事务码KP26维护活动类型价格,即可。业务操作:PP模块前台事务码CR02维护活动类型时,报错如上。报错原因:CO模块没有为活动类型进行价格维护。CO模块KP26维护作业类型价格完毕。2024年1月26日 写于上海。事务码KP26进入,_作业类型 lab 没有为成本中心 ql99 1001 设置
文章浏览阅读3.2k次,点赞4次,收藏10次。解决TortoiseGitPlink要求输入密码_tortoisegitplink
文章浏览阅读4.7k次,点赞2次,收藏5次。详细了解大端和小端的存储_大端存储和小端存储
文章浏览阅读6.3k次,点赞5次,收藏49次。一、从零开始建设企业信息安全系统:企业信息安全体系分为:信息安全技术体系和信息安全管理体系 信息安全技术体系: 两个层面: 1.需建设安全相关基础设施和系统,以具备解决相关安全问题的能力。 2.需具备安全运营能力,只有正确部署和使用设备,才能真正保障信息安全。 信息安全管理体系: 两个层面: 1.具备信息安全相关的制度、规范、流程及策略。 2.具..._信息安全运营服务实施指南研究
文章浏览阅读170次。一、前言我们发现Java Usage Tracker中存在设计缺陷(或者脆弱点),攻击者可以利用该缺陷创建任意文件、注入攻击者指定的参数以及提升本地权限。这些攻击手段也能组合使用实现权限提升,以便访问受影响系统中其他应用或者用户不能访问的某些保护资源。我们通过Zero Day Initiative与Oracle合作修复了这个漏洞,厂商已经在10月份补丁中推出了安全更新。因此,用户以及企业应当尽快安..._java防范代码问题的提权脱库
文章浏览阅读1.8k次。Sql与NoSql的区别Sql与NoSql的区别数据库关系型数据库非关系型数据库Sql与NoSql的区别数据库1.简单来说,就是存放各种数据的一个仓库,也就是一些数据按照某种模型存放到存储器的一个数据集合。简称DB,DataBase2.那么,数据有了,就需要管理,用来操纵和管理数据的软件就是数据管理系统 简称DBMS,DataBase Managent System3.那么 把上面这两个放到一起,也就是带有数据库并配置了管理系统的计算机系统 就是数据库系统 简称DBS,DataBase Syst_sql关系 非关系
文章浏览阅读5.1k次,点赞2次,收藏11次。编写算法实现图像绕中心点旋转功能先找到四个顶点旋转后的位置,然后求出新图像的大小找到旋转后的图像对应的原图像的位置,将原图像的颜色属性赋给相应位置的新图像(旋转思想为先将图像中心点移到坐标原点,然后进行旋转,最后再将坐标值换为实际的坐标值进行像素颜色属性的赋值)a=input('Enter the picture address:');b=input('Enter the angle:');R..._imrotate函数matlab
文章浏览阅读1.2k次。nginx连接上游服务器时,上游服务器暂时禁用问题解决_upstream server temporarily disabled while connecting to upstream
文章浏览阅读1k次。必须阶码一致才可以进行浮点数运算。_浮点运算方法和浮点运算器
文章浏览阅读128次。转自前言 上一篇文章已经介绍了简单的CDQ分治,包括经典的二维偏序和三维偏序问题,还有带修改和查询的二维/三维偏序问题。本文讲介绍多重CDQ分治的嵌套,即多维偏序问题。四维偏序问题给定N(N<=20000)个有序四元组(a,b,c,d),求对于每一个四元组(a,b,c,d),有多少个四元组(a2,b2,c2,d2)满足a2<a &..._cdq处理四维偏序