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.

[参考译文] TMS320F2.8035万:来自TMS320F2.8035万的SPI通信

Guru**** 2560390 points
Other Parts Discussed in Thread: DRV8711

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/653592/tms320f28035-spi-communication-from-tms320f28035

部件号:TMS320F2.8035万
主题中讨论的其他部件:DRV8711

TI社区您好,

我正在尝试使用TMS320F2.8035万 (主) 通过SPI与DRV8711 (从机)通信。 SPI通信为16位。 CS高时,我可以将数据推送到缓冲区,但我无法读取数据,因为我的miso总是很高。
数据格式应该没有问题,我发送MSB作为0/1进行写入/读取,位12-14作为地址,其余的是DRV8711寄存器的12位。
我在SPIRXBUF上收到完全相同的数据。 数据未写入DRV8711寄存器,这意味着我的SPI初始化可能会被打乱。

您能否根据自己的经验查看以下代码??


gpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;//在GPIO16上启用上拉(SPISIMOA)
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;//在GPIO17上启用上拉(SPISOMIA)
GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;//在GPIO18上启用上拉(SPICLKA)

gpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3;//异步输入GPIO16 (SPISIMOA)
gpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3;//异步输入GPIO17 (SPISOMIA)
gpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3;//异步输入GPIO18 (SPICLKA)


gpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1;//将GPIO16配置为SPISIMOA
gpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1;//将GPIO17配置为SPISOMIA
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1;//将GPIO18配置为SPICLKA

GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;
gpioCtrlRegs.GPADIR.bit.GPIO19 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO19 = 1;

我使用GPIO19作为I/O,而不是SPISTEA,因为DRV8711在读取/写入时需要CS高。 因此,GPIO19在发送16位数据之前将会很高,然后会变得很低。


=====================================================================================================================
SPI初始化

SpiaRegs.SPIFFTX.All=0xE040;
SpiaRegs.SPIFFRX.all=0xE040;
SpiaRegs.SPIFFCT.All=0x0000;
SpiaRegs.SPICCR.ALL =0x00BF;
SpiaRegs.SPICTL.ALL =0x0006;
SpiaRegs.SPISTS.all=0x0000;
SpiaRegs.SPIBRR =0x007F;
SpiaRegs.SPIPRI.All = 0x0011;

=====================================================================================================================
SPI写入

SPI_Write (UINT16 dataHi)

GpioDataRegs.GPASET.bit.GPIO19 = 1;

SpiaRegs.SPITXBUF=dataHi;
while (SpiaRegs.SPIFFRX.bit.RXFFST !=1){}
ReadData ||(SpiaRegs.SPIRXBUF);

GpioDataRegs.GPACLEAR.bit.GPIO19 = 1;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您说Miso保持高位—这是否意味着您已经在示波器/逻辑分析仪上确认MOSI看起来正确?

    看起来您在SPICCR中设置了SPILBK位。 这会在内部连接SIMO和SOMI,因此可能会给您带来问题。

    Whitney
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我可以在更改SpiaRegs.SPICTL.ALL = 0x000F使时钟相位=高后写入寄存器,以便在SPICLK转换之前传输和接收数据半个周期。
    我还有一个问题是关于阅读登记册的问题。 在SPI初始化中,SPICCR寄存器(用于启用/禁用回环)中的SPIBLK位设置为HIGH。 我希望把它降低,我就能通过写的方式发送DRV8711的注册地址,并接收与该地址相关的注册数据,但事实并非如此。 我正在将1000万00000000写入0万写入DRV8711以读取控制寄存器的位,而我正在接收1000万00000000。0万。 那么,我应该做些什么来接收数据而不是获得环回。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您一定要将SPILBK设置为零。 所有寄存器读回不正确还是仅控制寄存器读回错误?

    正如我在上一篇文章中所问的,您是否能够使用示波器或逻辑分析仪检查Miso和MOSI信号?

    谢谢!

    Whitney

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将SPIBK更改为零,但仍然无法读取寄存器。 我正在所有寄存器的RXBUF上接收0。
    我使用示波器检查Miso和MOSI。 我获得了完美的MOSI信号,Miso总是很高。 我正在使用4线模式。

    此外,我的主中继器仅在极性为0且相位为1时传输(带延迟的上升边缘)。 它如何不适用于其他极性相位组合? 在这种情况下如何决定。
    SpiaRegs.SPICTL.ALL =0x000E;//phase = 1,Master/Slaver=1,tal=1
    SpiaRegs.SPICCR.ALL =0x000F;//polarity = 0,SPIBLK=0
    SpiaRegs.SPIPRI.All = 0x0012;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看不出更改极性和相位会导致主中继器发送失败的原因。 但是,SPICCR值0x000F不会发送任何内容,因为SPISWRESET已清除。 是否尝试SPICCR = 0x008F而不是?

    Whitney
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已在更改配置之前清除了SPISWRESET。 在所有配置后,将SPISWRESET设置为HIGH (SPICCR= 0x008F)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我现在可以通过拉高miso引脚来读取DRV 8711寄存器。
    感谢您的帮助!