CN110971621A - 基于sdio接口的嵌入式多cpu互联电路、互联方法及驱动方法 - Google Patents
基于sdio接口的嵌入式多cpu互联电路、互联方法及驱动方法 Download PDFInfo
- Publication number
- CN110971621A CN110971621A CN202010021731.XA CN202010021731A CN110971621A CN 110971621 A CN110971621 A CN 110971621A CN 202010021731 A CN202010021731 A CN 202010021731A CN 110971621 A CN110971621 A CN 110971621A
- Authority
- CN
- China
- Prior art keywords
- cpu
- data
- sdio
- network
- host
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/17—Interprocessor communication using an input/output type connection, e.g. channel, I/O port
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Communication Control (AREA)
Abstract
本发明提出了基于SDIO接口的嵌入式多CPU互联电路、互联方法及驱动方法,所述互联电路包括由多片CPU构成的CPU组和一个隔离加速单元,每一片CPU与隔离加速单之间通过两组收、发独立的SDIO通道和专用的收、发中断连接,所述的CPU组与宿主机、内网和外网连接;互联方法包括初始化步骤、寄存器配置步骤、数据传输步骤以及中断实现步骤;驱动方法包括:S1:注册一个网卡设备;S2:对SDIO设备进行初始化;S3:请求必要的系统资源,并告诉网卡设备开始工作;S4:当输入设备将数据准备好或输出设备可接收数据时,向CPU发出中断请求,以进行数据传输;本发明避免收发总线复用以及嵌入式CPU端采用查询处理带来的CPU占用率高的问题,解决了总线利用率低和通道拥塞的缺点。
Description
技术领域
本发明涉及网络隔离领域,尤其涉及基于SDIO接口的嵌入式多CPU互联电路、互联方法及驱动方法。
背景技术
随着网络技术的深入应用,为应对新型网络攻击手段和高安全度网络对安全的特殊需求,“网络隔离技术”应用而生,通过将有害的网络安全威胁隔离开来,保障数据信息在可信网络内完成交互;目前,通用的网络隔离技术都是以访问控制思想为策略,物理隔离为基础;专用嵌入式硬件隔离技术是网络隔离技术的核心,主要包括内网处理单元,外网处理单元,专用隔离交换单元三大部分;其硬件设计涉及到多片嵌入式CPU之间的信息交互,如何以最小的硬件资源占用实现高速性能是设计的关键。
一般采用专用嵌入式CPU或FPGA作为网络隔离业务主处理单元,提供必要的数据通道路由及业务加速功能,与之互联的多片嵌入式CPU完成内、外网及安全策略管控功能;采用传统的低速嵌入式互联方式如I2C、SPI等,虽然互联结构简单,但是互联性能太低,无法满足通用网络应用需求,而采用并行的同步、异步总线互联方式性能较高,但需要完成包括片选、地址、数据在内的多组信号互联,硬件互联结构复杂,对隔离CPU或FPGA的用户IO数量提出了很高的要求,另外信号间串扰对板级布线也提出了较高要求。
高速串行接口是当前主要趋势,如pcie、xaui,rgmii等,互联简单、通信速率高,但前提是隔离CPU或FPGA具备支持这种高速协议控制器或IP资源,另外涉及此类高速协议的协议栈处理较为复杂,实现难度大,调试工作量大;4线SDIO接口作为一种轻量级中低速存储、网络互联接口具有硬件连接简单、扩展性好、传送性能较高的优点。另外,该接口还支持CRC校验,提高了数据通信的可靠性。但标准的SDIO协议采用收发接口复用,在一定程度上降低了数据传输性能。
发明内容
本发明的目的在于,针对上述问题,提出基于SDIO接口的嵌入式多CPU互联电路,包括由多片CPU构成的CPU组和一个隔离加速单元,每一片CPU与隔离加速单之间通过两组收、发独立的SDIO通道和专用的收、发中断连接,所述的CPU组与宿主机、内网和外网连接。
进一步的,所述隔离加速单元为CPU或FPGA。
进一步的,所述CPU为嵌入式CPU。
进一步的,所述CPU组包括第一CPU、第二CPU和第三CPU,第一CPU与宿主机之间通过USB接口互通,完成策略管理功能;第二CPU通过网络通道与内网建立主体安全网络业务通道;第三CPU连接外网并建立通道。
进一步的,所述收、发独立的SDIO通道包括相互独立的发送互联单元组和接受互联单元组。
进一步的,所述发送互联单元组包括发送通道时钟信号、发送通道命令信号、发送通道数据传输线以及发送通道中断信号。
进一步的,所述接受互联单元组包括接收通道时钟信号、接收通道命令信号、接收通道数据传输线以及接收通道中断信号。
进一步的,所述发送通道数据传输线为双向4路传输线。
进一步的,所述接收通道数据传输线为双向4路传输线。
基于SDIO接口的嵌入式多CPU互联方法,包括由多片CPU构成的主机端和隔离加速单元组成的设备端,所述隔离加速单元为CPU或FPGA,包括如下步骤:
初始化步骤:基于虚拟网卡驱动模型完成主机端SDIO接口驱动适配并生成主机端驱动,通过主机端驱动发送CMD5命令完成设备端初始化;
寄存器配置步骤:主机端驱动通过CMD52命令对CCCR寄存器组中相关的寄存器进行配置,设备端用R5响应包对主机端驱动发送的CMD52命令做出响应;
数据传输步骤:在初始化后主机端通过CMD52命令配置CCCR相应寄存器传输数据块大小,设备端通过附带CRC校验值的数据块和主机端驱动发送的CMD53命令完成主机端至设备端的用户数据包传输;
中断实现步骤:设备端通过设置Int有效,触发主机端进行读、写数据操作。
进一步的,采用FPGA作为隔离加速单元以获取更高的隔离业务加速性能,使FPGA实现基于SDIO协议的设备端IP。
进一步的,所述设备端IP可配置成接收模式或发送模式,设备端IP接收CMD5命令,并激活设备端IO功能,以使能响应所有命令,所述IO功能使能将保留至硬复位、重新上电或主机端驱动通过CMD52命令写入软复位控制位为止。
进一步的,所述设备端初始化包括如下步骤:
判断设备端接收命令是否为CMD5,如果是则通过R4返回包响应CMD5命令以完成初始化并使能响应所有命令,否则保留非激活状态且不响应除CMD5之外的其他命令。
进一步的,所述寄存器包括支持的SDIO版本,设备支持IO电平标准、SDIO是否支持块传送模式,支持的传输块大小、是否支持中断机制。
进一步的,所述数据传输步骤具体子步骤如下:
主机端驱动通过CMD53命令通知设备端此次传输数据的起始地址和数据量,设备端设置好相应的控制信息后,返回R5给主机端;
主机端收到正确的R5响应后,通过DAT0-3发起数据传输,主机端驱动将根据传输数据量自动发起块模式或字节模式的传输;
当传输的数据大于一个数据块时,自动以块模式进行传输,传输过程中每一个数据块作为一个传输burst并附带CRC校验值;
设备端收到一个burst块后进行CRC校验并通过DAT0返回特定标识以响应主机端此次传输是否成功;
当所有整块数据传输完成后,主机端再次发起CMD53命令以字节模式将剩余数据传输完成。
进一步的,当一次完整的数据传输由多个数据块完成时,每一个数据块传输均附带CRC校验值;当某个数据块传输错误,主机端驱动将发起此数据块的重传。
进一步的,所述中断实现步骤中,CMD53命令与专用中断控制信号配合传输;
下行通道数据传输时,主机端等待Int触发,设备端RX_Buf空闲时设置Int有效,主机端驱动发起中断处理并进入写数据动作,完成后跳出中断;设备端同时作清中断动作;
上行通道数据传输时,设备端在TX_Buf有数据时设置Int有效,触发主机端进入读数据动作,主机端完成所有数据读取后跳出中断;设备端及时清除Int。
进一步的,主机端读数据动作为设备端把数据驱动到DAT线上;写数据动作为主机端把数据驱动到DAT线上,且设备端需通过DAT0反馈每次CRC校验结果。
基于SDIO接口的嵌入式多CPU驱动方法,用于对互联电路中的嵌入式多CPU进行驱动,CPU组一侧为LINUX操作系统,隔离加速单元被视为网卡,采用Linux网络设备驱动模型,完成用户数据包在网络媒介上的发送和接收。
进一步的,所述方法包括以下步骤:
S1:注册一个网卡设备;
S2:对SDIO设备进行初始化;
S3:请求必要的系统资源,并告诉网卡设备开始工作;
S4:当输入设备已将数据准备好或者输出设备可以接收数据时,向CPU发出中断请求,使CPU暂停下目前的工作和外设进行一次数据传输。
进一步的,所述步骤S1包括如下子步骤:
S11:通过网络子系统提供的alloc_netdev()函数,向内核申请分配net_device结构;
S12:向net_device结构登记一些基本操作函数,包含网卡打开、关闭和数据传输操作函数指针;
S13:注册net_device结构,调用register_netdev注册该网络设备。
进一步的,所述步骤S2包括如下子步骤:
S21:sdio设备扫描从mmc_rescan函数开始,mmc_rescan函数中分别使用400k、300k、200k,100k的速率调用 mmc_rescan_try_freq进行扫描,如果扫描到了设备,退出扫描;
S22:mmc_rescan_try_freq函数中,先进行sdio_reset对sdio设备的复位;
S23:mmc_attach_sdio函数中,先进行mmc_send_io_op_cond配置获取,获取完配置后,接着调用mmc_sdio_init_card进行sdio设备初始化;
S24:sdio_read_cccr读取cccr、Card Capability寄存器,获取设备支持的sdio版本,传输模式支持、速率、电压要求等信息;
S25:sdio_read_common_cis读取公用的CIS区域;
S26:设置控制器clock,调用sdio_enable_4bit_bus设置sdio设备bus width,再设置控制器的bus width;
S27:mmc_sdio_init_card初始化完成,进行sdio设备 function的初始化,function的初始化由sdio_init_func函数完成,每一个function调用一次;
S28:sdio_init_func函数中先sdio_read_fbr,读取fbr;
S29:接着调用sdio_read_func_cis读取function的CIS;
所述读取function的CIS与前述sdio_read_common_cis读取CIS是一样的流程,只是读取CIS的地址不同,CIS的内容也不同。
进一步的,所述步骤S3包括如下子步骤:
S31:注册设备的中断处理函数;通过request_irq()向内核注册中断处理函数,当这个设备发生中断时,就会调用相应的中断处理函数;
S32:申请发送缓冲区;申请一定大小的缓冲区,作为数据发送的缓存;
S33:启动发送线程;发送线程启动后,等待发送信号,收到信号后,将报文数据通过SDIO接口发送出去,没有信号则原地等待;
S34:启动接收线程,接收线程启动后,等待接收信号,收到信号后,将通过SDIO接口读取报文上交给上层协议栈。
进一步的,所述步骤S4中包括有2个中断处理响应:
接收中断,停用当前接收中断,并向数据接收模块传递接收信号,表示SDIO接收接口有新数据到来;
发送中断,停用当前发送中断,并向数据发送模块传递发送信号,表示SDIO发送接口空闲准许发送数据。
进一步的,所述用户数据包在网络媒介上的发送和接收采用DMA机制实现,当高层协议栈需传输一个数据包时,调用本驱动中的ndo_start_xmit函数,将数据放入发送DMA缓冲区,然后由硬件SDIO控制器将数据包通过SDIO接口发送出去;
当有数据包到来时,接收中断产生,收到中断后由硬件SDIO控制器发起数据包读取过程,接收来自FPGA的数据。
进一步的,当高层协议栈需传输一个数据包时,具体步骤如下:
S41:数据发送线程信号等待,等到发送信号则继续处理,没有则一直等待;
S42:有发送信号到来,锁住发送DMA缓冲区,取出一包待发送数据,释放发送DMA缓冲区;
S43:发送前处理,发送前处理包括获得待发送数据的地址和大小、以及对数据包的一致性检查;当所需传输的数据包大小超过介质一次能传送的最大数据大小时,将丢弃该数据包;当所需传输的数据包大小小于介质所支持的最小长度时,则需要进行填充;
S44:发送数据,启动sdio的dma数据传送;传送完毕后跳转S41继续等待发送信号。
进一步的,当有数据包到来时,具体步骤如下:
S51:数据接收线程信号等待,等到来自中断的接收信号则继续处理,没有则一直等待;
S52:分配缓冲区,有接收信号到来,调用dev_alloc_skb()分配一个数据包的缓冲区;
S53:启动sdio接口接收数据;
S54:拷贝数据,将sdio接收到的数据拷贝到S52中分配的sdb缓冲区指针中;
S55:传递数据包,最后调用netif_rx()将数据包传递给高层协议栈。完成后跳转到S51中继续等待接收
一种计算机可读存储介质,其上存储有计算机程序,所述程序执行时实现上述权力要求10-27任意一项所述方法的步骤。
一种计算机设备,包括存储器、嵌入式多CPU网络隔离互联电路以及存储在存储器上并可在嵌入式多CPU网络隔离互联电路运行的计算机程序,所述嵌入式多CPU网络隔离互联电路执行所述程序时实现权力要求10-27任意一项所述方法的步骤。
本发明的有益效果:嵌入式多CPU网络隔离接入设备的互联装置具有结构简单、扩展性强、传输性能高的特点,该装置基于4线SDIO接口完成网络数据路由及收发适配,避免了采用并行总线带来的占用I/O数量多,以及低速互联接口带来的互联性能低的缺点;且基于专用中断机制配合收、发数据通道的设计,避免了收发总线复用以及嵌入式CPU端采用查询处理带来的CPU占用率高的问题,解决了总线利用率低和通道拥塞的缺点。
采用收发通道独立的设计,当CLK为标准25Mhz传输频率时,可达到双向100Mbps传输性能;其具有的独立的收、发中断机制,使SDIO业务对CPU的占用率较低,可以有效的释放CPU资源用于其他业务处理,基于SDIO协议实现互联很好的利用了其协议内置CRC校验功能,保证了数据传输通道的可靠性;采用两个收发独立的SDIO通道全双工方式,可以高速处理网络报文、避免网络延迟,完成其业务功能,适用于嵌入式网络安全设备。
附图说明
图1是本发明基于SDIO接口的嵌入式多CPU互联电路连接图;
图2是本发明基于SDIO接口的嵌入式多CPU互联电路基本互联单元组连接图
图3是本发明初始化步骤中CMD5命令及响应R4示意图;
图4是本发明CMD52命令及响应R5示意图;
图5是本发明CMD53命令及数据传输示意图;
图6是本发明设备端IP设计框图;
图7是本发明 Linux网络设备驱动程序的体系结构图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图说明本发明的具体实施方式。
如图1所示的基于SDIO接口的嵌入式多CPU互联电路,包括由多片CPU构成的CPU组和一个隔离加速单元,每一片CPU与隔离加速单之间通过两组收、发独立的SDIO通道和专用的收、发中断连接,所述的CPU组与宿主机、内网和外网连接。
所述隔离加速单元为隔离加速CPU或FPGA;所述CPU为嵌入式CPU,所述CPU组包括CPU-0、CPU-1和CPU-2,CPU-0与宿主机之间通过USB接口互通,完成策略管理功能;CPU-1通过网络通道与内网建立主体安全网络业务通道;CPU-2连接外网并建立通道。
三片嵌入式CPU与隔离CPU或FPGA之间的网络互联设计为基本框架,每一片嵌入式CPU与隔离CPU或FPGA之间采用收、发独立的SDIO通道设计,同时搭配专用的收、发中断连接;宿主机通过USB2.0接口与CPU-0互通;内网通过网络通道与CPU-1建立主体安全网络业务通道,而CPU-2则与外部未受保护的网络建立通道,CPU-1和CPU-2完成网络适配。
如图2所示,以SDIO 4-bit模式作为基本互联单元组,每一片嵌入式CPU与隔离CPU或FPGA之间有收、发独立的两组SDIO通道,共用VDD、VSS;而CLK、CMD、DAT0-3采用单独连接;另外,两根专用中断信号分别对应收发通道,为系统提供高性能传送机制。
所述收、发独立的SDIO通道包括相互独立的发送互联单元组和接受互联单元组。
发送互联单元组包括发送通道时钟信号、发送通道命令信号、发送通道数据传输线以及发送通道中断信号;接受互联单元组包括接收通道时钟信号、接收通道命令信号、接收通道数据传输线以及接收通道中断信号。
所述发送通道数据传输线为双向4路传输线,包括DATt 0-3;所述接收通道数据传输线为双向4路传输线,包括DATr 0-3。
具体以CPUx作为参考基准,介绍基本互联单元组中的各个信号:
发送互联单元组:
CLKt信号:发送通道时钟信号;
CMDt信号:发送通道命令信号,用于传送命令和应答,双向;
DATt 0-3信号:发送通道4条数据传输线,双向;
INTt信号:发送通道专用中断信号。
接收互联单元组:
CLKr信号:接收通道时钟信号;
CMDr信号:接收通道命令信号,用于传送命令和应答,双向;
DATr 0-3信号:接收通道4条数据传输线,双向;
INTr信号:接收通道专用中断信号。
基于SDIO接口的嵌入式多CPU互联方法,包括由多片CPU构成的主机端和一个隔离加速单元,所述隔离加速单元为CPU或FPGA,其步骤包括:
初始化步骤:基于虚拟网卡驱动模型完成主机端SDIO接口驱动适配并生成主机端驱动,通过主机端驱动发送CMD5命令完成设备端初始化;
寄存器配置步骤:主机端驱动通过CMD52命令对CCCR寄存器组中相关的寄存器进行配置,设备端用R5响应包对主机端驱动发送的CMD52命令做出响应;
数据传输步骤:在初始化后主机端通过CMD52命令配置CCCR相应寄存器传输数据块大小,设备端通过附带CRC校验值的数据块和主机端驱动发送的CMD53命令完成主机端至设备端的用户数据包传输;
中断实现步骤:设备端通过设置Int有效,触发主机端进行读、写数据操作。
三片用于网络适配或策略配置的嵌入式CPU作为主机端需要基于虚拟网卡驱动模型完成SDIO接口驱动适配以生成主机端驱动;隔离加速嵌入式CPU或FPGA作为设备端实现基于SDIO协议的收、发逻辑IP功能单元。
当对加速性能要求不高时可用嵌入式CPU作为设备端实现主体隔离业务功能;为获取更高的隔离业务加速性能,采用FPGA作为隔离单元实现主体架构设计基本机制;考虑到IP复用性,FPGA实现了基于SDIO协议的设备端IP,该IP可配置成接收模式或发送模式。
如图3所示初始化步骤包括如下子步骤:
分别设置多片嵌入式CPU为主机端,隔离加速CPU或FPGA为设备端;
判断设备端IP接收命令是否为CMD5命令,如果是则通过R4返回包响应CMD5命令以完成初始化并使能响应所有命令,否则保留非激活状态且不响应除CMD5之外的其他命令;所述设备端IP接收CMD5命令后,IO功能被激活,设备端完成初始化。
如图4所示初始化完成后,主机端驱动通过CMD52命令对CCCR寄存器组中相关的寄存器进行配置,设备端用R5响应包对CMD52命令做出响应。
所述寄存器包括支持的SDIO版本,设备支持IO电平标准、SDIO是否支持块传送模式、支持的传输数据块大小以及是否支持中断机制等。
上电后主机端基于虚拟网卡驱动模型完成初始化流程,设备端IP收到非CMD5命令时,IO选择保留非激活状态并且不响应除CMD5之外的其他命令;一旦收到CMD5,通过R4返回包响应CMD5命令来完成初始化;此时,虚拟网卡即设备端的IO端口将使能响应所有的命令;这些IO功能使能将保留至硬复位、重新上电、或主机端驱动通过CMD52命令写入软复位控制位为止。
数据传输步骤具体如下:
主机端驱动通过CMD53命令通知设备端此次传输数据的起始地址和数据量,设备端设置好相应的控制信息后,返回R5给主机端;
主机端收到正确的R5响应后,通过DAT线发起数据传输,主机端驱动将根据传输数据量自动发起块模式或字节模式的传输;
当传输的数据大于一个数据块时,自动以块模式进行传输,传输过程中每一个数据块作为一个传输burst并附带CRC校验值;
设备端收到一个burst块后进行CRC校验并通过DAT0返回特定标识以响应主机端此次传输是否成功;
当所有整块数据传输完成后,主机端再次发起CMD53命令以字节模式将剩余数据传输完成。
当一次完整的数据传输由多个数据块完成时,每一个数据块传输均附带CRC校验值;当某个数据块传输错误,主机端将发起此数据块的重传;数据块的大小通过初始化时设置CCCR相应寄存器完成。
具体的,如图5所示,为提升SDIO总线读写性能CMD53命令被支持,此命令提供了高低速的数据传输访问功能;当以block模式传送时,若传送长度超过1个block块,则每个block块作为一个burst传送并且自带crc校验值,所述block块大小为寄存器中存储的支持的传输数据块大小。
主机端驱动会根据要传输的数据量自动发起块模式或字节模式的传输;当要传输的数据大于一个数据块时,首先以块模式传输;驱动通过CMD53命令通知设备端此次要传输数据的起始地址、数据量,设备端设置好相应的控制信息后,会返回R5给主机端,主机端一旦收到正确的R5响应,会立刻通过DAT线发起数据传输。
传输过程中每一个数据块作为一个传输burst并附带CRC校验值;设备端收到一个burst块后进行CRC校验并通过DAT0线返回特定标识响应主机端此次传输是否成功;当所有整块数据传输完成后,主机端再通过发起一次CMD53命令以字节模式将剩余的数据传输完成;当一次完整的数据传输由多个block块完成时,每一个block块传输都要附带CRC校验值,当某一个block块传输错误时,主机端应当发起此block块的重传;Block块的大小是通过初始化后设置CCCR相应寄存器完成的。
在对中断实现步骤进行说明之前,先对主机端读、写传输进行说明,读操作是设备端把数据驱动到DAT线上;而写操作是主机端把数据驱动到DAT线上,并且需要设备端通过DAT0反馈每次CRC校验结果。
为有效提升总线性能及释放主机端CPU,增加专用中断控制信号配合CMD53命令传输;如图6所示,结合FPGA收发IP设计架构描述数据收发过程中断机制的实现。
下行通道(主机到设备)数据传输时,主机端等待Int触发,设备端RX_Buf空闲便会设置Int有效,此时主机驱动进入中断处理程序发起一系列写数据动作,完成后跳出中断;而设备端会同时作清中断动作,避免在RX_Buf未被有效转发前引起主机端下一次写数据动作造成数据丢失。
上行通道数据传输时,设备端在TX_Buf有数据时设置Int有效,触发主机端进入读数据动作,主机端完成所有数据读取后跳出中断;设备端应及时清除Int,避免主机端重复读取同一块数据。
采用中断方式有效避免了主机端通过CMD52命令查询带来的总线损耗,有效提升了主机CPU利用率。
本实施例中,嵌入式CPU作为主机端需要基于虚拟网卡驱动模型完成SDIO接口驱动适配以组成主机端驱动,嵌入式CPU一侧为LINUX操作系统,将FPGA视为网卡,采用虚拟网卡驱动模型,即Linux网络设备驱动模型,完成用户数据包在网络媒介上的发送和接收,将以SDIO接口连接的FPGA作为网络媒介。
如图7所示,Linux网络设备驱动程序的体系结构,从上到下可以划分为4层,依次为网络协议接口层、网络设备接口层、提供实际功能的设备驱动功能层以及网络设备与媒介层。
网络协议接口层向网络层协议提供统一的数据包收发接口,不论上层协议是ARP,还是IP,都通过dev_queue_xmit()函数发送数据,并通过netif_rx()函数接收数据。这一层的存在使得上层协议独立于具体的设备。
网络设备接口层向协议接口层提供统一的用于描述具体网络设备属性和操作的结构体net_device,该结构体是设备驱动功能层中各函数的容器。实际上,网络设备接口层从宏观上规划了具体操作硬件的设备驱动功能层的结构。
设备驱动功能层的各函数是网络设备接口层net_device数据结构的具体成员,是驱使网络设备硬件完成相应动作的程序,它通过hard_start_xmit()函数启动发送操作,并通过网络设备上的中断触发接收操作。
网络设备与媒介层是完成数据包发送和接收的物理实体。
本实施例中通过SDIO接口并以FPGA作为网络设备媒介层,实现互联与通信。
将设备驱动功能层设计为6个模块:驱动注册模块、SDIO设备初始化模块、网卡打开与释放模块、中断处理模块、数据发送模块、数据接收模块。
驱动注册模块,主要功能是注册一个网卡设备,步骤如下:
S11:通过网络子系统提供的alloc_netdev()函数,向内核申请分配net_device结构;
S12:向net_device结构登记一些基本操作函数,包含网卡打开、关闭和数据传输操作函数指针;
S13:注册net_device结构,调用register_netdev注册这个网络设备。
SDIO设备初始化模块,完成SDIO设备的初始化工作,FPGA作为SDIO从设备,操作CPU上的SDIO控制器主动枚举总线上的设备,步骤如下:
S21:sdio设备扫描从mmc_rescan函数开始,mmc_rescan函数中分别使用400k、300k、200k,100k的速率调用 mmc_rescan_try_freq进行扫描,如果扫描到了设备,退出扫描;
S22:mmc_rescan_try_freq函数中,先进行sdio_reset对sdio设备的复位;
S23:mmc_attach_sdio函数中,先进行mmc_send_io_op_cond配置获取,获取完配置后,接着调用mmc_sdio_init_card进行sdio设备初始化;
S24:sdio_read_cccr读取cccr、Card Capability寄存器,获取设备支持的sdio版本,传输模式支持、速率、电压要求等信息;
S25:sdio_read_common_cis读取公用的CIS区域;
S26:设置控制器clock,调用sdio_enable_4bit_bus设置sdio设备bus width,再设置控制器的bus width;
到这里,mmc_sdio_init_card初始化完成,接下来进行sdio设备 function的初始化,function的初始化由sdio_init_func函数完成,每一个function调用一次;
S27:sdio_init_func函数中先sdio_read_fbr,读取fbr;
S28:接着调用sdio_read_func_cis读取function的CIS;
读取function的CIS与前面sdio_read_common_cis读取CIS是一样的流程,只是读取CIS的地址不同,CIS的内容也不同;其中一个很重要的参数是:func->max_blksize;同时如果读到vendor id,device id,就保存在function的结构中,若没读到,就从card->cis.vendor、card->cis.device(sdio_read_common_cis读出来的)copy过来,到这里,sdio设备的扫描完成,接着调用mmc_add_card增加sdio设备,调用sdio_add_func增加function设备,使整个扫描过程完成。
网卡打开与释放模块,内核可在响应ifconfig命令时打开或关闭一个网络设备。
在使用ifconfig命令启动网卡时候,要执行以下两个任务:一是通过ioctl来将地址分配给指定的网卡;二是通过ioctl来打开这个设备,这将引起该设备的dev->open方法被调用,即调用本模块,本模块的主要功能是请求必要的系统资源,调用SDIO设备初始化模块,并告诉网卡设备开始工作,步骤如下:
S31:注册设备的中断处理函数;
通过request_irq()向内核注册中断处理函数,当这个设备发生中断时,就会调用相应的中断处理函数,中端处理模块;
S32:申请发送缓冲区;申请一定大小的缓冲区,作为数据发送的缓存;
S33:启动发送线程;发送线程启动后,等待发送信号,收到信号后,将报文数据通过SDIO接口发送出去,没有信号则原地等待;
S34:启动接收线程,接收线程启动后,等待接收信号,收到信号后,将通过SDIO接口读取报文上交给上层协议栈。
中端处理模块,在中断传送方式下,SDIO外设具有申请CPU服务的主动权,当输入设备已将数据准备好或者输出设备可以接收数据时,便可以向CPU发出中断请求,使CPU暂停下目前的工作和外设进行一次数据传输,等传输操作完成后,CPU继续进行原来的工作;本实施例中有2个中断处理响应,在中断里尽量做最少而必要的工作,功能如下:
接收中断,停用当前接收中断,并向数据接收模块传递接收信号,表示SDIO接收接口有新数据到来。
发送中断,停用当前发送中断,并向数据发送模块传递发送信号,表示SDIO发送接口空闲准许发送数据。
数据发送模块所执行的主要任务是将数据包通过SDIO接口发送出去,为了提高系统效率,发送数据采用DMA机制。
无论何时高层协议栈要传输一个数据包,它都会调用本驱动中的ndo_start_xmit函数,将数据放入发送DMA缓冲区,然后由硬件SDIO控制器将数据包通过SDIO接口发送出去;具体步骤如下:
S41:数据发送线程信号等待,等到发送信号则继续处理,没有则一直等待。
S42:有发送信号到来,锁住发送DMA缓冲区,取出一包待发送数据,释放发送DMA缓冲区。
S43:发送前处理,发送前处理包括获得待发送数据的地址和大小、以及对数据包的一致性检查;当所需传输的数据包大小超过介质一次能传送的最大数据大小时,将丢弃该数据包;当所需传输的数据包大小小于介质所支持的最小长度时,则需要进行填充。
S44:发送数据,启动sdio的dma数据传送;传送完毕后跳转S41继续等待发送信号。
数据接收模块所执行的主要任务是通过SDIO接口接收来自FPGA的数据,并交给上层协议栈,为了提高系统效率,接收数据采用DMA机制。
有数据包到来时,会有接收中断产生,收到中断后由由硬件SDIO控制器发起数据包读取过程,接收来自FPGA的数据;具体步骤如下:
S51:数据接收线程信号等待,等到来自中断的接收信号则继续处理,没有则一直等待。
S52:分配缓冲区,有接收信号到来,调用dev_alloc_skb()分配一个数据包的缓冲区。
S53:启动sdio接口接收数据。
S54:拷贝数据,将sdio接收到的数据拷贝到S52中分配的sdb缓冲区指针中。
S55:传递数据包,最后调用netif_rx()将数据包传递给高层协议栈。完成后跳转到S51中继续等待接收。
一种计算机可读存储介质,其上存储有计算机程序,所述程序被多片嵌入式CPU和隔离加速CPU或FPGA执行时实现上述方法的步骤。
一种计算机设备,包括存储器、多片嵌入式CPU、隔离加速CPU或FPGA以及存储在存储器上并可在多片嵌入式CPU和隔离加速CPU或FPGA上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书界定。
Claims (10)
1.基于SDIO接口的嵌入式多CPU互联电路,其特征在于,包括由多片CPU构成的CPU组和一个隔离加速单元,每一片CPU与隔离加速单之间通过两组收、发独立的SDIO通道和专用的收、发中断连接,所述的CPU组与宿主机、内网和外网连接。
2.如权利要求1所述的基于SDIO接口的嵌入式多CPU互联电路,其特征在于,所述CPU为嵌入式CPU。
3.如权利要求2所述的基于SDIO接口的嵌入式多CPU互联电路,其特征在于,所述CPU组包括第一CPU、第二CPU和第三CPU,第一CPU与宿主机之间通过USB接口互通,完成策略管理功能;第二CPU通过网络通道与内网建立主体安全网络业务通道;第三CPU连接外网并建立通道。
4.如权利要求1所述的基于SDIO接口的嵌入式多CPU互联电路,其特征在于,所述收、发独立的SDIO通道包括相互独立的发送互联单元组和接受互联单元组。
5.如权利要求4所述的基于SDIO接口的嵌入式多CPU互联电路,其特征在于,所述发送互联单元组包括发送通道时钟信号、发送通道命令信号、发送通道数据传输线以及发送通道中断信号。
6.如权利要求4所述的基于SDIO接口的嵌入式多CPU互联电路,其特征在于,所述接受互联单元组包括接收通道时钟信号、接收通道命令信号、接收通道数据传输线以及接收通道中断信号。
7.如权利要求5所述的基于SDIO接口的嵌入式多CPU互联电路,其特征在于,所述发送通道数据传输线为双向4路传输线。
8.如权利要求6所述的基于SDIO接口的嵌入式多CPU互联电路,其特征在于,所述接收通道数据传输线为双向4路传输线。
9.基于SDIO接口的嵌入式多CPU互联方法,包括由多片CPU构成的主机端和隔离加速单元组成的设备端,所述隔离加速单元为CPU或FPGA,其特征在于,包括如下步骤:
初始化步骤:基于虚拟网卡驱动模型完成主机端SDIO接口驱动适配并生成主机端驱动,通过主机端驱动发送CMD5命令完成设备端初始化;
寄存器配置步骤:主机端驱动通过CMD52命令对CCCR寄存器组中相关的寄存器进行配置,设备端用R5响应包对主机端驱动发送的CMD52命令做出响应;
数据传输步骤:在初始化后主机端通过CMD52命令配置CCCR相应寄存器传输数据块大小,设备端通过附带CRC校验值的数据块和主机端驱动发送的CMD53命令完成主机端至设备端的用户数据包传输;
中断实现步骤:设备端通过设置Int有效,触发主机端进行读、写数据操作。
10.基于SDIO接口的嵌入式多CPU驱动方法,用于对互联电路中的嵌入式多CPU进行驱动,其特征在于,CPU组一侧为LINUX操作系统,隔离加速单元被视为网卡,采用Linux网络设备驱动模型,完成用户数据包在网络媒介上的发送和接收;
所述方法包括以下步骤:
S1:注册一个网卡设备;
S2:对SDIO设备进行初始化;
S3:请求必要的系统资源,并告诉网卡设备开始工作;
S4:当输入设备已将数据准备好或者输出设备可以接收数据时,向CPU发出中断请求,使CPU暂停下目前的工作和外设进行一次数据传输。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010021731.XA CN110971621B (zh) | 2020-01-09 | 2020-01-09 | 基于sdio接口的嵌入式多cpu互联电路、互联方法及驱动方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010021731.XA CN110971621B (zh) | 2020-01-09 | 2020-01-09 | 基于sdio接口的嵌入式多cpu互联电路、互联方法及驱动方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110971621A true CN110971621A (zh) | 2020-04-07 |
CN110971621B CN110971621B (zh) | 2023-07-11 |
Family
ID=70038125
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010021731.XA Active CN110971621B (zh) | 2020-01-09 | 2020-01-09 | 基于sdio接口的嵌入式多cpu互联电路、互联方法及驱动方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110971621B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113259395A (zh) * | 2021-07-05 | 2021-08-13 | 成都菁蓉联创科技有限公司 | 一种嵌入式环境下数据通讯装置及方法 |
CN113395285A (zh) * | 2021-06-17 | 2021-09-14 | 中国兵器工业集团第二一四研究所苏州研发中心 | 一种cpu与fpga间的网络层通信方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080059679A1 (en) * | 2006-09-01 | 2008-03-06 | Freescale Semiconductor, Inc | Application processor circuit incorporating both sd host and slave functions and electronic device including same |
US20130318281A1 (en) * | 2011-02-04 | 2013-11-28 | Kabushiki Kaisha Toshiba | Memory system in which extended function can easily be set |
US20150039923A1 (en) * | 2013-08-01 | 2015-02-05 | Mediatek Inc. | Method of controlling sdio device and related sdio system and sdio device |
CN104486336A (zh) * | 2014-12-12 | 2015-04-01 | 冶金自动化研究设计院 | 工业控制网络安全隔离交换装置 |
CN105656883A (zh) * | 2015-12-25 | 2016-06-08 | 冶金自动化研究设计院 | 一种适用于工控网络的单向传输内外网安全隔离网闸 |
US20160371209A1 (en) * | 2015-06-22 | 2016-12-22 | Qualcomm Technologies International, Ltd. | Single Relay SDIO Interface with Multiple SDIO Units |
CN107771330A (zh) * | 2015-06-22 | 2018-03-06 | 高通技术国际有限公司 | 具有多个sdio单元的单个sdio接口 |
CN108920193A (zh) * | 2018-05-16 | 2018-11-30 | 天津光电聚能专用通信设备有限公司 | Fpga和cpu间sdio通信接口实现方法、及装置 |
CN210780877U (zh) * | 2020-01-09 | 2020-06-16 | 四川卫士通信息安全平台技术有限公司 | 基于sdio接口的嵌入式多cpu互联电路 |
-
2020
- 2020-01-09 CN CN202010021731.XA patent/CN110971621B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080059679A1 (en) * | 2006-09-01 | 2008-03-06 | Freescale Semiconductor, Inc | Application processor circuit incorporating both sd host and slave functions and electronic device including same |
US20130318281A1 (en) * | 2011-02-04 | 2013-11-28 | Kabushiki Kaisha Toshiba | Memory system in which extended function can easily be set |
US20150039923A1 (en) * | 2013-08-01 | 2015-02-05 | Mediatek Inc. | Method of controlling sdio device and related sdio system and sdio device |
CN104486336A (zh) * | 2014-12-12 | 2015-04-01 | 冶金自动化研究设计院 | 工业控制网络安全隔离交换装置 |
US20160371209A1 (en) * | 2015-06-22 | 2016-12-22 | Qualcomm Technologies International, Ltd. | Single Relay SDIO Interface with Multiple SDIO Units |
CN107771330A (zh) * | 2015-06-22 | 2018-03-06 | 高通技术国际有限公司 | 具有多个sdio单元的单个sdio接口 |
CN105656883A (zh) * | 2015-12-25 | 2016-06-08 | 冶金自动化研究设计院 | 一种适用于工控网络的单向传输内外网安全隔离网闸 |
CN108920193A (zh) * | 2018-05-16 | 2018-11-30 | 天津光电聚能专用通信设备有限公司 | Fpga和cpu间sdio通信接口实现方法、及装置 |
CN210780877U (zh) * | 2020-01-09 | 2020-06-16 | 四川卫士通信息安全平台技术有限公司 | 基于sdio接口的嵌入式多cpu互联电路 |
Non-Patent Citations (3)
Title |
---|
D. LIU, X. CHANG, S. WAN, J. TANG AND Y. CHEN: "Turing Machine-Based Cross-Network Isolation and Data Exchange Theory Model", IEEE ACCESS, pages 732 - 746 * |
JIAJIA MIAO; AIHUA BAO; YANJIE NIU; ZHIZHONG LIU; HANDONG MAO: "A secure private cloud storage system based on virtual isolation mechanism", IEEE, pages 1 - 5 * |
师超: "SDIO接口的软硬件实现及性能评估", pages 3 - 46 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113395285A (zh) * | 2021-06-17 | 2021-09-14 | 中国兵器工业集团第二一四研究所苏州研发中心 | 一种cpu与fpga间的网络层通信方法 |
CN113395285B (zh) * | 2021-06-17 | 2023-04-25 | 中国兵器工业集团第二一四研究所苏州研发中心 | 一种cpu与fpga间的网络层通信方法 |
CN113259395A (zh) * | 2021-07-05 | 2021-08-13 | 成都菁蓉联创科技有限公司 | 一种嵌入式环境下数据通讯装置及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110971621B (zh) | 2023-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11176068B2 (en) | Methods and apparatus for synchronizing uplink and downlink transactions on an inter-device communication link | |
US10845868B2 (en) | Methods and apparatus for running and booting an inter-processor communication link between independently operable processors | |
US9430432B2 (en) | Optimized multi-root input output virtualization aware switch | |
US4570220A (en) | High speed parallel bus and data transfer method | |
US7802034B2 (en) | Method for performing full transfer automation in a USB controller | |
CN101304373B (zh) | 一种实现局域网内高效传输大块数据的方法及系统 | |
WO2021000717A1 (zh) | 一种io处理的方法和装置 | |
US20050033896A1 (en) | Systems and methods for batched USB data transfers | |
US20050195833A1 (en) | Full hardware based TCP/IP traffic offload engine(TOE) device and the method thereof | |
JP2002300229A (ja) | Usb通信制御装置、usb通信システムおよびusb通信制御方法 | |
CN109710548A (zh) | 一种dma控制数据传输方法、系统及设备 | |
JP4837659B2 (ja) | 分割トランザクションを処理するためのバス・コントローラ | |
CN114553635B (zh) | Dpu网络设备中的数据处理方法、数据交互方法及产品 | |
TW200522583A (en) | IP-based method and apparatus for booting computers remotely in wide-area-network environment | |
CN113691397B (zh) | 工业控制数据传输用低延时5g无线透明传输方法 | |
CN110971621B (zh) | 基于sdio接口的嵌入式多cpu互联电路、互联方法及驱动方法 | |
EP0490988A1 (en) | Enhanced vmebus protocol utilizing pseudosynchronous handshaking and block mode data transfer | |
CN102207920A (zh) | 一种bvci总线到ahb总线的转换桥 | |
JP2001519060A (ja) | コントローラレスモデム | |
CN113098955A (zh) | 一种数据传输方法、装置、设备及计算机可读存储介质 | |
US7930445B2 (en) | Computer system using remote I/O and I/O data transfer method | |
TWI235921B (en) | System and method for effectively performing physical direct memory access operations | |
KR20050080704A (ko) | 프로세서간 데이터 전송 장치 및 방법 | |
CN111427823B (zh) | 支持pc与fpga通过pcie通信的驱动设计方法 | |
US6006284A (en) | Method and apparatus for driving a parallel part to provide multiple modes of communications between a host and a peripheral |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20211011 Address after: 610000 floors 12 and 13, building 3, No. 333, Yunhua Road, high tech Zone, Chengdu, Sichuan (production projects are limited to branches operating in the Industrial Park) Applicant after: CHENGDU 30JAVEE MICROELECTRONICS CO.,LTD. Address before: 610000 Building 2, No. 333, Yunhua Road, high tech Zone, Chengdu, Sichuan Applicant before: SICHUAN WEISHITONG INFORMATION SECURITY PLATFORM TECHNOLOGY CO.,LTD. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |