arm与fpga通信的过程

arm与fpga通信的过程
一、基础知识
 ( 1)FPGA的配置方式:
      ①并行主模式为一片FPGA加一片EPROM的方式;
      ②主从模式可以支持一片PROM编程多片FPGA;
      ③串行模式可以采用串行PROM编程FPGA;
      ④外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。            
  公司在u-boot中是以被动串行模式方式加载fpga的。即 每次在FPGA上电时,由外部器件完成FPGA的配置
         

 
 (2)rk3368平台fpga硬件连接关系
        
       ①一般采用串行方式和fpga通信连接方式:
       
         arm与fpga通信的过程
       引脚说明:
 
       MSEL:这组信号决定了FPGA的配置方式(主/被动串行、主/被动并行、 JTAG模式等)
       CONF_DONE:这个信号信上拉,FPGA配置完成,可以获取其高低电平判断是否,配置结束。
       nSTATUS:一样,开路输出,需上拉,这个信号反应FPGA的配置过程状态的信号,一会儿看时序图。
       nCE:片选,用来选择当前的FPGA,如果有多片,这个就有用了;
       DATA0,DCLK:俩个配置过程正真干活的信号,数据和时钟,DCLK上升沿,FPGA采集DATA0的信号.
       nCONFIG:这个信号很重要,由主控告诉FPGA,要开始配置了,即产生起始信号。
 
        ②T6系列fpga通信涉及的引脚:
        
arm与fpga通信的过程 
 
       ③对应rk3368引脚:其中GPGA_LED是连接在fpga上无需arm去控制
 
  arm与fpga通信的过程
 
arm与fpga通信的过程
arm与fpga通信的过程
arm与fpga通信的过程arm与fpga通信的过程
                                             对应表
arm与fpga通信的过程 


  二、arm与fpga串行通信时序
 
                         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口:
          arm与fpga通信的过程   
    在u-boot下gpio获取说明:
                 arm与fpga通信的过程
    b. 根据时序编写上电复位、配置开始和判断是否发送结束的时序模拟
 
arm与fpga通信的过程
            
                 源码中对判断是否发送结束做了多次的考证以及相应的标志显示。
        
    c.数据发送
         这里根据fpga的数据端的大小,做相应的调整,源码中fpga的数据段大小约为800k字节
               arm与fpga通信的过程
               
    【说明】
    根据导师介绍,fpga的 前两个扇区(2*512个字节) 是一些公司的信息,一般不包括配置信息 所以一般跳过,实现代码如下:
               arm与fpga通信的过程
 
 
 
②利用SPI
    a.spi有四种工作方式,在CPHA=0,CPOL=0时工作时序如下:发现其和fpga的串行数据发送相似,然后只需实现上电复位时序即可
 
                                     arm与fpga通信的过程
 
                                    此时时序映射关系:CPOL相当于SCL线、slave相当于INIT_DONE端、MISO为DATA端
 
                                        
 
               b. spi实现数据发送源码:( 这里涉及一些spi操作的api函数和结构体具体api函数实现细节还需要深入学习了解
 
 
arm与fpga通信的过程