This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] XIO2213B:如何提高1394b ISO数据包性能

Guru**** 2479035 points
Other Parts Discussed in Thread: XIO2213B

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/570526/xio2213b-how-to-improve-the-1394b-iso-packet-performance

部件号:XIO2213B
主题: XIO2213中讨论的其他部件

我们开发了一个1394b卡,使用xio2213b,我们想在PC上模拟1394b摄像机。 每隔15毫秒,我们就会生成一个由36个等时(通道1)数据包组成的图像,每个数据包的长度为3716字节。 如果我们可以在5毫秒内发送这些数据包,那么我们的目标将正确处理图片。 我们知道1394b 在每125 us中只能发送一个通道的ISO数据包,因此我们需要36*125= 4.5 ms来发送所有这些数据包。 事实证明,我们大多数时间都可以以4.5 ms发送所有36个数据包,但有时发送所有这些数据包的成本为7毫秒甚至10毫秒,这将导致错误。 我们认为问题在于xio2213b上的DMA引擎有时在4.5毫秒内无法从PC内存中获取所有这些数据包。

因此,我们需要一些有关如何提高 ISO数据包性能的说明。 就像我们只使用通道1一样,我们是否可以在xio2213上扩展该通道的缓冲区?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    为特定的帧号安排了等时数据包;如果由于某种原因未发送数据包,控制器硬件会报告错误。

    因此,如果某些数据包被延迟,则调度会出现问题。 控制器驱动程序或软件中可能存在错误,或者管道长度可能太短。

    您安排数据包的确切时间是多少?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    所有36个数据包都被发送,但有时发送这些数据包的成本将超过5毫秒。

    每隔15毫秒,我将为所有36个数据包建立一个描述符链,然后启动ISO DMA。 如果我不需要更改数据,我认为只需更新一次描述符链, 每15毫秒运行一次xio2213b的ISO DMA,有时xio2213b发送所有这些数据包仍需要7毫秒。

    我对您所谈论的管道长度非常感兴趣,您能否为我提供更多有关该管道的信息? 非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    该描述符链将是管道。

    您使用的是什么操作系统? 链中的第一个描述符计划的帧是什么? 您对发送成本的精确度有多高,即您是否花费了最后一个完成帧的时间,还是花费了操作系统报告完成的时间?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们使用的操作系统是WindowsXP。  第一帧没有特定的时间表,我们正在模拟每15毫秒拍摄一张照片的摄像机,所以每15毫秒生成36个数据包并尽快发送。

    我们的实验室中有三个通过1394b连接的器件。 A是生成图片的PC;B是我们处理图片的目标设备;C也是用作总线监控器的PC。 我在上使用自行设计的驱动程序(复制Linux代码);在监视器C上使用单脑防火墙

    如果向B发送一张照片的时间超过5毫秒,则B将没有足够的时间处理该照片。 我使用设备C来测量发送的成本,方法是计算收到的第一个帧与收到的第36个帧之间的间隔。 我可以看到,在发送了1000张照片后,在4.5毫秒内收到了995张照片,但其中5张照片的花费超过7毫秒。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在XP上运行的软件会记录所有时间。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    "无特定时间表"和"每15毫秒"相互矛盾。

    生成120个数据包(或其中的多个)而不是36个数据包,其余84个数据包被跳过。 在旧描述符用完之前添加新描述符,以便管道永远不会变为空。
    这是确保实际每15毫秒发送一次图片的唯一方法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我准备描述符链(例如72个数据包),如何控制在发送前36个数据包15毫秒后发送第二36个数据包。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    每帧发送一个数据包,因此固定帧速率为8 kHz,120个数据包= 15毫秒。 其中36个是实际数据包,84个是跳过数据包。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我会试试这个。 谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的目标不是以15毫秒的间隔发送这些数据包,我们正在模拟的摄像机等待曝光命令(通过IO信号),然后它将发送一张图片。 我的目标是在曝光命令后,我可以在5毫秒内发送一张图片。
    由于xio2213b在5毫秒内可以发送这36个数据包的时间大多是因为DMA引擎未能及时将所有数据从PCI传输到1394b。
    是否有任何设置来确保xio2213b的带宽?我是说将xio2213b标记为PC中最重要的PCI设备。 为xio2213b指定PCI总线上的最高优先级,以确保带宽。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在XIO2213B的内部PCI总线上,没有争用。 PCI Express是一种点对点连接,并且内存控制器具有足够的带宽,因此这种情况极不可能是问题。 但是,PCI到PCIe桥接器使从主内存读取数据的效率有点低,因为它无法完美地预测读取请求的大小。

    要在某个事件后发送数据,(重新)启动IT DMA应该可以正常工作。
    但控制器会执行预取,并且可能会假定有足够的时间执行此操作。 要确保可以预取第一个数据包,请在实际数据之前添加一到三个跳过数据包。

    您是否可以检查返回的时间戳? 传输过程中是否有周期下降,或者时间戳是否全部连续?

    如果您怀疑XIO2213B无法维持带宽,请尝试将跳过数据包插入传输过程中,或者尽可能缩小数据包。