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.

[参考译文] TM4C123GH6PM:BQ34z950中的 SMBus 块写入问题。

Guru**** 2612025 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/772345/tm4c123gh6pm-smbus-block-write-problem-in-bq34z950

器件型号:TM4C123GH6PM
主题中讨论的其他器件: BQ34Z950BQ34Z50

尊敬的所有人:

我使用 SMBus 通信通过 tm4c123ghpm I2C 与 BQ34z950通信。 我使用 utils smbus.c 和 smbus.h 作为驱动程序库。  我在 SMBusMasterBlockWrite 中遇到问题。 当我尝试向寄存器写入 SMBusMasterBlockWrite 寄存器值时、该寄存器的值不会更新。 我正在使用 SMBusMasterByteWordWrite 进行写入、它工作正常。

这是我要做的。  

工作函数:-

buff [0]=(uint8_t)数据;//低字节
buff [1]=(uint8_t)(数据>> 8);//高字节

RET = SMBusMasterByteWordWrite (&g_sMaster、SLAVE_ADDR、reg、buff、2);
UARTprintf ("\n\rret =%d "、ret);
while (SMBusStatusGet (&g_sMaster)=SMBus_transfer_in_progress)

//等待传输完成

SysCtlDelay (2000);

结果:-返回0并写入数据、因此当我使用 SMBusMasterByteWordRead 再次读取寄存器时、它返回更新后的值。

不起作用的功能:

buff [0]=(uint8_t)数据;//低字节
buff [1]=(uint8_t)(数据>> 8);//高字节

RET = SMBusMasterBlockWrite (&g_sMaster、SLAVE_ADDR、reg、buff、2);
UARTprintf ("\n\rret =%d "、ret);
while (SMBusStatusGet (&g_sMaster)=SMBus_transfer_in_progress)

//等待传输完成

SysCtlDelay (2000);

结果:-  RET = 0、但不更新寄存器中的值。 因此、当我下次读取它时、不会显示更新后的值。

如果我做了任何错误或需要为块写入添加任何内容、请向我提供指导。 请帮助!!

此致、

Aman。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不能直接进行块写入、必须在块写入命令之前执行块写入。 请参阅 TRM 以获取参考。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Batt:

    感谢您的回答。 您能不能更具体地说、我必须查看哪本技术参考手册。 我在 BQ34z50 TRM i.e slua93b.pdf 中找不到。

    此致、
    Aman。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请参阅附录 D 中的第 D1节。块写入操作是对 DF 完成的。 因此、要写入 DF、您需要以32字节的块写入、除非子类包含的字节小于32字节。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Batt:  

    我在干什么。 我尝试通过 SMBusMasterBlockWrite 写入32位闪存数据。 但该32位值在闪存中不会更新。 我遵循的步骤与 TRM 中提到的步骤相同。

    闪存不会更新这些值。

    此致、

    Aman

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

    感谢你的帮助。 正如您提到的、它的工作方式是子类1仅包含22个字节的数据。 我写入的是32字节而不是22字节。

    谢谢、此致、
    Aman。