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.

[参考译文] MSP430F249-SPI:使用和放大器进行读取/写入;EP 上的 EEPROM

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1472280/msp430f249-ep-reading-writing-w-msp430-eeprom-over-spi

器件型号:MSP430F249-MSP430F249-EVM EP

工具与软件:

您好! 我正在尝试使用 MSP430读取和写入25LC512 EEPROM、但回读我声称写入的值时仅得到0。 我相信我的初始化以及根据 EEPROM 数据表编写的读/写逻辑、这两点我怀疑是导致了我的问题的原因。 另外在上下文中、我正在 PCB 上进行连接、因此我无法使用示波器探测任何引脚进行调试。

我的印象是、如果选择使用轮询架构、我就不需要创建 ISR、而硬件会简单地处理缓冲区接收数据时的标志切换。 我怀疑这是什么导致了我的问题、但认为它值得提及。 此外、产品说明书并未提及命令之间必须存在延迟、因此我并未创建定时器或其他类似定时器、以便程序在某些器件中等待。 然而,网上看让我想不是这样。 25LC512能让用户查看是否有写入/WREN 锁存器正在进行中/正在设置、但这需要在此过程中设置额外的命令、从而中断写入过程。

随意烘烤我;在这一点上,我一直在看这个代码这么长时间,我开始疯狂。 感谢您提供任何建议!

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

    除了布线可能被埋没这一事实之外、您在示波器中仍然能够以绿色连线工作。

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

    相当简单,但有很多地方让它崩溃。 两个设备是否正确连接? 验证这一点可以减少很多问题。 另一个站点上最近发布了一个有关使用 SPI 与 SD 卡通信的主题、事实证明这是布线问题。 埋在 PCB 中。

    至于软件、如果没有看到代码、甚至无法进行猜测。 唉、我看不到"我是谁"登记册。 我发现这些实用程序非常方便、因为这是一种验证链接是否正常工作的简单方法。 RDID 命令稍微复杂一点、但具有相同的功能。

    哦、请确保在 SOMI 引脚上有一个上拉电阻器、这样当线路悬空时、您可以获得定义的电平。

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

    1) 1)轮询对于 SPI 是合适的;使用中断只会降低您的速度。 (DMA 可能很有用、但 F249似乎没有此功能。)

    2)这些 EEPROM 通常被擦除(全部为0xFF)、因此、返回0x00表明器件不与您交谈。

    3)该 EEPROM 似乎期望 CPOL=0、CPHA=0、因此您应该使用 UCCKPL=0和 UCCKPH=1。

    4) 4)您需要管理 Tx 和 Rx 数据、以便知道哪个字节对应哪个字节。

    5) 5)如果您可以发布您的代码、我们可能会做更好的猜测。 [不要忘记答复框底部的"插入->代码"。]

    未经请求:我从这个小函数中获得了大量里程、该函数将一个 Tx 字节交换为一个 Rx 字节。

    uint8_t spix(uint8_t c)
    {
      while (!(UCA1IFG & UCTXIFG)) /*EMPTY*/;
      UCA1TXBUF = c;
      while (!(UCA1IFG & UCRXIFG)) /*EMPTY*/;
      c = UCA1RXBUF;
      return(c);
    }

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

    25LC12只有8个引脚、因此不难想象、您可以在芯片中"空中"以这种方式接入其引脚。 (即、不要在电路板上安装芯片、而是用 ECO 线将其连接到这些线缆上。)

    具备连接示波器/逻辑分析仪的能力无疑是解决此问题的最快方法。

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

    您是否对非 SPI 总线25LC12信号的状态有信心?

    即 HOLD 和 WP 是否处于正确状态?

    您是否以正确的极性驱动 CS?

    如果您真的绝望了、SPI 总线可以被计时为直流、因此完全可以在软件(作为 GPIO)中"位连接" SPI 总线信号、而不用使用 MSP430的 SPI 总线外设。 这样、您还可以(通过 MSP430 PxIN 寄存器)监视所有 SPI 总线信号的状态。

    (我们器件上的 I2C 总线之一与您的 SPI 总线类似;我们无法连接到它的埋入式布线、因此当我们开发软件在该 I2C 总线上驱动器件时、我们恰好按照我刚才的建议执行了操作:我们在软件中执行了整个 I2C 总线、并将 SDA 和 SCL "回显"(复制)到两个 GPIO 引脚、我们实际上可以将它们连接到包含 I2C 总线解码软件的逻辑分析仪。 这是一个雪橇、但我们让器件运行。 然后、我们使用了 MSP430上的真正 I2C 外设。)

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

    我的英雄! 是的、考虑到我甚至没有发布我的代码、我真的很惊讶您能够找到我的确切问题。 这是我讨厌的 UCCKPH。 我不知道我是如何设法错过它的,但非常感谢你。

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

    嗨、bilbos、

    很高兴您找到了您想要的答案。

    此致、

    Diego Abad