首页> 中国专利> SPI从设备、SPI通信系统及SPI通信方法

SPI从设备、SPI通信系统及SPI通信方法

摘要

本发明提供了一种SPI从设备、SPI通信系统及SPI通信方法,所述SPI从设备可以在数据模式和命令模式两种数据传输模式中选择一种进行工作,从而实现SPI主设备对SPI从设备不同存储空间的访问。特别的,在数据模式下,可实现SPI主设备对SPI从设备扩展至4G的存储空间的访问和实现大批量数据传输;而在命令模式下,可实现SPI主设备对SPI从设备不扩展的存款空间的访问和实现小批量数据传输,克服了传统SPI从设备工作模式单一和SPI从设备可供主设备访问的存储空间小的问题。

著录项

  • 公开/公告号CN105468563A

    专利类型发明专利

  • 公开/公告日2016-04-06

    原文格式PDF

  • 申请/专利权人 杭州士兰控股有限公司;

    申请/专利号CN201511005400.2

  • 发明设计人 张华;王相如;

    申请日2015-12-28

  • 分类号G06F13/42(20060101);

  • 代理机构上海思微知识产权代理事务所(普通合伙);

  • 代理人余毅勤

  • 地址 310007 浙江省杭州市翁家山21号208室

  • 入库时间 2023-12-18 15:24:54

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-06-01

    授权

    授权

  • 2016-05-04

    实质审查的生效 IPC(主分类):G06F13/42 申请日:20151228

    实质审查的生效

  • 2016-04-06

    公开

    公开

说明书

技术领域

本发明涉及数据传输技术领域,特别涉及一种SPI从设备、SPI通信系统及 SPI通信方法。

背景技术

传统的基于SPI(SerialPeripheralInterface,串行外设接口)协议的SPI从 设备(Slavedevice)与SPI主设备(Masterdevice)进行通信时,存在以下缺陷:

一、工作模式单一,基于SPI协议的SPI从设备在传输小批量数据与传输大 批量数据时使用相同的工作方式,使得SPI从设备要么缺乏效率,要么缺乏灵 活性;

二、SPI从设备可供SPI主设备访问的存储空间比较小,仅有16M;

三、若SPI从设备中使用两个不同时钟信号时,使用异步FIFO(先入先出) 缓冲器会致使结构复杂,比较难以控制,且有延迟,传输数据速率低;

四、SPI主设备和SPI从设备间进行通信时,没有工作安全保证和传输安全 保证,容易造成SPI从设备中数据丢失或被破坏、传输数据错误;另一方面, 传统的SPI从设备不支持预存储数据和实际存储数据的校验,保证不了数据传 输的完整性。

发明内容

本发明的目的在于提供一种SPI从设备、SPI通信系统及SPI通信方法,以 解决上述技术问题。

其中,所述SPI从设备包括:SPI控制器及存储模块;所述SPI控制器用以 与一SPI主设备进行数据传输,所述SPI控制器支持以数据模式或命令模式与所 述SPI主设备进行数据传输,其中,所述数据模式以第一数据量进行数据传输, 所述命令模式以第二数据量进行数据传输,所述第一数据量大于第二数据量; 所述存储模块用以存储数据。

本发明还提供一种SPI通信系统,所述SPI通信系统包括:一个SPI主设备 及一个或者多个如前所述的SPI从设备,其中,每一个SPI从设备均与所述SPI 主设备连接。

本发明还提供一种SPI通信方法,所述SPI通信方法包括:

提供一如前所述的SPI通信系统;

每个SPI从设备自身进行初始化;

SPI主设备对SPI从设备进行初始化,以使SPI从设备获取数据传输模式;

在获取的数据传输模式下,SPI主设备对SPI从设备进行读或者写操作。

在本发明提供的SPI从设备、SPI通信系统及SPI通信方法中,所述SPI从 设备可以在数据模式和命令模式两种数据传输模式中选择一种进行工作,从而 实现SPI主设备对SPI从设备不同存储空间的访问。特别的,在数据模式下,可 实现SPI主设备对SPI从设备扩展至4G的存储空间的访问和实现大批量数据传 输;而在命令模式下,可实现SPI主设备对SPI从设备不扩展的存款空间的访问 和实现小批量数据传输,克服了传统SPI从设备工作模式单一和SPI从设备可供 主设备访问的存储空间小的问题。

附图说明

图1为本发明实施例的SPI从设备的系统架构示意图;

图2为本发明实施例的SPI控制器的结构示意图;

图3为本发明实施例的SPI控制器的功能层中的状态控制寄存器文件的结 构示意图;

图4为本发明实施例的SPI控制器的协议层中的指令寄存器文件的结构示 意图;

图5为本发明实施例的SPI控制器支持的READ_ID指令时序图;

图6为本发明实施例的SPI控制器支持的READ指令时序图;

图7为本发明实施例的SPI控制器支持的WRITE指令时序图;

图8为本发明实施例的SPI主设备与SPI从设备数据传输的流接口的时序示 意图;

图9为本发明实施例的数据模式下SPI主设备读写SPI从设备的指令流示意 图;

图10为本发明实施例的命令模式下SPI主设备读写SPI从设备的指令流示 意图。

具体实施方式

以下结合附图和具体实施例对本发明提出的SPI从设备、SPI通信系统及 SPI通信方法作进一步详细说明。根据下面说明和权利要求书,本发明的优点 和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的 比例,仅用以方便、明晰地辅助说明本发明实施例的目的。

【SPI从设备】

请参考图1,其为本发明实施例的SPI从设备的系统框架示意图。如图1所 示,所述SPI从设备1包括:SPI控制器10及存储模块20;所述SPI控制器10 用以与一SPI主设备2进行数据传输,所述SPI控制器10支持以数据模式或命 令模式与所述SPI主设备2进行数据传输,其中,所述数据模式以第一数据量 进行数据传输,所述命令模式以第二数据量进行数据传输,所述第一数据量大 于第二数据量;所述存储模块20用以存储数据。

在本申请实施例中,所述SPI从设备1还包括主控单元(CPU/MCU)30、 直接内存访问控制器(DMAC)40以及系统总线桥接设备50,其中,所述SPI 控制器10、存储模块20、主控单元30以及直接内存访问控制器40均与所述系 统总线桥接设备50连接。所述主控单元30和直接内存访问控制器40通过所述 系统总线桥接设备50能够与所述SPI控制器10进行通信,并进一步控制所述 SPI控制器10与所述SPI主设备2之间的数据传输。

在本申请实施例中,所述存储模块20用以存储数据,具体的,用以存储所 述SPI控制器10向所述SPI主设备2发送的数据;或者所述SPI控制器10从所 述SPI主设备2接收的数据。在本申请实施例中,所述存储模块20包括内存控 制器21以及与所述内存控制器21连接的片上内存(OnChipSRAM)22;在本 申请的其他实施例中,所述存储模块20还可进一步包括外部主内存(图1中未 示出),所述外部主内存与所述内存控制器21连接。

在本申请实施例中,通过所述SPI控制器10支持以数据模式或命令模式与 所述SPI主设备2进行数据传输,其中,所述数据模式以第一数据量进行数据 传输,所述命令模式以第二数据量进行数据传输,所述第一数据量大于第二数 据量,也即使得所述SPI从设备1能够在传输小批量数据与传输大批量数据时 使用不相同的工作方式,即传输大批量数据时可以采用数据模式,采用小批量 数据时可以采用命令模式,由此使得所述SPI从设备1能够灵活的进行数据传 输。

接下去,请参考图2,其为本发明实施例的SPI控制器的结构示意图。在本 申请实施例中,所述SPI控制器10包括信号层100、与所述信号层100连接的 协议层110、以及与所述协议层110连接的功能层120。其中,所述信号层100 主要用以与所述SPI主设备2进行数据传输;所述协议层110主要用以解析控制 数据传输的指令以及实现信号层100与功能层120之间的数据传输;所述功能 层120主要用以与所述存储模块20进行数据传输。接下去,将对所述信号层100、 协议层110及功能层120做进一步描述。

