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/LAUNCHXL-CC2650:I2C 配置

Guru**** 2811905 points

Other Parts Discussed in Thread: TMP102, CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/666318/rtos-launchxl-cc2650-i2c-configuration

器件型号:LAUNCHXL-CC2650
Thread 中讨论的其他器件: SYSBIOSTMP102CC2650

工具/软件:TI-RTOS

大家好、

我使用的是 LAUNCHXL-CC2650、并且希望使用 I2C 与加速计通信、

我将 DIO4用作 SCL、将 DIO5用作 SDA、

但 我无法与加速计通信、我尝试读取"我是谁"寄存器、但没有获得任何值、

而当我使用 CC2640R2-Launch Pad 进行相同的尝试时、通信完成、我能够读取加速计的"谁是我"寄存器的值

此外、我在 LAUNCHXL-CC2650 SDK 以及 TI 的 Resource Explorer 中搜索了 i2c 的示例代码、但我无法找到 LAUNCHXL-CC2650的任何示例代码、

但同样、当我使用 CC2640R2-Launch Pad 时、我会得到相应的值。

我已附上  使用 SDK 中的空项目示例创建的 I2C 通信代码、请检查并告知我是否有任何改进  

我还附上了板级配置文件以及 CC2650LaunchXL.c 和.h,如果需要对这些文件进行任何更改,请提供帮助

/*
*==== i2ctmp006_cc26xx.c ===
*

/* XDCtools 头文件*/
#include
#include
#include

/* BIOS 头文件*/
#include
#include

/* TI-RTOS 头文件*/
#include
#include

/*示例/板头文件*/
#include "Board.h"

#define TASKSTACKSIZE 512

Task_Structsk0Struct;
uint8 tsk0Stack[TASKSTACKSIZE];
Task_Handle 任务;

/*
*==== 回声 Fxn =====
*此函数的任务是静态创建的。 请参阅工程的.cfg 文件。
*
空 taskFxn (UARg arg0、UARg arg1)

// unsigned int i;
uint16_t 温度= 0;
uint8_t txBuffer[1];
uint8_t rxBuffer[2];
I2C_Handle i2c;
I2C_Params i2cParams;
I2C_Transaction i2cTransaction;

/*创建 I2C 以供使用*/
I2C_Params_init (&i2cParams);
i2cParams.bitrate = I2C_400kHz;
I2C = I2C_open (Board_I2C、&i2cParams);
if (i2c == NULL){
System_abort ("初始化 I2C\n 时出错");

否则{
system_printf ("I2C 已初始化!\n"\});

/*指向 T 环境寄存器并读取其2个字节*/
TxBuffer[0]= 0x000F;
i2cTransaction.slaveAddress = 0x1D;
i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = 1;
i2cTransaction.readBuf = rxBuffer;
i2cTransaction.ReadCount = 2;


if (I2C_transfer (i2c、&i2cTransaction)){
/*从接收到的数据中提取°C;请参阅 TMP102数据表*/
温度= rxBuffer[0];



/*已取消初始化 I2C */
I2C_Close (i2c);
System_printf ("I2C 已关闭!\n"\});

system_flush();

/*
*==== main ====
*
int main (空)


Task_Params tskParams;
/*呼叫板初始化函数*/
Board_initGeneral();

I2C_init();


/*构造 LED 任务线程*/
Task_Params_init (&tskParams);
tskParams.STACKSIZE = TASKSTACKSIZE;
tskParams.stack =&tsk0Stack;
tskParams.arg0 = 50;
Task_construct(&tsk0Struct,(Task_FuncPtr) taskFxn、&tskParams、NULL);

/*获取实例句柄*/
任务= Task_handle (&tsk0Struct);

system_printf ("启动 I2C 示例\n 系统提供程序设置为 SysMin。"
"停止目标以查看 ROV 中的任何 SysMin 内容。\n");
/* SysMin 仅在您调用 flush 或 exit 时才会打印到控制台*/
system_flush();

/*启动 BIOS */
BIOS_start();

返回(0);

//========================================

此外、我想告诉大家、当我将 break 放在"if (I2C_transfer (i2c、&i2cTransaction)"上时、代码会直接跳转到"I2C_CLOSE (i2c)";

请尽早检查 CC2650-Launchpad 上的 i2c 通信并为我提供帮助。

谢谢、此致

Utkarsh

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

    e2e.ti.com/.../4237.CC2650_5F00_LAUNCHXL.h

    很抱歉 、此处附上上述查询的电路板文件不方便

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

    当您单击 I2C_Close 时、此时驱动程序的模式是什么? 您可以通过观察 I2C 对象来检查此情况(在观察列表中添加"i2cCC26xxObjects[0])。 在该对象内部、查找"模式"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的回复、

    根据您的建议、我已经检查了模式、我将获得"I2C_MODE_BLOCK"模式。

    此外、为了按照我尝试将模式更改为 "回调模式"的 RTOS 驱动程序 PDF 进行尝试、但代码将变为"temperature = rxBuffer[0];"行、但不会读取任何值、

    我无法读取任何值、

    请帮助我进一步做些什么、

    还可以帮助我获取驱动程序示例、

    因为我有用于 CC2650 LP 的 Project Zero 代码、并且当我在 Project Zero 代码中包含 PWM 或 I2C 示例(从 Resource Explorer 导入)时、文件不会链接  

    谢谢、此致

    Utkarsh