CN104331385A - 一种串行外围接口的高速半硬件实现方法 - Google Patents
一种串行外围接口的高速半硬件实现方法 Download PDFInfo
- Publication number
- CN104331385A CN104331385A CN201410689233.7A CN201410689233A CN104331385A CN 104331385 A CN104331385 A CN 104331385A CN 201410689233 A CN201410689233 A CN 201410689233A CN 104331385 A CN104331385 A CN 104331385A
- Authority
- CN
- China
- Prior art keywords
- data
- gpio
- spi
- module
- sent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
- G06F13/282—Cycle stealing DMA
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
Abstract
一种串行外围接口的高速半硬件实现方法,CPU建立用于将待发送的SPI数据转换成GPIO端口驱动数据的预解析数组表,将待发送的SPI数据拆分成与预解析数组表中的数据具有同样位宽的数据组合,通过查询预解析数组表,将待发送的SPI数据组合解析成驱动GPIO端口的驱动数据,将解析后的GPIO端口驱动数据连续地存储,以便于DMA模块搬运,DMA模块将连续存储的GPIO端口驱动数据搬运至GPIO模块端口,将数据写入GPIO数据寄存器,驱动GPIO模块的时钟线和数据线同时翻转。本发明大大降低了CPU工作量,提高了系统工作效率,充分发挥了DMA的数据快速搬运优势,使得SPI通信速率也大大提高。
Description
技术领域
本发明涉及一种串行外围接口的高速半硬件实现方法,尤其涉及一种利用DMA(直接访问存储器)与GPIO(通用输入输出)结合来实现串行外围接口功能的半硬件方法,适用于没有SPI(串行外围接口)硬件模块又需要使用SPI进行高速通信的应用场景。
背景技术
SPI接口的全称是“Serial Peripheral Interface”,意为串行外围接口,是一种高速、全双工、同步的通信总线,并且连线简单,节省电路空间,近年来得到了非常广泛的应用。
SPI通信通常采用硬件方式实现,硬件方式实现优点是速度快,不需要CPU全程参与,系统效率高。但是在没有SPI硬件的应用中,只能用软件模拟的方式实现SPI通信。
目前SPI通信中,有很大一部分应用是主机采用软件的方式(即通过GPIO(通用输入输出)端口产生高低电平) 模拟SPI通信协议与从设备进行通信。尤其是一些比较低端的通用单片机控制器芯片MCU中常常不集成SPI模块,主机用软件方式模拟SPI端口的应用方式就更为普遍。
图1是目前普遍采用的软件方式SPI方法的示意图,目前普遍采用的软件方式SPI通信是首先将待发送SPI通信数据通过CPU逐位比较的方式转换成串行数据(0/1),同时还要驱动其他GPIO端口按SPI时钟翻转产生CLK信号,然后根据串行数据在GPIO端口产生SPI通信需要的时钟驱动和数据驱动(GPIO端口翻转),这整个过程需要在CPU控制下完成,占用了大量CPU资源。
这种方法方便可行,省去了对控制器集成SPI模块的要求也降低了硬件成本,缩短了开发周期。但是由于通过软件方式模拟SPI通信在GPIO端口上产生翻转需要花费大量的CPU时间, CPU需要全程参与对每一个SPI数据的逐位解析和驱动,通信速度和系统效率都大大降低,系统最快通信速率受限于系统工作频率,通信速度很难提高,成为这种应用方式的瓶颈。
发明内容
本发明提供一种串行外围接口的高速半硬件实现方法,利用DMA模块和GPIO模块实现通信过程,而CPU只要在通信之前完成对待发送数据的解析即可,这种半硬件实现方法大大降低了CPU工作量,提高了系统工作效率,充分发挥了DMA的数据快速搬运优势,使得SPI通信速率也大大提高。
为了达到上述目的,本发明提供一种串行外围接口的高速半硬件实现方法,利用DMA模块和GPIO模块来实现串行外围接口的数据通信功能,CPU仅需要在通信之前将待发送的SPI数据解析成GPIO端口驱动数据,该高速半硬件实现方法包含以下步骤:
CPU建立用于将待发送的SPI数据转换成GPIO端口驱动数据的预解析数组表,通过查询预解析数组表,将待发送的SPI数据解析成驱动GPIO端口的驱动数据,解析后的GPIO端口驱动数据需连续地存储,以便于DMA模块搬运;
DMA模块将连续存储的GPIO端口驱动数据搬运至GPIO模块端口,驱动GPIO模块的时钟线和数据线同时翻转。
所述的预解析数组表是用于将待发送的SPI数据变换成GPIO端口驱动数据的一个映射方法。
先将待发送的SPI数据拆分成与预解析数组表中的数据具有同样位宽的数据组合后,再通过查询预解析数组表,将待发送的SPI数据组合解析成驱动GPIO端口的驱动数据。
在DMA模块将连续存储的GPIO端口驱动数据搬运至GPIO模块端口的数据搬运过程中,完全由DMA模块完成数据搬运,即实现对GPIO端口的驱动,由DMA模块和GPIO模块完成SPI模拟通信过程,不需要CPU的参与,提高了系统的运行效率和模拟SPI的通信速度。
本发明与背景技术相比,具有以下优点:
1、传统软件SPI传输需要将待传数据通过CPU逐位比较的方式转换成串行数据(0/1),而本发明创建的预解析数组表将这个逐位解析的过程通过建立查表的方式进行代替,一次查表代替CPU的比较时钟和比较数据线两个动作,创建速度快。
2、预解析数组表创建的方式考虑了DMA传输的特殊要求,使得通过DMA的一次数据搬运动作可以同时完成对数据引脚和时钟引脚的驱动,不占用CPU资源,驱动速度快。
3、采用了数据拆分的方法减小存储的解析数组的大小,减少了系统资源占用。
4、CPU只要在通信之前完成对待发送数据的解析即可,通信过程由DMA和GPIO硬件实现,所以称为是半硬件的实现方式,相比纯软件的SPI实现方式,本发明提出的半硬件方式大大降低了CPU工作量,提高了系统工作效率,充分发挥了DMA的数据快速搬运优势,使得SPI通信速率也大大提高。
附图说明
图1是背景技术中软件方式SPI方法的示意图。
图2是通用单片机MCU的电路模块框图。
图3是本发明的流程图。
图4是本发明的功能示意图。
图5是对本发明进行验证的波形图。
具体实施方式
以下根据图2~图5,具体说明本发明的较佳实施例。
如图2所示,是一个通用单片机MCU的电路模块框图,该MCU包含CPU101,以及分别电性连接CPU101的直接访问存储器(DMA)102、通用输入输出接口(GPIO)103、串行外围接口(SPI)104、静态随机存储器(SRAM)105、只读存储器(ROM)106、闪存(Flash)107、计时器(TIMER)108和看门狗电路(Watchdog)109和通用异步收发器(UART)110。在很多应用中,除了使用单片机MCU自带的SPI接口模块,也会通过GPIO模拟SPI接口来实现某些功能。
Direct Memory Access(直接访问存储器DMA)是一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预,整个数据传输操作在直接访问存储器DMA的控制下进行。
如图3所示,本发明提供一种串行外围接口的高速半硬件实现方法,包含以下步骤:
步骤1、对系统进行初始化配置并设定SPI通讯协议。
所述的初始化配置包含:配置堆载、配置时钟频率(如48MHz)、中断设置,及配置外设接口GPIO和DMA。
所述的设定SPI通讯协议包含:SPI协议中可以规定在系统时钟CLK的上升沿或者下降沿读取SPI数据线MOSI线上的数据,也可以选择发送的数据是LSB(低位)在先还是MSB(高位)在先。
本实施例中,以SPI模拟为例,SPI接口有4个信号:MOSI(主出从入),MISO(主入从出),CLK(SPI时钟),SS(从设备选择),本实施例中设置在系统时钟CLK的上升沿读取MOSI线上的数据,高位在先。
步骤2、CPU建立用于将待发送的SPI数据转换成GPIO端口驱动数据的预解析数组表,该预解析数组表同时包含时钟线和数据线的驱动信息。
所述的预解析数组表是专门用于将待发送的SPI数据变换成GPIO端口驱动数据的一个映射方法,是在DMA模块搬运待发送数据之前对待发送数据进行预处理的一个关键步骤。
8bit位宽数据数值范围为[0x00-0xff],为了减小预处理数组大小,只对4bit位宽数据[0x0-0xf]区间建立预解析数组表,一个8位宽数据可通过拆分成两个4位宽数据,然后查预解析数组表而得。
GPIO模块共8个引脚,向GPIO模块的8位数据寄存器的对应位写入1则驱动相应GPIO模块的引脚为高,写入0则驱动相应GPIO模块的引脚为低。本实施例中采用GPIO模块的第3、4号引脚,3号引脚对应时钟线CLK,4号引脚对应数据线MOSI,向GPIO模块的8位输出寄存器写入0x04则驱动GPIO模块的3号引脚为高,写入0x08则驱动GPIO模块的4号引脚为高。
假设模拟SPI发送4bit位宽数据4’0000b,同时驱动GPIO模块的时钟线(GPIO引脚3)和数据线(GPIO引脚4),则GPIO模块的数据寄存器应该顺序写入的数据为:0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,对于小端MCU(小端MCU就是将最低有效位LSB存放在最低端的地址上),DMA源数据区用字方式(对于DMA方式来说,有源数据与目的数据之说,DMA开始运行后,将数据从源数据区搬运到目的数据区,对32位的CPU来说,一个字包含4个字节,字方式访问就是每次读写的操作对象长度都是4个字节)访问时应该存储的源数据为0x04000400,0x04000400,而对于大端MCU(大端MCU就是将最高有效位MSB存放在最低端的地址上),DMA源数据区用字方式访问时应该存储的源数据为0x00040004,0x00040004。发送1-f可依次类推。
以小端MCU为例,所述的小端MCU预解析数组表的内容如下:
数值范围为[0x00-0xff]的8位宽数据可由预解析数组表中的解析数组[0-f]组合而成。
步骤3、CPU将待发送的SPI数据拆分成与预解析数组表中的数据具有同样位宽的数据组合,通过查询预解析数组表,将待发送的SPI数据组合解析成驱动GPIO端口的驱动数据,将解析后的GPIO端口驱动数据连续地存储在静态随机存储器SRAM中。
本实施例中,将待发送的SPI数据[0x00-0xff]拆分成[0x0-0xf]的组合,通过查询步骤2中建立的预解析数组表,转换成实际发送使用的驱动数组,比如待发送的SPI数据0x78的驱动数据就是[0x0c080400,0x0c080c08,0x7, 0x04000c08, 0x04000400, 0x8]。
在静态随机存储器SRAM中建立连续存储区域,用于存储解析后的GPIO端口驱动数据,为DMA模块的数据搬运做准备。
步骤4、DMA模块将连续存储的GPIO端口驱动数据搬运至GPIO模块端口,将数据写入GPIO数据寄存器。
DMA模块在CPU不参与的情况下直接将连续存储的GPIO端口驱动数据搬运至GPIO模块端口,在GPIO端口上产生软件模拟的SPI数据通信波形,每一次数据写入都驱动GPIO模块的时钟线和数据线同时翻转。
步骤5、判断是否仍有SPI数据需要发送,若是,则进行步骤3,若否,则结束。
图4是本发明在SPI通信应用中所处的位置,SPI的通信应用是基于SPI协议实现的,即需要完成基本的数据接收和发送动作。本发明是对软件方式模拟SPI发送方法的改进,可以代替纯软件或纯硬件SPI发送模块实现高速SPI数据发送,并且可在系统时钟不变的情况下提高软件方式SPI发送的通信速率。
图5是对本发明提供的一种串行外围接口的高速半硬件实现方法进行验证的GPIO端口翻转波形,由波形可知GPIO端口产生的驱动波形完全符合SPI通信协议要求,可以实现软件SPI通信功能。
由图5框中A-T,A-B计时数据可知,通过本发明提出的利用单片机MCU内DMA模块和GPIO模块这两个硬件资源相结合的方式产生软件模拟SPI波形的字节发送速度约为1us/byte,即8M bps,而相同系统时钟条件下完全由单片机MCU的CPU产生软件模拟SPI波形的传输速度约为1M bps,可见,本发明的方法将通信速率提高8倍以上。
本发明采用的技术方案是基于芯片内置的DMA 模块和GPIO模块,在不通过CPU干预的方式下将数据直接从存储器写到GPIO数据寄存器。CPU除了在数据传输开始和结束时做一点处理工作外,在通信过程中CPU可以继续进行其他的工作。这样,在大部分时间里,CPU和DMA模块、GPIO模块处于并行操作,通信速率不再取决于系统工作频率,而是由DMA模块搬运数据的速度和GPIO模块的翻转速度决定。因此,本发明提出的半硬件方式SPI的通信速率相比纯软件方式可大大提高SPI的通信速率,系统工作效率也得到提高。同时通过建立预解析数组表这种高效的解析协议,保证通信数据能够被快速解析和正确组织,从而能够通过DMA方式产生正确的端口驱动来模拟SPI通信协议。
本发明解决了在目前软件模拟SPI通信遇到的技术难点,提供一个在系统时钟不变的条件下利用单片机MCU的现有硬件资源组合进而实现更高性能和更快速率的SPI发送方案。能够解决软件模拟SPI方式的应用瓶颈。尤其适用于时钟速率有上限或产品芯片已经选定,电路结构不易改变的系统。本发明可以将软件模拟SPI的发送速率在系统时钟不变的情况下提升8倍以上。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
Claims (4)
1.一种串行外围接口的高速半硬件实现方法,其特征在于,利用DMA模块和GPIO模块来实现串行外围接口的数据通信功能,CPU仅需要在通信之前将待发送的SPI数据解析成GPIO端口驱动数据,该高速半硬件实现方法包含以下步骤:
CPU建立用于将待发送的SPI数据转换成GPIO端口驱动数据的预解析数组表,通过查询预解析数组表,将待发送的SPI数据解析成驱动GPIO端口的驱动数据,解析后的GPIO端口驱动数据需连续地存储,以便于DMA模块搬运;
DMA模块将连续存储的GPIO端口驱动数据搬运至GPIO模块端口,驱动GPIO模块的时钟线和数据线同时翻转。
2.如权利要求1所述的串行外围接口的高速半硬件实现方法,其特征在于,所述的预解析数组表是用于将待发送的SPI数据变换成GPIO端口驱动数据的一个映射方法。
3.如权利要求1所述的串行外围接口的高速半硬件实现方法,其特征在于,先将待发送的SPI数据拆分成与预解析数组表中的数据具有同样位宽的数据组合后,再通过查询预解析数组表,将待发送的SPI数据组合解析成驱动GPIO端口的驱动数据。
4.如权利要求1所述的串行外围接口的高速半硬件实现方法,其特征在于,在DMA模块将连续存储的GPIO端口驱动数据搬运至GPIO模块端口的数据搬运过程中,完全由DMA模块完成数据搬运,即实现对GPIO端口的驱动,由DMA模块和GPIO模块完成SPI模拟通信过程,不需要CPU的参与,提高了系统的运行效率和模拟SPI的通信速度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410689233.7A CN104331385A (zh) | 2014-11-26 | 2014-11-26 | 一种串行外围接口的高速半硬件实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410689233.7A CN104331385A (zh) | 2014-11-26 | 2014-11-26 | 一种串行外围接口的高速半硬件实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104331385A true CN104331385A (zh) | 2015-02-04 |
Family
ID=52406115
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410689233.7A Pending CN104331385A (zh) | 2014-11-26 | 2014-11-26 | 一种串行外围接口的高速半硬件实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104331385A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113515475A (zh) * | 2021-04-30 | 2021-10-19 | 深圳市杰理微电子科技有限公司 | 数据传输方法、装置和系统 |
CN114721317A (zh) * | 2022-06-02 | 2022-07-08 | 中国船舶重工集团公司第七0七研究所 | 一种基于spi控制器网络通讯控制系统及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101382927A (zh) * | 2008-09-25 | 2009-03-11 | 杭州爱威芯科技有限公司 | 集成在芯片内的高速串行外围接口电路 |
CN201336032Y (zh) * | 2009-01-22 | 2009-10-28 | 天津理工大学 | 一种软件模拟串行数据传输装置 |
CN102495818A (zh) * | 2011-12-09 | 2012-06-13 | 上海爱信诺航芯电子科技有限公司 | 一种提高软件方式spi通信速率的方法 |
-
2014
- 2014-11-26 CN CN201410689233.7A patent/CN104331385A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101382927A (zh) * | 2008-09-25 | 2009-03-11 | 杭州爱威芯科技有限公司 | 集成在芯片内的高速串行外围接口电路 |
CN201336032Y (zh) * | 2009-01-22 | 2009-10-28 | 天津理工大学 | 一种软件模拟串行数据传输装置 |
CN102495818A (zh) * | 2011-12-09 | 2012-06-13 | 上海爱信诺航芯电子科技有限公司 | 一种提高软件方式spi通信速率的方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113515475A (zh) * | 2021-04-30 | 2021-10-19 | 深圳市杰理微电子科技有限公司 | 数据传输方法、装置和系统 |
CN113515475B (zh) * | 2021-04-30 | 2024-08-02 | 深圳市杰理微电子科技有限公司 | 数据传输方法、装置和系统 |
CN114721317A (zh) * | 2022-06-02 | 2022-07-08 | 中国船舶重工集团公司第七0七研究所 | 一种基于spi控制器网络通讯控制系统及方法 |
CN114721317B (zh) * | 2022-06-02 | 2022-09-16 | 中国船舶重工集团公司第七0七研究所 | 一种基于spi控制器网络通讯控制系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109828941B (zh) | Axi2wb总线桥实现方法、装置、设备及存储介质 | |
CN101599053B (zh) | 支持多种传输协议的串行接口控制器及控制方法 | |
EP3820048A1 (en) | Data compression and decompression method and related apparatus, electronic device, and system | |
US10055376B1 (en) | Serial peripheral interface system with slave expander | |
CN108132897B (zh) | 一种基于zynq平台软核的srio控制器 | |
CN110297797B (zh) | 异构协议转换装置和方法 | |
CN102495818A (zh) | 一种提高软件方式spi通信速率的方法 | |
CN105468547A (zh) | 一种基于axi总线的便捷可配置帧数据存取控制系统 | |
EP2985699A1 (en) | Memory access method and memory system | |
CN114817114B (zh) | 一种mipi接口、及其控制方法、装置及介质 | |
CN105786741B (zh) | 一种soc高速低功耗总线及转换方法 | |
CN107346170A (zh) | 一种fpga异构计算加速系统及方法 | |
CN106980587B (zh) | 一种通用输入输出时序处理器及时序输入输出控制方法 | |
WO2020087276A1 (zh) | 大数据运算加速系统和芯片 | |
CN112199317A (zh) | 一种RISCV处理器访问Flash存储器的桥接系统及其桥接方法 | |
CN105279123A (zh) | 双冗余1553b总线的串口转换结构及转换方法 | |
CN104331385A (zh) | 一种串行外围接口的高速半硬件实现方法 | |
CN112256331B (zh) | 虚拟机指令解析加速方法、装置和计算机存储介质 | |
Kim et al. | Compression accelerator for hadoop appliance | |
CN104778197B (zh) | 一种数据查找方法及装置 | |
CN210402342U (zh) | 一种基于zynq的数据加解密结构 | |
CN110856195B (zh) | 射频组件的配置系统及方法 | |
US20070110086A1 (en) | Multi-mode management of a serial communication link | |
CN204721360U (zh) | 基于协议处理fpga的光纤总线系统 | |
CN111079922B (zh) | 基于axi-apb的神经网络交互系统、方法、服务器及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150204 |