Thread 中讨论的其他器件: SYSBIOS
工具/软件:TI-RTOS
您好!
我们有一个 AM5728定制板。 ARM 是主控制器、在 Linux 下运行。 DSP 运行 TI_RTOS、并通过 GPMC 连接到 FPGA 进行加载、并通过 PCIe 进行通信。 整个过程的工作方式如下:
- FPGA 图像存储在 eMMC 上。
- Linux 将映像读取到 ARM 和 DSP 共享的存储器中。
- Linux 通过 MessageQ 向 DSP 发送一条消息、指明图像已加载到存储器中。
- DSP 通过 GPMC 将图像写入 FPGA。
- FPGA 以硬件信号进行响应、表示已成功加载。
此过程通常可以正常工作、但在电路板上电后或待加载的映像文件更改后、几乎总是会失败。
在调试该问题时、我们注意到 DSP 偶尔会读取映像存储器、并且其值为0x55555555、该值不存在于映像文件中的任何位置。 只要 DSP 在数据中看到0x5555555、FPGA 编程就会失败。 如果我们没有执行任何其他操作、但重复上述过程(即没有重启或重启)、则映像将成功加载。
此时、我们怀疑存在某种缓存问题、尽管不确定 它在哪一侧、还是 ARM 或 DSP。 在 ARM 端、尝试同步传输以强制从 eMMC 到存储器的数据传输完成、然后通知 DSP 开始下载。 但是、我们的 Linux 开发人员
-
我目前正在使用一种机制,该机制在 Linux 方面没有进行高速缓存。 事实上,内存驱动程序甚至不能实现 fsync 功能,因为它被记录为直接访问物理内存–Linux 在这两者之间不做任何事情。
-
这似乎是一个死端
在 DSP 方面、我尝试通过.cfg 文件使整个共享存储器区域取消缓存、如下所示:
VAR Cache = xdc.useModule('ti.sysbios.family.c66.Cache');
Cache.setMarMeta(0x8CA80000,0x01000000,0);
0x8CA80000是 DSP 端存储器地址。 Linux 端通过0xF0000000处的资源表定义。
这似乎根本无助于事情。 因此、当我从存储器读取数据时、我厌倦了使缓存无效、如下所示:
如果((I % 32)=0) { cache_inv (&fpgaDownload[i]、128、cache_Type_All、true); }
"I"是32位字的计数、因此"I" mod 32是每128个字节、我认为这是缓存行大小。
再说一次、运气不佳、行为是相同的。 请记住、这偶尔会起作用、如果 ARM 向存储器写入相同的映像两次、则几乎总是起作用。
然后、我在 DSP 中执行了一个有趣的调试日志。 在尝试加载 FPGA 之前、我在循环中扫描了存储器的0x5555555。 如果我检测到0x55555555、我将错误和偏移记录到中
存储器、睡眠了1秒、我再次开始、继续循环、直到负载成功。 令我惊讶的是,它运行正常,但花了30秒! 请注意0x55555555地址是如何的
检测到的文件向下移动、有时重复一遍又一遍、持续几秒钟。 就像 ARM 认为从 eMMC 的内存传输已经完成、但实际上并不是。
FPGA:加载大小为5159580字节的 FPGA 映像
FPGA:扫描找到的 FPGA 图像、大小为1744960字节
FPGA:扫描发现的 five 为1753152字节的 FPGA 图像
FPGA:扫描发现的 five 为1753152字节的 FPGA 图像
FPGA:扫描发现的 five 为1753152字节的 FPGA 图像
FPGA:扫描发现的 five 为1753152字节的 FPGA 图像
FPGA:扫描发现的 five 为1753152字节的 FPGA 图像
FPGA:扫描发现的 five 为1753152字节的 FPGA 图像
FPGA:扫描发现的 five 为1753152字节的 FPGA 图像
FPGA:扫描发现的 five 为1753152字节的 FPGA 图像
FPGA:扫描发现的 five 为1753152字节的 FPGA 图像
FPGA:扫描找到的 five 为323680字节的 FPGA 图像
FPGA:扫描找到的 five 为323680字节的 FPGA 图像
FPGA:扫描找到的 five 为323680字节的 FPGA 图像
FPGA:扫描找到的 five 为323680字节的 FPGA 图像
FPGA:扫描找到的 five 为3981696字节的 FPGA 图像
FPGA:扫描发现的 five 为4387072字节的 FPGA 图像
FPGA:扫描发现的 five 为4387072字节的 FPGA 图像
FPGA:扫描发现的 five 为4387072字节的 FPGA 图像
FPGA:扫描找到的 five 为5030080字节的 FPGA 图像
FPGA:扫描找到的 five 为5030080字节的 FPGA 图像
FPGA:扫描找到的 five 为5030080字节的 FPGA 图像
FPGA:扫描找到的 five 为5030080字节的 FPGA 图像
FPGA:扫描找到的 five 为5030080字节的 FPGA 图像
FPGA:写入图像时间:30261 msec 1289895 32位字
FPGA:0msec 后 DONE 变为高电平!
(以上每行为1秒间隔)
那么、对于如何进一步解决此问题或者在让 DSP 使用之前如何确保文件已完全加载、还有什么其他想法呢?
谢谢、
Chris