FPGA和CPU间SDIO通信接口实现方法、及装置与流程

文档序号:16133933发布日期:2018-12-01 00:40阅读:2622来源:国知局

本发明涉及fpga和cpu数据通信接口的应用技术领域,尤其涉及一种fpga和cpu间sdio(安全数字输入输出)通信接口实现方法、及装置。

背景技术

fpga已经被越来越广泛的应用到了各种电子产品中,不同生产商、不同型号的fpga价格相差较多,并且fpga的ip核支持的接口也不相同。

同时cpu对通信协议的支持也存在着限制。fpga和cpu的通信接口有的速率太低不能满足应用需求,有的协议复杂fpga端难于实现。

因此,在实际的使用过程中,怎样保证高通信速率、低误码率,怎样提高代码的可移植性、通信的可靠性成为了当前需要解决的问题。

参见图1,传统的cpu和fpga的通信如下:

1、低速易实现通信协议

此种通信协议主要包括uart、iic、spi等,这些通信协议对于cpu或者fpga来说实现起来都比较简单,但是传输速率较低,在通信速率较高的场合不能够使用。

2、高速数据通信协议

高速的通信协议比较常用的是mac,此种通信协议对于cpu来说实现起来比较容易,但是对于fpga来说,厂家提供mac核的fpga实现起来比较容易,对于部分国产fpga来说不带mac核。实现起来比较困难,工作量大。针对一些自定义的通信接口,fpga侧实现起来可能较为简单,但是cpu侧有linux操作系统,设计到驱动程序的编写和移植工作。工作量大,对人员的要求高,实现起来比较困难,通信的可靠性也不能够得到保障。



技术实现要素:

本发明提供了一种fpga和cpu间sdio通信接口实现方法、及装置,本发明实现了cpu作为主设备,fpga作为从设备的自定义sdio通信接口,满足了非高速接口的通信需求,详见下文描述:

一种fpga和cpu间sdio通信接口实现方法,所述方法包括:所述fpga对接收到的命令包进行crc7校验,校验通过才能够对命令进行响应;

所述fpga发送响应,并在响应数据包的结尾加上crc7校验结果;

所述fpga内部存储一个sdio的寄存器表,用于sdio通信的初始化;

所述fpga对接收到的数据进行crc16校验,并把校验结果以中断的形式进行传输;

所述fpga传输数据,并且在数据的末尾加上crc16校验结果。

一种fpga和cpu间sdio通信接口实现装置,所述装置包括:作为从设备的fpga,所述fpga包括:

第一校验模块,用于对接收到的命令包进行crc7校验;

发送模块,用于发送响应,并在响应数据包的结尾加上crc7校验结果;

存储模块,用于存储一个sdio的寄存器表,用于sdio通信的初始化;

第二校验模块,用于对接收到的数据进行crc16校验,并把校验结果以中断的形式进行传输;

数据发送模块,用于发送数据到cpu,并且在数据的末尾加上crc16校验结果。

另一实施例,一种fpga和cpu间sdio通信接口实现方法,所述cpu作为主设备,所述方法包括:

所诉cpu完成平台设备、驱动的加载;

所述cpu完成sdio设备的探测,完成sdio初始化,添加sdio设备节点;

所述cpu获取总线设备驱动流程,完成sdio总线的注册和探测;

所述cpu注册sdio设备驱动流程,用于与sdio设备进行匹配,完成驱动的注册与加载;

所述cpu注册一个混杂设备,以供应用程序访问。

另一实施例,一种fpga和cpu间sdio通信接口实现装置,所述装置包括:作为主设备的cpu,所述cpu包括:

平台设备注册模块,用于对sdio主控设备进行注册;

平台驱动注册模块,用于匹配sdio主控设备,实现系统内核对sdio主控设备的访问;

sdio设备扫描模块,用于对接入sdio主控设备的sdio从设备进行扫描;

sdio设备初始化模块,用于对探测到的sdio从设备进行初始化;

sdio设备加载模块,用于对已初始化的sdio从设备进行加载,将其添加到内核的设备驱动框架中;

混杂设备注册模块,用于获取混杂设备驱动流程,且用于与sdio设备进行匹配,完成驱动的注册与加载。

另一实施例,一种fpga和cpu间sdio通信接口实现方法,所述方法包括:

fpga对接收到的命令包进行crc7校验,校验通过才能够对命令进行响应;

fpga通过sdio通信接口把响应发送给cpu,在响应数据包的结尾需要加上此包的crc7校验结果;

在fpga内部存储一个sdio的寄存器表,完成sdio通信的初始化;

fpga对通过sdio通信接口接收到的数据需要进行crc16校验,并把校验结果以中断的形式传送给cpu;

