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/PROCESSOR-SDK-AM57X:McSPI 从器件无响应

Guru**** 2582405 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/633157/rtos-processor-sdk-am57x-mcspi-slave-device-not-responding

器件型号:PROCESSOR-SDK-AM57X

工具/软件:TI-RTOS

我目前有一个 SPI 接口、用于连接从 AM57xx 工作的从器件、使用 GPIO 线路和位拆裂。 我正在"迁移"到 PDK MCSPI 驱动程序、但从器件不再响应发送到它的命令。 我的应用程序在 IPU1 (双 M4内核)上运行、具有 SYS/BIOS 6.46.4.53和 am57xx PDK 1.0.6。 我可以在逻辑分析仪上看到 CS、MOSI 和 MISO 线路、我担心传输多个字节时 CS 信号上出现短"尖峰"。 我也不确定初始化值、因为我看到了许多不同的值。

这是我的初始化:

void vSpi_eInitialize (void)
{
cSL_l4per_cm_core_componentRegs * l4PerCmReg =(cSL_l4per_cm_core_componentRegs *)(cSL_MPU_L4PER_CM_CORE_regs + D32Ipu_IOMMU_Offset);

// SPI1时钟启用
CSL_FINST (l4PerCmReg -> CM_L4PER_MCSPI1_CLKCTRL_REG、L4PER_CM_CORE_COMPONENT_CM_L4PER_MCSPI1_CLKCTRL_REG_MODULEMODE、ENABLE);

//等待 SPI 外设启动
while (CSL_L4PER_CM_CORE_COMPONENT_CM_L4PER_MCSPI1_CLKCTRL_REG_IDLEST_FUNC!=
CSL_FEXT (l4PerCmReg -> CM_L4PER_MCSPI1_CLKCTRL_REG、
L4PER_CM_CORE_COMPONENT_CM_L4PER_MCSPI1_CLKCTRL_REG_IDLEST
)
);

// SPI1_SCLK
//注:要使 spim_SCLK 信号正常工作、相应的 INPUTENABLE 位
// CTRL_CORE_PAD_x 寄存器应设置为0x1,因为这样做是为了进行重定时。
HW_WR_REG32 (((Du32Spi_core_pad_io_register_base + CTRL_core_pad_SPI1_SCLK_offset)、
(0x000F0000));//转换_control_slow | INPUTENABLE_Receive_enabled | PULLTYPESELECT_PULLUP | PULLUDENABLE_ENABLE_ENABLE| MUXMODE_SPI1

// SPI1_D1 - Rx
HW_WR_REG32 (((Du32Spi_CORE_PAD_IO_Register_base + CTRL_CORE_PAD_SPI1_D1_OFFSET)、
(0x000F0000));//转换_control_slow | INPUTENABLE_Receive_enabled | PULLTYPESELECT_PULLUP | PULLUDENABLE_ENABLE_ENABLE| MUXMODE_SPI1

// SPI1_D0 - Tx
HW_WR_REG32 (((Du32Spi_core_pad_io_register_base + CTRL_core_pad_SPI1_D0_offset)、
(0x000B0000));// slew_control_slow | PULLTYPESELECT_PULLUP | PULLUDENABLE_ENABLE_ENABLE_ENABLE_ENABLED | MUXMODE_SPI1

// SPI1_CS0
HW_WR_REG32 (((Du32Spi_core_pad_io_register_base + CTRL_core_pad_SPI1_CS0_offset)、
(0x000B0000));// slew_control_slow | PULLTYPESELECT_PULLUP | PULLUDENABLE_ENABLE_ENABLE_ENABLE_ENABLED | MUXMODE_SPI1

// SPI1_CS1
HW_WR_REG32 (((Du32Spi_core_pad_io_register_base + CTRL_core_pad_SPI1_CS1_offset)、
(0x000B0000));// slew_control_slow | PULLTYPESELECT_PULLUP | PULLUDENABLE_ENABLE_ENABLE_ENABLE_ENABLED | MUXMODE_SPI1

// SPI1_CS2
HW_WR_REG32 (((Du32Spi_core_pad_io_register_base + CTRL_core_pad_SPI1_CS2_offset)、
(0x000B0000));// slew_control_slow | PULLTYPESELECT_PULLUP | PULLUDENABLE_ENABLE_ENABLE_ENABLE_ENABLED | MUXMODE_SPI1

//为 MCSPI3配置 Xbar 连接:映射到 MCSPI3 intr 的 IPU1_IRQ_60 (保留)*/
CSL_xbarIrqConfigure (CSL_XBAR_IRQ_CPU_ID_IPU1、
IPU_IRQ_MCSPI1_IRQ、
CSL_XBAR_MCSPI1_IRQ);

//修改默认 SPI 配置
SPI_v1_HWAttrs SPI_cfg0;
SPI_socGetInitCfg (0、&SPI_cfg0);

SPI_cfg0.baseAddr = CSL_IPU_MCSPI1_regs + D32IPU_IOMMU_Offset;
spi_cfg0.chMode = MCSPI_MULTI_CH;
SPI_cfg0.enableIntr = false;//轮询模式
spi_cfg0.chnCfg[0].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_6;// D1为 Rx;D0为 Tx
spi_cfg0.chnCfg[1].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_6;
spi_cfg0.chnCfg[2].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_6;

SPI_socSetInitCfg (0、&SPI_cfg0);

MCSPI_init();
}

和传输方法:

void vSpiDrv_eTransferBytes (MCSPI_Handle stSpiHandle、TU8 * pucTxBuffer、TU8 * pucRxBuffer、TU8 ucByteCount)
{
SPI_Transaction 事务;
transaction.count = ucByteCount;
transaction.rxBuf = pucRxBuffer;
transaction.txBuf = pucTxBuffer;

bool RetVal = MCSPI_transfer (stSpiHandle、事务);
如果(false ==RetVal)
{
System_printf ("SPI 传输中发生 uC_iTransferByte 错误\n");
}

// System_printf ("MCSPI_transfer returned transaction status =%d\n"、transaction.status);
}

如果有任何关于我可以检查的其他内容的想法、我们将不胜感激。

谢谢、

  Mike

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Michael、

    在 PDK_AM57xx_1_0_7中、我们对该器件的 McSPI 主从器件支持进行了多项增强。 您是否有理由尝试使用 CSL 代码而不是 LLD 驱动程序来进行此开发?

    您能否更新到 SDK 的更高版本并查看此问题是否仍然存在。 为了供参考、您可以在此处提供的主从示例中看到驱动程序设置:

    processors.wiki.ti.com/.../Processor_SDK_RTOS_QSPI-McSPI

    此示例在 M4内核上可用、可使用2个 AM57xx IDK 电路板设置进行测试。 请告诉我们这一问题是否仍然存在、我们可以帮助提供更多指导。

    此致、
    Rahul

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

    谢谢 Rahul、

    至少一周后我才有机会尝试一下、但我会在我尝试时告诉您。

    至于我使用 CSL 代码而不是 LLD 驱动程序的原因、这可能是因为我不知道有替代代码。 您能给我提供一个链接、并希望提供一个示例、用于 McSPI 的 LLD 吗?

    再次感谢、

      Mike