FPGA从串模式启动-比特文件加载

1 FPGA从串模式加载及升级设计

    FPGA程序加载及升级功能:通过配置FPGA引脚,使得FPGA工作在从串模式下,处理器通过SPI将比特流文件传送给FPGA,用于FPGA从串模式启动。

1.1 硬件连线

    处理器与FPGA硬件连接如下。
在这里插入图片描述
FPGA硬件配置框图如下。
在这里插入图片描述
FPGA从串模式加载时序如下。
在这里插入图片描述
相关引脚解释:
 M0和M1引脚:用于配置FPGA的工作模式。salve serial 模式或master serial模式;
 PROGRAM_B和INIT_B引脚: 从串模式下,作为起始信号,类似于I2C的起始信号;
 CLK和Master DIN引脚:连接处理器侧SPI控制器的SPCK和MOSI;
 DONE引脚:FPGA程序加载完成后会将此引脚拉高,以表示加载完毕。

1.2 处理器SPI配置

处理器SPI配置如下:
SPI0控制器工作在master模式下;
使用atmel原生支持的控制器驱动\linux-at91\drivers\spi\spi-atmel.c;
使用内核自带的spi设备驱动\linux-at91\drivers\spi\spidev.c;
使用内核自带的spi调试工具\linux-at91\tools\spi\spidev_test.c。
根据FPGA从串模式加载时序,对应SPI的时序:对应A5-SPI的Mode=1;
CPOL=0;NCPHA=0;CLK空闲时为低电平,上升沿采样数据。

以使用spidev_test工具加载比特文件evt_top_0413.bit举例:
./spidev_test -D /dev/spidev0.0 -s 10000000 –i evt_top_0413.bit
spidev_test参数解释如下:
在这里插入图片描述
为便于FPGA从串模式比特文件加载,编写了加载工具fpga_load ,具体源码详见elevator-4.0-ida-driver\debug_tools\fpga_slave_serial-spi\。
软件实现流程:
1) 控制M0和M1引脚,让FPGA工作在从串模式下;
2) 控制PROGRAM_B和INIT_B引脚,作为起始信号,FPGA准备接收比特文件加载;
3) 使用处理器的SPI控制器传输FPGA比特文件,系统调用spidev_test工具加载比特文件;
4) 通过DONE引脚的电平判断FPGA比特文件加载是否完成。D3指示灯默认是熄灭状态,若FPGA加载成功D3指示灯会被点亮。
软件流程图如下。
在这里插入图片描述
备注:第一版实现的是模拟GPIO的方式加载FPGA比特文件,但加载速度较慢,GPIO的传输速率最大也只有10Kb/s;第二版实现了SPI传输,传输速率设置为6Mb/s,传输速率很快。

2 处理器侧的驱动修改

以下是A5 处理器SPI0控制器 工作在master mode 的相关修改。

2.1 设备树修改

linux-at91\arch\arm\boot\dts\at91-sama5d27_som1_ek.dts
在这里插入图片描述
linux-at91\arch\arm\boot\dts\sama5d2.dtsi
在这里插入图片描述
为了区分spi控制器spi0和spi1的工作模式,将spi0的compatible进行了修改。同时,驱动文件elevator-4.0-ida-driver\linux-at91\drivers\spi\spi-atmel.c 也需要进行修改。
在这里插入图片描述

2.2 驱动修改

(1)配置文件
1)elevator-4.0-ida-driver\linux-at91\arch\arm\configs\sama5_defconfig
在这里插入图片描述
将spi-atmel.c spi-atmel_slave.c全部编译至内核,系统启动时直接加载。
将spidev.c 编译成ko模块,系统启动后以ko模块进行加载。

spi-atmel.c :作为spi0控制器驱动,spi工作在matser模式,该驱动为原厂自带驱动。
spi-atmel_slave.c : 作为spi1控制器驱动,spi工作在slave模式,该驱动在原厂自带驱动的基础上进行了修改。
spidev.c:作为spi设备驱动,用于spi0控制器下挂的从设备驱动。

2)elevator-4.0-ida-driver\linux-at91\drivers\spi\Makefile
在这里插入图片描述
3)elevator-4.0-ida-driver\linux-at91\drivers\spi\Kconfig
在这里插入图片描述
在这里插入图片描述
Kconfig进行了修改,可以将SPI Master编译配置进去。

在这里插入图片描述

(2)elevator-4.0-ida-driver\linux-at91\drivers\spi\spidev.c

SPI设备驱动中对SPI传输的字节长度进行了限制,最大传输长度默认为4096Byte,由于我们传输的FPGA 比特文件大小为300K以上,这里将最大字节长度修改为1Mbyte。

在这里插入图片描述
添加 compatible 属性,与设备树中的spi0节点下的slave字节点对应上。
在这里插入图片描述
在这里插入图片描述
(3)elevator-4.0-ida-driver\linux-at91\drivers\spi\spi-atmel.c
在这里插入图片描述
在这里插入图片描述
(4)elevator-4.0-ida-driver\linux-at91\tools\spi\spidev_test.c

atmel提供的内核版本中spidev_test.c文件存在Bug,使用其他版本的内核中的spidev_test.c替换了 atmel提供的内核版本中spidev_test.c。
这里直接使用命令对文件进行编译:
arm-buildroot-linux-gnueabihf-gcc spidev_test.c -o spidev_test

3 文件系统相关修改

为增加FPGA版本加载的容错能力,编写了脚本,用于控制fpga版本加载。

/etc/init.d/S70fatri_init

在这里插入图片描述

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heat.huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值