我正在寻求帮助,最重要的是来自 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 标记)
非常感谢