信号层

请继续参考图2,在本申请实施例中,所述信号层100包括发送移位寄存器 101以及与所述发送移位寄存器101连接的发送缓冲器102,所述发送移位寄存 器101和发送缓冲器102组成发送模块,以向SPI主设备2发送数据。在本申 请实施例中,所述信号层100还包括接收移位寄存器103以及与所述接收移位 寄存器103连接的接收缓冲器104,所述接收移位寄存器103和接收缓冲器104 组成接收模块,以接收SPI主设备2发送的数据。

在本申请实施例中,通过所述发送缓冲器102及接收缓冲器104缓冲发送 和接收的数据,由此,增加所述发送移位寄存器101和接收移位寄存器103发 送和接收数据的速度。具体的,当所述SPI控制器10发送数据时,首先将部分 待发送数据存储到发送缓冲器102中,接着,再通过发送移位寄存器101向SPI 主设备2发送数据,由此能够提高所述发送移位寄存器101发送数据的速度; 当所述SPI控制器10接收数据时,首先接收移位寄存器103接收来自SPI主设 备2的数据,接着,接收移位寄存器103将接收到的数据发送给接收缓冲器104, 由此接收移位寄存器103又可马上接收下一批数据,从而提高了所述接收移位 寄存器103接收数据的速度。

进一步的,所述信号层100还包括与发送缓冲器102和接收缓冲器104连 接的异步时钟域控制器105以及与发送移位寄存器101和接收移位寄存器103 连接的SPI时序控制器106;其中,所述异步时钟域控制器105用以对发送的数 据或者接收的数据进行时钟域转换;所述SPI时序控制器106用以对发送的数 据或者接收的数据进行时序控制。通过所述异步时钟域控制器105和SPI时序 控制器106保证所述SPI控制器10发送和接收的数据的准确性。

具体的,当接收数据时:

SPI主设备2通过MOSI信号线输出的比特(bit)数据在SPI时序控制器 106的控制下,依次串行传输至接收移位寄存器103,接收移位寄存器103接收 串行传输的多个比特(bit)数据满存后,仍在SPI时序控制器106的控制下, 将接收移位寄存器103存储的数据并行传输至接收缓冲器104,接收缓冲器104 在异步时钟域控制器105的控制下,将接收缓冲器104接收的并行数据通过流 接口传输至协议层110。

当发送数据时:

协议层110通过流接口输出的数据在异步时钟域控制器105的控制下,依 次并行传输至发送缓冲器102,发送缓冲器102接收的并行数据在SPI时序控制 器106的控制下,转成串行方式传输至发送移位寄存器101后,发送移位寄存 器101接收的串行数据仍在SPI时序控制器106的控制下,通过MISO信号线 以比特(bit)数据传输至SPI主设备2。

上述过程实现了SPI主设备2和信号层100中的发送移位寄存器101、发送 缓冲器102之间的无缝数据传输;以及SPI主设备2和信号层100中的接收移 位寄存器103、接收缓冲器104之间的无缝数据传输。

此外,在本申请实施例中,所述异步时钟域控制器105利用信号层100串 并数据转换传输时,接收缓冲器104接收下一个并行数据的时钟空隙或发送缓 冲器102输出下一个并行数据的时钟空隙,达成并行数据的异步时钟域的转换。 经过上述周期循环,所述信号层100实现了SPI从设备1与SPI主设备2的通信。

信号层100实现了SPI从设备1与SPI主设备2之间的数据传输,但是,具 体的数据传输方式将主要通过协议层110对SPI主设备2所发送的指令的解析而 予以控制。

协议层

请继续参考图2,在本申请实施例中,所述协议层110主要包括指令寄存器 文件111、指令解码器112以及逻辑控制器113,其中,所述指令寄存器文件111 用以存储指令信息;所述指令解码器112用以解码指令以及实现信号层100和 功能层120之间的数据传输;所述逻辑控制器113用以对解码指令得到的指令 信息进行逻辑判断。

其中,所述指令寄存器文件111所存储的指令信息包括:指令解码器112 解码得到的指令信息、逻辑控制器1113对解码指令得到的指令信息进行逻辑判 断后的相关指令信息、以及功能层120输出的指令信息。具体的,请参考图4, 其为本发明实施例的SPI控制器的协议层中的指令寄存器文件的结构示意图。 如图4所示,在本申请实施例中,所述指令寄存器文件111具体包括:用以存 储地址信息的地址寄存器、用以存储状态信息的状态寄存器、用以存储模式信 息的模式寄存器、用以存储设备识别信息的设备识别寄存器、以及用以存储校 验信息的校验信息寄存器。

请继续参考图4,具体的,所述地址寄存器存储有addr3(8位地址扩展位)、 addr2(8位地址位)、addr1(8位地址位)和addr0(8位地址位)组成的32位 地址位(addr3+addr2+addr1+addr0)。

所述状态寄存器存储有rrdy(读状态位),aprot(地址保护状态位),rprot (读保护状态位),wprot(写保护状态位),wel(写使能状态位)、wip(写进行 中保护状态位)、写完成状态位(图4中未示出)组成的8位状态位(还有一位 未表示)。

其中,rrdy为0,表示不允许状态,即SPI主设备对SPI从设备停止读数据 操作,rrdy为1,表示允许状态,即允许SPI主设备对SPI从设备开始读数据操 作;

aprot为0,表示允许状态,即SPI从设备被操作的存储地址允许被操作, aprot为1,表示不允许状态,即SPI从设备被操作的存储地址不允许被操作;

rprot为0,表示允许状态,即允许SPI主设备对SPI从设备被操作的存储地 址开始读操作,rprot为1,表示不允许状态,即不允许SPI主设备对SPI从设备 被操作的存储地址开始读操作;

wel为0,表示不允许状态,即不允许SPI主设备对SPI从设备进行写数据 操作,wel为1,表示允许状态,即允许SPI主设备对SPI主设备进行写数据操 作。

所述模式寄存器存储有mode(数据传输模式)和prog_length(数据传输长 度)组成的16位信息。其中,所述数据传输模式即包括数据模式和命令模式, 也即包括大批量数据传输模式和小批量数据传输模式。

所述设备识别寄存器存储有soft_ver(SPI从设备版本)和spi_id(SPI从设 备标识)组成的24位SPI从设备标识信息。

所述校验信息寄存器用于存储CRC校验信息,所述CRC校验信息为16位, 用于检验SPI从设备1进行读操作或写操作的数据完整性。

在本申请实施例中,所述指令解码器112主要用以解码指令,所解码的指 令包括SPI主设备2输出的初始化指令以及读或者写指令。其中,所述SPI主设 备2输出的指令包括:READ_ID(设备标识读指令)、ADDR(地址扩展指令)、 CMD_MOD(数据传输模式指令)、READ2(读地址指令)、RDSR(状态校验 指令)、READ(读指令)、WREN(写地址指令)、WRITE(写指令)、WRDI(写 校验指令)。其中,READ_ID(设备标识读指令)、ADDR(地址扩展指令)、 CMD_MOD(数据传输模式指令)属于初始化指令;READ2(读地址指令)、 RDSR(状态校验指令)、READ(读指令)、WREN(写地址指令)、WRITE(写 指令)、WRDI(写校验指令)属于读或者写指令。

具体的,针对SPI主设备2输出的初始化指令的解码过程如下:

READ_ID为32位指令,高8位是指令标志位,低24位为ID值。参见图4, 解码READ_ID指令,从存储在设备识别寄存器中获得spi_id信息后反馈至SPI 主设备2。由于SPI主设备可以与多个SPI从设备进行通信,SPI主设备根据spi_id 信息中的SPI从设备标识便可片选一SPI从设备。同时,为了避免未被选中的 SPI从设备不工作时而将数据通过MISO线传输至SPI主设备,造成数据传输冲 突,因此将MISO信号线设置成高阻态,如图5所示,选中的SPI从设备将spi_id 信息通过MISO信号线反馈至SPI主设备。

