主题中讨论的其他器件:AM6442、 SysConfig
您好!
(我的请求、如果您愿意、请跳过):
首先、我想谈一谈 TI 文档的糟糕之处有多么荒谬。 一年前我选择了在 AM64x 上进行开发、因为在简要阅读完产品页面和参考手册后、我了解到支持裸机/寄存器编程、您可以控制 SOC。 几个月后,我意识到我是如此的错误。 如此强大的硬件才是真正的浪费、因为只有 TI 自己知道如何使用它、甚至不知道(在浏览过 TI e2e 论坛之后)。 文档制作过程就像通过一个工具解析了源代码,将其转换为 HTML 页一样,一个随机的人只是对高级功能发表一个线性评论,甚至不会解释什么是函数参数。 如果我知道文件是如此糟糕,我将永远不会选择这个平台的发展,但我实施了太多的努力,时间,和大脑损害,在这一点退出将是这样的浪费一切。 因此、现在的信息几乎可以忽略不计、我能够编写自己的引导 API、时钟、DDR、GPIO、UART、 参考手册中的 MMCSD、PRU、PRU 高速 GPIO、PRU RMII、CPSW、中断控制器和 R5F 上的任务切换。 只编写了令人满意的部分:焊盘配置、GPIO 和 UART。 糟糕的情况是配置 PRU、学习如何对 PRU 进行编程、以及了解如何编写汇编代码、PRU 的 RMII 接口和 CPSW。 DDR 文档完全不存在。 我以某种方式设法通过对 GEL 脚本进行逆向工程来运行 DDR、尽管我不知道它是如何工作的、但它确实如此。 因此、现在很遗憾、AM6442电路板上的任何地方、我都不得不自愿地在 SK-AM64x 上使用相同的 DDR 芯片、并且会遇到库存问题。 虽然我不得不在 TI 提供的某些地方使用 SCICLIENT API、因为 DMSC 是专有的、没有文档、并且对于我来说太复杂、难以进行逆向工程。
目标:
我正在尝试使用 BareMetal 使用 AM6442构建基于 EtherCAT 的 CNC 运动控制器(我无法使用 LinuxRT、原因太多、无法在此处讨论)。 目前、我使用 SK-AM64x 进行原型设计。 此电路板上有两个以太网端口:一个是 CPSW、一个是 CPSW 和 ICSSG。 我成功运行了 ICSSG。 我需要为应用提供两个以太网端口、一个用于 EtherCAT、另一个用于与 Windows PC 通信。 我目前已经成功地实现了一个到 Windows 的1Gbps 链路、用于通过 Step Dir 控制 ICSSG 上的 CNC。 现在我还需要一个用于 EtherCAT 的 CSSG、因此我将针对 EtherCAT 使用 ICSSG、针对 Windows 使用 CSPW ONE。
问题:
我想使用裸机/寄存器编程对 CSPW 进行编程。 根据文档、从 CPSW 读取数据的唯一方法是使用 DMA。 我的确成功配置了 CPSW (我认为是这样)、但我无法配置 DMA 以从 CPSW 读取数据。 TRM 显示 CPSW 通过 PSIL 发送数据。 我不确定、但根据我的理解、您需要 PKTDMA 才能从 PSIL 读取数据。 由于 PSIL 寄存器看起来太小、并且不足以直接从 CPSW 获取数据、请更正我的错误。 TRM 还提到使用 RINGACC 来使用 PKTDMA。 我本来可以独自完成所有这一切、但在解释 DMA 的工作原理以及如何配置方面、相关文档却极其缺乏。 我试图通过深入 TI Nortos CPSW 示例来理解所有这些内容、但后来又放弃了、因为代码非常庞大、以至于只能从 CPSW 读取数据包数据、而且根本无法发挥任何作用。 在示例中、DMA INIT 函数似乎对 DMA 寄存器什么也没做、而是更多地是填充自己的数据结构和处理信标。 RM init 函数使用 sciclent 的原因是我不明白的、TRM 提到了一些有关 PSIL 线程配对的东西、但我不明白为什么你需要 DMSC 来执行它、以及为什么 R5或 A53内核不能执行它。 这里没有关于如何将 DMA 连接到 CPSW、如何将 RINGACC 连接到 DMA、如何处理以太网和 DMA 描述符以及将它们放置在何处并按照什么顺序馈送到哪个寄存器的信息。 没有任何意义、甚至开始解释事情必须按照什么顺序进行。 我很确定我有很多事情与我的理解错误,请原谅我,如果我太远。 到目前为止、DMA 文档是 TRM 中最糟糕的。 我本来想写这一段的、以便于阅读、但 DMA 所尝试的内容并没有开头或结尾。 "我知道,我一定会喜欢的。" 我是否可以阅读任何资源以便于理解内容?
我的问题顺序随机:
1.) 是否有办法可以在没有 DMA 或 PSIL 的情况下直接从 CPSW 读取数据包数据? (我认为答案是否定的、但值得一试。)
2.) 我只能在不使用 PKTDMA 的情况下直接从 PSIL 寄存器读取分组数据吗?
3.) 是否可以在不使用 RINGACC 的情况下直接从 PKDMTA 读取分组数据?
4.) 如何将 DMA 连接到 CPSW?
5.) 从 CPSW 读取数据而忽视效率的最低配置是什么?
6.) 主机/缓冲区/传输请求解码器的放置位置?
7.) DMA 寄存器的编程顺序是什么?
8.) 是否有一个具有类似 CPSW 的类似 SOC 可以正常工作并有详尽文档记录、以便我可以阅读它的 TRM 来了解 AM64x 的相关信息?
编辑:我修复了我的坏语法:)