在cpu读取数据的时候,fpga通过sdio通信接口将数据传送给cpu,并且在数据的末尾加上crc校验结果。

另一实施例,一种fpga和cpu间sdio通信接口实现装置,所述装置包括:作为主设备的cpu,以及作为从设备的fpga;

所述fpga包括:

第一校验模块,用于对接收到的命令包进行crc7校验;

发送模块,用于发送响应,并在响应数据包的结尾加上crc7校验结果;

存储模块,用于存储一个sdio的寄存器表,用于sdio通信的初始化;

第二校验模块,用于对接收到的数据进行crc16校验,并把校验结果以中断的形式进行传输;

数据发送模块,用于发送数据到cpu,并且在数据的末尾加上crc16校验结果;

所述cpu包括:

平台设备注册模块,用于对sdio主控设备进行注册;

平台驱动注册模块,用于匹配sdio主控设备,实现系统内核对sdio主控设备的访问;

sdio设备扫描模块,用于对接入sdio主控设备的sdio从设备进行扫描;

sdio设备初始化模块,用于对探测到的sdio从设备进行初始化;

sdio设备加载模块,用于对已初始化的sdio从设备进行加载,将其添加到内核的设备驱动框架中;

混杂设备注册模块,用于获取混杂设备驱动流程,且用于与sdio设备进行匹配,完成驱动的注册与加载。

本发明提供的技术方案的有益效果是:

1、本发明应用于fpga和cpu之间的数据通信接口,fpga程序中使用的是fpga的一些基本单元,代码简单,可移植性强,cpu端的代码修改也比较少,容易实现;

2、通过实验验证sdio通信的速率和可靠性,能够满足最初的代码开发需求;

3、本通信接口适用于一些大多数设计中的cpu和fpga的通信接口,能够满足非高速接口的通信需求;

4、从成本和应用环境来说,本发明为器件的选型提供了更大的选择空间。

附图说明

图1为传统的cpu和fpga的通信示意图;

图2为种fpga和cpu间sdio通信接口实现方法的示意图;

图3为fpga的原理连接示意图;

图4为一种fpga和cpu间sdio通信接口实现方法的流程图;

图5为一种fpga和cpu间sdio通信接口实现装置的结构示意图;

图6为一种fpga和cpu间sdio通信接口实现方法的另一流程图;

图7为一种fpga和cpu间sdio通信接口实现装置的另一结构示意图;

图8为一种fpga和cpu间sdio通信接口实现方法的另一流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面对本发明实施方式作进一步地详细描述。

基于对背景技术中存在问题的考虑,本发明实施例实现了自定义的sdio通信接口,sdio通信接口大多应用于wifi、bluetooth、相机等设备上,其通信速率能够满足中高速通信需求,通信协议简单,并且带有crc校验、错误重传等功能。本方案实现了基于fpga(本发明实施例选用的fpga只具有fpga的一些基本单元,没有接口协议ip核)和cpu之间的数据通信。

本发明实施例提供了一种cpu作为主设备,fpga作为从设备的自定义sdio通信接口,本设计中的fpga采用的是高云的gw1n-18,cpu采用的是君正的x1000。本方案实现的原理框图如图2所示。

具体实现时,还可以采用其他型号的器件,本发明实施例仅是以上述器件型号为例进行说明,本发明实施例对此不做限制。

在本设计中cpu作为host(主)设备,fpga作为device(从)设备进行数据的通信。下面对本实现方法进行详细说明。

一、sdio通信协议

sdio采用host-device模式,所有通信都由host端(cpu)发命令,device设备(fpga)只要解析host命令就可与host进行通信。sdio总线的内部结构定义如下:

1)clk(时钟)信号线:host给device的时钟信号;

2)cmd(命令提示符)信号线:采用双向的信号线,用于传送命令和响应;

3)dat0-dat3(数据)信号线:四条双向的数据线,用于传送数据。

在sdio总线定义中,dat1信号线复用为中断线。在sdio的1bit模式下dat0用来传输数据(此部分的数据均为上述需要传送的数据,即为命令和响应,下述均相同,不做赘述),dat1用作中断线。在sdio的4bit模式下dat0-dat3用来传输数据,其中dat1复用作中断线(即,dat1信号线即用于传输数据,也用作中断线)。本次实现的方案中采用的是4bit模式。

sdio的每次操作都是由host在cmd信号线上发起一个cmd,对于有的cmd,device需要返回response(响应)信号,有的则不需要。具体实现时,根据实际应用中的需要进行设定,本发明实施例对此不做限制。