ADDR为16位指令,高8位为指令标志位,低8位为地址位。传统兼容SPI Flash模式的地址位宽只有24位,对应存储空间为16M。解码ADDR指令,获 得的低8位地址位作为地址扩展位存储在地址寄存器中,扩展了SPI主设备对 SPI从设备地址宽8位的空间范围的读操作或写操作,使地址位宽达到32位, 实现了SPI主设备对SPI从设备4G存储空间的数据的自由访问。

CMD_MOD为24位指令,高8位为指令标志位,中间8位为数据传输模式, 低8位为数据传输长度。解码CMD_MOD指令,获得的SPI从设备的数据传输 模式及数据传输长度分别存储在模式寄存器中。所述数据传输模式用于实现工 作模式的选择,即获取是数据模式(Datamode)还是命令模式(Commandmode) 的信息。当选择数据模式时,所述SPI主设备可以实现对SPI从设备扩展存储空 间的访问并实现大批量数据传输。在数据模式下,SPI从设备支持数据块的传输 (正常情况下数据块的数据传输长度为256字节);当选择命令模式时(用户自 定义的模式),部分读或者写指令无需解码,且部分指令由主控单元进行解码, 所述SPI主设备可以实现对SPI从设备不扩展存储空间的访问并实现小批量数据 传输。所述数据传输长度的设置用于支持根据通信字节位的预设进行数据传输, 可实现预存储长度与实际存储长度的校验,保证了大量数据存储操作时的完整 性。

在完成了初始化指令的解码之后,所述指令解码器112将进一步对SPI主设 备2输出的读或者写指令进行解码,其中,SPI主设备2在输出读或者写指令时, 根据数据传输模式的不同,又具体分成如下四种情况:

1、数据模式下,SPI主设备2对SPI从设备1进行读操作时,将输出如下 指令:READ2、RDSR、READ,也就是说,所述指令解码器112将对上述指令 进行解码,具体过程如下:

READ2为32位指令,高8位为指令标志位,低24位为地址位。解析READ2 指令,将获得的READ2指令中的低24位地址位(addr2+addr1+addr0),结合 ADDR指令中的低8位地址位(addr3)构成了32位地址位,并存储在地址寄存 器中,由此便得到了SPI从设备1被操作的存储地址,实现了SPI主设备2对 SPI从设备1被操作的存储地址4G存储空间的数据的自由访问。

RDSR为32位指令,高16位的高8位为指令标志位,高16位的低8位为 SPI从设备提供给SPI主设备的状态位;低16位为读校验位。解析RDSR指令, 获得的状态位和校验信息分别存放在状态寄存器和校验信息寄存器中。根据SPI 从设备需要保护的存储空间范围,产生地址保护状态;根据用户需要,设置读 或写保护状态;根据校验要求,产生CRC校验信息。因此,地址保护状态位、 读或写保护状态位的设置实现了SPI主设备对SPI从设备进行读或写操作时的工 作安全性;CRC校验信息实现了SPI主设备读取SPI从设备数据的安全性保证。 RDSR指令以及相应的状态寄存器和校验信息寄存器,使SPI主设备对SPI从设 备进行读操作或写操作时,对SPI从设备支持多种保护模式(如存储空间保护、 读保护、写保护),以确保SPI从设备内存空间不会遭到破坏或被窃取,保证了 读数据的安全性。读状态位(rrdy)为SPI主设备对SPI从设备进行读数据操作 时需要满足的状态,当读状态位(rrdy)设为0时表示不允许状态,则不允许 SPI主设备对SPI从设备进行读数据操作,当读状态位(rrdy)设为1时表示允 许状态,则允许SPI主设备对SPI从设备进行读数据操作。

READ是一个不定长指令,最短为40位,最长为1056位,其中,最高32 位的高8位为指令标志位,最高32位的低24位为冗余地址位 (Addr2+Addr1+Addr0),剩余比特位为数据位。参见图6,READ指令中最高 32位的低24位地址位有助于SPI主设备有时间准备对SPI从设备进行数据读取。 解析READ指令,实现SPI主设备开始对SPI从设备被操作的存储地址存储的 数据进行读取。

2、数据模式下,SPI主设备2对SPI从设备1进行写操作时,将输出如下 指令:WREN、RDSR、WRITE、WRDI,也就是说,所述指令解码器112将对 上述指令进行解码,具体过程如下:

WREN为32位指令,高8位为指令标志位,低24位为地址位。解析WREN 指令,将WREN指令中获得的写使能状态位(wel)存储在状态寄存器中,将获 得的WREN指令中的低24位地址位(addr2+addr1+addr0)和ADDR指令中的 低8位地址位(addr3)构成了32位地址位,并存储在地址寄存器中,用于表示 SPI从设备被操作的存储地址,实现了SPI主设备对SPI从设备被操作的存储地 址4G存储空间的数据的自由访问。

写操作时解析RDSR指令所获得的信息,与读操作时解析RDSR指令所获 得的信息不同之处在于:对写使能状态位(wel)的设定;以及低16位的校验 位闲置。而根据校验要求,通过解析后续指令获得CRC校验信息。

WRITE为一个不定长指令,最短为40位,最长为1056位,其中,最高32 位的高8位为指令标志位,最高32位的低24位为冗余地址位。参见图7,WRITE 指令中最高32位的低24位地址位有助于SPI主设备有时间准备对SPI从设备进 行数据写入。解析WRITE指令,实现SPI主设备对SPI从设备被操作的存储地 址开始进行数据写入。

WRDI为24位指令,高8位为指令标志位,低16位为写校验位,解析WRDI 指令,获得的写完成状态位和CRC校验信息分别存储在状态寄存器和校验信息 寄存器中。CRC校验信息实现了SPI主设备写SPI从设备数据的安全性保证。

3、命令模式下,SPI主设备2对SPI从设备1进行读或者写操作时,具体 过程如下:

由于命令模式可自定义命令,因此可以在命令模式中预先设置与主控单元 30通信的信号,包括指令信息、SPI从设备被操作的存储地址以及设置相应的 状态位,而命令模式中的指令信息可定义数据传输长度,因此,命令模式非常 灵活。

SPI主设备对SPI从设备进行读操作时,绕过READ2指令,通过主控单元 解析RDSR指令,通过协议层解析READ指令,主控单元30可根据命令模式中 的指令信息所定义的数据传输长度,使得所述SPI主设备实现对SPI从设备被操 作的存储地址的读数据操作。

SPI主设备对SPI从设备进行写操作时,绕过WREN指令,通过主控单元 解析RDSR指令,通过协议层依次解析WRITE和WRDI指令,主控单元可根 据命令模式中的指令信息所定义的数据传输长度,使得所述SPI主设备实现对 SPI从设备被操作的存储地址的写数据操作。

所述指令解码器112对指令的解码功能主要如上所述,此外,所述指令解 码器112还可作为信号层110和功能层120之间数据传输的通道,具体的,通 过流接口将所述信号层110接收的数据传输给所述功能层120;或者将所述信号 层110要发送的数据从所述功能层120中读取,并传输给所述信号层110。

在本申请实施例中,所述逻辑控制器113主要用于对解码指令得到的指令 信息进行逻辑判断。具体的,通过将功能层120输出的SPI从设备的初始化信 息中的SPI从设备允许被读或写的地址空间与解码得到的SPI从设备被操作的存 储地址进行比较,以产生存储至状态寄存器中的状态位。

协议层110解码所得到的指令信息以及从信号层100接收的数据将进一步 通过功能层120,以进行后续处理。接下去将对所述功能层120做进一步描述。

功能层

