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.

[参考译文] LAUNCHXL2-RM57L:配置 SPI3以访问 Aardvard I2C/SPI 活动板上的 AT25080 SPI EEPROM

Guru**** 1624225 points
Other Parts Discussed in Thread: LAUNCHXL2-RM57L, HALCOGEN, RM57L843
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1237533/launchxl2-rm57l-config-the-spi3-to-access-the-at25080-spi-eeprom-on-the-aardvard-i2c-spi-activity-board

器件型号:LAUNCHXL2-RM57L
主题中讨论的其他器件: HALCOGENRM57L843

可能与之相关的人员、  

我正在尝试使用 LAUNCHXL2-RM57L 上的 SPI3来访问Aardvard I2C/SPI 活动板上的 AT25080 SPI EEPROM (ww1.microchip.com/.../doc3401.pdf)。  

使用电路板上标记的以下引脚:  

3CS1

3MOSI

3米 ISO

3时钟

接地

5V

已按照此处的示例配置 SPI3端口(https://community.element14.com/members-area/personalblogs/b/blog/posts/talk-spi-to-eeprom-with-hercules-launchpad-hero)。

尝试执行一个简单的应用程序以从 AT25080中写入和读取、如下所示:  

void Ready_25LC (void){

 uint16 buffer_status[2]={0x03、0x00};          //初始指令

 gioSetDirection (spiPORT5、0x3);

 gioSetBit (spiPORT3、SPI3_CS0、低电平);

  spiTransmitData (spiREG3、&dataconfig1_t、1、(uint16*) buffer_status);

 spiReceiveData (spiREG3、&dataconfig1_t、1、(uint16*) buffer_status);

 gioSetBit (spiPORT3、SPI3_CS0、高电平);

 返回;  

已尝试使用 Beagle 分析器来捕获流量。 不过、这是不存在的。 由于我使用了 Aardvark 主机适配器、并能够捕获 SPI 数据包、因此分析器工作正常。  

我还尝试转储 spiPORT3寄存器、因为这是 gioSetBit 和 gioSetDirection 正在切换的对象。 但是、我没有看到 MibSpi3_Dir (0xFFF7F818)和 MibSpi3Dset 或 MibSpi3DCLR 发生任何变化、如下面的存储器捕捉中所示。 使用仪表并测量了3CS1引脚、也没有看到任何电压变化。  

非常感谢 您提出任何建议。  

谢谢!

海伦  

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

    请参阅随附的项目文件。

    e2e.ti.com/.../eeprom_5F00_spi.zip

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

    海伦、您好!

    我在这里观察到一个冲突、

    3CS1

    您在这里说您使用的是3CS1、对吗?

    gioSetBit (spiPORT3、SPI3_CS0、低电平);

    但为什么要操作3CS0呢?

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    感谢您研究此案例!

    很抱歉耽误你的时间。 在 HL_sys_main.c 文件中、SPI3_CS0被定义为1。 我正在实验使用 CS0和 CS1。  

    #define SPI3_CS0 1

    此致、  

    海伦

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

    Jagadish、您好!

    仍然是在 spiInit 后0xFFf7F800上的 SPI3端口寄存器不发生变化、这直接设置 spi3Reg。 尤其是 MibSpi3_GlbCtrl0和 MibSpi3_GlbCtrl1仍为0、这表明它们在 spiInit 后未启用、这会直接设置这些寄存器:

    存储器浏览器:

    0xFFF7F800 MibSpi3_GlbCtrl0
    0xFFF7F800 00000000
    0xFFF7F804 MibSpi3_GlbCtrl1
    0xFFF7F804 00000000

    在 hl_spi.c 中:  

    void spiInit (void)

    {

      /**@b 初始化@b SPI3 */

      /**使 SPI 退出复位*/

      spiREG3->GCR0 = 0u;

      spiREG3->GCR0 = 1U;

      /** SPI3主模式和时钟配置*/

      spiREG3->GCR1 =(spiREG3->GCR1 & 0xFFFFFFFCU)|((UINT32)((UINT32) 1U << 1U) /* CLOKMOD */

             | 1u); /*主*/

    ...

      spiREG3->GCR1 =(spiREG3->GCR1 & 0xFEFFFFFFU)| 0x01000000U;

    感谢您提供任何帮助、因为该项目很紧急。 我的项目文件之前已附在附件中。 如果我不熟悉 Halcogen 和 CCS、你能仔细检查我的 GIO、SPI、MIBSPI 设置和项目设置、我将不胜感激。  

    谢谢!  

    海伦

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

    BTW、我运行了另一个示例项目、以便使用 GIO 进行 LED 切换、并且在调用 gioSetDirection 和 gioSetBit 函数时、gioPort 寄存器正在更新。 因此、看起来 CCS 存储器显示工作正常。 我的 SPI 问题应该仍然与 SPI 配置有关。  

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

    海伦、您好!

    您想对 CS 引脚做什么?

    我的意思是、您需要手动将其作为 GPIO 运行、还是希望它 自动由 SPI 硬件控制?

    只需告诉我您的要求、然后我将为您创建一个演示项目。

    如果希望它作为 GPIO 运行、则应确保以下内容:

    您应该在端口设置中将该引脚配置为 GIO:

    现在将 gioSetBit 称为如下所示

    gioSetBit (spiPORT3、0、1);//以设置 CS0引脚

    gioSetBit (spiPORT3、0、0);//以 清除 CS0引脚

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!  

    RM57L843评估板用作 SPI 主器件、其 CS 引脚(在本例中为 MIBSPI3 CS1)选择 SPI EEPROM 从器件、因此 CS 引脚应该为 GPIO、对吗?  

    感谢您为创建示例项目提供的帮助。 注意我还想在此 SPI 访问上启用 DMA、因此如果您可以展示其上的示例代码/配置、我们不胜感激。  

    谢谢!  

    海伦

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

    海伦、您好!

    RM57L843评估板用作 SPI 主器件,其 CS 引脚(在本例中为 MIBSPI3 CS1)选择 SPI EEPROM 从器件,因此 CS 引脚应为 GPIO,正确吗?

    不、这是不正确的。

    实际上、任何 SPI 器件都有两个选项来控制 CS 引脚。

    这是通过将其配置到 GPIO 引脚来手动实现的。

    它可由 SPI 硬件自动操作。

    在大多数情况下、人们更喜欢第二种由 SPI 硬件自动控制的方法。 由于这种方法没有额外的开销、因此在这种方法中、每当我们 向 SPI 数据缓冲区写入一个帧时、CS 引脚便会自动激活、在该数据随时钟移位后、 一旦移动了所需的所有数据、CS 引脚将自动停用。

    在某些极少数情况下、例如无法将 SPI CS 引脚连接到从器件或错误地连接到从器件的引脚、在这些情况下、人们会将 GPIO 用作 CS。

    我想、在这种情况下、您需要通过 SPI 硬件进行自动控制。

    我将为此提供一个代码。

    --

    谢谢。此致、
    Jagadish。

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

    海伦、您好!

    以下是 RM573上的 SPI3主器件的示例代码

    e2e.ti.com/.../SPI3_5F00_Master_5F00_RM57.zip

    在本例中、我将 SPI3_CS0用作片选、并由 SPI 硬件自动操作此引脚  

    因此我将相应的引脚配置为 SPI 模式、而不是 GIO 模式

    要激活此引脚、我将把0xFE 写入配置的 CSNR。

    在本例中、我将发送8帧数据1到8、这是逻辑分析仪上的最终输出

    在上图中、您可以看到 CS 在每个帧之间由 SPI 硬件自动运行。

    请将我的代码作为参考、并在最后进行必要的修改。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!  

    它起作用了! 我刚刚更改了 SPI3 CS1引脚、并将 CSNR 设置为0xFD 以匹配我的板设置。

    非常感谢您的帮助。  

    海伦