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.

[参考译文] TMS320F280025:SPI 通信配置问题

Guru**** 2560390 points
Other Parts Discussed in Thread: BOOSTXL-DRV8323RS, LAUNCHXL-F280025C, DRV8323

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1019735/tms320f280025-spi-communication-configuration-problems

器件型号:TMS320F280025
主题中讨论的其他器件:BOOSTXL-DRV8323RSLAUNCHXL-F280025CDRV8323

尊敬的专家:

我使用的是280025,我参考 了有关使用 SPI 配置的 E2E 常见问题解答: https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/937258/faq-spi-configuration-and-use?tisearch=e2e-sitesearch&keymatch=faq%3atrue,I按照  这一阐述对 SPI 进行配置。

我已尝试将配置应用于 DRV8323RS 和另一个驱动器 IC (A4911)。我在两 块板之间连接六个信号引脚( 例如:“LAUNCHXL-F280025C”和“BOOSTXL-DRV8323RS”) Borad:Enable (GPIO29)、SCLK (GPIO9)、SDI/SIMO (GPIO8)、SDO/SOMI (GPIO10)、CS/STE (GPIO11)、GND。总线电压VM由稳定的24V 电压供电。但是、我在两个驱动器 IC 上都遇到了写入问题。我在写入这两个驱动器 IC 上都遇到了问题。

请勿重复一些无用的信息、例如断开 IDRIVE 和 VDS 引脚、只需将这两个引脚悬空、因为我没有连接这些引脚。

A4911的寄存器结构:

SPI 配置代码:

GPIO_setPinConfig (GPIO_8_SPIA_SIMO);
GPIO_setPadConfig (8、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (8、GPIO_QUAL_异 步);


GPIO_setPinConfig (GPIO_10_SPIA_SOMI);
GPIO_setPadConfig (10、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (10、GPIO_QUAL_异 步);


GPIO_setPinConfig (GPIO_9_SPIA_CLK);
GPIO_setPadConfig (9、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (9、GPIO_QUAL_异 步);


GPIO_setPinConfig (GPIO_11_SPIA_STE);
GPIO_setPadConfig (11、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (11、GPIO_QUAL_异 步);

HWREGH (base + SPI_O_FFTX)= 0xE040;
HWREGH (base + SPI_O_FFRX)= 0x2044;
HWREGH ((基址)+SPI_O_FFCT)= 0x0;

//SPI 设置
HWREGH (base + SPI_O_CCR)&=~(SPI_CCR_SPISWRESET);//SPI 复位打开
SPI_setConfig (SPIA_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA0、SPI_MODE_MASTER、1000000、16);
SPI_disableLoopback (base);

HWREGH (base + SPI_O_CTL)&=~(SPI_CTL_OVERRUNINTENA);
HWREGH (base + SPI_O_CTL)|= SPI_CTL_TALK;//启用 nSCS
HWREGH (base + SPI_O_CTL)&=~(SPI_CTL_SPIINTENA);

SPI_setEmulationMode (base、SPI_emulation_free_run);
HWREGH (base + SPI_O_CCR)|= SPI_CCR_SPISWRESET;

读取和写入函数:

uint16_t SPI_xmit (uint32_t base、uint16_t spiFrame)

SPI_writeDataNonBlocking (base、spiFrame);

//等待 RX 标志指示 SPI 帧完成

while (SPI_getRxFIFOStatus (base)!= 1)

返回 SPI_readDataNonBlocking (base);

uint16_t A4911_spi_read (uint32_t base、uint16_t addr)


uint16_t toSend = 0;
toSend =(uint16_t)((((uint32_t) A4911AddrMask & addr)<< 11U);
toSend |=(uint16_t)(A4911Read);
luchang1 = toSend;

返回 SPI_xmit (base、toSend);

uint16_t A4911_spi_write (uint32_t base、uint16_t addr、uint16_t data)


uint16_t toSend = 0;
toSend =(uint16_t)((((uint32_t) A4911AddrMask & addr)<< 11U);
toSend |=(uint16_t)(A4911Write);
toSend |=(uint16_t)((((uint32_t) A4911ValueMask & data)<< 1U);
luchang2 = toSend;
返回 SPI_xmit (base、toSend);

在 main()中调用初始化中的函数

InitA1911();
A4911_SPI_WRITE (SPIA_BASE、0、12);
A4911_reg = A4911_SPI_Read (SPIA_BASE、0);

无论我写入寄存器0:A4911_SPI_WRITE (SPIA_BASE、0、12)或 A4911_SPI_WRITE (SPIA_BASE、0、8)中的数据是什么、我在 SPIRXBUF 中读取相同的结果:  

我的板没有问题。我是否在代码中犯了错误或忽略了一些细节?您能给我一些建议?如果您能详细介绍我的描述并提供有用和清晰的信息、我将不胜感激。

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

    挂起、

    A4911_SPI_WRITE (SPIA_BASE、0、12)应发送十进制值24。 在 DRV8323中、这意味着您将24写入地址0x0。 地址0x0是故障状态寄存器1、不能写入该寄存器。 您是否检查了 SPIMOSI 以检查您是否确实在传输24个数据? 您在 SPISOMI 引脚上收到了什么?

    我建议您使用逻辑分析仪检查 SPI 总线(SPICLK、SPIMOSI、SPISOMI、SPISTE 引脚)、以确保 SPI 确实能够满足您的预期。

    此致、

    曼诺伊

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

    谢谢你,Mohan。我找到了我忽略的地方。我已经解决了我的问题。