请继续参考图2,在本申请实施例中,所述功能层120包括:循环冗余校验 器121、同步双向FIFO缓冲器122以及状态控制寄存器文件123;其中,所述 循环冗余校验器121用以对接收或者发送的数据进行CRC计算,获得CRC校 验信息;所述同步双向FIFO缓冲器122用以对信号层100将发送的数据或者接 收的数据予以缓存;所述状态控制寄存器文件123用以对SPI从设备的初始化 信息进行存储。

具体的,所述状态控制寄存器文件123通过总线接口与总线系统桥接设备 50连接,主控单元30将SPI从设备1的初始化信息通过总线系统桥接设备50 传输给状态控制寄存器文件123,状态控制寄存器文件123存储所述SPI从设备 1的初始化信息。

具体的,请参考图3,所述状态控制寄存器文件123包括控制寄存器子文件 和状态寄存器子文件,所述控制寄存器子文件中存储有SPICR信息,ADDR_HI 信息和ADDR_LO信息,DEV_ID信息和FIFO_LEVEL信息。

所述SPICR信息为16位,具体包括:RD_READY位,其表示功能层中的 同步双向FIFO缓冲器是否准备被读取的状态,置0为未准备被读取,置1为准 备被读取;WR_PROT位,其表示SPI从设备的地址区间是否写保护状态,置0 为不被保护允许写,置1为被保护不允许写;RD_PROT位,其表示SPI从设备 的地址区间是否读保护状态,置0为不被保护允许读,置1为被保护不允许读; DMA_EN位,其表示外部的DMAC使能状态,置0为DMAC不能工作,置1 为DMAC可工作;SPI_EN位,其表示SPI从设备和指令解码器使能状态,置0 为关闭信号层中的SPI时序控制器,以实现SPI从设备的SPI接口(SPIBus) 的关闭而不允许传输数据,且指令解码器不可工作,置1为开启信号层中的SPI 时序控制器,以实现SPI从设备的SPI接口的开启而允许传输数据,且指令解 码器可工作;CPHA位、CPOL位和XMT_CPOL位共同表示调整SPI时序控制 器接收和发送相位的选择的信息。

所述ADDR_HI信息和ADDR_LO信息共同构成SPI从设备的地址区间。 所述DEV_ID信息表示SPI从设备标识信息,所述SPI从设备标识信息与SPI 从设备版本、SPI从设备标识等信息相关。所述FIFO_LEVEL信息表示同步双 向FIFO缓冲器每次传输数据深度。

在本申请实施例中,所述状态寄存器子文件中存储有:SPI_SR信息、 PROG_LEN信息(数据传输长度)、FIFO_REST信息(剩余字节位)、ADDR_OP 信息(SPI从设备被操作的存储地址)、以及SPI_OP信息(数据传输方向位)。 在所述SPI_SR信息中存储有:主控单元和DMAC选择位、读中断查询信息、 写中断查询信息、以及各种用于主控单元的中断查询信息。

在本申请实施例中,所述同步双向FIFO缓冲器122与协议层110、状态控 制寄存器文件123连接,在状态控制寄存器文件123的控制下,通过流接口实 现输入和输出协议层的数据的缓存。具体的,请参考图8,在时钟clk的控制下, 数据有效线d_vld与SPI_OP信息决定的数据传输方向一致时,输出数据的一方 准备数据有效线;而接收数据的一方根据数据准备好d_rdy,将自己已准备好接 收数据的状态信息反馈至输出数据的一方,开始进行数据传输,可见所述流接 口的控制过程简单且功能完全。具体的,同步双向FIFO缓冲器122中缓存的数 据通过流接口传输至总线接口,再通过总线接口传输至系统总线桥接设备50, 进而传输存储模块20中;或者存储模块20的数据通过系统总线桥接设备50传 输至总线接口,再通过总线接口的流接口传输到同步双向FIFO缓冲器122中。

在本申请实施例中,所述功能层120还包括循环冗余校验器121,当SPI主 设备2与SPI从设备1之间具有校验协议时,所述循环冗余校验器121将SPI 从设备1输出(或输入)的数据进行循环冗余计算并获得CRC校验信息,而SPI 主设备2对输入(或输出)的数据也进行数据校验计算,获得CRC校验信息, 所述SPI从设备1计算获得的CRC校验信息与SPI主设备2计算获得的CRC 校验信息进行读写校验比较,SPI从设备1可判断写/读数据传输是否完整正确, SPI主设备2可判断读/写数据传输是否完整正确从而实现数据传输完整性保证。

综上可见,在本申请实施例提供的SPI从设备中,在数据模式下,可以实 现SPI主设备与SPI从设备之间进行大批量数据交换;在命令模式下,可以实现 SPI主设备与SPI从设备之间进行裸数据的交换,如两个芯片间的控制信息,以 实现小批量数据交换。所述命令模式非常灵活,可以自定义命令,由主控单元 解析命令及获取数据。

进一步的,在本发明实施例的中,通过使用同步双向FIFO缓冲器实现数据 缓存,与SPI主设备与传统SPI从设备之间进行数据交换时需要使用的异步FIFO 缓冲器相比,结构简单,速度快。

进一步的,在本发明实施例中,通过ADDR指令扩展了SPI主设备对SPI 从设备地址宽8位的空间范围的读操作或写操作,使地址位宽达到32位,实现 了SPI主设备对SPI从设备4G存储空间的数据的自由访问。

进一步的,在本发明实施例中,还通过RDSR等指令产生保护状态位,以 实现SPI主设备和SPI从设备间进行通信时的工作安全保证和传输安全保证,以 及数据传输的完整性保证。

在本申请实施例中,进一步还提供一种SPI通信系统,具体如下:

【SPI通信系统】

在本申请实施例中,所述SPI通信系统包括一个SPI主设备以及一个或者多 个与所述SPI主设备连接的SPI从设备。

在此,可相应参考图2,具体的,每一SPI从设备通过MISO(MasterOutSlave In)信号线、MISO(MasterInSlaveOut)信号线、Csn线号线和SCK信号线与 所述SPI主设备相连接。

其中,所述SPI从设备如上文所述,本申请实施例对此不再赘述;所述SPI 主设备与所述SPI从设备相应,其能够输出初始化指令:READ_ID(设备标识 读指令)、ADDR(地址扩展指令)、CMD_MOD(数据传输模式指令);以及读 或者写指令:READ2(读地址指令)、RDSR(状态校验指令)、READ(读指令)、 WREN(写地址指令)、WRITE(写指令)、WRDI(写校验指令),并据此与所 述SPI从设备进行通信,即对所述SPI从设备进行读或者写操作。

接下去,将通过SPI通信方法做进一步描述。

【SPI通信方法】

所述SPI通信方法包括:

步骤S10:提供一SPI通信系统,所述SPI通信系统包括一个SPI主设备以 及一个或者多个与所述SPI主设备连接的SPI从设备;

步骤S20:每个SPI从设备自身进行初始化;

步骤S30:所述SPI主设备对SPI从设备进行初始化,以使SPI从设备获取 数据传输模式;

步骤S40:在获取的数据传输模式下,所述SPI主设备对SPI从设备进行读 或者写操作。

接下去,将对每一个步骤做出进一步描述,具体如下:

步骤S20:每个SPI从设备自身进行初始化

在本申请实施例中,每个SPI从设备将自身的初始化信息存储在SPI控制器 中。具体的,在每个SPI从设备中,主控单元通过系统总线桥接设备将SPI从设 备的初始化信息存储在控制寄存器子文件中;将DEV_ID信息存储至协议层的 指令寄存器文件中的设备识别寄存器中;将SPI从设备是通过主控单元还是通 过DMAC进行数据传输的初始化信息存储在状态寄存器子文件中的SPI_SR信 息中。

步骤S30:所述SPI主设备对SPI从设备进行初始化,以使SPI从设备获取数据传输模式

在此,SPI主设备根据其要读/写的数据量、以及其与SPI从设备之间的通 信状态进行不同的初始化。

