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.

[参考译文] CC2650传感器控制- I2C

Guru**** 2468610 points
Other Parts Discussed in Thread: CC2650, CC2650STK, CC2650RC

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/568842/cc2650-sensor-control---i2c

主题中讨论的其他器件:CC2650CC2650STKCC2650RC

工具/软件:TI-RTOS

尊敬的所有人:

我正在使用 SmartRF06评估板、并使用它上传测试代码来从温度和湿度传感器(SI7006-A20)读取数据。  

问题是、当我运行代码时、要初始化 i2c 传输、会出现无法传输的消息。 消息是 System_printf()发出的“总线故障”;

#define SI7006_A20_ADDR 0x40 //湿度和温度传感器地址

//本地
I2C_Handle i2cHandle;
I2C_Params 参数;
I2C_Transaction i2cTrans;
uint8_t i = 0;
uint8_t rxBuf[2];//接收缓冲区
uint8_t txBuf = 0xF3;//发送缓冲器

//配置 I2C 参数。
I2C_PARAMS_INIT (params);
params.bitrate = I2C_400kHz;
params.transferMode = I2C_MODE_BLOCKING;


//初始化主 I2C 事务结构
i2cTrans.writeCount = 2;
i2cTrans.writeBuf =&txBuf;
i2cTrans.ReadCount = 2;
i2cTrans.readBuf =&rxBuf;
i2cTrans.slaveAddress = SI7006_A20_ADDR;

//打开 I2C
i2cHandle = I2C_open (Board_I2C、params);

if (i2cHandle ==空)

System_abort ("在任务1上初始化 I2C 时出错\n");

其他

system_printf ("I2C 已初始化! 在任务1上\n");

system_flush();

