一种基于FPGA的SPI接口配置方法
技术领域
本发明属于SPI接口配置技术领域,更具体的是一种基于FPGA的SPI接口配置方法。
背景技术
现场可编程阵列(FPGA)具有灵活性、时效性等优点,通过灵活的编程可以设计成为很多通用接口。
SPI(串行外设接口)总线系统是一种同步串行外设接口,用于处理主设备与各种外围设备以串行方式进行通信信息交换。它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。分别是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。SDI为主设备数据输入,从设备数据输出;SDO是主设备数据输出,从设备数据输入;SCLK是时钟信号,由主设备产生;CS是从设备使能信号,由主设备控制。
通常实现中FPGA与外围设备的SPI通信具有准实时的交互性,多数情况下需要上位机进行配合,增加交互用的串口、网口或是增加CPU器件的参与。不论哪一种都既增加开发难度,又需要增加开发人员,进而增加了开发周期及开发成本。
相关术语:
SPI Serial Peripheral Interface 串行外设接口
FPGA Filed Programmable Gate Array 现场可编程门阵列
ROM Read-only Memory 只读存储器
CPU Central Processing Unit 中央处理器
JTAG Joint Test Action Group 联合测试工作组
发明内容
本发明提出了一种基于FPGA的SPI接口配置方法,可以在没有上位机的情况下完成SPI接口的配置。并在线修改SPI配置参数,实现准实时交互性。
本发明技术方案提供一种基于FPGA的SPI接口配置方法,用于在没有上位机的情况下完成SPI接口的配置,并支持在线修改SPI配置参数,实现如下,
设置JTAG下载器连接JTAG接口,JTAG接口通过配置连线连接FPGA,FPGA通过SPI总线连接到作为外围设备的SPI器件;
FPGA包括依次连接的ROM模块、SPI Ctrl模块和SPI接口模块,SPI模块通过SPI总线连接到SPI器件;
所述ROM模块用于存储二进制编码文件;
所述SPI Ctrl模块,用于从ROM模块中读取数据,并转化成SPI接口接受的命令格式;
SPI接口模块用于产生SPI接口信号,输出SPI接口信号给外围设备;
对外围设备的初始配置包括以下步骤,
步骤1,将外围设备的配置脚本文件转换成FPGA内部的ROM模块能够存储并识别的二进制编码文件;
步骤2,例化FPGA内部的ROM模块,ROM模块的存储大小由步骤1生成的二进制编码文件大小决定;用步骤1生成的二进制编码文件对ROM模块进行初始化;
步骤3,FPGA通过SPI Ctrl模块配置的状态机,从ROM模块中将二进制编码命令传到SPI接口模块上;所述二进制编码命令是用步骤1生成的二进制编码文件对ROM模块进行初始化的结果;
步骤4,FPGA的SPI接口模块形成符合外围设备的SPI接口命令,对外围设备进行串行通信配置。
而且,当需要对外围设备重新配置时,在线修改ROM模块中的二进制编码文件,FPGA复位释放后,实现对外围设备的重新配置。
而且,采用以下方式实现对外围设备的重新配置。
首先,在应用中根据实际需要,确定要修改的外围设备SPI接口的地址和数据值;
然后,加载用于ROM模块初始化的二进制编码文件;找到相应的SPI地址,填入确定要修改的数据值;
最后,FPGA芯片复位,在FPGA内部重复运行步骤3和步骤4;修改后的值被重新配置到外围设备。
而且,使用FPGA编程软件实现加载用于ROM模块初始化的二进制编码文件;找到相应的SPI地址,填入确定要修改的数据值。
本发明提出的一种基于FPGA的SPI接口配置方法,没有采用串口、网口等需要CPU参与的交互方式。两者相比,本发明实现节省了开发难度及开发人员投入,节约了开发成本,适于通信公司大规模应用,具有重要的经济意义和市场价值。
附图说明
图1为本发明实施例中硬件模块连接框图。
图2为本发明实施例中FPGA实现模块框图。
图3为本发明实施例中配置流程图。
图4为本发明实施例中二进制编码文件结构示意图。
具体实施方式
下面结合附图及实施例对本发明做进一步的详细说明。
本发明实施例,提出一种基于FPGA的SPI接口配置方法。无需开发上位机软件,节省了开发难度及开发人员投入,节约了开发成本。FPGA的内部ROM模块存储外围设备需要配置的SPI寄存器命令。通过状态机控制将存储在ROM中的命令,生成SPI接口信号对外围设备进行配置。在线修改ROM中的内容实现对外围设备的重新配置。
本发明采用的FPGA芯片是Intel公司的FPGA芯片,FPGA的开发综合软件是QutursII。
图1为整个硬件模块的连接图,FPGA JTAG下载器连接JTAG接口,JTAG接口通过配置连线连接FPGA,FPGA通过SPI总线连接到作为外围设备的SPI器件。电路板上电,通过FPGAJTAG下载器,将编程好的FPGA文件下载到FPGA芯片。FPGA开始运行后,从内部的ROM取出数据通过SPI接口对外围设备进行配置。
图2为FPGA内部实现框图,包括依次连接的ROM模块、SPI Ctrl模块和SPI接口模块(图中记为SPI),SPI模块通过SPI总线连接到SPI器件。ROM模块用于存储二进制编码文件。SPI Ctrl模块(串行外设接口控制模块)用于从ROM模块中读取数据,并转化成SPI接口接受的命令格式。SPI接口模块用于产生SPI接口信号,输出SPI接口信号给外围设备。具体实施时,本领域技术人员可以采用FPGA软件技术实现模块化。
参见图3,本发明实施例的具体实现如下:
对外围设备的初始配置包括以下步骤:步骤1,将外围设备配置脚本文件转换成FPGA内部的ROM模块可以存储并可识别的二进制编码文件。
实施例中,先将外围器件AD9361的配置脚本转换成二进制编码文件。二进制编码结构如图4。每个二进制编码位宽为20位,由3部分组成:2位读写操作(W/R),第18、19位;10位SPI地址(SPI Addr),第8~17位和8位数据(SPI data),第0~7位。写操作,二进制编码的最高2位编码为11;读操作,二进制编码的最高2位编码为10。AD9361配置脚本中的等待命令,二进制编码的最高2位编码为01。在控制状态机中如果读到等待命令,FPGA会等待一段时间,不操作SPI接口。
步骤2,例化FPGA内部的ROM模块,ROM模块的存储大小由步骤1生成的二进制编码文件大小决定。并用步骤1生成的二进制编码文件对ROM进行初始化。
例化FPGA中的ROM模块,ROM模块的存储位宽和深度由步骤1生成的二进制编码文件决定。实施例中设置的ROM位宽为20位,存储深度为4096。ROM模块用步骤1生成的二进制编码文件对进行初始化。
步骤3,FPGA通过SPI Ctrl模块配置的状态机,从ROM模块中将二进制编码命令传到SPI接口模块上。所述二进制编码命令是用步骤1生成的二进制编码文件对ROM模块进行初始化的结果。
FPGA中的SPI Ctrl模块控制从ROM中读出数据,转换成SPI模块可以执行的SPI命令。实施例中SPI Ctrl模块的状态机具体设置为,如读到的二进制编码命令最高2位为11,则SPI串行接口中的读写位置1,进行写操作;如读到的二进制编码命令最高2位为11,则SPI串行接口中的读写位置0,进行读操作。如读到的二进制编码命令最高2位为01,则SPI串行接口不进行读或是写操作,等待外围设备(本实施例中是AD9361芯片)进行内部的校准/锁相环锁定等操作。
步骤4,FPGA的SPI接口模块形成符合外围设备的SPI接口命令,对外围设备进行串行配置。
FPGA中的SPI接口模块将得到的SPI读写、寄存器地址和写入数据等命令,形成外围设备可识别的SPI接口信号。与外围设备进行串行通信。
进一步地,当需要对外围设备的重新配置时,使用FPGA编程软件,在线修改ROM中的二进制编码命令文件,FPGA复位释放后,实现对外围设备的重新配置。
实施例实现如下:
首先,在应用中根据实际需要,确定要修改的外围设备SPI接口的地址和数据值。例如,根据实际需要调整AD9361的发送端内部衰减值,即对应的SPI寄存器地址为0x073或是0x075的衰减值。
然后,打开FPGA芯片的Quturs II软件的In‐System Memory Content Editor工具加载用于ROM初始化的二进制编码文件。找到相应的SPI地址,填入确定的修改值。例如,在In‐System Memory Content Editor工具里加载ROM初始化二进制编码文件,找到AD9361发送端内部衰减寄存器0x73或是0x75所在的位置。修改二进制编码中的8位数据部分,填入所需要的数值。
最后,FPGA芯片复位,在FPGA内部重复运行步骤3和步骤4。修改后的值被重新配置到外围设备。例如,AD9361发送端内部衰减会变成实际需要的值,使发送端输出信号满足实际需求。
具体实施时,本领域技术人员可以采用FPGA软件技术实现上述方法的自动运行。
本发明中所描述的具体实施例仅仅是对本发明进行举例说明。任何熟悉该技术的技术人员在本发明做揭露的技术范围内,都可轻易得到其变化或替换,因此本发明保护范围都应涵盖在由权利要求书所限定的保护范围之内。