第一种情况

SPI主设备对SPI从设备要读/写的数据量比较大,具体的,SPI主设备将以 数据模式与SPI从设备进行读/写操作。同时,此次读/写操作是一项新任务并且 SPI主设备尚未知道所要通信的SPI从设备具体是哪个。则此时SPI主设备输出 的初始化指令包括:

SPI主设备先输出READ_ID指令;READ_ID指令通过MOSI信号线经每 个SPI从设备的信号层传输至协议层的指令解码器中进行解码;解码后,各SPI 从设备将协议层的指令寄存器文件中的设备识别寄存器所存储的DEV_ID信息 读取,并在信号层的异步时钟域控制器的控制下,经信号层并通过MISO信号 线输出至SPI主设备;SPI主设备根据反馈的DEV_ID信息、通过CSn信号线 对所有的SPI从设备进行片选,以使SPI主设备对选中的SPI从设备进行读或写 操作。

即SPI主设备首先获取需要通信的SPI从设备,也就是说从多个SPI从设备 中选取一个或者多个SPI从设备,接着针对选中的SPI从设备进行后续操作。其 中,选中的多个SPI从设备处于相同的地位,因此在本申请接下去的叙述中将 以一个选中的SPI从设备为例。

其中,SPI主设备向多个SPI从设备输出READ_ID指令是分时进行的。假 设,与SPI主设备连接的SPI从设备有四个,则首先,SPI主设备与第一个SPI 从设备通信,输出READ_ID指令并接收反馈信息,同时依据反馈信息判定是否 选中该第一个SPI从设备;接着,SPI主设备与第二个SPI从设备通信,输出 READ_ID指令并接收反馈信息,同时依据反馈信息判定是否选中该第二个SPI 从设备;依次类推,直至得出对连接的四个SPI从设备是否选中的信息。

接着,SPI主设备将输出ADDR指令(即此后开始对选中的SPI从设备进 行操作),SPI从设备的协议层对ADDR指令进行解码,将解码获得的地址扩展 位存储在指令寄存器文件中的地址寄存器中的高8位(addr3)上。

紧接着,SPI主设备输出CMD_MOD指令,SPI从设备的协议层对 CMD_MOD指令进行解码后,将解析获得的数据传输模式(mode)和数据传输 长度(prog_length)分别存储在指令寄存器文件中的模式寄存器中的高8位和低 8位上。进一步的,模式寄存器将数据传输长度prog_length存储在功能层的状 态控制寄存器中的状态寄存器子文件的PROG_LEN信息中。

由此,SPI主设备便完成了对于SPI从设备的初始化,接着便可对SPI从设 备进行读/写操作。此第一种情况可以认为是最完整的的初始化操作。

第二种情况

SPI主设备对SPI从设备要读/写的数据量比较大,具体的,SPI主设备将以 数据模式与SPI从设备进行读/写操作。SPI主设备已经选中了SPI从设备,此次 读/写操作是一项新任务,同时读/写操作的地址是新的(16M)地址空间。则此 时SPI主设备输出的初始化指令包括:

SPI主设备将输出ADDR指令,SPI从设备的协议层对ADDR指令进行解 码,将解码获得的地址扩展位存储在指令寄存器文件中的地址寄存器中的高8 位(addr3)上。

紧接着,SPI主设备输出CMD_MOD指令,SPI从设备的协议层对 CMD_MOD指令进行解码后,将解析获得的数据传输模式(mode)和数据传输 长度(prog_length)分别存储在指令寄存器文件中的模式寄存器中的高8位和低 8位上。进一步的,模式寄存器将数据传输长度prog_length存储在功能层的状 态控制寄存器中的状态寄存器子文件的PROG_LEN信息中。

由此,SPI主设备便完成了对于SPI从设备的初始化,接着便可对SPI从设 备进行读/写操作。

第三种情况

SPI主设备对SPI从设备要读/写的数据量比较大,具体的,SPI主设备将以 数据模式与SPI从设备进行读/写操作。SPI主设备已经选中了SPI从设备,此次 读/写操作是一项新任务,同时读/写操作的地址在原来的(16M)地址空间内。 则此时SPI主设备输出的初始化指令包括:

SPI主设备输出CMD_MOD指令,SPI从设备的协议层对CMD_MOD指令 进行解码后,将解析获得的数据传输模式(mode)和数据传输长度(prog_length) 分别存储在指令寄存器文件中的模式寄存器中的高8位和低8位上。进一步的, 模式寄存器将数据传输长度prog_length存储在功能层的状态控制寄存器中的状 态寄存器子文件的PROG_LEN信息中。

由此,SPI主设备便完成了对于SPI从设备的初始化,接着便可对SPI从设 备进行读/写操作。

第四种情况

SPI主设备对SPI从设备要读/写的数据量比较小,具体的,SPI主设备将以 命令模式与SPI从设备进行读/写操作。同时,SPI主设备尚未知道所要通信的 SPI从设备具体是哪个。则此时SPI主设备输出的初始化指令包括:

SPI主设备先输出READ_ID指令;READ_ID指令通过MOSI信号线经每 个SPI从设备的信号层传输至协议层的指令解码器中进行解码;解码后,各SPI 从设备将协议层的指令寄存器文件中的设备识别寄存器所存储的DEV_ID信息 读取,并在信号层的异步时钟域控制器的控制下,经信号层并通过MISO信号 线输出至SPI主设备;SPI主设备根据反馈的DEV_ID信息、通过CSn信号线 对所有的SPI从设备进行片选,以使SPI主设备对选中的SPI从设备进行读或写 操作。

即SPI主设备首先获取需要通信的SPI从设备,也就是说从多个SPI从设备 中选取一个或者多个SPI从设备,接着针对选中的SPI从设备进行后续操作。其 中,选中的多个SPI从设备处于相同的地位,因此在本申请接下去的叙述中将 以一个选中的SPI从设备为例。

其中,SPI主设备向多个SPI从设备输出READ_ID指令的过程与第一种情 况相同。

接着,SPI主设备输出CMD_MOD指令,SPI从设备的协议层对CMD_MOD 指令进行解码后,将解析获得的数据传输模式(mode)和数据传输长度 (prog_length)分别存储在指令寄存器文件中的模式寄存器中的高8位和低8 位上。进一步的,模式寄存器将数据传输长度prog_length存储在功能层的状态 控制寄存器中的状态寄存器子文件的PROG_LEN信息中。

由此,SPI主设备便完成了对于SPI从设备的初始化,接着便可对SPI从设 备进行读/写操作。

由于命令模式比较灵活,特别的,SPI主设备在命令模式中预先设置与主控 单元通信的信号,包括指令信息、SPI从设备被操作的存储地址以及设置相应的 状态位,而命令模式中的指令信息可定义数据传输长度。因此,在命令模式下, SPI主设备将不再输出ADDR指令。

第五种情况

SPI主设备对SPI从设备要读/写的数据量比较小,具体的,SPI主设备将以 命令模式与SPI从设备进行读/写操作,同时,SPI主设备已经选中了SPI从设备。 则此时SPI主设备输出的初始化指令包括:

SPI主设备输出CMD_MOD指令,SPI从设备的协议层对CMD_MOD指令 进行解码后,将解析获得的数据传输模式(mode)和数据传输长度(prog_length) 分别存储在指令寄存器文件中的模式寄存器中的高8位和低8位上。进一步的, 模式寄存器将数据传输长度prog_length存储在功能层的状态控制寄存器中的状 态寄存器子文件的PROG_LEN信息中。

由此,SPI主设备便完成了对于SPI从设备的初始化,接着便可对SPI从设 备进行读/写操作。

由此,SPI主设备根据其要读/写的数据量、以及其与SPI从设备之间的通 信状态完成对于SPI从设备的初始化。

步骤S40:在获取的数据传输模式下,所述SPI主设备对SPI从设备进行读或者写操作

当所述数据传输模式为数据模式时,SPI从设备的协议层解码SPI主设备输 出的读或写各指令,由解码获得的读或写地址位与地址扩展位形成SPI从设备 将被操作的存储地址并通过协议层设置相应的状态位,SPI控制器根据数据模式 下的数据传输长度以及SPI从设备将被操作的存储地址和状态位,响应SPI主 设备对选中的SPI从设备进行读或写操作。

当所述数据传输模式为命令模式时,SPI控制器中的协议层解码SPI主设备 输出的读或写各指令后,响应SPI主设备对SPI从设备进行读或写操作。其中, SPI从设备响应SPI主设备的读/写操作时,所涉及的读/写操作地址由主控单元 解码命令模式所携带的信息而提供。

请继续参考图9,具体的,当所述数据传输模式为数据模式时,SPI主设备 对选中的SPI从设备进行读操作的步骤包括:

步骤S41,SPI从设备的协议层对SPI主设备输出的READ2指令解码,获 得读地址位,所述读地址位存储在指令寄存器文件中的地址寄存器中的低24位 (addr2+addr1+addr0)上,此时,地址寄存器存储的32位地址位 (addr3+addr2+addr1+addr0)即为SPI从设备的存储模块被操作的存储地址。地 址寄存器将存储模块被操作的存储地址存储至状态寄存器子文件的ADDR_OP 信息中。所述SPI从设备的存储模块被操作的存储地址能实现扩展存储空间至 4G的访问能力。

SPI从设备的功能层中的同步双向FIFO缓冲器从存储模块中读数据或将 SPI从设备写数据的传输方向存储在SPI_OP信息中,当协议层的指令解码器将 SPI_OP信息存储至状态寄存器子文件中的SPI_SR信息后,指令解码器将发送 一读中断查询信息存储至SPI_SR信息。当主控单元通过系统总线桥接设备查询 到SPI_SR信息中的读中断查询信息时,通过系统总线桥接设备使SPI从设备获 知SPI主设备对SPI从设备被操作的存储地址开始读操作。

步骤S42,将SPI从设备的初始化信息(例如SPICR信息、SPI从设备允许 被读的地址区间)输出至协议层的逻辑控制器中,将SPI从设备被操作的存储 地址输出至逻辑控制器中,逻辑控制器将SPI从设备允许被读的地址区间与SPI 从设备被操作的存储地址进行比较:当SPI从设备允许被读的地址区间与SPI 从设备被操作的存储地址无交集时,即地址区间不合法,指令寄存器文件的状 态寄存器中存储有状态位,则所述状态位中的地址保护状态位(aprot)设为1, 逻辑控制器会输出一中断查询信息存储在SPI_SR信息中,主控单元查询SPI_SR 信息,获知SPI主设备对SPI从设备被操作的存储地址进行不适当的访问并请求 做处理(例如警告信息);当SPI从设备被操作的存储地址落入SPI从设备允许 被读的地址区间时,即地址区间合法,则所述状态位中的地址保护状态(aprot) 设为0,则逻辑控制器再根据SPICR信息决定状态位,如根据SPICR信息中的 RD_PROT位决定状态位中的读保护状态位(rprot),当RD_PROT位设为0,则 读保护状态(rprot)设为0。

步骤S43,SPI从设备的协议层通过指令解码器对SPI主设备输出的RDSR 指令解码,所述状态位反馈至SPI主设备,SPI主设备根据rprot为0,允许对 SPI从设备被操作的存储地址开始读操作,SPI主设备不断询问状态位,以便获 得状态位中的读状态位(rrdy),而读状态位(rrdy)的设置过程如下:

主控单元中断查询SPI_SR信息,若SPI_SR信息表示采用主控单元时,主 控单元将ADDR_OP信息作为SPI从设备的读操作的起始地址,根据所述SPI_OP 信息,按照数据模式下数据传输长度prog_length将SPI从设备被操作的存储地 址所存储的数据缓存到功能层中的同步双向FIFO缓冲器中。

若SPI_SR信息表示传输数据采用DMAC时,且SPICR信息中的DMA_EN 位设为1,DMAC将ADDR_OP信息作为SPI从设备的读操作的起始地址,将 SPI从设备被操作的存储地址存储的数据缓存到功能层中的同步双向FIFO缓冲 器中。

进一步的,如SPI主设备与SPI从设备之间具有校验协议,则通过功能层中 的循环冗余校验器对同步双向FIFO缓冲器接收到的数据进行循环冗余计算以获 得CRC校验信息,而所述CRC校验信息的最终值作为下一次计算的起始值。

在同步双向FIFO缓冲器接收数据时,根据剩余字节状态位(FIFO_REST 信息)计算剩余存储空间,当同步双向FIFO缓冲器存储空间字节已满,同步双 向FIFO缓冲器将SPI_SR信息中的RCV_FULL满存位设为1,则主控单元通过 中断查询RCV_FULL获知同步双向FIFO缓冲器为满存状态后,主控单元控制 存储模块停止向同步双向FIFO缓冲器传输数据,且通过同步双向FIFO缓冲器 将所述状态位中的读状态位(rrdy)设为1。

进一步的,同步双向FIFO缓冲器还可以根据FIFO_LEVEL信息所表示的 传输数据深度接收数据,同步双向FIFO缓冲器的存储空间为所述传输数据深度 的整数倍。

步骤S44,当所述状态位中的读状态位(rrdy)设为1时,协议层通过指令 解码器的流接口将所述状态位的数据并行传输至信号层,经相应的MISO信号 线将bit数据传输至SPI主设备。SPI主设备输出READ指令,协议层通过指令 解码器对READ指令解码后进行读操作,通过与所述状态位传输至SPI主设备 相同的路径。同时,功能层中的同步双向FIFO缓冲器将缓存的数据传输至SPI 主设备后,所述FIFO_REST计算出同步双向FIFO缓冲器中存储数据为空,同 步双向FIFO缓冲器将SPI_SR信息中的RCV_FULL满存位设为0,则主控单元 通过中断查询RCV_FULL获知同步双向FIFO缓冲器未存储数据后,主控单元 控制存储模块重新向同步双向FIFO缓冲器传输数据,且通过同步双向FIFO缓 冲器将所述状态位中的读状态位(rrdy)设为0。

进一步的,若同步双向FIFO缓冲器根据FIFO_LEVEL信息所表示的传输 数据深度接收数据时,SPI主设备输出READ指令,协议层通过指令解码器对 READ指令解码后进行读操作,当根据所述FIFO_REST计算出同步双向FIFO 缓冲器中存储数据未空,而主控单元通过中断查询RCV_FULL获知同步双向 FIFO缓冲器仍存在可输出的数据,功能层中的同步双向FIFO缓冲器将缓存的 数据按照所述传输数据深度所表示的数据分批次传输至SPI主设备后,所述 FIFO_REST计算出同步双向FIFO缓冲器中存储数据为空,同步双向FIFO缓冲 器将SPI_SR信息中的RCV_FULL满存位设为0,通过同步双向FIFO缓冲器将 所述状态位中的读状态位(rrdy)设为0,主控单元控制存储模块重新向同步双 向FIFO缓冲器传输数据。

直至按照数据传输长度将SPI从设备被操作的存储地址输出的数据传输至 SPI主设备。由于数据模式以获得的32位地址位作为SPI从设备被操作的存储 地址,不断重复步骤43和步骤44的读操作,直至将SPI从设备被操作的存储 地址的数据全部读出,因此SPI主设备对SPI从设备可实现4G存储空间的访问 并实现数据以批量方式的传输。

若功能层采用循环冗余校验器,则通过循环冗余校验器计算获得的CRC校 验信息的最终值存储至指令寄存器文件的校验信息寄存器中。

进一步的,还可以按照状态寄存器子文件中的PROG_LEN信息将SPI从设 备被操作的存储地址所存储的数据传输至SPI主设备。

