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.

[参考译文] TMS570LS0432:与 BQ34Z100EVM 的 I2C 通信不工作

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/610744/tms570ls0432-i2c-communication-with-bq34z100evm-not-working

器件型号:TMS570LS0432
主题中讨论的其他器件: BQ34Z100EVM

您好!

我使用 TMS570 Launchpad (TMS570LS0432)连接 BQ34Z100EVM (电池电量监测计)。

BQ34Z100EVM 支持 I2C 协议、但 TMS570LS0432不支持 I2C。

因此、在搜索 E2E 社区后、我知道我们仍然可以将 TMS570LS0432和 BQ34Z100EVM 与 N2HET 进行通信。

我尝试运行该示例中提供的程序。 但我不能弄清楚以下几点:

哪个 N2HET 引脚用作 I2C 通信的 SDA()和 SCL()?

2.我要附上 main.c 的代码片段  

/**@文件 sys_main.c
*  @简要应用程序主文件
*  @日期2014年9月9日
*  @版本04.01.00
*
*  此文件包含一个空的主函数、
*  可用于应用程序。
*

/*(c) Texas Instruments 2009-2014、保留所有权利。 *

/*用户代码开始(0)*/
/*用户代码结束*/

/*包含文件*/

#include "sys_common.h"

/*用户代码开始(1)*/
#include "het.h"
#include "HET_IO_TEST.h"
#include "HET_EMU.h"

unsigned char *I2C1_txptr = NULL,*I2C1_rxptr = NULL;
unsigned char I2C1_TxData[5]={0、0、0、0};
unsigned char I2C1_RxData[20];
unsigned int Data_Send_HET = 0、Data_rece_HET = 0;
unsigned int Data_Send_I2C = 0、Data_rece_I2C = 0;
// unsigned int Stop_rece_I2C = 0;
unsigned int Start_Repeation=0;
char IntEna =1;
char rw = 0;//写入
char I2C_ADDR;// TODO:JC 20141024这是使 TI 仿真器代码正常工作的一种方法、是重构的候选方法
char NumOfBytes = 1;


/*用户代码结束*/

/**@fn void main (void)
*  @应用程序主函数简介
*  @请注意、默认情况下、此函数为空。
*
*  此函数在启动后调用。
*  用户可以使用此函数来实现应用程序。
*

/*用户代码开始(2)*/
/*用户代码结束*/

void main (void)

/*用户代码开始(3)*/

   //设置 i2c 地址
   I2C_ADDR = 0xAB;


   int i;

   NumOfBytes = 1;
   字符 StopBit = 1;
   volatile unsigned int wait_counter;



   I2C1_txptr = I2C1_TxData;
   I2C1_rxptr = I2C1_RxData;

   hetInit();
   hetREG1->INTENAS = 0xFFFFFFU;   // TODO JC 20141024检查是否需要
   hetREG1->GCR = 0x01010001;   // TODO JC 20141024检查是否需要

   _enable_IRQ ();   // TODO JC 20141024检查是否需要

   IntEna =1;
   RW = 0;//写入
   NumOfBytes = 1;
   I2C1_TxData[0]= 0x02;//剩余电量百分比


   HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);
   for (WAIT_COUNTER=0;WAIT_COUNTER<0x18;WAIT_COUNTER++);//等待一段时间。


   RW = 1;//读取
   IntEna = 0;//无发送中断
   HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);

   while (1);

   /*用户代码结束*/


/*用户代码开始(4)*/
/*用户代码结束*/

请帮助我进行沟通。

谢谢

