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.

[参考译文] CCS/CC2640:采用 CC2640的 I2C 上的 MCP7940N RTC

Guru**** 2470720 points
Other Parts Discussed in Thread: CC2640, CC2650STK

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/636679/ccs-cc2640-mcp7940n-rtc-on-i2c-with-cc2640

器件型号:CC2640
主题中讨论的其他器件: CC2650STK

工具/软件:Code Composer Studio

您好!

我正在尝试通过 I2C 将 MCP7940N RTC 芯片与 CC2640连接。

我使用的是最新的 BLE 堆栈和 CCS v7。

我已修改了 BLE 堆栈中的 sensortag I2C 示例并更改了 CC2650STK.h 中的 I2C 引脚。

我可以从 I2C_open (Board_I2C、&i2cParams)获得真正的响应;

但 I2C_transfer (i2c、&i2cTransaction)始终失败。

我缺少什么吗?

我粘贴了以下代码。

/********* /
 /*创建 I2C 以供使用*/
 I2C_Params_init (&i2cParams);
 i2cParams.bitrate = I2C_400kHz;
 I2C = I2C_open (Board_I2C、&i2cParams);
 if (i2c == NULL){
     UART_WRITE (UART、"\n\n\r 初始化 I2C"时出错、sizeof ("\n\n\r 初始化 I2C"时出错);
 }
 否则{
     UART_WRITE (UART、"\n\n\r 初始化 I2C 成功"、sizeof ("\n\n\r 初始化 I2C 成功"));
 }

  uint8_t        txBuffer[1];
  uint8_t        rxBuffer[2];

  TxBuffer[0]= 0x80;
  i2cTransaction.slaveAddress = 0x6f;
  i2cTransaction.writeBuf = txBuffer;
  i2cTransaction.writeCount = 1;
  i2cTransaction.readBuf = rxBuffer;
  i2cTransaction.ReadCount = 1;

  if (I2C_transfer (i2c、&i2cTransaction)){
      UART_WRITE (UART、"接收数据为"、sizeof ("接收数据为"));
      UART_WRITE (UART、rxBuffer、sizeof (rxBuffer));
     }
     否则{
         UART_WRITE (UART、"\n\rI2C 读取失败"、sizeof ("\n\rI2C 读取失败"));
     }
  /********* /

有人能指导我吗?

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

    从论坛中搜索其他相关文章可以看出、解决这些问题的最佳方法是使用调试器和 I2C 总线分析仪或逻辑分析仪。 单步执行 I2C_transfer 函数可能会让您更深入地了解。

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

    您好、Jan、

    您是否正确地对 MCP7940N 芯片进行了寻址?

    您可能需要按照 第10页上器件数据表中的此部分进行操作

    有关我们的 I2C 驱动器的详细信息、请参阅 SDK、网址为: http://dev.ti.com/tirex/content/simplelink_cc2640r2_sdk_1_40_00_45/docs/tidrivers/doxygen/html/_i2_c_c_c26_x_x_8h.html

    在这里、您可以看到一些示例用例。 从文档中可以看到、通过 I2C 接收10个字节的基本数据如下所示:

    //局部
    I2C_Handle handle;
    I2C_Params 参数;
    I2C_Transaction i2cTrans;
    uint8_t rxBuf[32]; //接收缓冲
    区 uint8_t txBuf[32]; //发送缓冲
    
    区//配置 I2C 参数。
    I2C_Params_init (&params);
    
    //初始化主 I2C 事务结构
    i2cTrans.writeCount = 0;
    i2cTrans.writeBuf = txBuf;
    i2cTran.ReadCount = 10;
    i2cTran.readBuf = rxBuf;
    i2cTran.slaveAddress = 0x3C;
    
    //打开 I2C
    句柄= I2C_open (Board_I2C、&params);
    
    //执行 I2C 传输接收
    I2C_transfer (handle、&i2cTrans); 

    -苏锡

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

    尊敬的 Sy Su:

    我将通过以下链接更新结果。

    谢谢

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

    我没有 I2C 总线分析器、我将尝试下面 Sy Su 所述的方法。
    如果您有其他解决方案、请告诉我。

    谢谢