若采用主控单元传输数据时,当所述数据传输长度PROG_LEN的数据按照 所述FIFO_LEVEL信息所表示的传输数据深度分批后,依次从存储模块被操作 的存储地址传输至同步双向FIFO缓冲器后,主控单元会获知存储模块被操作的 存储地址与同步双向FIFO缓冲器之间完成了所述数据传输长度PROG_LEN大 批量数据的传输,并通过功能层、协议层、信号层而通知SPI主设备完成了所 述数据传输长度的数据读操作;

若采用DMCA传输数据时,当所述数据传输长度PROG_LEN的数据按照 所述FIFO_LEVEL信息所表示的传输数据深度分批后,依次从存储模块被操作 的存储地址传输至同步双向FIFO缓冲器后,DMAC将SPI_SR信息中的 DMA_DONE位设为1,以使主控单元通过中断查询SPI_SR信息中的 DMA_DONE位而获知,同步双向FIFO缓冲器与存储模块之间完成了所述数据 传输长度PROG_LEN大批量数据的传输,并通过功能层、协议层、信号层而通 知SPI主设备完成了所述数据传输长度的数据读操作。

如SPI主设备与SPI从设备之间具有校验协议,则SPI主设备对接收的所述 数据传输长度的数据进行校验计算,那么SPI主设备计算获得的CRC校验信息, 与存储在校验信息寄存器中的CRC校验信息进行比对,来判断SPI从设备数据 传输是否完整正确,从而实现数据传输完整性保证。

具体的,SPI从设备通过循环冗余校验器进行CRC计算,获取CRC校验信 息。SPI主设备完成了对于SPI从设备数据的读取之后,再通过输出指令RDSR 获取SPI从设备计算得到的CRC校验信息;同时,SPI主设备对于接收的数据 进行CRC计算,获取CRC校验信息;接着,SPI主设备将接收的CRC校验信 息与自身计算的CRC校验信息进行比较,从而实现CRC校验,判断SPI从设 备数据传输是否完整正确,实现数据传输完整性保证。

请继续参考图9,当所述数据传输模式为数据模式时,SPI主设备对选中的 SPI从设备进行写操作的步骤包括:

步骤S51,SPI从设备的协议层对SPI主设备输出的WREN指令解码,获得 写地址位,所述写地址位存储在指令寄存器文件中的地址寄存器中的低24位 (addr2+addr1+addr0)上,此时,地址寄存器存储的32位地址位 (addr3+addr2+addr1+addr0)即为SPI从设备的存储模块被操作的存储地址。地 址寄存器将存储模块被操作的存储地址存储至状态寄存器子文件的ADDR_OP 信息中。所述SPI从设备的存储模块被操作的存储地址能实现扩展存储空间至 4G的访问能力。

SPI从设备的功能层中的同步双向FIFO缓冲器从存储模块中读数据或将 SPI从设备写数据的传输方向存储在SPI_OP信息中,当协议层的指令解码器将 SPI_OP信息存储至状态寄存器子文件中的SPI_SR信息后,指令解码器将发送 一写中断查询信息存储至SPI_SR信息中。当主控单元通过系统总线桥接设备查 询到SPI_SR信息中的写中断查询信息时,通过系统总线桥接设备使SPI从设备 获知SPI主设备对SPI从设备被操作的存储地址开始写操作。

步骤S52,步骤S52与步骤S42的不同之处在于:SPI从设备被操作的存储 地址落入SPI从设备允许被写的地址区间时,所述状态位中的地址保护状态 (aprot)设为0,则逻辑控制器再根据SPICR信息决定状态位,如根据WR_PROT 位决定写保护状态(wprot),当WR_PROT位设为0,写保护状态(wprot)设 为0。步骤S52的其他内容请参见步骤S42的内容,在此不再一一赘述。

步骤S53,SPI从设备的协议层通过指令解码器对SPI主设备输出的RDSR 指令解码,所述状态位反馈至SPI主设备,SPI主设备根据wprot为0,允许对 SPI从设备被操作的存储地址开始写操作,SPI主设备不断询问状态位,以便获 得状态位中的写使能状态位(wel),而写使能状态位(wel)的设置过程如下:

协议层通过指令解码器对SPI主设备输出的WRITE指令解码后,SPI主设 备输出bit数据,当WRITE指令完成后,协议层再解码SPI主设备输出的WRDI 指令,SPI主设备输出的bit数据依次经过信号层、协议层缓存至功能层,其中, 在信号层的异步时钟域控制器的控制下实现串并数据的转换,直至按照数据模 式下的数据传输长度将SPI主设备输出的bit数据缓存到功能层的同步双向FIFO 缓冲器中。而一旦所述功能层中缓存SPI主设备输出的bit数据时,功能层将所 述状态位中的写使能状态位(wel)为不允许状态(0)。

步骤S54,SPI主设备获得所述状态位中的写使能状态位(wel)设为0后, 主控单元或DMAC将同步双向FIFO缓冲器中缓存的数据通过系统总线桥接设 备传输至存储模块被操作的存储地址中。具体过程如下:

在同步双向FIFO缓冲器接收数据时,根据剩余字节状态位(FIFO_REST 信息)计算剩余存储空间,当同步双向FIFO缓冲器存储空间字节已满时,同步 双向FIFO缓冲器将SPI_SR信息中的RCV_FULL满存位设为1,则主控单元通 过中断查询到RCV_FULL获知同步双向FIFO缓冲器为满存状态后,主控单元 控制存储模块开始接收同步双向FIFO缓冲器传输的数据,当功能层中的同步双 向FIFO缓冲器中的数据全部传输至存储模块被操作的存储地址后,通过同步双 向FIFO缓冲器将所述状态位中的写使能状态位(wel)设为1。

进一步的,同步双向FIFO缓冲器还可以根据FIFO_LEVEL信息所表示的 传输数据深度接收数据,同步双向FIFO缓冲器的存储空间为所述传输数据深度 的整数倍。

主控单元中断查询SPI_SR信息时,若SPI_SR信息表示采用主控单元时, 主控单元将ADDR_OP信息作为存储模块的写操作的起始地址,根据所述 SPI_OP信息,将同步双向FIFO缓冲器中缓存的数据传输至存储模块被操作的 存储地址中,获得WRDI指令中的写完成状态位。

若SPI_SR信息表示传输数据采用DMAC时,且SPICR信息中的DMA_EN 位设为1,DMAC将ADDR_OP信息作为存储模块的写操作的起始地址,将同 步双向FIFO缓冲器中缓存的数据传输至存储模块被操作的存储地址中,获得 WRDI指令中的写完成状态位。

每当同步双向FIFO缓冲器中缓存的数据传输至存储模块被操作的存储地址 后,同步双向FIFO缓冲器将SPI_SR信息中的RCV_FULL满存位设为0,则主 控单元通过中断查询RCV_FULL获知同步双向FIFO缓冲器为开始写状态后, 同步双向FIFO缓冲器将所述状态位中的写使能状态位(wel)设为1。

直至按照数据传输长度将SPI主设备输出的数据传输至SPI从设备存储模块 被操作的存储地址。由于数据模式以获得的32位地址位作为SPI从设备存储模 块被操作的存储地址,不断重复步骤S53和步骤S54的写操作,直至SPI主设 备输出的数据将SPI从设备的存储模块被操作的存储地址写满,因此SPI主设备 对SPI从设备可实现4G存储空间的访问并实现以批量方式的传输。

若采用主控单元传输数据时,当所述数据传输长度PROG_LEN的数据按照 所述FIFO_LEVEL信息所表示的传输数据深度分批后,依次从同步双向FIFO 缓冲器传输至存储模块被操作的存储地址后,主控单元会获知同步双向FIFO缓 冲器与存储模块之间完成了所述数据传输长度PROG_LEN大批量数据的传输, 并通过功能层、协议层、信号层而通知SPI主设备完成了所述数据传输长度的 数据写操作;

