2

这个问题涉及在飞思卡尔 i.mx 设备(具体为i.MX535)上运行 SDMA 引擎?

我想从 UART 接收大于 32 字节的数据包,并使用 SDMA 引擎自动获取它们。这可能吗?有没有人有关于 SDMA 使用的其他信息?

编辑:我会更具体地说明我的情况和问题。

我已经设法加载并运行我自己的 SDMA 脚本。测试台是,

  1. 在 UART2 上设置 UART 通信(9600,原始)(不使用标准的飞思卡尔 UART 驱动程序)。
  2. 使用阈值级别 16 设置 UART2 rx dma 请求。
  3. 为 UART2 设置 SDMA 通道,该通道运行像UART 2 外部存储器这样的脚本。

此设置适用于小于 32 字节的数据包,但如果大小大于 32 字节,则会丢弃RX FIFO Overrun设置位的数据。如果我们使用在 UART2 上启用 SDMA 的标准飞思卡尔 UART 驱动程序,则会发生同样的错误(从 UART 打印出带有DMA 错误标签的状态寄存器)。

Q1。有人设法在像 UART2 这样的普通UART 上接收到大于 32 字节的数据包。暗示我的脚本中有一个BUG。

普通UART如何表明它们也是直接连接到 SDMA 内核的共享 UART。我也在 UART3 上测试了这个 UART 脚本。我的结论和观察是:
首先,我使用标准的飞思卡尔 UART 驱动程序和使用标准脚本启用的 SDMA 对其进行测试。这适用于大于 32 字节的数据包和 1MHZ 的波特率。所以我希望用我自己的脚本和 UART 驱动程序让它工作,但我无法构建一个从 UART3 RX 寄存器读取的脚本。

Q2。有人写过一个从共享 UART 读取数据的脚本吗?

4

2 回答 2

2

有人写过一个从共享 UART 读取数据的脚本吗?

如果要从共享外设读取/写入数据,则必须通过内部 SDMA ram (0x1000-0xFFFF) 中的内存映射“外设 x 内存空间”区域访问数据。所以在我的例子中,访问 0x3000 内部 sdma ram 从 UART3 RXD 寄存器读取数据。

于 2013-03-04T13:09:23.090 回答
2

您必须将您的第一个孩子卖给飞思卡尔才能获得此类信息。他们有许多内部文件。获得答案并非易事。

尝试获取这个 repo:git://git.pengutronix.de/git/imx/sdma-firmware.git

ROM 中有各种例程,其中包含您需要了解的 API。如果您想修改内容,通常没有足够的 RAM 将所有代码放在那里。也许您可以使用 Sasha 的反汇编程序并尝试调整您的二进制文件之一。

IMX25参考有更多关于 SDMA 控制器的公共文档;我在IMX53 参考手册中看到的关于 SDMA 的内容很少。

于 2013-02-28T18:02:37.337 回答