对于读命令,首先host会向device发送命令,紧接着device会返回一个握手信号,此时,当host收到回应的握手信号后,会将数据放在4位的数据线(即dat0-dat3信号线)上,在传送数据的同时会跟随着crc(循环冗余校验)校验码。当整个读的数据传送完毕后,host会再次发送一个命令,通知device操作完毕,device同时会返回一个response。

对于写命令,首先host会向device发送命令,紧接着device会返回一个握手信号,此时,当host收到响应的握手信号后,会将数据放在4位的数据线上,在传送数据的同时会跟随着crc校验码。当整个写的数据传送完毕后,host会再次发送一个命令,通知device操作完毕,device同时会返回一个response。

在组合卡(由存储器与sdio组成)的时钟最高速度同sd卡的最高速度一样,要高于25mhz。

二、分析协议x1000的实现部分

由于在君正x1000中不存在可以直接使用的sdio应用接口程序,需要对内核程序进行相应的修改。

在x1000一端,安装了linux操作系统,linux操作系统上电后,首先注册sdio主控的平台设备(platform_device)和驱动程序(platform_driver),平台设备和驱动程序成功注册后,通过mmc_rescan函数进行sdio设备的探测。

当linux操作系统成功探测到sdio从设备后,会将其注册到linux操作系统的设备模型中,但此时在linux操作系统中只是添加了sdio设备节点,要与其进行通信,还需要加载该sdio设备(即cpu将外设接口看做是一个设备)对应的驱动程序。

本方案中需要编写一个混杂设备驱动程序与sdio从设备进行匹配。混杂设备驱动程序中,需要匹配对应的sdio设备功能号,完成驱动的注册与加载。同时在该驱动中会注册一个混杂设备,以供应用程序访问。至此,应用程序就可与sdio设备进行通信了。sdio设备的基本注册流程如下:

1、platform_device_register(),此函数完成平台设备的注册

2、platform_driver_probe(),完成平台驱动的探测

3、mmc_schedual_delayed_work(),对延迟工作函数进行调度

4、mmc_rescan(),扫面mmc设备

5、mmc_attach(),访问mmc设备

6、mmc_add__card(),添加mmc设备

7、mmc_add_func(),添加mmc相关函数

8、sdio_driver_register(),sdio设备的驱动注册

9、misc_register(),misc杂散设备注册。

三、分析协议fpga的实现部分

在本设计中采用的是高云的fpga,高云fpga不具有支持sdio协议的ip核,所以需要编写代码来完成通信协议的实现部分。在本设计中fpga根据收到不同的cmd命令给出不同的响应。具体的通信协议可以参考sdio的通信协议(两个通信协议相同,在此不做赘述)。在通信过程中,fpga涉及部分如下:

1)对于fpga接收到的命令包进行crc7校验,校验通过才能够对命令进行响应。

2)部分命令需要把响应发送给cpu,在响应数据包的结尾需要加上此包的crc7校验结果。

3)在fpga内部存储一个sdio的寄存器表,完成sdio通信的初始化。

4)对于fpga接收到的数据需要进行crc16校验,并把校验结果以中断的形式传送给cpu。

5)在cpu读取数据的时候,fpga将数据传送给cpu,并且在数据的末尾加上crc校验结果。

其中,上述crc7和crc16均是本领域的专业术语,本发明实施例对此不做赘述。

四、自定义sdio接口

根据上面的问题,本发明实施例引进了sdio通信协议,fpga的原理连接图如图3所示:

sdio通信协议采用了六根gpio(通用输入/输出)线:cmd、clk、以及dat[3:0]。

其中,cmd和data均为输入输出双向端口,节省了端口资源。

在实际开发的过程中,fpga代码简单,资源占用量少,使用的fpga的资本资源lut(查找表)、ram(随机存取存储器)、fifo(先入先出队列),代码的移植性强。

cpu侧在原有的程序上进行修改和添加,难度较小。在通信的过程中采用4bit模式,时钟采用25mhz,则传输速率理论值为100mbps。

在实际使用的过程中,可以通过提高时钟速率来提高通信的速率。并且通信过程中有crc校验,可以实现错误重传,保证了传输的可靠性。

最后对完成的通信接口进行测试,通信速率可以达到60mbps,对收发数据的正确性进行验证,未发现数据错误。能够满足最初对通信接口的设计要求。

实施例1

一种fpga和cpu间sdio通信接口实现方法,参见图4,该方法包括以下步骤:

101:fpga对接收到的命令包进行crc7校验,校验通过才能够对命令进行响应;

102:fpga发送响应,并在响应数据包的结尾加上crc7校验结果;

103:fpga内部存储一个sdio的寄存器表,用于sdio通信的初始化;