若采用DMAC传输数据时,当所述数据传输长度PROG_LEN的数据按照 所述FIFO_LEVEL信息所表示的传输数据深度分批后,依次从存储模块传输至 同步双向FIFO缓冲器后,DMAC将状态寄存器子文件中的SPI_SR信息中的 DMA_DONE位设为1,以使主控单元通过中断查询中的DMA_DONE位而获知, 同步双向FIFO缓冲器内存地址与存储模块之间完成了所述数据传输长度 PROG_LEN大批量数据的传输,并通过功能层、协议层、信号层而通知SPI主 设备完成了所述数据传输长度的数据读操作。

进一步的,如SPI主设备与SPI从设备之间具有校验协议,则SPI控制器通 过功能层中的循环冗余校验器对同步双向FIFO缓冲器接收到的数据进行循环冗 余计算以获得WRDI指令中的CRC校验信息,而所述CRC校验信息的最终值 作为下一次计算的起始值,直至获得所述CRC检验信息的最终值;SPI主设备 对输出的数据也进行CRC校验计算,那么SPI主设备计算获得的CRC校验信 息,与存储在校验信息寄存器中的CRC校验信息进行读写校验比对,来判断SPI 从设备数据接收是否完整正确,从而实现数据传输完整性保证。

请参考图10,当所述数据传输模式为命令模式时,SPI主设备对选中的SPI 从设备进行读操作的步骤包括:

步骤S61,主控单元根据所述命令模式定义获得数据传输长度、SPI从设备 将被操作的存储地址以及对SPI从设备将被操作的存储地址设置相应的状态位, 所述状态位设置地址保护状态(aprot)为0,读保护状态位(rprot)为0。

步骤S62,SPI主设备输出RDSR指令,协议层对RDSR指令解码,所述状 态位反馈至SPI主设备,SPI主设备根据rprot为0,允许对SPI从设备被操作的 存储地址开始读操作,SPI主设备不断询问状态位,以便获得状态位中的读状态 位(rrdy),而所述状态位中的读状态位(rrdy)的设置过程如下:

主控单元根据命令模式中指令信息所定义的数据传输长度,将存储模块被 操作的存储地址所存储的数据传输到功能层中的同步双向FIFO缓冲器中。数据 传输完成后,主控单元控制存储模块停止向同步双向FIFO缓冲器传输数据,且 主控单元直接将所述状态位中的读状态位(rrdy)设为1。

进一步的,同步双向FIFO缓冲器还可以根据FIFO_LEVEL信息所表示的 传输数据深度接收数据,同步双向FIFO缓冲器的存储空间为所述传输数据深度 的整数倍。

步骤S63,当SPI主设备接收到所述状态位中的读状态位(rrdy)为1时, SPI主设备输出READ指令,与READ_ID指令输入至协议层中的指令解码器 一样,协议层中的指令解码器对READ指令解码后进行读操作,并按照步骤S44 中关于同步双向FIFO缓冲器中的数据向SPI主设备输出的过程一样,直至按照 命令模式下的数据传输长度将SPI主设备所需的数据传输至SPI主设备,READ 指令完成后主控单元将所述状态位中的读状态位(rrdy)设为0。

由于主控单元根据命令模式中指令信息所定义的数据传输长度,将SPI从 设备的存储模块被操作的存储地址存储的数据输出至SPI主设备,因此命令模 式下,SPI主设备与SPI从设备之间的通信过程简单、从而提高了数据传输效率。

请继续参考图10,当所述数据传输模式为命令模式时,SPI主设备对选中 的SPI从设备进行写操作的步骤包括:

步骤S71,主控单元根据所述命令模式定义获得数据传输长度、SPI从设备 将被操作的存储地址以及对SPI从设备将被操作的存储地址设置相应的状态位, 所述状态设置地址保护状态(aprot)为0,写保护状态位(wprot)为0。

步骤S72,SPI主设备输出RDSR指令,协议层对RDSR指令解码,所述状 态位反馈至SPI主设备,SPI主设备根据wprot为0,允许对SPI从设备的存储 模块被操作的存储地址开始写操作,SPI主设备不断询问所述状态位,以便获得 状态位中的写使能状态位(wel),而所述状态位中的写使能状态位(wel)的设 置过程如下:

SPI从设备协议层通过指令解码器对SPI主设备输出的WRITE指令解码后, SPI主设备输出bit数据,当WRITE指令完成后,协议层再解码SPI主设备的 WRDI指令,功能层根据所述命令模式下的数据传输长度,缓存经过信号层、协 议层的SPI主设备输出的bit数据,同时,所缓存的数据在信号层的异步时钟域 控制器的控制下实现串并数据的转换。而一旦所述功能层中缓存SPI主设备输 出的bit数据时,主控单元将所述状态位中的写使能状态位(wel)为不允许状 态(0)。

步骤S73,当所述状态位中的写使能状态位(wel)为0时,同步双向FIFO 缓冲器存满所述命令模式下的数据传输长度对应的数据后,同步双向FIFO缓冲 器向主控单元发送中断请求,主控单元处理所述同步双向FIFO缓冲器中的数据。 具体的,主控单元将同步双向FIFO缓冲器缓存的数据传输至存储模块被操作的 存储地址中,接着主控单元将所述状态位中的写使能状态位(wel)设为1。当 写使能状态位(wel)设为1时,可按照步骤S54中关于所述状态位通过指令解 码器向SPI主设备输出的过程一样,通知SPI主设备开始写数据。

当SPI主设备完成数据输出时,SPI从设备的协议层通过指令解码器对SPI 主设备输出的WRDI指令解码,得到写操作完成信息以及CRC校验信息。

进一步的,如SPI主设备与SPI从设备之间具有校验协议,则SPI控制器通 过功能层中的循环冗余校验器对同步双向FIFO缓冲器接收到的数据进行循环冗 余计算以获得WRDI指令中的CRC校验信息,而所述CRC校验信息的值作为 下一次计算的起始值,直至获得所述CRC检验信息的最终值;SPI主设备对输 出的数据也进行CRC校验计算,那么SPI主设备计算获得的CRC校验信息, 与通过写校验指令解码获得的CRC校验信息进行比对,来判断SPI从设备数据 接收是否完整正确,从而实现数据传输完整性保证。

综上可见,所述SPI从设备可以在数据模式和命令模式两种数据传输模式 中选择一种进行工作,从而实现SPI主设备对SPI从设备不同存储空间的访问。 特别的,在数据模式下,可实现SPI主设备对SPI从设备扩展至4G的存储空间 的访问和实现大批量数据传输;而在命令模式下,可实现SPI主设备对SPI从设 备不扩展的存款空间的访问和实现小批量数据传输,克服了传统SPI从设备工 作模式单一和SPI从设备可供主设备访问的存储空间小的问题。

由于SPI主设备根据RDSR指令解码获得的SPI从设备被操作的存储地址 的状态允许进行读或写操作,方能对SPI从设备进行访问,因此对SPI主设备访 问SPI从设备进行保护,包括SPI从设备地址保护、读或写保护,避免SPI主设 备和SPI从设备间进行通信时,SPI从设备没有工作安全保证,容易造成SPI从 设备中数据丢失或被破坏。并且,通过所述循环冗余校验器对SPI从设备输入 输出数据进行校验,避免了传统的SPI从设备不支持预存储数据和实际存储数 据的校验,保证了每次以所述数据传输长度为单位数据传输的完整性和安全性。

此外,所述异步时钟域控制器利用所述信号层串并转换传输时的时钟空隙, 达成并行数据的异步时钟域转换,从而避免了异步FIFO缓冲器的使用,以使 SPI从设备结构简单,提高了传输数据速率。

上述描述仅是对本发明较佳实施例的描述,并非对本发明范围的任何限 定,本发明领域的普通技术人员根据上述揭示内容做的任何变更、修饰,均属 于权利要求书的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号