Ritul Shah

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

    您好 Ritul、

    示例代码对 I2C SDA 使用 HET0、对 I2C SCL 使用 HET2。

    e2e.ti.com/.../0363.N2HET_5F00_EMU_5F00_I2C_5F00_AppNote.pdf

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

    感谢王先生的答复。

    我进行了以下连接:

    TMS570:BQ34Z100EVM

    GND:GND

    NHET0:SDA

    NHET2:SCL

    我已经在 CCS7.0上运行 HET_IO_Test 文件来执行 I2C 通信。

    对于以下代码、我在 I2C1_RXDATA 处获得以下结果:


    /*(c) Texas Instruments 2009-2014、保留所有权利。 *

    /*用户代码开始(0)*/
    /*用户代码结束*/

    /*包含文件*/

    #include "sys_common.h"

    /*用户代码开始(1)*/
    #include "het.h"
    #include "HET_IO_TEST.h"
    #include "HET_EMU.h"

    unsigned char *I2C1_txptr = NULL,*I2C1_rxptr = NULL;
    unsigned char I2C1_TxData[5]={0、0、0、0};
    unsigned char I2C1_RxData[20];
    unsigned int Data_Send_HET = 0、Data_rece_HET = 0;
    unsigned int Data_Send_I2C = 0、Data_rece_I2C = 0;
    // unsigned int Stop_rece_I2C = 0;
    unsigned int Start_Repeation=0;
    char IntEna =1;
    char rw = 0;//写入
    char I2C_ADDR;// TODO:JC 20141024这是使 TI 仿真器代码正常工作的一种方法、是重构的候选方法
    char NumOfBytes = 1;


    /*用户代码结束*/

    /**@fn void main (void)
    *  @应用程序主函数简介
    *  @请注意、默认情况下、此函数为空。
    *
    *  此函数在启动后调用。
    *  用户可以使用此函数来实现应用程序。
    *

    /*用户代码开始(2)*/
    /*用户代码结束*/

    void main (void)

    /*用户代码开始(3)*/

       //设置 i2c 地址
       I2C_ADDR = 0x55;


    //   int i;

       NumOfBytes = 1;
       字符 StopBit = 1;
       volatile unsigned int wait_counter;



       I2C1_txptr = I2C1_TxData;
       I2C1_rxptr = I2C1_RxData;

       hetInit();
       hetREG1->INTENAS = 0xFFFFFFU;   // TODO JC 20141024检查是否需要
       hetREG1->GCR = 0x01010001;   // TODO JC 20141024检查是否需要

       _enable_IRQ ();   // TODO JC 20141024检查是否需要

       IntEna =1;
       RW = 0;//写入
       NumOfBytes = 1;
       I2C1_TxData[0]= 0x20;//剩余电量百分比


       HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);
       for (WAIT_COUNTER=0;WAIT_COUNTER<0x18;WAIT_COUNTER++);//等待一段时间。


       RW = 1;//读取
       IntEna = 0;//无发送中断
       HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);

       while (1);

       /*用户代码结束*/


    /*用户代码开始(4)*/
    /*用户代码结束*/

    您能帮我从 BQ34Z100EVM 读取 SOC%值的基本程序吗?

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

    您好!

    请使用 bq34z100-Q1.pdf 的第41页中定义的 I2C 通信协议。

      RW = 1;//读取

      IntEna = 0;//无发送中断

      HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);

    I2C_ADDR 应为数据的地址。 用于读取 SOC 的 I2C 传输序列为:

    START-0xAA-ACK-0x02-ACK-START-0xAB-ACK-(SOC 的 LSB)-ACK-(SOC 的 MSB)-ACK-STOP

    0xAA 和0xAB 是 BQ I2C 地址(7位地址)+读/写位。 0x02是 SOC 的寄存器地址。

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

    您好、QJ Wang、

    感谢您的回复。

    我尝试按照您的回答来编写代码。

    RW = 1;//读取

    IntEna = 0;//无发送中断

    HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);

    I2C 通信读取序列为: start-0xAA-      ACK      -0x02-    ACK       -start-0xAB-     ACK      -(SOC 的 LSB)-ACK -(SOC 的 MSB)-ACK -      STOP

    根据我了解的序列:器件地址= 0xAA (写入操作)、  

                                                                                 寄存器地址= 0x02 (SOC %寄存器命令代码地址)

                                                                                 器件地址= 0xAB (读取操作)

    现在、当、" HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、 StopBit);"命令被写入、

    问题:

    1. 如何知道何时使用"I2C2_ADDR"中的器件地址和寄存器地址?

    2. 我如何知道从属方是否已给出确认?

    3.我需要哪一个寄存器来查看我们是否收到了任何数据?

    4.我参考的是 N2HET 仿真 I2C 代码:

    请帮我处理该代码(我不熟悉 I2C 编程)。

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

    您好!

    在您的应用中、MCU 是主器件、BQ34是从器件。 主器件访问从器件的一般过程如下:

    主器件希望向从器件发送数据:

    • 主器件发送一个起始条件并寻址从器件
    • 主器件向从器件发送数据
    • 主机用一个停止条件终止传输

    2.如果一个主器件想要从一个从器件接收/读取数据(对于 BQ34):

    • 主器件发送一个起始条件并寻址从器件
    • 主器件将请求的寄存器发送到从器件进行读取
    • 主器件发送一个起始(重复起始)条件并寻址从器件
    • 主器件将请求的寄存器发送到从器件进行读取
    • 主器件从从器件接收数据
    • 主机用一个停止条件终止传输

    3. ACK:

    每个数据字节(包括地址字节)后跟一个来自接收器的 ACK 位。 ACK 位允许接收器与发送器通信、表明已成功接收到字节、并且可以发送另一个字节。 在接收器可以发送 ACK 之前、发送器必须释放 SDA 线。 为了发送一个 ACK 位、接收器应在时钟周期的低电平阶段下拉 SDA 线、以便在时钟周期的高电平阶段 SDA 线为稳定的低电平。

    4. 使用 HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit)向 BQ34发送命令(0x2)

    一旦 地址位移动到移位寄存器、就会产生一个发送中断。  在中断服务例程内,HetI2CPutData()将要发送的数据写入发送缓冲区。

    6.一旦 N2HET 仿真 I2C 接收到数据,就会产生一个接收中断。  在中断内部、接收到的数据将被复制到主存储器中。

    如果要手动读取数据(池模式):

     *I2C_rxptr++=(hetRAM1->Instruction [0x2C]。Data>8)& 0xFF

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

    您好 、QJ Wang、

    感谢您的回复。 根据读取过程、

    如果一个主器件想要从一个从器件接收/读取数据(对于 BQ34):

    • 主器件发送一个起始条件并寻址从器件
    • 主器件将请求的寄存器发送到从器件进行读取
    • 主器件发送一个起始(重复起始)条件并寻址从器件
    • 主器件将请求的寄存器发送到从器件进行读取
    • 主器件从从器件接收数据
    • 主机用一个停止条件终止传输

    问题:

    1.发送 START 条件的代码是什么?

    2.发送从机地址的代码是什么?

    3.发送请求的寄存器读取到从机的代码是什么?

    4.发送重复起始条件的代码是什么?

    您能给我一个完整的代码来读取(0x02)在 TMS570LS0432 Launchpad 上具有器件从器件地址(0x55)的 BQ34Z100EVM 的寄存器地址(SOC %)吗?

    请帮帮我。

    急切地等待您的回复。

    谢谢

    Ritul Shah

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

    您好 Ritul、

    对于写入数据:

    HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);-->发送启动、 发送 BQ34 I2C 地址(0x55)、RW=0进行写入操作、并发送数据(数据可以是寄存器的地址、例如0x02)、intEna=1、StopBit=0 (下 一个开始是重复起始)  

    对于读取数据:

    HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);-->发送重复起始值、发送 BQ34 I2C 地址(0x55)、RW=1进行读取操作、读取数据(地址0x2和0x03的数据)、intEna=1、StopBit=1

    请参阅示例代码。

    e2e.ti.com/.../0434.N2HET_5F00_EMU_5F00_I2C_5F00_AppNote.pdf

    e2e.ti.com/.../6237.sys_5F00_main.c

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

    您好、QJ Wang、

    我在以下代码中按照您使用 I2C 的方法处理数据:

      主器件发送一个起始条件并寻址从器件

      主器件将请求的寄存器发送到从器件进行读取

      主器件发送一个起始(重复起始)条件并寻址从器件

      主器件将请求的寄存器发送到从器件进行读取

      主器件从从器件接收数据

      主机用一个停止条件终止传输

    void main (void)

    /*用户代码开始(3)*/

      //设置 i2c 地址

      I2C_ADDR = 0x55;

      volatile unsigned int wait_counter;

      I2C1_txptr = I2C1_TxData;

      I2C1_rxptr = I2C1_RxData;

      hetInit();

      hetREG1->INTENAS = 0xFFFFFFU;// TODO JC 20141024检查是否需要

      hetREG1->GCR = 0x01010001; // TODO JC 20141024检查是否需要

      _enable_IRQ ();// TODO JC 20141024检查是否需要

      //I2C1_TxData[0]= 0x2;//

      //主机发送一个起始条件并寻址从机

      IntEna =1;

      RW = 0;//写入

      NumOfBytes = 0x0;

      StopBit = 0;

      HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);

      for (WAIT_COUNTER=0;WAIT_COUNTER<0x18;WAIT_COUNTER++);//等待一段时间。

      //主机将请求的寄存器发送到从机进行读取

      IntEna =1;

      RW = 0;//写入

      NumOfBytes = 0x0;

      StopBit = 0;

      HetI2CPutAddr (0x2、RW、NumOfBytes、IntEna、StopBit);

      for (WAIT_COUNTER=0;WAIT_COUNTER<0x18;WAIT_COUNTER++);//等待一段时间。

      //主器件发送一个重复起始条件并寻址从器件

        IntEna =1;

        RW = 0;//写入

        NumOfBytes = 0x0;

        StopBit = 0;

        START_REPEAT = 1;

        HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);

        for (WAIT_COUNTER=0;WAIT_COUNTER<0x18;WAIT_COUNTER++);//等待一段时间。

        //主机将请求的寄存器发送到从机进行读取

        START_REPEAT = 0;

        IntEna =1;

        RW = 0;//写入

        NumOfBytes = 0x0;

        StopBit = 0;

        HetI2CPutAddr (0x1、RW、NumOfBytes、IntEna、StopBit);

        for (WAIT_COUNTER=0;WAIT_COUNTER<0x18;WAIT_COUNTER++);//等待一段时间。

        //主设备接收来自从设备的数据

            IntEna =1;

            RW = 1;//读取

            NumOfBytes = 0x1;

            StopBit = 0;

            HetI2CPutAddr (0x1、RW、NumOfBytes、IntEna、StopBit);

            for (WAIT_COUNTER=0;WAIT_COUNTER<0x18;WAIT_COUNTER++);//等待一段时间。

            //主设备接收来自从设备的数据

                    IntEna =1;

                    RW = 0;//读取

                    NumOfBytes = 0x0;

                    StopBit = 1;

                    HetI2CPutAddr (0x1、RW、NumOfBytes、IntEna、StopBit);

                    for (WAIT_COUNTER=0;WAIT_COUNTER<0x18;WAIT_COUNTER++);//等待一段时间。

      while (1);

    问题:

    我们已经为您提到的每个步骤使用了5次 HetI2CPutAddr 函数。 此方法是否正确?

    如何检查从器件的确认?

    使用上述代码 HetI2CPutAddr (0x1、RW、NumOfBytes、IntEna、 StopBit);

        程序进入 HETNOTIFICATION、它始终进入发送中断、但从不进入接收中断。

    它的解决方案是什么?

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

    您好、QJ Wang、

    我以前使用过、

    HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);  // 主机发送一个起始条件并寻址从机

    HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);  // 主机将请求的寄存器发送到从机进行读取

    HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);  // 主机发送一个起始(重复起始)条件并寻址从机

    HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);  //  主机将请求的寄存器发送到从机进行读取

    HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);  // 主机将请求的寄存器发送到从机进行读取

    HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);  // 主设备接收来自从设备的数据

    HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);  // 主机用停止条件终止传输

    用于读取(BQ34)的 SOC。 此代码是否正确写入?

    另外, 如何使用 HetI2CPutData()? 该函数中应放置哪些数据?

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

    您好!

    1. HetI2CPutAddr (0x55、0、1、1、0);

    这个函数发送一个起始条件和从器件地址、并发送请求的寄存器0x02。 数据是 I2C_TxData[0]。

    2. HetI2CPutAddr (0x55、1、2、1、1);

    此 函数发送一个起始条件和从器件地址、并从 请求的寄存器0x02中读取2个字节的数据。 数据是 I2C_RxData[1:0]。

    3. HetI2CPutData()

    在中断例程中调用此函数:

    /**@fn void het1高 LEVELInterrupt (void)

    *@HET1的简单0级中断

    *

    #pragma CODE_STATE (het1HighLevelInterrupt、32)

    #pragma INTERRUPT (het1HighLevelInterrupt、IRQ)

    het1高 LEVELInterrupt ()

    uint32_t vect = hetREG1->OFF1

    开关(Vect)

    判例11:/*-->-------------- >发送中断*/

    if (Data_Send_HET<3)

    HetI2CPutData (* I2C1_txptra++、IntEna);

    Data_Send_HET++;

    if (Start_Repee=1)

    if (Data_Send_HET<5)

    HetI2CPutData (* I2C1_txptra++、IntEna);

    Data_Send_HET++;

    否则、如果(Data_Send_HET==5)

    RW = 1;//读取

    IntEna = 0;//无发送中断

    HetI2CPutAddr (I2C2_ADDR、RW、2、IntEna、1);//现在、 开始接收两个数据字节并生成停止位

    中断;

    判例15:/*---------------------- >接收中断*/

    *I2C1_rxptr++=(hetRAM1->Instruction [0x2C]。Data>8)和0xFF;//读取数据

    DATA_RECE_HET++;

    中断;

    判例18:/*-------------------- >无 ACK 中断*/

        案例29:/* timeout2*/

    案例8:/* timeout6*/

    案例2:/* timeout9*/

       默认值:

    /*超时+幻象中断、清除标志并返回*/

    while (1);

    中断;

     

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

    QJ Wang、您好!

    我已根据您的上述帖子测试了代码。 这样它就不起作用了。 我已将整个项目附加到您的后面。 请仔细研究这个问题、并帮助我找到一个适用于 TMS570LS0432上 SOC 读取的有效解决方案。 正在等待您的回复。

    我还将粘贴 sys_main.c 文件。


    /*包含文件*/

    #include "sys_common.h"

    /*用户代码开始(1)*/
    #include "het.h"
    #include "HET_IO_TEST.h"
    #include "HET_EMU.h"

    unsigned char *I2C1_txptr = NULL,*I2C1_rxptr = NULL;
    unsigned char I2C1_TxData[5]={0、0、0、0};
    unsigned char I2C1_RxData[5];
    unsigned int Data_Send_HET = 0、Data_rece_HET = 0;
    unsigned int Data_Send_I2C = 0、Data_rece_I2C = 0;
    // unsigned int Stop_rece_I2C = 0;
    unsigned int Start_Repeation=0;
    char IntEna =1;
    char rw = 0;//写入
    char I2C_ADDR;// TODO:JC 20141024这是使 TI 仿真器代码正常工作的一种方法、是重构的候选方法
    char NumOfBytes = 1;
    字符 StopBit = 1;


    /*用户代码结束*/

    /**@fn void main (void)
    *  @应用程序主函数简介
    *  @请注意、默认情况下、此函数为空。
    *
    *  此函数在启动后调用。
    *  用户可以使用此函数来实现应用程序。
    *

    /*用户代码开始(2)*/
    /*用户代码结束*/

    void main (void)

    /*用户代码开始(3)*/

       //设置 i2c 地址
       I2C_ADDR = 0x55;
       
       volatile unsigned int wait_counter;

       I2C1_txptr = I2C1_TxData;
       I2C1_rxptr = I2C1_RxData;

       hetInit();
       hetREG1->INTENAS = 0xFFFFFFU;// TODO JC 20141024检查是否需要
       hetREG1->GCR = 0x01010001; // TODO JC 20141024检查是否需要

        _enable_IRQ ();// TODO JC 20141024检查是否需要

        //开始、从器件地址、寄存器地址
        //主机发送一个起始条件并寻址从机
        //主机将请求的寄存器发送到从机进行读取
        IntEna = 1;
        RW = 0;//写入
        NumOfBytes = 1;
        StopBit = 0;
        I2C1_TxData[0]= 0x02;//剩余电量百分比

        HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);
        for (WAIT_COUNTER=0;WAIT_COUNTER<0x18;WAIT_COUNTER++);//等待一段时间。

        //重新启动、从器件地址、寄存器地址、读取、停止
        //主机发送一个起始(重复起始)条件并寻址从机
        //主机将请求的寄存器发送到从机进行读取
        //主设备接收来自从设备的数据
        //主机用停止条件终止传输
       START_REPEAT = 1;
        RW = 1;//读取
        IntEna = 1;//无发送中断
        NumOfBytes = 2;
        StopBit = 1;
        
        HetI2CPutAddr (I2C_ADDR、RW、NumOfBytes、IntEna、StopBit);
        for (WAIT_COUNTER=0;WAIT_COUNTER<0x18;WAIT_COUNTER++);//等待一段时间。
        

        while (1);

       /*用户代码结束*/


    /*用户代码开始(4)*/
    /*用户代码结束*/

    e2e.ti.com/.../8424.I2C-using-N2HET-on-TMS570LS0432-with-BQ34Z100.zip

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

    您好、QJ Wang、

    我们已使用逻辑分析仪获取了 I2C 通信读数。 我们能够按预期获得读取值。 (请参阅随附的图片)

    但我们无法在 RX_Data 寄存器中查看相同的读数。 我要附加完整的项目。

    我们无法跟踪此中断函数中发生的情况。

    判例15:/*---------------------- >     接收中断*/
          *I2C1_rxptr++=(hetRAM1->Instruction [0x2C]。Data>8)和0xFF; //读取数据
          DATA_RECE_HET++;

    请帮我解决问题。

    e2e.ti.com/.../1524.I2C-using-N2HET-on-TMS570LS0432-with-BQ34Z100_5F00_28_2D00_07_2D00_2017.zip

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

    干得不错。 这意味着 BG34从 MCU 获取命令、并使用寄存器的数据回复 MCU。

    我将查看您的项目、并很快返回给您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Rital、

    您能否发布显示 TX 和 RX SDA 和 SCL 的整个波形(在一张图片中)? BTW、要读取的字节数为2字节而不是10字节。 如果您的第三个波形上的数据为0x02、则 BQ34不会 ACK 您的 TX (它是 NACK、高电平)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    QJ Wang、您好!

    感谢您的回复。

    请找到所附的显示 TX 和 RX SDA 和 SCL 的波形图像(在一张图片中)。

    我同意 BQ34在数据传输0x02时不 ACK TX (它是 NACK、高电平)。 但可以看到、所有其他确认都在写入和读取时进行。

    请帮帮我。

    谢谢

    Ritul Shah

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

    急切地等待您的回复。

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

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

    您好 、QJ Wang、

    我已使 I2C 代码工作、但经过长时间延迟后、我将在寄存器上获得 SOC 值。  

     可能的原因是什么?

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

    "长延迟"是什么意思? 当您向 BQ34发送命令时、SCO 数据可能未就绪。