CN114860640B - 用于FPGA与ARM通信的FlexSPI接口驱动方法及系统 - Google Patents
用于FPGA与ARM通信的FlexSPI接口驱动方法及系统 Download PDFInfo
- Publication number
- CN114860640B CN114860640B CN202210360500.0A CN202210360500A CN114860640B CN 114860640 B CN114860640 B CN 114860640B CN 202210360500 A CN202210360500 A CN 202210360500A CN 114860640 B CN114860640 B CN 114860640B
- Authority
- CN
- China
- Prior art keywords
- flexspi
- interface
- application layer
- fpga
- interrupt
- 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.)
- Active
Links
Images
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/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/385—Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
-
- 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/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4063—Device-to-bus coupling
- G06F13/4068—Electrical coupling
- G06F13/4072—Drivers or receivers
-
- 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/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
- G06F13/4291—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus using a clocked protocol
-
- 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
Abstract
本发明公开了一种用于FPGA与ARM通信的FlexSPI接口驱动方法,应用于FPGA与ARM通过FlexSPI接口互相连接的片上系统,方法包括:获取预设的FlexSPI设备树中的时钟信息和中断信息,根据所述时钟信息和中断信息进行时钟配置和中断配置;配置LUT表中的边沿触发方式以及数据位宽;初始化FPGA对应的字符设备,将预设的驱动层操作函数绑定在所述字符设备上,得到供应用层操作的FlexSPI接口字符设备,所述驱动层操作函数和应用层的操作函数一一对应。本发明实现高速数据传输的同时简化了驱动结构,并且能够适配多种硬件设备。
Description
技术领域
本发明涉及驱动技术领域,尤其涉及一种用于FPGA与ARM通信的FlexSPI接口驱动方法及系统。
背景技术
随着信息技术的迅速发展,FPGA和ARM芯片被广泛用于各种电子设备中,FPGA和ARM的通信方式也变得越来越重要,FPGA和ARM之间传统的通信方式主要为串口通信、PCIE通信等,其中,串口通信带宽低,速度慢,只能满足低速的数据传输需求,而PCIE通信方式虽然速度足够快,但是驱动复杂,且对平台要求也比较高。
FlexSPI是TI公司i.MX8平台下的一种用于驱动DDR、NOR Flash的串行通信总线,该接口可灵活配置成单数据线、4数据线、8数据线等模式,其通信速率理论上可达到120MB左右,相比串口带宽高且传输速度快,但是目前该接口未提供与FPGA通信的驱动,只提供基于Linux系统下的NOR Flash驱动,且该驱动为具体设备的驱动,不能在应用层适配多种硬件设备。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种用于FPGA与ARM通信的FlexSPI接口驱动方法及系统,驱动FlexSPI接口供FPGA与ARM通信,实现高速数据传输的同时简化了驱动结构,并且能够适配多种硬件设备。
为解决上述技术问题,本发明提出的技术方案为:
一种用于FPGA与ARM通信的FlexSPI接口驱动方法,应用于片上系统,所述片上系统包括通过FlexSPI接口互相连接的FPGA与ARM,所述方法包括:
获取预设的FlexSPI设备树中的时钟信息和中断信息,根据所述时钟信息和中断信息进行时钟配置和中断配置;
配置LUT表中的边沿触发方式以及数据位宽;
初始化FPGA对应的字符设备,将预设的驱动层操作函数绑定在所述字符设备上,得到供应用层操作的FlexSPI接口字符设备,所述驱动层操作函数和应用层的操作函数一一对应。
进一步的,获取预设的FlexSPI设备树中的时钟信息和中断信息之前还包括:
配置FlexSPI设备树中的接口IO口信息、时钟频率、设备名称以及使能配置信息;
匹配FlexSPI设备树,为FlexSPI设备树分配内核空间,获取FlexSPI设备树的节点数量,映射FlexSPI设备树的物理地址到内核空间。
进一步的,根据所述时钟信息和中断信息进行时钟配置和中断配置具体包括:
用所述时钟信息修改FlexSPI接口的时钟,用所述中断信息注册中断,设置中断的触发条件为IP CMD发送完成标记。
进一步的,配置LUT表中的边沿触发方式以及数据位宽的步骤具体包括:
使能配置好的时钟,在LUT表中配置数据位宽为8位,边沿触发方式为单边沿触发方式,然后使能配置好的中断。
进一步的,配置LUT表中的边沿触发方式以及数据位宽的步骤还包括:在LUT表中配置发送完成后使用1个DUMMY信号。
进一步的,所述驱动层操作函数和应用层操作函数均包括open函数,得到供应用层操作的FlexSPI接口字符设备之后包括设置设备接口的步骤,具体包括:
调用应用层的open函数,应用层获取FPGA的设备参数;
根据应用层的open函数,调用驱动层的open函数,驱动层从应用层获取FPGA的设备参数,将FPGA的设备参数绑定到所述FlexSPI接口字符设备上,得到FlexSPI接口字符设备的FlexSPI IOCTL接口、FlexSPI读接口和FlexSPI写接口。
进一步的,所述驱动层操作函数和应用层操作函数均包括ioctl函数,设置设备接口的步骤之后包括配置命令和地址的步骤,具体包括:
调用应用层的ioctl函数,应用层将读写命令和地址信息,通过FlexSPI IOCTL接口输入FlexSPI接口字符设备;
根据应用层的ioctl函数,调用驱动层的ioctl函数,驱动层从应用层获取读写命令和地址信息。
进一步的,所述驱动层操作函数和应用层操作函数均包括read函数,配置命令和地址的步骤之后包括FlexSPI接口读取数据的步骤,具体包括:
若读写命令为读命令,调用应用层的read函数,FlexSPI接口字符设备通过FlexSPI读接口,从FlexSPI接口的接收FIFO中读取数据信息;
根据应用层的read函数,调用驱动层的read函数,驱动层获取应用层下发的读取数据缓冲区和读取字节数,依据读取字节数和FlexSPI接口的接收FIFO大小进行分帧,针对每一帧数据,清除中断标记,根据读命令和地址信息配置LUT表,触发LUT表中对应的发送命令,等待一个接收中断后,将接收FIFO置为无效,并将接收FIFO中的数据拷贝至所述读取数据缓冲区中,当前帧数据拷贝完成后,清除接收中断并使能接收FIFO。
进一步的,所述驱动层操作函数和应用层操作函数均包括write函数,设置设备接口的步骤之后包括FlexSPI接口写入数据的步骤,具体包括:
若读写命令为写命令,调用应用层的write函数,FlexSPI接口字符设备通过FlexSPI写接口,向FlexSPI接口的发送FIFO中写入数据信息;
根据应用层的write函数,调用驱动层的write函数,驱动获取应用层层下发的读取数据缓冲区和写入字节数,依据写入字节数和FlexSPI接口的发送FIFO大小进行分帧,清空发送FIFO后将每一帧数据均写入发送FIFO中,针对发送FIFO中的每一帧数据,根据写命令和地址信息配置LUT表,触发LUT表中对应的发送命令,等待数据发送完成。
本发明还提出一种片上系统,所述片上系统包括通过FlexSPI接口互相连接的FPGA与ARM,所述ARM被编程或配置以执行:
获取预设的FlexSPI设备树中的时钟信息和中断信息,根据所述时钟信息和中断信息进行时钟配置和中断配置;
配置LUT表中的边沿触发方式以及数据位宽;
初始化FPGA对应的字符设备,将预设的驱动层操作函数绑定在所述字符设备上得到供应用层操作的FlexSPI接口字符设备,所述驱动层操作函数和应用层的操作函数一一对应。
与现有技术相比,本发明的优点在于:
本发明根据FlexSPI接口的特性,进行相应的时钟配置、中断配置,并配置LUT表中的边沿触发方式以及数据位宽,最后根据FPGA特性创建对应的FlexSPI接口字符设备供应用层操作,满足了ARM通过FlexSPI接口与FPGA通信的要求,充分利用了FlexSPI接口的传输速率,相比PCIE接口的驱动方式更加简单,同时本发明的驱动对象为FlexSPI接口,可以在应用层适配FPGA等多种硬件设备。
附图说明
图1为本发明实施例中的FlexSPI接口驱动的框架图。
图2为本发明实施例中的驱动方法的流程图。
图3为本发明实施例中驱动FlexSPI接口读取数据的流程图。
图4为本发明实施例中驱动FlexSPI接口写入数据的流程图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
为了实现FPGA与ARM通过FlexSPI接口通信,我们基于ARM平台嵌入式Linux系统,构建FlexSPI接口驱动,该驱动是在platform的基础上实现的字符型驱动,以ARM作为SPI主设备端,主动发起命令,并为整个通信提供时钟信号和起始结束信号,具有结构简单,传输效率高、移植性强、配置方便等特点。FlexSPI接口驱动的框架如图1所示,由设备树和驱动程序组成,其中设备树主要用于描述接口的硬件信息,包括时钟、主频、IO口、映射地址、中断描述信息等。驱动程序依次执行设备树解析、中断配置、LUT表配置、设备注册这些步骤,最终在Linux系统下的/dev/目录提供可供应用层操作的字符设备,该字符设备与FPGA对应,便于应用层操作该FlexSPI接口,从而实现FPGA与ARM通过FlexSPI接口通信。
根据上述技术构思,本实施例提出一种用于FPGA与ARM通信的FlexSPI接口驱动方法,应用于包括FPGA与ARM的片上系统,且FPGA与ARM通过FlexSPI接口互相连接,如图2所示,该方法包括以下步骤:
S1)获取预设的FlexSPI设备树中的时钟信息和中断信息,根据所述时钟信息和中断信息进行时钟配置和中断配置;
S2)配置LUT表中的边沿触发方式以及数据位宽;
S3)初始化FPGA对应的字符设备,将预设的驱动层操作函数绑定在所述字符设备上,得到供应用层操作的FlexSPI接口字符设备,所述驱动层操作函数和应用层的操作函数一一对应。
通过上述步骤,本实施例根据FlexSPI接口的特性,进行相应的时钟配置、中断配置,并配置LUT表中的边沿触发方式以及数据位宽,最后根据FPGA特性创建对应的FlexSPI接口字符设备供应用层操作,满足了ARM通过FlexSPI接口与FPGA通信的要求。本实施例严格遵守Linux字符型设备模型,在Linux系统下的/dev/目录提供可供应用层操作的字符设备,便于应用层操作FlexSPI接口。FlexSPI驱动相比于PCIE驱动具有驱动结构简单、移植方便等优点,相比于UART具有带宽高、速度快、应用层操作配置简单等优点。因此本实施例的方法充分利用了FlexSPI接口的传输速率,相比PCIE接口的驱动方式更加简单,同时本实施例的方法主要用于驱动FlexSPI接口,不像传统的Linux设备驱动方式,仅用于驱动具体的设备器件,如RTC芯片、NOR Flash等,因此可以在应用层适配不限于FPGA的多种硬件设备。
如图1所示,本实施例在步骤S1)之前的前置步骤包括:
配置FlexSPI设备树,设备树为Linux3.0以后,一种关于硬件配置的描述文件,该文件描述驱动的寄存器信息、中断信息、使能配置信息、时钟信息等。配置FlexSPI设备树主要是配置FlexSPI接口的接口IO口信息、时钟频率、设备名称以及使能配置信息,并将原先的4线SPI数据线扩展至8线模式,向下兼容8线、4线和单线模式;
匹配FlexSPI设备树,本实施例中,根据设备树的名称来匹配FlexSPI设备树,利用probe函数匹配名为fsl,imx8mm-flexspi的设备树,即为FlexSPI设备树,利用FlexSPI设备树中包含的寄存器物理地址、中断类型、时钟等参数,为后续的步骤做准备;
为FlexSPI设备树分配内核空间,获取FlexSPI设备树的节点数量,映射FlexSPI设备树的物理地址到内核空间,这些操作属于常规的驱动开发流程,在此不再赘述。
本实施例中,步骤S1)的具体步骤包括:
时钟配置时,驱动初始化时用默认频率配置FlexSPI接口的时钟,驱动初始化完成后,用所述时钟信息修改FlexSPI接口的时钟;具体的,本实施例中包括时钟获取、使能配置、时钟配置等,驱动初始化时默认将FlexSPI接口的时钟配置成24MHZ,完成初始化后,将FlexSPI接口时钟配置成FlexSPI设备树中的时钟信息所描述的时钟频率,默认配置成80MHZ;
中断配置时,用所述中断信息注册中断,设置中断的触发条件为IP CMD发送完成标记,具体的,本实施例中包含查找设备树中的FlexSPI接口中断信息、注册Linux中断以及中断处理函数等部分。查找设备树中的FlexSPI接口中断信息包含查找中断号和中断优先级等参数;注册中断,主要是注册platform中断;中断处理部分,主要包含清除中断标识和Linux中断的上半段处理等,为提高传输效率,中断处理部分的中断标记参数由“完成量”修改成“标记量”。由“完成量”修改成“标记量”的流程包括,发起命令后的初始化,完成中断后的置位,以及处理过程中的等待置位。其中初始化将init_conpletion()函数修改成flag=0;中断置位将complete()函数修改成flag=1;处理过程的等待置位将wait_for_completion_timeout()函数修改成while(flag!=1)。该方法能提高中断处理效率,尤其是在等待处理过程中的效率。
本实施例的步骤S2)具体包括:
使能配置好的时钟,在LUT表中配置数据位宽为8位,边沿触发方式为单边沿触发方式,在LUT表中配置发送完成后使用1个DUMMY信号,然后使能配置好的中断。
LUT表的配置为FlexSPI接口的核心配置,通过LUT配置可控制FlexSPI接口的地址配置、边沿配置、传输的参数、数据位宽信息,本实施中将FlexSPI的地址配置和参数信息交由后续的步骤进行配置,边沿配置包含单边沿、双边沿两种模式,其中单边沿是指在时钟的上升沿或者下降沿进行读写数据操作;双边沿触发是指在时钟的上升沿和下降沿均进行读写数据操作。数据位宽,通常可以配置为1位、4位和8位三种模式。与此同时,LTU表中还可以配置DUMMY信号,通常用于读写转换的延时切换。本实施例中,结合FPGA的特性以及对于传输速率的需求,配置8位的数据位宽和单边沿触发方式,并且在发送完成后使用1个DUMMY信号。
本实施例的步骤S3)中,由于FlexSPI接口通常用于驱动NOR Flash,所以默认驱动通常为块设备驱动,但是在与FPGA通信时,由于通信过程中是顺序传输命令和参数,而无需像块设备,需要访问随机地址的数据,也无需适配文件系统,因此使用字符型设备的方式,具体步骤包括:
首先进行驱动注册:依次进行cdev设备的初始化、主从设备号的分配等操作、cdev设备加载等操作,将字符设备的file_operations绑定在FPGA对应的cdev上,从而完成了file_operations结构体的填充,其中file_operations包含驱动层的open、release、read、write和ioctl等函数;
然后基于该file_operations的结构体完成字符型设备的创建,得到供应用层操作的FlexSPI接口字符设备。
本实施例中,应用层的操作函数与驱动层一一对应,调用应用层的操作函数,最终会调用驱动层的同名操作函数,因此,应用层对FlexSPI接口字符设备的所有操作都会对应到FlexSPI接口对FPGA的操作。
以下对于驱动层的操作函数进行说明:
驱动层的open函数,实现了将应用层传递进来的设备参数绑定到驱动端的设备上来,为后续的ioctl函数、read函数和write函数提供正确的设备接口。
驱动层的ioctl函数,实现了命令配置和地址配置功能,为后续的read函数和write函数提供命令和地址。
驱动层的read函数,在获取应用层下发的读取数据缓冲区和读取的字节数后,驱动层依据字节数和FIFO大小自动分帧,每一帧都将发起一次完成的数据读取过程,数据读取过程如图3所示,传输过程从命令和地址的发送开始,直到指定FIFO大小的数据读取完成后结束,依次循环,直到所需要的数据全部读取完成。数据读取的FIFO使用中断触发的方式,中断的触发条件为IP CMD发送完成标记;在等待中断完成,并正确获取FIFO数据非空的标记后,驱动层将FIFO的数据拷贝至应用层指定的数据缓冲区中,至此完成一次数据的读取操作。
驱动层的write函数,在获取应用层下发的写数据缓冲区和写入字节数后,驱动层依据字节数和FIFO大小自动分帧,每一帧都将发起一次完成的写数据传输过程,写数据传输过程如图4所示。进入发送流程后,首先将发送的FIFO清空,然后将本次需要传输的数据写入FIFO中,接着填充本次传输的命令参数和地址参数,最后触发LUT表中指定的发送命令,完成一帧数据的发送。传输过程从命令和地址的发送开始,直到指定FIFO大小的数据写入完成后结束,依次循环,直到所需要的数据全部写入完成。
本实施例中,得到供应用层操作的FlexSPI接口字符设备之后包括设置设备接口的步骤,具体包括:
调用应用层的open函数,应用层获取FPGA的设备参数;
根据应用层的open函数,调用驱动层的open函数,驱动层从应用层获取FPGA的设备参数,将FPGA的设备参数绑定到所述FlexSPI接口字符设备上,得到FlexSPI接口字符设备的FlexSPI IOCTL接口、FlexSPI读接口和FlexSPI写接口。
FlexSPI IOCTL接口,是配置读写命令和地址的端口,方便应用层控制驱动层切换读写命令和地址的接口。该接口可以方便驱动读写不同的设备、不同的寄存器地址的数据。
FlexSPI读接口,是FlexSPI接口读取数据的主要方式,主要分为两部分,命令发送和数据读取。其中命令发送是ARM端主动发送命令、地址及长度至发送端口,然后触发LUT表的主动发送标记;数据读取是指FlexSPI等到数据读取中断后,主动从FIFO中读取数据信息,FlexSPI接口的FIFO大小为128字节。FlexSPI读接口基于标准的字符型设备,填充在file_operations的结构体中。本实施例中,为了保证读取数据的完整性,在触发LUT表发送数据后,等待一个接收中断,产生中断后,并将接收FIFO置为无效状态后,才读取接收FIFO中的数据,以确保接收的数据有效。
FlexSPI写接口,是FlexSPI接口写数据的主要方式,该接口主要分为两部分,命令发送和数据发送,其中命令发送方式和FlexSPI读接口的命令发送相同,数据发送,是指将需要发送的数据写入FlexSPI的发送FIFO中,然后置位发送寄存器,将数据发送出去。FlexSPI写接口基于标准的字符型设备,填充在file_operations的结构体中。
基于FlexSPI IOCTL接口,本实施例中,设置设备接口的步骤之后包括配置命令和地址的步骤,具体包括:
调用应用层的ioctl函数,应用层将读写命令和地址信息,通过FlexSPI IOCTL接口输入FlexSPI接口字符设备;
根据应用层的ioctl函数,调用驱动层的ioctl函数,驱动层从应用层获取读写命令和地址信息。
基于FlexSPI读接口,本实施例中,配置命令和地址的步骤之后包括FlexSPI接口读取数据的步骤,具体包括:
若读写命令为读命令,调用应用层的read函数,FlexSPI接口字符设备通过FlexSPI读接口,从FlexSPI接口的接收FIFO中读取数据信息;
根据应用层的read函数,调用驱动层的read函数,驱动层获取应用层下发的读取数据缓冲区和读取字节数,依据读取字节数和FlexSPI接口的接收FIFO大小进行分帧,针对每一帧数据,清除中断标记,根据读命令和地址信息配置LUT表,触发LUT表中对应的发送命令,等待一个接收中断后,将接收FIFO置为无效,并将接收FIFO中的数据拷贝至所述读取数据缓冲区中,当前帧数据拷贝完成后,清除接收中断并使能接收FIFO。
基于FlexSPI写接口,本实施例中,设置设备接口的步骤之后包括FlexSPI接口写入数据的步骤,具体包括:
若读写命令为写命令,调用应用层的write函数,FlexSPI接口字符设备通过FlexSPI写接口,向FlexSPI接口的发送FIFO中写入数据信息;
根据应用层的write函数,调用驱动层的write函数,驱动获取应用层层下发的读取数据缓冲区和写入字节数,依据写入字节数和FlexSPI接口的发送FIFO大小进行分帧,清空发送FIFO后将每一帧数据均写入发送FIFO中,针对发送FIFO中的每一帧数据,根据写命令和地址信息配置LUT表,触发LUT表中对应的发送命令,等待数据发送完成。
本实施例还提出一种片上系统,包括通过FlexSPI接口互相连接的FPGA与ARM,其中ARM被编程或配置以执行:
获取预设的FlexSPI设备树中的时钟信息和中断信息,根据所述时钟信息和中断信息进行时钟配置和中断配置;
配置LUT表中的边沿触发方式以及数据位宽;
初始化FPGA对应的字符设备,将预设的驱动层操作函数绑定在所述字符设备上得到供应用层操作的FlexSPI接口字符设备,所述驱动层操作函数和应用层的操作函数一一对应。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (10)
1.一种用于FPGA与ARM通信的FlexSPI接口驱动方法,其特征在于,应用于片上系统,所述片上系统包括通过FlexSPI接口互相连接的FPGA与ARM,所述方法包括:
获取预设的FlexSPI设备树中的时钟信息和中断信息,根据所述时钟信息和中断信息进行时钟配置和中断配置;
配置LUT表中的边沿触发方式以及数据位宽;
初始化FPGA对应的字符设备,将预设的驱动层操作函数绑定在所述字符设备上,得到供应用层操作的FlexSPI接口字符设备,所述驱动层操作函数和应用层的操作函数一一对应。
2.根据权利要求1所述的用于FPGA与ARM通信的FlexSPI接口驱动方法,其特征在于,获取预设的FlexSPI设备树中的时钟信息和中断信息之前还包括:
配置FlexSPI设备树中的接口IO口信息、时钟频率、设备名称以及使能配置信息;
匹配FlexSPI设备树,为FlexSPI设备树分配内核空间,获取FlexSPI设备树的节点数量,映射FlexSPI设备树的物理地址到内核空间。
3.根据权利要求1所述的用于FPGA与ARM通信的FlexSPI接口驱动方法,其特征在于,根据所述时钟信息和中断信息进行时钟配置和中断配置具体包括:
用所述时钟信息修改FlexSPI接口的时钟,用所述中断信息注册中断,设置中断的触发条件为IP CMD发送完成标记。
4.根据权利要求1所述的用于FPGA与ARM通信的FlexSPI接口驱动方法,其特征在于,配置LUT表中的边沿触发方式以及数据位宽的步骤具体包括:
使能配置好的时钟,在LUT表中配置数据位宽为8位,边沿触发方式为单边沿触发方式,然后使能配置好的中断。
5.根据权利要求4所述的用于FPGA与ARM通信的FlexSPI接口驱动方法,其特征在于,配置LUT表中的边沿触发方式以及数据位宽的步骤还包括:在LUT表中配置发送完成后使用1个DUMMY信号。
6.根据权利要求1所述的用于FPGA与ARM通信的FlexSPI接口驱动方法,其特征在于,所述驱动层操作函数和应用层操作函数均包括open函数,得到供应用层操作的FlexSPI接口字符设备包括设置设备接口的步骤,具体包括:
调用应用层的open函数,应用层获取FPGA的设备参数;
根据应用层的open函数,调用驱动层的open函数,驱动层从应用层获取FPGA的设备参数,将FPGA的设备参数绑定到所述FlexSPI接口字符设备上,得到FlexSPI接口字符设备的FlexSPI IOCTL接口、FlexSPI读接口和FlexSPI写接口。
7.根据权利要求6所述的用于FPGA与ARM通信的FlexSPI接口驱动方法,其特征在于,所述驱动层操作函数和应用层操作函数均包括ioctl函数,设置设备接口的步骤之后包括配置命令和地址的步骤,具体包括:
调用应用层的ioctl函数,应用层将读写命令和地址信息,通过FlexSPI IOCTL接口输入FlexSPI接口字符设备;
根据应用层的ioctl函数,调用驱动层的ioctl函数,驱动层从应用层获取读写命令和地址信息。
8.根据权利要求7所述的用于FPGA与ARM通信的FlexSPI接口驱动方法,其特征在于,所述驱动层操作函数和应用层操作函数均包括read函数,配置命令和地址的步骤之后包括FlexSPI接口读取数据的步骤,具体包括:
若读写命令为读命令,调用应用层的read函数,FlexSPI接口字符设备通过FlexSPI读接口,从FlexSPI接口的接收FIFO中读取数据信息;
根据应用层的read函数,调用驱动层的read函数,驱动层获取应用层下发的读取数据缓冲区和读取字节数,依据读取字节数和FlexSPI接口的接收FIFO大小进行分帧,针对每一帧数据,清除中断标记,根据读命令和地址信息配置LUT表,触发LUT表中对应的发送命令,等待一个接收中断后,将接收FIFO置为无效,并将接收FIFO中的数据拷贝至所述读取数据缓冲区中,当前帧数据拷贝完成后,清除接收中断并使能接收FIFO。
9.根据权利要求7所述的用于FPGA与ARM通信的FlexSPI接口驱动方法,其特征在于,所述驱动层操作函数和应用层操作函数均包括write函数,设置设备接口的步骤之后包括FlexSPI接口写入数据的步骤,具体包括:
若读写命令为写命令,调用应用层的write函数,FlexSPI接口字符设备通过FlexSPI写接口,向FlexSPI接口的发送FIFO中写入数据信息;
根据应用层的write函数,调用驱动层的write函数,驱动获取应用层层下发的读取数据缓冲区和写入字节数,依据写入字节数和FlexSPI接口的发送FIFO大小进行分帧,清空发送FIFO后将每一帧数据均写入发送FIFO中,针对发送FIFO中的每一帧数据,根据写命令和地址信息配置LUT表,触发LUT表中对应的发送命令,等待数据发送完成。
10.一种片上系统,其特征在于,所述片上系统包括通过FlexSPI接口互相连接的FPGA与ARM,所述ARM被编程或配置以执行:
获取预设的FlexSPI设备树中的时钟信息和中断信息,根据所述时钟信息和中断信息进行时钟配置和中断配置;
配置LUT表中的边沿触发方式以及数据位宽;
初始化FPGA对应的字符设备,将预设的驱动层操作函数绑定在所述字符设备上得到供应用层操作的FlexSPI接口字符设备,所述驱动层操作函数和应用层的操作函数一一对应。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210360500.0A CN114860640B (zh) | 2022-04-07 | 2022-04-07 | 用于FPGA与ARM通信的FlexSPI接口驱动方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210360500.0A CN114860640B (zh) | 2022-04-07 | 2022-04-07 | 用于FPGA与ARM通信的FlexSPI接口驱动方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114860640A CN114860640A (zh) | 2022-08-05 |
CN114860640B true CN114860640B (zh) | 2023-06-06 |
Family
ID=82629268
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210360500.0A Active CN114860640B (zh) | 2022-04-07 | 2022-04-07 | 用于FPGA与ARM通信的FlexSPI接口驱动方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114860640B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102104508A (zh) * | 2010-12-29 | 2011-06-22 | 哈尔滨工业大学 | 基于m模块的lxi设备中的m模块ll驱动层实现方法 |
CN103412849A (zh) * | 2013-08-02 | 2013-11-27 | 桂林电子科技大学 | ARM处理器的NoC资源网络接口及其驱动方法 |
CN103984586A (zh) * | 2014-06-10 | 2014-08-13 | 哈尔滨工业大学 | 嵌入式Linux系统下的EMIF与FPGA的接口驱动方法 |
CN105939238A (zh) * | 2016-04-14 | 2016-09-14 | 天津市德力电子仪器有限公司 | 一种基于SOC隔离Memory的10Gbps以太网实时数据采集方法 |
CN107168710A (zh) * | 2017-05-16 | 2017-09-15 | 太原鹏跃电子科技有限公司 | 一种基于阻塞接收机制的嵌入式Linux串口驱动开发方法 |
CN109656844A (zh) * | 2018-12-03 | 2019-04-19 | 郑州云海信息技术有限公司 | 一种AT24xx EEPROM驱动方法和装置 |
CN110083571A (zh) * | 2019-03-27 | 2019-08-02 | 中国计量大学上虞高等研究院有限公司 | 一种分布式实时存储装置及其数据传输方法 |
CN110348233A (zh) * | 2019-07-01 | 2019-10-18 | 电子科技大学 | 一种基于arm的多级安全操作系统实现方法 |
CN111193877A (zh) * | 2019-08-29 | 2020-05-22 | 桂林电子科技大学 | 一种arm-fpga协同的广域视频实时融合方法及嵌入式设备 |
CN112230955A (zh) * | 2020-10-14 | 2021-01-15 | 西安微电子技术研究所 | 基于双核ARM SoC计算机FPGA重构系统及操作方法 |
CN112926277A (zh) * | 2020-12-29 | 2021-06-08 | 西南技术物理研究所 | 小型化焦平面阵列测试数据采集和显示系统设计方法 |
CN215991226U (zh) * | 2021-08-23 | 2022-03-08 | 杭州未名信科科技有限公司 | 一种异构多处理器5g网关电路 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3497834B2 (ja) * | 2001-03-30 | 2004-02-16 | 株式会社東芝 | ルートリピータ、usb通信システム、usb通信制御方法 |
-
2022
- 2022-04-07 CN CN202210360500.0A patent/CN114860640B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102104508A (zh) * | 2010-12-29 | 2011-06-22 | 哈尔滨工业大学 | 基于m模块的lxi设备中的m模块ll驱动层实现方法 |
CN103412849A (zh) * | 2013-08-02 | 2013-11-27 | 桂林电子科技大学 | ARM处理器的NoC资源网络接口及其驱动方法 |
CN103984586A (zh) * | 2014-06-10 | 2014-08-13 | 哈尔滨工业大学 | 嵌入式Linux系统下的EMIF与FPGA的接口驱动方法 |
CN105939238A (zh) * | 2016-04-14 | 2016-09-14 | 天津市德力电子仪器有限公司 | 一种基于SOC隔离Memory的10Gbps以太网实时数据采集方法 |
CN107168710A (zh) * | 2017-05-16 | 2017-09-15 | 太原鹏跃电子科技有限公司 | 一种基于阻塞接收机制的嵌入式Linux串口驱动开发方法 |
CN109656844A (zh) * | 2018-12-03 | 2019-04-19 | 郑州云海信息技术有限公司 | 一种AT24xx EEPROM驱动方法和装置 |
CN110083571A (zh) * | 2019-03-27 | 2019-08-02 | 中国计量大学上虞高等研究院有限公司 | 一种分布式实时存储装置及其数据传输方法 |
CN110348233A (zh) * | 2019-07-01 | 2019-10-18 | 电子科技大学 | 一种基于arm的多级安全操作系统实现方法 |
CN111193877A (zh) * | 2019-08-29 | 2020-05-22 | 桂林电子科技大学 | 一种arm-fpga协同的广域视频实时融合方法及嵌入式设备 |
CN112230955A (zh) * | 2020-10-14 | 2021-01-15 | 西安微电子技术研究所 | 基于双核ARM SoC计算机FPGA重构系统及操作方法 |
CN112926277A (zh) * | 2020-12-29 | 2021-06-08 | 西南技术物理研究所 | 小型化焦平面阵列测试数据采集和显示系统设计方法 |
CN215991226U (zh) * | 2021-08-23 | 2022-03-08 | 杭州未名信科科技有限公司 | 一种异构多处理器5g网关电路 |
Non-Patent Citations (1)
Title |
---|
"基于ARM 和FPGA 的红外系统数据交换驱动设计";王小平 等;《器件与应用》;第61-66页 * |
Also Published As
Publication number | Publication date |
---|---|
CN114860640A (zh) | 2022-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106951388B (zh) | 一种基于PCIe的DMA数据传输方法及系统 | |
US5805834A (en) | Hot reconfigurable parallel bus bridging circuit | |
CN109471824B (zh) | 基于axi总线的数据传输系统及方法 | |
US20050223210A1 (en) | Machine and method for deployment of OS image | |
WO2001090900A1 (en) | The method of emulating different protocol of flash memory | |
CN109800193B (zh) | 一种ahb总线访问片上sram的桥接装置 | |
US20230385226A1 (en) | Enhanced spi controller and spi controller operating method | |
CN109902042B (zh) | 一种实现dsp与zynq之间高速数据传输的方法及系统 | |
CN105677598B (zh) | 基于i2c接口快速读取多个mems传感器数据的模块和方法 | |
CN111931442B (zh) | Fpga内嵌flash控制器及电子装置 | |
CN101232522B (zh) | 一种网卡驱动方法 | |
CN113270137A (zh) | 一种基于fpga嵌入式软核的ddr2测试方法 | |
CN114860640B (zh) | 用于FPGA与ARM通信的FlexSPI接口驱动方法及系统 | |
CN115729870A (zh) | 一种基于fpga的高效pcie dma数据传输方法 | |
CN116225992A (zh) | 一种支持虚拟化仿真设备的NVMe验证平台及方法 | |
CN109408426B (zh) | 一种灵活通用的串行通信方法及系统 | |
CN111198704A (zh) | 基于tcp协议的fpga远程升级系统 | |
US20230385064A1 (en) | Register update method | |
CN108920193A (zh) | Fpga和cpu间sdio通信接口实现方法、及装置 | |
CN107861803A (zh) | 一种基于中断的xp系统下cpci总线rs422通信驱动方法 | |
CN110765060A (zh) | Mdio总线到并行总线转换方法及装置、设备、介质 | |
CN112711925B (zh) | 虚拟化emif总线dsp软件设计方法 | |
CN115509974A (zh) | 一种基于fpga光纤数据收发处理的方法 | |
CN210639608U (zh) | 一种ospi控制装置 | |
CN108153485A (zh) | 一种多设备协同访问sram的方法及系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |