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/MSP430F5438A:msp430f5438a

Guru**** 2587365 points
Other Parts Discussed in Thread: MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/834516/ccs-msp430f5438a-msp430f5438a

器件型号:MSP430F5438A

工具/软件:Code Composer Studio

您好!

我尝试通过 SPI 通信集成 msp430f5438a 和 Winbond SPI 闪存 IC。 I m 在从主器件(msp430f5438a)向从器件选择发送数据时遇到问题。 我想我在从器件选择启用和禁用方面出错了。 如果我在逻辑分析仪从器件中看到信号、则选择引脚与 MOSI 和时钟信号不同步。 如果我在逻辑分析仪设置中禁用"Enable"选项、则给定的数据信号会完美地显示在分析仪上。  

我随附了我的代码、请在出错的地方帮助我。 我还连接了我的逻辑分析仪 o/p

#include "msp430x54xA.h"

unsigned char MST_Data、SLV_Data;

void main (void)

WDTCTL = WDTPW+WDTHOLD;//停止看门狗计时器

P1OUT |= 0x02;//为 LED 设置 P1.0、1

P3OUT |= 0x01;//从器件选择 p3.0
P3DIR |= 0x01;
P1DIR |= 0x03;//将 P1.0、1设置为输出方向
P3SEL |= 0x0E;// P3.5、4、0选项选择

UCB0CTL1 |= UCSWRST;//将状态机复位

/* 4引脚 SPI、主模式、MSB 优先、同步通信、时钟极性高*/

UCB0CTL0 |= UCMST+UCSYNC+UCMSB+UCCKPL+UCMODE_1;

UCB0CTL1 |= UCSSEL_2;// SMCLK
UCB0BR0 = 0x02;// 2.
UCB0BR1 = 0;
// UCB0MCTL = 0;//无调制
UCB0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
UCB0IE |= UCRXIE;//启用 USCI_A0 RX 中断

_bis_SR_register (GIE);

MST_Data = 0x02;//初始化数据值
SLV_Data = 0x00;

while (1)

P3OUT |= BIT0;//从器件选择-高电平
UCB0TXBUF = MST_Data;//发送第一个字符
while (!(UCA0IFG&UCTXIFG));
P3OUT &=~BIT0;//从器件选择-低电平

_DELAY_CYCLES (5);


#pragma vector=USCI_B0_vector
_interrupt void USCI_B0_ISR (void)

switch (__evo_in_range (UCB0IV、4))

情况0:中断;//向量0 -无中断
情况2://向量2 - RXIFG
// while (!(UCB0IFG&UCTXIFG));// USCI_A0 TX 缓冲区准备就绪?

中断;
情况4:中断;//向量4 - TXIFG
默认值:break;

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

    > while (!(UCA0IFG&UCTXIFG));

    这不会等待字节被发送、所以芯片选择发生得太早。 (这也是错误的 USCI。) 请尝试:

    > while (!(UCB0IFG & UCRXIFG))/* empty*/; //等待字节交换完成

    >(void) UCB0RXBUF; //下次清除 UCRXIFG

    并删除此行、因为 IE 将会阻碍您的工作:

    > UCB0IE |= UCRXIE;//启用 USCI_A0 RX 中断

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

    您好、感谢您的回复。

    我已经通过三线 SPI 实现了 SPI 处理器和从器件通信。

    但是、如果我添加、  

     而(!(UCB0IFG 和 UCRXIFG));线路中没有数据传输。 MOSI 线路变为低电平。  

    现在、我必须将 Winbond SPI IC 连接到 MSP430、因为我必须使用 CS 引脚来启用 SPI 闪存 IC。 请在 SPI 配置中帮助我连接 Winbond IC。 我已附上 Winbond IC 数据表。

    e2e.ti.com/.../w25q64fv-revs-07182017.pdf

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

    >但如果我添加 while (!(UCB0IFG 和 UCRXIFG));line、则没有数据传输。 MOSI 线路变为低电平。  

    听起来您没有删除设置 UCRXIE 的行。 但是、如果您找到了解决方案、这是可以的。

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

    您好!

    我很高兴您启动并运行了三线 SPI 通信。 请参阅 TI Resource Explorer 、了解如何正确初始化和使用 USCI SPI 外设进行4线 SPI 通信的代码示例。

    此致、

    Matt

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

    我 对你的发言有疑问。 如果我移除 UCRXIE、那么我如何从从器件接收数据? 我对此感到困惑。 请加以澄清。

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

    您好!

    我在 TI Explorer 中检查了4线 SPI。 它给了我一些想法。 但是、在4线通信中、我们只需要4条线(时钟、MISO、MOSI、从器件选择)。 但它们已经配置了5根导线用于更成熟、更受控的通信。 请对此进行澄清。



    在这里,从器件复位的用途是什么? 从器件选择的用途是什么?  

    在我的 SPI 闪存 IC 中、只有时钟、DO、DI、CS、VCC、GND、WP 引脚可用。

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

    您好!

    我在 TI Explorer 中检查了4线 SPI。 它给了我一些想法。 但是、在4线通信中、我们只需要4条线(时钟、MISO、MOSI、从器件选择)。 但它们已经配置了5根导线用于更成熟、更受控的通信。 请对此进行澄清。



    在这里,从器件复位的用途是什么? 从器件选择的用途是什么?  

    在我的 SPI 闪存 IC 中、只有时钟、DO、DI、CS、VCC、GND、WP 引脚可用。

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

    > 如果我删除 UCRXIE、那么我如何从从器件接收数据?  

    您发布的代码丢弃了收到的数据、因此我的替换代码保留了该属性。

    如果您更换

    >(void) UCB0RXBUF; //下次清除 UCRXIFG

    使用

    >接收数据= UCB0RXBUF; //捕获从器件数据并下次清除 UCRXIFG

    您将收到一些数据。

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

    > 在我的 SPI 闪存 IC 中、只有时钟、DO、DI、CS、VCC、GND、WP 引脚可用

    SPI 用户为这些引脚提供了一个非常好的、明确的命名规则、但有些制造商不知怎么忘记了它:

    SCK:CLK (串行时钟)

    MISO:DO (主器件输入从器件输出)

    MOSI:DI (主器件输出从器件输入)

    /CS:/CS (芯片选择)

    您的闪存芯片没有从器件复位、因此请勿使用它。

    它具有的是/WP 和/HOLD、您需要处理它:没有提到这些引脚上的内部上拉电阻(可能是由于 QSPI 功能)、但它们不能悬空。 如果您的电路板未将这些引脚连接到 Vcc、则应将它们连接到 GPIO 并将其驱动为高电平。

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

    我已经尝试了上述所有情况、但它不能如上所述工作。 请发送任何帧集或示例代码(如果有)。

    谢谢你。

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

    我不确定你所指的是哪种情形--我认为上面只有一个选择。

    到底什么是"不起作用"?

    我没有此设备(尽管我使用过类似的设备)、因此我没有任何示例代码。 也许 Winbond 有一些?

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

    实际问题是 SPI 闪存 IC 没有响应。

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

    这可能是您需要联系 Winbond 的问题、因为您发现 SPI 闪存 IC 不响应 MSP430 SPI 消息。

    -Matt