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.

[参考译文] RTOS/EVMK2G:增加在 K2G EVM 上运行的 MCSPI_slavemode 示例中的比特率

Guru**** 2580295 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/595213/rtos-evmk2g-increase-bit-rate-in-mcspi_slavemode-example-for-running-on-k2g-evm

器件型号:EVMK2G

工具/软件:TI-RTOS

我的封装:
 C:\ti\BIOS_6_46_04_53
 C:\ti\ccsv7\        [CCS 版本:7.0.0.00043]
 C:\ti\pdk_k2g_1_0_5
 C:\ti\processor_sdk_rtos_k2g_3_03_00_04


Processor SDK RTOS 示例 MCSPI_slavemode 示例利用两个 EVM 通过以下连接运行 SPI 主设备和从设备:

K2G EVM:
EVM1 (主器件)====EVM2 (从器件)
J12引脚9 (MISO)--- J12引脚9 (MISO)
J12引脚11 (MOSI)--- J12引脚11 (MOSI)
J12引脚13 (CLK)--- J12引脚13 (CLK)
J12引脚15 (CS0)--- J12引脚15 (CS0)
J12引脚49 (DGND)--- J12引脚49 (DGND)

由于我没有两个 K2G EVM、我使用一个具有以下连接的 K2G EVM 板
主器件(JP1引脚9) SPI2_SCLK -->从器件(J12引脚13) SPI0_SCLK
主器件(JP1引脚15) SPI2_MOSI -->从器件(J12引脚11) SPI0_MOSI
主器件(JP1引脚16) SPI2_MISO <--从器件(J12引脚9) SPI0_MISO
主器件(JP1引脚17) SPI2_CS0 -->从器件(J12引脚15) SPI0_CS0

ARM 内核在 JP1上作为 SPI2中的 SPI 主器件运行(音频扩展)、而 DSP 内核在 J12上作为 SPI0中的 SPI 从器件运行(串行扩展)。

我在 CCS7.0中构建了以下两个项目
MCSPI_SlaveMode_MasterExample_evmK2G_armExampleProject
MCSPI_SlaveMode_SlaveExample_evmK2G_c66xExampleProject
分别在 ARM 和 DSP 上运行。

该示例对 JP12上的主器件或从器件使用 SPI0我对 SPI2上运行的 ARM 内核进行了以下更改
在 main_mcspi_slave_mode.c 中
(笑声)
/*测试通道#*/
#define MCSPI_TEST_CHN         2 // SPI2表示主器件
(笑声)
   如果(主机== true)
   {
//       实例= Board_MCSPI_MASTER_Instance - 1; // 0:SPI0
       实例= 2; //将 SPI2用于主器件   
   }
   其他
   {
       实例= Board_MCSPI_SLAVE_INSTANCE - 1;
   }

 
 
当运行默认值包括比特率= 1Mbps 的测试时
所有这三个测试:非 DMA 中断、轮询模式和非 DMA 回调模式都在 ARM (SPI 主器件)和 DSP (SPI 从器件)上通过。

但通过以下更改将比特率提高到10Mbps
(笑声)
   /*更改默认 SPI_params */
   spiParams.bitrate = 10000000; // 10Mbps <-添加了此行

   SPI = SPI_open (实例、&spiParams);

在 DSP 上运行的 SPI 从器件接收来自 ARM (SPI 主器件)的所有数据。 但 ARM (SPI 主器件)错过了从 DSP (SPI 从器件)发送的最后一个字节
寄存器 SPI2 -> SPIBUF -> RXDATA 确实接收来自 DSP (SPI 从器件)的最后一个字节。 它似乎是 API、SPI_TRANSFH (.) 不将数据移动到 transaction.rxBuf。
标志 SPI2 -> SPIBUF -> RXEMPTY 为1、但当我访问寄存器值而不是 ARM 内核时、RXDATA 中的最后一个字节可能会与我的仿真器一同读取。

我还注意到:
当 spiParams.bitrate 设置为1000000 (1Mbps)时
C2TDELAY = 0;
T2CDELAY = 0;

将 spiParams.bitrate 设置为10Mbps 时
C2TDELAY = 8;
T2CDELAY = 8;
这意味着偶数 spiParams.bitrate 设置为10M (SPI2_SCLK 在示波器上观察到以10MHz 运行)真正的数据速率小于10Mbps。

Q1:K2G 在 SPI 主模式下以高达50MHz 的频率运行、在从模式下以25MHz 的频率运行(实际速度取决于 SPI 功能时钟和 SPI 时钟分频器)。 如果我想以10MHz 的频率运行 SPI CLK
,除了将 spiParams.bitrate 设置为10M 之外,我还应该更改什么以使 RTOS SPI 驱动程序成功运行?

Q2:如何将 SPIDELAY 寄存器中的 C2TDELAY 和 T2CDELAY 以及 SPIDAT1寄存器中的 CSHOLD 从 RTOS SPI 驱动器而不是其存储器映射寄存器中更改?

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

    我已通知 RTOS 团队。 他们的反馈将在此处发布。

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

    [引用用户="Joshua Wu81">Q1:K2G 在 SPI 主模式下以高达50MHz 的频率运行、在从模式下以高达25MHz 的频率运行(实际速度取决于 SPI 功能时钟和 SPI 时钟分频器)。 如果我想以10MHz 的频率运行 SPI CLK
    除了将 spiParams.bitrate 设置为10M 之外,我还应该使用 RTOS SPI 驱动程序更改什么以使其成功运行?

    您对代码所做的更改似乎是正确的。 n`t SPI CLK、您不需要更改 SPI 驱动程序中的任何内容。 我怀疑这些是基于 CPU 的传输。 CPU 无法跟上数据速率。我们将尝试重现此问题、并根据我们的观察结果返回给您。针对 K2G 的 SPI 从驱动程序支持刚刚添加到处理器 SDK RTOS 版本3.3中、尚未进行优化。 包含驱动程序的用例是用于外部主机发送控制数据缓冲区。 我们计划通过在即将发布的版本中将 EDMA 与它集成来优化驱动器。

    [引用用户="Joshua Wu81"] Q2:如何将 SPIDELAY 寄存器中的 C2TDELAY 和 T2CDELAY 以及 SPIDAT1寄存器中的 CSHOLD 从 RTOS SPI 驱动程序更改为它们的存储器映射寄存器?

    n`t 驱动程序代码、当前似乎不接受 C2TDELAY 和 T2DELAY 作为输入/配置参数。 但定义了 SPI_CONTROL 函数、允许设置延迟。

    SPI_CONTRAL_V0 (drvHandle、SPI_V0_CMD_DELAY、&arg);

    ARG 是包含您要使用的2个延迟常数的常数数组。

    直接调用 CSL 使用 SPIDelaySetup API、这与驱动程序 API 调用的调用相同。

    感谢您对驱动器性能的反馈。

    此致、

    Rahul