if (I2C_transfer (i2cHandle、&i2cTrans)){
System_printf ("SUCCES\n");
system_flush();

否则{
System_printf ("bus fault\n");
system_flush();}

您知道什么是错误吗? 为什么 I2C_transfer 返回"0"-错误?

谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否将 I2C 从设备连接到 CC2650?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、并且仍然获得"总线故障"、因为 I2C_TRANSFRAT()返回"0"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    如果您可以附加逻辑分析仪跟踪、我们可以更轻松地提供信息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Christin:

    我该怎么做? :)我可以只使用计算机还是需要设备来执行此操作吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要使用逻辑分析仪来跟踪从器件和主器件的 I2C 活动。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尝试将以下代码修改为您的代码:

    uint8_t txBuf[2];
    uint8_t rxBuf[2];
    TxBuf[0]= 0xF3;//发送缓冲区

    //初始化主 I2C 事务结构
    i2cTrans.writeCount = 1;
    i2cTrans.writeBuf = txBuf;
    i2cTrans.ReadCount = 2;
    i2cTrans.readBuf = rxBuf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Yikai、

    我尝试过您的解决方案、但仍然无法正常工作。 谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您没有逻辑分析仪、则可以使用示波器来检查 SCL 和 SDA 引脚上是否有信号。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢您、我将尝试这样做。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、

    我使用示波器来"查看" i2c 中的 SCL 和 SDA 会发生什么情况。 最初、SDA 和 SCL 为1.5V、当我执行 I2C_init ()时、它们会变为3V (SCL)和3.2V (SDA)、并始终保持该电压。

    如果需要、我可以向您发送一些照片。 是否可能是硬件问题? 您是否有要测试的样片?

    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当应用程序调用 I2C_transfer 时、您是否在 SCL 引脚上看到时钟信号?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否、信号保持恒定。 您能告诉我在哪里可以检查 cc2650的 I2C IOID 吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否指定您的应用所基于的 BLE 示例?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是否应该在 PIN_Config BoardGpioInitTable[]上初始化 SDA 和 SCL?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您使用 SmartRF06-CC2650EM 和 BLE Stack v2.2.1、则应在 C:\ti\simplelink\ble_sdk_2_02_01_18\src\boards\CC2650DK_7ID 下向 CC2650DK_7ID.h 添加 I2C 引脚。 您可以在 CC2650STK.h 中的 C:\ti\simplelink\ble_sdk_2_02_01_18\src\boards\CC2650STK 下引用 I2C 引脚。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我使用 SmartRF06评估板、但我使用它上传到其他板中的 CC2650DK_5XD。 我在 CC2650DK_5XD.h 上搜索、他们没有任何 I2C 参考。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以在 CC2650STK.h 中的 C:\ti\simplelink\ble_sdk_2_02_01_18\src\boards\CC2650STK 下引用 I2C 引脚、并将 I2C 相关引脚添加到 CC2650DK_5XD
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的建议。 我将引脚更改为正确的引脚、但仍然有相同的问题。 即使我在 cc2650em_7ID 上使用传感器标签样本(i2ctmp007_CC2650STK_TI_CC2650F128)、也是同样的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您在 dev.ti.com/.../中尝试使用 I2C TMP007示例 ,它是否起作用?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不幸的是、不是

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您将哪些引脚用作 I2C SCL 和 SDA?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    取决于具有 i2c tmp007的 cc2650em_7ID 我将 SDA - IOID_5和 SCL0 - IOID_6与另一个电路板一起使用、我将其 IO 引脚(SCL 的引脚1和 SDA 的引脚2)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您使用 SDA - IOID_5和 SCL0 - IOID_6使用 i2c tmp007示例运行 cc2650em_7ID、您是否无法在 SCL0引脚上看到时钟信号?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不幸的是、不是
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    想法不好。 请尝试参阅 sunmaysky.blogspot、tw/.../basic-example-to-use-hdc1080-on-cc2650.html 、了解这是否有帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你,陈怡凯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能在硬件上拍照吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    定制板上的 I2C 传感器也是吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、它位于电路板上
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看到您有 CC2650EM。 如果您使用 SmartRF06和 CC2650EM 运行 tmp007 I2C 示例、您能在 I2C SCL 引脚上看到时钟信号吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    即使没有传感器、也应该看到时钟信号 SCL?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我对 BoardGpioInitTable 中的 I2C 引脚设置有相同的问题。 我在 SDK 版本"C:\ti\simplelink\ble_sdk_2_02_01_18\src\boards\CC2650STK"中搜索并找到 CC2650STK.c

    PIN_Config BoardGpioInitTable[]={}没有"Board_I2C0_SDA0"和"Board_I2C0_SCL0"初始化。

    但是、我确实找到了
    CONST I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2650STK_I2CCOUNT ={

    baseAddr = I2C0_BASE、
    powerMngrId = PowerCC26XX_Periph_I2C0、
    .intNum = INT_I2C_IRQ、
    .intPriority =~0、
    .wiPriority = 0、
    sdaPin = Board_I2C0_SDA0、
    .sclPin = Board_I2C0_SCL0、

    };

    但这仍然没有定义 GPIO (PIN_PushPull、PIN_PULLUP)要求,它是吗??

    我搜索 How project,只有"board\cc2650rc.c"在 BoardGpioInitTable 中定义它,但看不到 SCK1???

    Board_I2C0_sda1 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、

    其他项目如何用于具有 configure 的 I2C 引脚??
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dilbert、

    我建议您使用 Sensor Controller Studio 的 Sensor Controller 处理器、它可以解决我的问题。 我仍然认为这些库有一些问题、在某些情况下、这种方法不起作用。

    此致、

    Miguel
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Miguel、
    但我指的是 main()中的"PIN_init (BoardGpioInitTable);"、这不是应该首先根据电路板布局配置 GPIO 的事情吗? 但是、我无法在代码中找到用于 I2C 访问的设置引脚。


    Dilbert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以在 I2C.h 中找到有关如何初始化 I2C 驱动程序的示例代码
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我上周开始了这个课程、所以仍然处于学习模式。 在板启动期间浏览代码。 PIN_Config 用于所有 GPIO 配置。 但我没有看到任何示例代码用于 I2C……
    这是因为 I2C 拥有自己的硬件和驱动程序,它将配置必要的硬件引脚配置吗?
    基本上,I2C 不被视为 GPIO? 我的理解是否正确?


    const PIN_Config BoardGpioInitTable[]={
    Board_I2C0_SCL0 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、// I2C 时钟
    Board_I2C0_SDA0 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、// I2C 数据
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我查看了 CC2650stk SensorTag 代码,现在我更加困惑了,因为我没有原理图,在哪里可以找到它?
    此传感器标签板上是否有2个不同的 I2C??

    CC2650STK.h:
    #define Board_I2C0_SDA0 ioID_5
    #define Board_I2C0_SCL0 ioID_6.
    #define Board_I2C0_sda1 ioID_8.
    #define Board_I2C0_SCL1 ioID_9.

    CC2650STK.c
    CONST I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2650STK_I2CCOUNT ={

    baseAddr = I2C0_BASE、
    powerMngrId = PowerCC26XX_Periph_I2C0、
    .intNum = INT_I2C_IRQ、
    .intPriority =~0、
    .wiPriority = 0、
    sdaPin = Board_I2C0_SDA0、
    .sclPin = Board_I2C0_SCL0、

    };

    SensorI2C.c
    静态常量 I2CCC26XX_I2CPinCfg pinCfg1 =

    I2C 接口1的//引脚配置
    .pinSDA = Board_I2C0_sda1、
    .pinSCL = Board_I2C0_SCL1
    };

    因此,应用程序和中间件使用2种不同的 I2C??
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以  在中找到 CC2650STK 原理图、是的。 CC2650STK 使用两个不同的 I2C 用于不同的传感器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、原理图现在清晰明了... 一个 I2C、用于使用400k 总线器件的100k 和 MW。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不用客气。