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.

[参考译文] MSP430FR5972:DRV10983:同一从器件的地址不同?!

Guru**** 2582745 points
Other Parts Discussed in Thread: MSP430FR5972, DRV10983, TIDA-01373

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/727284/msp430fr5972-drv10983-different-addresses-for-the-same-slave

器件型号:MSP430FR5972
主题中讨论的其他器件: DRV10983TIDA-01373

大家早上好!

今天、我来到这里是因为我注意到同一器件的两个相关用户指南中有两个不同的信息、我真的不知道具体的信息是什么。

让我更好地解释一下我的意思。

我需要我的处理器 MSP430FR5972来控制无刷电机、我希望它们通过 I2C 进行通信。 我使用 DRV10983电机驱动器、因此我下载并开始学习

  • SLVUB30A -> TIDA-01373快速入门指南用户指南
  • DRV10983 12V 至24V 三相无传感器 BLDC 电机驱动器数据表

在快速入门指南的第一章中、第一段介绍了如何写入寄存器。 下面是我要讨论的页面的屏幕截图。

在数据表第5段的第8章中、我的内容为:

我必须写入哪一个正确的从器件地址?

此致、谢谢!

MariaAngela

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

    第二个文档显示了7位。
    如果在末尾添加0、则会得到0xA4。
    尝试使用0xA4、如果不起作用、请尝试另一个地址。
    修复后、请使用 pdf 页脚上的"提交文档反馈"链接告知 TI 团队此错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "1010 010"和"101 0010"是相同的7位。 对于 MSP430 I2C 单元、它们将右对齐(0x52)存储在 I2CSA 寄存器中。 0xA4和0xA5之间的差异是 R/W 位、它不是从器件地址的一部分、而是由 I2C 单元根据 UCTR 位附加的。

    "I2C_write()"是一个实际的 API 函数还是一段您必须编写的代码? 如果是前者、您应遵循所需的(左对齐)约定。 如果是后者、您可以随意使用0xA4/5 (您向右移动1)或0x52、甚至"(0xA4 >> 1)"进行设计、以使其显而易见。

    请记住,第一个 I2C_write()是特殊的,因为您在使用 I2C 硬件时从未显式“发送”地址字节(而是作为“启动”操作的一部分自动完成)。

    这种左对齐/右对齐的文件记录工作已持续多年;我知道的唯一做法是仔细阅读。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Bruce! 你好,Tomasz!

    首先、感谢您的回答和解释;它们是我测试的一个非常有用的起点。   

    但是、我还有另一个问题...

    正如我在第一篇文章中提到的、我需要处理器不仅与无刷电机进行通信、而且还需要与24LC16 EEPROM 进行通信、在读取模式下、这两个从器件都存在一些问题。

    如果我按照 DRV10983编程指南以及24LC16中的说明编写 I2C_READING 函数、那么我似乎必须发送2个不同的地址来执行写入和读取操作。

    • DRV10983为0xA4和0xA5  
    • 对于24LC16为0xA0和0xA1  

    使用此地址配置、读取操作不起作用、在第一个字节读取为0xFF 后卡住。

    另一方面、如果我使用用于写入和读取操作的相同从器件地址写入 I2C_Reading 函数、我似乎可以从 DRV 寄存器和 EEPROM 中获得一些反馈。

    此外、如果我正确理解您在之前的帖子中对我的解释、则该行为取决于设置/清除 UCTR 位。 正确吗?

    如果我在这种情况下、很抱歉、但我真的不明白如果 UCTR 位是在 RX/TX 模式之间进行选择的关键位、为什么为写入和读取操作提供2个不同的地址。

    如果能帮助您更好地了解这种情况、我将不胜感激。

    非常感谢大家的问候、

    MariaAngela   

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

    让我们假设在您的架构中、MSP430FR5972将用作主器件。

    I2C 使用7位或10位寻址。
    让我们重点关注7位。
    7个位地址是左对齐的、LSB (在我们的案例中为 UCTR)决定了总线上的下一个操作。
    UCTR=0、主器件将作为一个接收器。
    UCTR=1、主发送器。
    这两种模式都显示在上:
    图32-13. I2C 主接收器模式
    图32-12. I2C 主发送器模式
    MSP430FR59xx 系列用户指南中的其他内容。

    <<<我必须为写入和读取操作发送2个不同的地址。
    不可以、发送相同的7位地址、LSB 决定读取或写入。

    <<<此行为取决于 UCTR 位的设置/清零。 正确吗?
    正确。

    <<<如果 UCTR 位是在 RX/TX 模式之间进行选择的关键位、那么为什么为写操作和读操作提供2个不同的地址是不明白的。
    现在、RT/TX 具有相同的地址。

    <<<如果我使用用于写入和读取操作的相同从器件地址写入 I2C_Reading 函数、我似乎可以从 DRV 寄存器和 EEPROM 中获得一些反馈。
    您需要使用相同的地址进行读取和写入。

    <<<不过我还有另外一个问题...
    在这种情况下、建议关闭原始帖子并启动新帖子。
    新主题有助于找到更好/更快的响应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您对 Tomasz 的全面解释!
    现在、我的头脑中一切都很清楚。

    此致、
    Maria Angela