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.

[参考译文] TMS320F28035:28035 SPI 模式0

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/707137/tms320f28035-28035-spi-mode-0

器件型号:TMS320F28035

大家好、

我无法为28035确定 SPI。 我正在尝试使用主控模式0与闪存芯片通信、但是28035输出的信号对于模式0似乎不正确。 下面是我在输出0x90 (通道1是时钟、通道2是 MOSI)时看到的内容的图片。 对于模式0、我希望 在 上升时钟边沿对 MOSI 进行采样 、但在 下降时钟边沿对其进行采样。 因此、闪存芯片未正确接收0x90命令。

仅供参考、这个时序图是我在 为  主控模式0和输出0x90 (通道2为 MOSI)设置28035时所期望看到的。 我通过将28035置于模式1来获得此跟踪、但当然、闪存芯片不会返回正确的数据、因为它需要模式0。

以下是我的 SPI 初始化代码:

SysCtrlRegs.PCLKCR0.bit.SPIANCLK = 1;

/*禁用 SPI-A 中断*/

SpiaRegs.SPICTL.bit.SPIINTENA = SPI_INT_DISABLE;

/*在 SPI-A 引脚上启用内部上拉电阻器*/

GpioCtrlRegs.GPAPUD.bit.GPIO3=0

GpioCtrlRegs.GPAPUD.bit.GPIO5=0

GpioCtrlRegs.GPAPUD.bit.GPIO18=0

// GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 3;

// GpioCtrlRegs.GPAQSEL1.bit.GPIO5=3;

GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3;

/*配置引脚以提供 SPI-A 功能*/

GpioCtrlRegs.GPAMUX1.bit.GPIO3=2

GpioCtrlRegs.GPAMUX1.bit.GPIO5=2

GpioCtrlRegs.GPAMUX2.bit.GPIO18=1

/* 使用模式0 */

SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;

SpiaRegs.SPICTL.bit.CLK_PHASE = 0;

/*启用发送功能*/

SpiaRegs.SPICTL.bit.TALK = 1;

/*设置8位传输和主控模式*/

SpiaRegs.SPICCR.bit.SPICHAR = SPI_CHAR_8_Bits;

SpiaRegs.SPICTL.bit.MASTER_SLAVE = SPI_MASTER;

/*将 LSPCLK 用于 SPI-A 频率*/

SpiaRegs.SPIBRR = 0;

/*从复位中释放 SPI A */

SpiaRegs.SPICCR.bit.SPISWRESET = SPI_SW_RESET_RELEASE;

 

 

我广泛使用了 SPI、但完全停留在这个上。 如果有任何帮助,我会很感激!!!!  提前感谢!

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

    所有 SPI 信号都需要使用异步选项作为 SPI 外设本身执行同步。 如您所见、执行额外同步可能会导致意外结果。

    确保选择 Async 选项、如下所示。 这将解决您的问题。
    GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 3;
    GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 3;
    GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3;

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

    感谢您的提示回复、但是、将所有 SPI 引脚设置为异步模式仍然无法解决问题。 SPI 模式0仍然按照我在原始帮助请求中包含的第一个示波器跟踪中看到的那样进行传输。

    请提供进一步的建议吗?

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

    C2000器件不一定与为其他器件定义的其他"模式"保持一致。 相位和极性位意味着不同的东西。 请参阅用户指南以确定您的发送和接收边沿是什么、并将它们与您的闪存芯片进行比较。 不要只匹配相位= 0和极性= 0、并假设模式相同。 有关每个设置的说明、请参阅 www.ti.com/.../sprug71中的图3和表4。

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

    我注意到您拒绝了我提出的解决方案、但尚未提供有关您尝试了什么以及结果的反馈。
    请发布任何后续问题或其他调试步骤/结果、以便我们进一步帮助您。

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

    Mark、您好!

    感谢您的后续行动。 将 CPOL 设置为0、将 CPHA 设置为1确实会为 SPI 模式0产生正确的信号。 这让我失望、因为这是我看到的第一个处理器、但是 SPI 现在正在工作。

    感谢您的帮助、祝您愉快!

    此致、

    道格