gpt4 book ai didi

linux - 无法在 2 个 TSI148 VMEbus Controller 之间设置可靠的 DMA 传输

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:46 26 4
gpt4 key购买 nike

我正在寻求帮助,最重要的是寻求 VMEbus 专家的帮助。

我正在从事一个项目,旨在建立一个从运行 vxWorks 6.8 的实时 powerpc Controller (Emerson MVME4100) 到运行内核 2.6.32 的 Debian 6 的 Linux Intel 计算机 (Xembedded XVME6300) 的通信 channel .该 channel 运行在 VME 总线上;两台计算机都在 VME 外壳中,并且都使用 Tundra Tsi148 芯片组。 Intel 计算机被明确配置为系统 Controller ,实时计算机明确不是。

设置:对于 Intel 计算机,我编写了一个自定义驱动程序,它创建一个 4MB 的内核缓冲区,并通过一个从属窗口在 VME 总线上共享它;对于实时计算机,我设置了一个 DMA 传输来重复转发恰好 48640 字节的 block ;快速连续填充测试数据字节(零、一、二等)(如果可能,每 32 毫秒一次)对于 Intel 计算机,我使用手动启动的 Python 程序从驱动程序读取内核缓冲区,以查看数据是否正确到达。

期望:我期待从 Python 程序中看到相同的数据(零、一等)。我期望传输时间大致对应于所选总线速度(通常为 290 us 或 145 us,具体取决于总线速度),加上合理的 DMA 设置开销(最多 10us?我愿意接受更大的数字,比如数百 usecs,如果那是总线通常需要的话)

结果:

  • 有时数据根本没有到达,“传输”时间是~2000 us
  • 有时数据可靠地到达,但传输时间约为 98270us 或 98470us,具体取决于所选的总线速度。

问题:我怎样才能使传输可靠并降低这些可怕的延迟?接下来我应该搜索什么大方向?

(如果可以的话,我想用 VMEbus 标记)

非常感谢

最佳答案

我对这个问题的评论描述了我是如何让公交车工作的:- 确保总线两侧都有 2eSST320- 确保 DMA 事务使用有效的 block 大小(最大有效为 4096 字节)

我实现了 150MBytes/s 的有效速度(总线可以达到 320MBytes/s,但众所周知 tsi148 芯片会导致大量开销)。这对我来说已经足够了。

关于linux - 无法在 2 个 TSI148 VMEbus Controller 之间设置可靠的 DMA 传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12315376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com