104:fpga对接收到的数据进行crc16校验,并把校验结果以中断的形式进行传输;

105:fpga传输数据,并且在数据的末尾加上crc16校验结果。

其中,fpga作为从设备,不具有接口协议ip核,所述fpga自定义sdio通信接口,采用sdio的通信协议。

进一步地,fpga采用高云的gw1n-18型号的器件。

综上所述,本发明实施例提供的fpga代码简单,资源占用量少,使用的fpga的资本资源lut(查找表)、ram(随机存取存储器)、fifo(先入先出队列),代码的移植性强。

实施例2

一种fpga和cpu间sdio通信接口实现装置,参见图5,该装置包括:作为从设备的fpga,fpga包括:

第一校验模块1,用于对接收到的命令包进行crc7校验;

发送模块2,用于发送响应,并在响应数据包的结尾加上crc7校验结果;

存储模块3,用于存储一个sdio的寄存器表,用于sdio通信的初始化;

第二校验模块4,用于对接收到的数据进行crc16校验,并把校验结果以中断的形式进行传输;

数据发送模块5,用于发送数据到cpu,并且在数据的末尾加上crc16校验结果。

综上所述,本发明实施例提供的fpga自定义sdio通信接口,采用sdio的通信协议,通过sdio接口与cpu的通信,满足了通信需求。

实施例3

一种fpga和cpu间sdio通信接口实现方法,参见图6,cpu作为主设备,该方法包括以下步骤:

201:cpu完成平台设备、驱动的加载;完成sdio设备的探测,完成sdio初始化,添加sdio设备节点;cpu获取总线设备驱动流程,完成sdio总线的注册和探测;

202:cpu注册sdio设备驱动流程,用于与sdio设备进行匹配,完成驱动的注册与加载;cpu注册一个混杂设备,以供应用程序访问。

进一步地,驱动的注册包括:

1)用于实现平台设备注册的函数、用于实现平台驱动注册的函数;

2)用于实现探测sdio设备的函数;用于实现sdio节点的添加;

3)用于实现获取总线设备驱动流程,完成sdio总线的注册和探测;

4)用于实现混杂设备的注册函数,实现上层应用对sdio设备的访问。

综上所述,本发明实施例实现了cpu通过sdio接口与fpga的通信,满足了通信需求。

实施例4

一种fpga和cpu间sdio通信接口实现装置,参见图7,该装置包括:作为主设备的cpu,cpu包括:

获取模块6,用于完成平台设备、驱动的加载;完成sdio设备的探测,完成sdio初始化,添加sdio设备节点;获取总线设备驱动流程,完成sdio总线的注册和探测;

注册模块7,用于注册sdio设备驱动流程,用于与sdio设备进行匹配,完成驱动的注册与加载;cpu注册一个混杂设备,以供应用程序访问。

综上所述,本发明实施例实现了cpu通过sdio接口与fpga的通信,满足了通信需求。

实施例5

一种fpga和cpu间sdio通信接口实现方法,参见图8,该方法包括以下步骤:

301:fpga对接收到的命令包进行crc7校验,校验通过才能够对命令进行响应;

302:fpga通过sdio通信接口把响应发送给cpu,在响应数据包的结尾需要加上此包的crc7校验结果;

303:在fpga内部存储一个sdio的寄存器表,完成sdio通信的初始化;

304:fpga对通过sdio通信接口接收到的数据需要进行crc16校验,并把校验结果以中断的形式传送给cpu;

305:在cpu发送命令的时候,根据相应的结果来判断相应是否需要重新发送;

306:在cpu读取数据的时候,fpga通过sdio通信接口将数据传送给cpu,并且在数据的末尾加上crc校验结果,cpu根据校验结果来判断数据是否需要重新读取;

307:在cpu发送数据的时候,fpga通道sdio通信接口将fpga侧crc校验结果发送给cpu,cpu根据校验结果来判断数据是否需要重传。

综上所述,本发明实施例通过上述步骤301-307实现了cpu通过sdio接口与fpga的通信,满足了通信需求;且使用了fpga的一些基本单元,代码简单,可移植性强,cpu端的代码修改也比较少,容易实现。

实施例6

一种fpga和cpu间sdio通信接口实现装置,参见图1,该装置包括:作为主设备的cpu,以及作为从设备的fpga。

其中,cpu和fpga的具体结构参见上述实施例2和4,本发明实施例对此不做赘述。

本发明实施例对各器件的型号除做特殊说明的以外,其他器件的型号不做限制,只要能完成上述功能的器件均可。

本领域技术人员可以理解附图只是一个优选实施例的示意图,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1