我已经在 Altera DE1-SoC 开发板上工作了 8 个月。我正在处理的系统包括一个 Cyclone V FPGA 芯片,尤其是 5CSEMA5F31C6N。它在芯片上运行嵌入式 Linux 操作系统。
一切都很好,开发正在进行中。两周前,公司的一名硬件工程师组装了一块新的定制板。设计和组件与开发板的大部分相似。所有与 HPS 相关的引脚都以相同的方式连接,一个主要区别是默认控制台端口是 UART1。这个问题已经解决,我现在可以通过 UART1 接收 U-boot 和内核消息。
但是系统并没有完全启动。我已将此归因于多种原因。首先,我有一个 init.d 脚本可以导出 GPIO LED 并创建一个 sysfs 文件。导出 gpio pin 有效,但是,改变方向,或改变值,或从中读取,会导致系统冻结。我在 init.d 脚本上禁用了该功能并重新启动了设备。这次引导在另一个 init.d 脚本行上失败。该行将更改轻量级桥中寄存器的值。命令是devmem 0xFF200XXX 32 1
,其中 XXX 是特定的寄存器。
我尝试在所有网桥上使用 devmem,但所有尝试都会冻结 Linux。我尝试在 HPS 的 UART 寄存器、HPS 的 SDCard 寄存器(此处引用)上使用 devmem ,但它没有冻结。
我可以通过读取每个桥的状态 sysfs 文件来验证桥是否已启用: fpga_bridge state returns enabled
我还可以通过此 dmesg 输出验证网桥是否链接到驱动程序: dmesg output
我使用 Quartus Platform Designer 在 hps 配置中启用了所有三个桥接器。我的 u-boot.scr 中也有以下几行:
fatload mmc 0:1 $fpgadata soc_system.rbf;
fpga load 0 $fpgadata $filesize;
setenv fdtimage soc_system.dtb;
run bridge_enable_handoff;
run mmcload;
run mmcboot;
我还尝试按照这些说明通过 U-boot 命令行启用网桥。
但是,我无法将任何内容写入 $l3regs: 写入 l3regs
我正在使用带有 4.4 Linux 内核的 Buildroot 2016.05 构建操作系统。要创建 .rbf、.dts、.dtb、preloader-mkpimage.bin 和 u-boot 文件,我使用的是 SoC EDS 18.1 [Build 625]。
我已经没有什么可以尝试的了。
如果我能够使用 sysfs 文件从 Linux 操作系统打开和关闭 LED,我会认为问题已解决。
假设硬件是正确的,还有什么可能是原因,我该如何解决?
谢谢回复。此问题已得到解决。
在开发板上,我们使用 50Mhz 振荡器为 HPS 外设提供时钟,同时从相同的 50Mhz 时钟生成 25MHz 信号,然后将其连接到结构上的 HPS 时钟引脚。
在新板上,我们没有使用 50Mhz 振荡器,而是选择了 25Mhz 振荡器。这次,单个轨道直接从振荡器连接到架构上的 HPS 时钟引脚。
我们没有任何其他时钟可以提供给 HPS 外设。
因此,我们在内部将专用 HPS 时钟路由到 HPS 外围设备的输入引脚。这是一个错误,因为这不能在 Cyclone V 的顶层架构上完成,因为专用 HPS 时钟引脚不是 GPIO。