我将 TI 处理器与 PRU 子系统配合使用、 我想为处理器添加一个附加接口(例如 UART、SPI、I2S 等)、 或自定义协议(例如并行 SPI、专有总线协议等)。 我可以使用 PRU 内核来实现我的接口或自定义协议吗?
。
有关 PRU 开发的其他常见问题解答、请参阅 Sitara 多核开发和文档常见问题解答。
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.
我将 TI 处理器与 PRU 子系统配合使用、 我想为处理器添加一个附加接口(例如 UART、SPI、I2S 等)、 或自定义协议(例如并行 SPI、专有总线协议等)。 我可以使用 PRU 内核来实现我的接口或自定义协议吗?
。
有关 PRU 开发的其他常见问题解答、请参阅 Sitara 多核开发和文档常见问题解答。
Bitbanging 和 PRU 之间的协议是不是正确的解决方案?
PRU 经过专门设计、可用于 Bitbang (即直接切换 GPO 信号)协议-这就是我们使内核确定性并将内核物理上靠近它们在处理器封装中控制的引脚的原因 (提供低且有保证的读/写信号延迟)。 但是、协议开发需要花费大量时间和精力。
在决定开发 PRU 协议之前、我想问:
*可以使用其中一个片上外设实例吗? (例如、如果仅进行 SPI 通信、是否可以使用片上 SPI?)
*将 使用 外设实例的信息控制的内核可以吗? (例如、在 AM62x、Linux A53、FreeRTOS R5或 FreeRTOS/裸机 M4上?)
*如果没有、PRU 是否可以控制外设实例、然后将信息传递给将使用它的内核?
如果所有这些问题的答案都是"否"、那么我将开始评估用于协议开发的 PRU。
例如、如果所需的只是一个 SPI 接口、那么可能不需要与 PRU 进行位拆裂。 但如果我们需要从完全相同的时间点通过 SPI 从多个 ADC 获取 ADC 读数、该怎么办? 因此、PRU 可能适合控制所有 ADC 和触发同步读取。
对 PRU 进行位拆裂的另一个可能有用的用例是、是否需要在接收到外部异步信号后立即触发读取。 PRU 的读写延迟非常低、因此可以读取外部信号、并且响应速度比芯片上的任何其他内核快得多。
好的、我们要评估 PRU 是否 能够对我们的协议进行位通信。 我们从哪里着手?
客户需要牢记以下几个注意事项:
1)协议本身的详细信息:
*协议时钟速度是多少?
* PRU 需要采取哪些步骤才能成功实施协议? 由于每个步骤都需要编程、因此更复杂的协议可能无法在更高的接口时钟频率下运行。
(示例:不久前我在200MHz PRU 内核上对并行 I2S 实例进行了概念验证分析。 如果所有 I2S 实例共享同一个帧同步信号、则内核可以支持大约8个 I2S 实例。 但是、如果 PRU 必须监视每个实例的不同帧同步信号、则需要额外的汇编指令。 这些额外的汇编指令将 I2S 实例的最大数量从8个减少到2个)
2) PRU 固件:
*客户通常在汇编语言中编写 Bitbanging 代码,这样他们就可以直接控制所有的计时
*不同的 PRU 内核以不同的频率运行。 例如、AM335x PRU 内核每条指令以5ns (200MHz)的速率运行、而 AM62x PRU 内核每条指令以3ns、4、ns 或5ns 的速率运行(即200MHz、250MHz、333MHz)。 更多有关每个处理器的最大 PRU 频率的信息、请参阅 PRU 功能比较应用手册
*客户负责编写和测试其固件。 TI 可以帮助解决基本的调试和开发问题、但我们无法编写或调试 客户固件。
3) PRU 内核与 Linux 之间的 IPC 要求?
*这里是否有吞吐量/延迟要求?
* TI 以开箱即用的 IPC 解决方案提供 RPMsg。 这很容易开始工作、对于低延迟和高吞吐量并不重要的用例(例如、更新人类可读的显示器)来说已经足够了。 如果 RPMSg 并不适合、那么 IPC 可能需要 在客户侧进行一些额外的开发。
其他有用的示例和资源
我们用于 Bitbanging 协议的大部分资源都基于 AM335x。 有关每个处理器中 PRU 子系统之间的硬件差异的信息、请参阅 PRU 功能比较应用手册。
一般系统设计和 Bitbanging SPI:
https://www.ti.com/tool/TIDA-01555 有一个非常有用的设计指南。 源代码请访问 https://git.ti.com/cgit/apps/tida01555
Bitbanging UART:
该软件 UART 的源代码位于 https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1039445/processor-sdk-am335x-iso7816-on-pru-of-am335x/3859860#3859860
Linux 驱动程序信息位于 https://software-dl.ti.com/processor-sdk-linux/esd/docs/07_03_00_005/linux/Foundational_Components/PRU-ICSS/Linux_Drivers/pru-sw-uart.html 上。
AM335x 与 TI-RTOS 驱动程序的位拆裂:I2C、IOLINK、ESPI
文档和源代码位置: https://software-dl.ti.com/processor-sdk-rtos/esd/docs/06_03_00_106/AM335X/rtos/index_pru_icss_fw.html#pru-icss-i2c
请注意, https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1071334/notice-regarding-processor-sdk-ti-rtos-for-am335x-am437x-omap-l13x-c674x-k2g-devices 不再支持 AM335x TI-RTOS 。 我们将无法回答有关这些资源的任何问题。