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.

[参考译文] CCS/MSP432P401R:在一条 SPI 总线中集成 MSP432多个 SPI 从器件

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/815425/ccs-msp432p401r-msp432-multiple-spi-slave-devices-in-one-spi-bus

器件型号:MSP432P401R

工具/软件:Code Composer Studio

大家好

我想使用 MSP432P401R 通过单独的芯片选择引脚在一条 SPI 总线上控制两个 SPI 从器件(我的432上的其他 SPI 总线被占用)。

问题

在将调试代码从 LaunchPad 部署 到最终目标(PCB 上的 MSP432)时、我可以轻松控制这两个器件。

但是、当我停止在 CCS 中进行调试时、重新启动目标 MSP432和我的 PCB、只有一个 SPI 从器件工作。

故障排除步骤

首先、我想知道故障从设备在复位后是否需要很长时间、我在调用故障从设备之前添加了一些延迟、我的问题仍然存在。

2.交换 SPI 呼叫顺序;问题仍然存在。

3.我想知道代码烧录过程是否成功完成;而 PCB 上由432控制的所有其他器件都可以正常工作。


我的代码的一部分

const eUSCI_SPI_MasterConfig spiMasterConfigADF4351 =
{
EUSCI_A_SPI_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
3000000、 // SMCLK = DCO = 3MHz
50万、 // SPICLK = 500kHz
EUSCI_A_SPI_MSB_FIRST、 // MSB 优先
EUSCI_A_SPI_PHASE_DATA_Captured_ONFIRST_changed_on_next、
当未为 ADF4351启用 SPI 时、EUSCI_A_SPI_CLOCKPOLARITY_INACTION_LOW、// CLK 低电平
EUSCI_A_SPI_3引脚 // 3线 SPI 模式
};

const eUSCI_SPI_MasterConfig spiMasterConfigAD8366 =
{
EUSCI_A_SPI_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
3000000、 // SMCLK = DCO = 3MHz
50万、 // SPICLK = 500kHz
EUSCI_A_SPI_MSB_FIRST、 // MSB 优先
EUSCI_A_SPI_PHASE_DATA_Changed_ONFIRST_captured_on_next、//相位
///EUSCI_A_SPI_PHASE_DATA_Captured_ONFIRST_changed_on_next、
EUSCI_A_SPI_CLOCKPOLARITY_INACT_LOW、//高极性
EUSCI_A_SPI_3引脚 // 3线 SPI 模式
};

//典型的3引脚 SPI 初始化
GPIO_setAssiPeripheralModuleFunctionInputPin (ADF4351_SPIPort、ADF4351_SPICLK | ADF4351_SPISIMO | ADF4351_SPISOMI、GPIO_primary_module_function);
SPI_MasterMaster (ADF4351_SPICLIM
);ADF4351_SPI_initConfigModule (AD4351;ADF4351 SPI (AD4351);AD4351 SPI (AD4351 SPI


GPIO_setAsOutputPin (ADF4351_CSPort、ADF4351_CSPin);
//将芯片选择设置为高电平作为默认值
GPIO_setOutputHighOnPin (ADF4351_CSPort、ADF4351_CSPin);
GPIO_setAsOutputPin (AD8366_CSPort、AD8351_SPIN


);AD4335_AD431_ADCSPIN 初始化 ADF4351_CSPort、ADF4351_CSPin);
SPI_DisableModule (ADF4351_SPI);

//重新配置 SPI、因为两个器件的 SPI 主配置不同
:GPIO_setAssetInitFunctionInputPin (AD8366_SPIPort、AD8366_SPICLK | AD8366_SPI_SPI 主要功能;AD8366 SPI 主要功能;AD8366 SPI



AD8366_SET_GAIN (4500、4500、AD8366_SPI、AD8366_CSPort、AD8366_CSPIN);



电源

软件平台 CCS 8.3.0.0009

硬件:MSP432P401R LaunchPad -> JATG -> 目标 MSP432P401R

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

    您能看到有无调试器的实际 SPI 波形有何差异吗?

    您使用的实际 SPI 端口是什么?   AD8366 SPI?

    谢谢、

    Chris

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

    您好 Chris

    是的。  我确实使用示波器检查了 SPI 波形、无论是否使用 Launchpad。

    SPI 波形正确。  现在、我怀疑硬件可能有问题。

    如果您有任何想法、请与我分享您的见解。

    BTW、我使用的 SPI 端口为 UCA2 (P3.1/3.2/3.3)

    谢谢你

    文森特

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

    > GPIO_setAsOutputPin (AD8366_CSPort、AD8366_CSPin);

    I don't see where you set the AD8366 CS pin initially low (inactive). The contents of the OUT register are undefined after Reset.

    ----------

    当调试器中的某个操作成功但并非没有成功时、(第一个)通常的可疑操作是计时。 在调用 disableModule 之前、是否确保事务已完成(UCBUSY=0)?

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

    你好 Bruce

    >> I don't see where you set the AD8366 CS pin initially low (inactive). The contents of the OUT register are undefined after Reset.

    感谢您的指出。  我为 AD8366 CS 引脚设置了默认值、但问题仍然存在。  

    此致

    文森特

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

    你好 Bruce

    >> I don't see where you set the AD8366 CS pin initially low (inactive). The contents of the OUT register are undefined after Reset.

    感谢您的指出。  我为 AD8366 CS 引脚设置了默认值、但问题仍然存在。  

    此致

    文森特

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

    请注意芯片选择的激活和停用方式与 SPI 通信相关。  如果在发送最后一个字节后将其设置为低电平、则可能在传输实际最后一个字节之前取消选择 CS。  TX IFG 表示 TX 缓冲区为空、而不是字节已被发送。  使用接收 IFG 来确定最后一个字节的实际发送时间。

    此致、

    Chris

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

    您好 Chris

    感谢您的解释。  我的问题是由于 PCB 设计电源电路。  重新启动时、其电源序列会导致一些意外的长延迟、导致某些芯片在 MCU 启用之前未准备就绪。

    我在代码中添加了一些延迟作为权变措施。