我有一个DE10-Nano 旋风V开发板,从Terasic获得了1GB的外部DDR3内存,我想实现一个驱动程序,它可以管理运行在ARM Cortex-A9处理器上的DDR3与Cyclone的DDR3结构之间的通信。
使用dma_alloc_coherent,我分配了一定数量的内存,并将硬件地址写入我编写的模块。
然后,我继续通过SDRAM AXI接口将任意数字写入给定地址,但很显然,SDRAM从机从未断言过或WREADY信号。
我已经将SDRAM AXI接口配置为在325 MHz、be 256位 wide (datalength)、32位寻址长度和AXI3从上运行。SDRAM接口配置为TrustZone-aware设备(ARM TrustZone设置)
我还将一些其他配置行硬连接到AXI从属程序,现在我将列出这些配置线:
assign axm_m0_arburst = 'd0;
assign axm_m0_arcache = 'd0;
assign axm_m0_arid = 'd0;
assign axm_m0_arlen = 'd0;
assign axm_m0_arlock = 'd0;
assign axm_m0_arprot = 'd0;
assign axm_m0_arsize = 'b101;
assign axm_m0_awburst = 'd0;
assign axm_m0_awcache = 'd0;
assign axm_m0_awid = 'd0;
assign axm_m0_awlen = 'd0;
assign axm_m0_awlock = 'd0;
assign axm_m0_awprot = 'd0;
assign axm_m0_awsize = 'b101;
assign axm_m0_wid = 'd0;
assign axm_m0_wstrb = 'hFFFFFFFF;当查看Linux中的FPGA桥驱动程序(/sys/class/fpga- bridge / be 4)时,状态显示为“已启用”。
这座桥为什么还会阻碍通讯?
谢谢你的帮助。
发布于 2017-10-01 12:08:26
解决问题:
很明显,尽管Linux说这些桥接器是启用的,但它们没有。一个人必须将特定的配置位写入HPS的配置结构中,否则模块就无法工作。
echo -- Programming FPGA --
fatload mmc 0:1 $fpgadata soc_system.rbf;
fpga load 0 $fpgadata $filesize;
run bridge_enable_handoff;
mw $fpgaintf $fpgaintf_handoff;
mw $fpga2sdram $fpga2sdram_handoff;
go $fpga2sdram_apply;
mw $axibridge $axibridge_handoff;
mw $l3remap $l3remap_handoff;
#md $fpgaintf;
#md $fpga2sdram;
#md $axibridge;
setenv fdtimage soc_system.dtb;
setenv mmcroot /dev/mmcblk0p2;
setenv mmcload 'mmc rescan;${mmcloadcmd} mmc 0:${mmcloadpart} ${loadaddr} ${bootimage};${mmcloadcmd} mmc 0:${mmcloadpart} ${fdtaddr} ${fdtimage};';
setenv mmcboot 'setenv bootargs console=ttyS0,115200 root=${mmcroot} rw rootwait; bootz ${loadaddr} - ${fdtaddr}';
run mmcload;
run mmcboot;注释过的行会导致崩溃,因为显然数据是不对齐的,处理器不允许这种访问。我将对这个问题做进一步的调查。
关于这些主题的进一步阅读,我推荐以下几页:
https://stackoverflow.com/questions/46503606
复制相似问题