1

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

我正在开展一个项目,旨在设置从运行 vxWorks 6.8 的实时 powerpc 控制器 (Emerson MVME4100) 到运行带有内核 2.6.32 的 Debian 6 的 Linux Intel 计算机 (Xembedded XVME6300) 的通信通道。该通道运行在 VME 总线上;两台计算机都在 VME 机箱中,并且都使用 Tundra Tsi148 芯片组。英特尔计算机被明确配置为系统控制器,而实​​时计算机则明确没有。

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

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

结果:

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

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

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

非常感谢

4

1 回答 1

1

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

我实现了 150MBytes/s 的有效速度(总线可以达到 320MBytes/s,但 tsi148 芯片以导致显着开销而闻名)。这对我来说已经足够好了。

于 2012-09-19T10:56:48.357 回答