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.

[参考译文] RTOS/CC2640:I2C在CC2640上不工作

Guru**** 2563960 points
Other Parts Discussed in Thread: CC2640, SYSBIOS, CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/585170/rtos-cc2640-i2c-not-working-on-cc2640

部件号:CC2640
“Thread: SysBIOSCC2650”中讨论的其它部件

工具/软件:TI-RTOS

您好,

正如本论坛上的服务帖子中所描述的那样,I2C需要一些努力才能在CC2640平台上工作。

因此,正如我在几篇文章中所述,我已将其添加到board.h (这些是我正在使用的PIN):

#define Board_I2C0_SDA0 IOID_8
#define Board_I2C0_SCL0 IOID_9

引脚IOID_8和IOID_9未被包含的主板中的任何其他(如SPI)使用

我已将此代码添加到board.c:

//添加缺少的12C结构

#include <ti/drivers/i2c/I2CCC26XX.h>
#include <ti/SysBIOS/family/arm/cc26xx/PowerCC2650/h>

#define CC2650_I2CCOUNT 1.
#define Board_I2C0_SDA0 IOID_8
#define Board_I2C0_SCL0 IOID_9

/* I2C对象*/
I2CCC26XX_Object i2cCC26xx对象[CC2650_I2CCOUNT];

/* I2C配置结构,描述要使用哪些引脚*/
const I2CCC26XX_HWAttrs i2cCC26xxHWAttrs[CC2650_I2CCOUNT]={

baseAddr = I2C0_BASE,
.powerMngrId = Periph_I2C0,
.sdaPin = Board_I2C0_SDA0,
.sclPin = Board_I2C0_SCL0,
intNum = INT_I2C_IRQ,
.intPriority =(~0)
}
};

CONST I2C_Config I2C_CONFIG[]={
{&I2CCC26XX_fxnTable,&i2cCC26xxObjects[0],&i2cCC26xxHWAttrs[0]},
{NULL,NULL,NULL}
};

启动程序时,我在BIOS_START()之前调用I2C_INIT()。

从以下代码调用I2C_OPEN时,代码在TI_TROS内消失:

I2C_PARAM_INIT (&PARAMS);
Params.bitrate = I2C_400kHz;
Params.transferMode = I2C_MODE_blocking;
i2cHandle = I2C_OPEN (CC2650_I2C0,&params);

当I2CCC26XX_initHw尝试调用I2CMasterInitExpClk时,错误发生在I2CCC26XX_initHw内部。

静态空I2CCC26XX_initHw (I2C_HANDLE句柄){
I2CCC26XX_Object *对象;
I2CCC26XX_HWAttrs const *hwAttrs;
Types_FreqHz频率;

/*获取指向对象和hwAttrs */的指针
对象=句柄->对象;
hwAttrs = handl->hwAttrs;

/*设置I2C配置*/
BIOS_getCpuFreq (&freq);
I2CMasterInitExpClk (hwAttrs->baseAddr,freq.lo,bitrase[对象->比特率]);

object-> bitrate包含调用BIOS_getCpuFreq之前的正确值,但调用之后,其值为8.056万,显然超出范围。

有人对可能发生的情况/如何解决此问题有任何想法?

谢谢!
Justin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Justin,您好!
    您是否看过使用I2C模块的SensorTag代码?
    您是否有定制板或使用启动板? 对于启动板,I2C配置在主板文件CC2650_LAUNCHXL.c中给出
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    是的,我查看了SensorTag代码,是的,这是一个定制板。

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

    只是为了确认-我想这是您所参考的文件吗?

    github.com/.../CC2650_LAUNCHXL.c

    谢谢!
    Justin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是,
    另请阅读BLE软件开发人员指南中的" 10.1 Adding a Board File"一节。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    我已经查看了"添加主板文件",但无法看到它与上述问题的关系。 我们已经有了一个主板文件,我已经设置了正确的PIN并进行了修改,上述内容已由本论坛中的其他人提供。

    谢谢!
    Justin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否在使用自定义板文件? 我们的开箱示例是否在不使用I2C的情况下运行?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    是的,如上所述,我们有一个定制板。

    您指的是哪一个"开箱即用"示例? 我们可以在通过UART通过SPI通信的设备上运行工作代码(如果这有帮助)。

    谢谢!
    Justin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我建议您尝试 一下I2C TMP007示例(在dev.ti.com/.../上) ,看看它是否能先起作用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Justin,您好!

    我最近在I2C上遇到了问题。 请参阅,您可以从以下帖子的详细信息中学到什么。 我导入了一个空的TI-RTOS CCS项目,然后添加了I2C代码。

    e2e.ti.com/.../215.7875万

    - kel