arm与fpga通信的过程
一、基础知识
(
1)FPGA的配置方式:
①并行主模式为一片FPGA加一片EPROM的方式;
②主从模式可以支持一片PROM编程多片FPGA;
③串行模式可以采用串行PROM编程FPGA;
④外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。
公司在u-boot中是以被动串行模式方式加载fpga的。即
每次在FPGA上电时,由外部器件完成FPGA的配置。
(2)rk3368平台fpga硬件连接关系
①一般采用串行方式和fpga通信连接方式:
引脚说明:
MSEL:这组信号决定了FPGA的配置方式(主/被动串行、主/被动并行、 JTAG模式等)
CONF_DONE:这个信号信上拉,FPGA配置完成,可以获取其高低电平判断是否,配置结束。
nSTATUS:一样,开路输出,需上拉,这个信号反应FPGA的配置过程状态的信号,一会儿看时序图。
nCE:片选,用来选择当前的FPGA,如果有多片,这个就有用了;
DATA0,DCLK:俩个配置过程正真干活的信号,数据和时钟,DCLK上升沿,FPGA采集DATA0的信号.
nCONFIG:这个信号很重要,由主控告诉FPGA,要开始配置了,即产生起始信号。
②T6系列fpga通信涉及的引脚:
③对应rk3368引脚:其中GPGA_LED是连接在fpga上无需arm去控制
对应表
二、arm与fpga串行通信时序
fpga串行配置时序图
1、
时序解读:(红色部分是核心时序)
①上电让
nCONFIG管脚被拉低大致5us,器件复位,此时配置RAM的所有内容被清空,所有I/O处于高阻态,其余三个状态信号亦均被拉低,
②复位结束FPGA释放nCONFIG管脚,其被外部上拉电阻拉高,
FPGA在nCONFIG检测到由低到高的跳变沿(这里维持高电平一段时间),配置开始,同时FPGA采样MSEL的信号状态,决定接受何种配置模式。
③随后,FPGA释放nSTATUS管脚,上拉电阻将其拉高,FPGA在nSTATUS管脚检测到由低到高的跳变沿,表示FPGA开始接受数据。
(此引脚没有涉及,所以没有这个过程)
④配置数据由DATA引脚打入,
data数据在SCL
上升沿
锁存至FPGA中,配置数据全部打入到FPGA后,FPGA释放CONF_DONE管脚,使其由外部上拉电阻拉高,说明配置结束,进入初始化过程。
⑤INIT_DONE是一个指示初始化完成的信号,INIT_DONE在nCONFIG信号为低或配置的初期时为高电平,当data数据的第一帧被配置进FPGA后,INIT_DONE信号变低,因此INIT_DONE信号由高到低的跳变表示FPGA配置真正开始,开始接收配置数据,INIT_DONE一直保持为高,说明FPGA没有接收到正确配置数据的文件头。
当初始化结束后,FPGA释放它,使其由外部上拉电阻拉高
(判断数据传输结束)
。
2、时序实现(参考导师u-boot加载fpga源码):
①io口模拟
a.定义io口:
在u-boot下gpio获取说明:
b. 根据时序编写上电复位、配置开始和判断是否发送结束的时序模拟
源码中对判断是否发送结束做了多次的考证以及相应的标志显示。
c.数据发送
这里根据fpga的数据端的大小,做相应的调整,源码中fpga的数据段大小约为800k字节
【说明】
根据导师介绍,fpga的
前两个扇区(2*512个字节)
是一些公司的信息,一般不包括配置信息 所以一般跳过,实现代码如下:
②利用SPI
a.spi有四种工作方式,在CPHA=0,CPOL=0时工作时序如下:发现其和fpga的串行数据发送相似,然后只需实现上电复位时序即可
此时时序映射关系:CPOL相当于SCL线、slave相当于INIT_DONE端、MISO为DATA端
b.
spi实现数据发送源码:(
这里涉及一些spi操作的api函数和结构体具体api函数实现细节还需要深入学习了解
)