cc2640r2f i2c接口_CC2640R2F 硬件I2C问题

在使用TI CC2640R2F开发板通过I2C与从设备通信时遇到问题,虽然在STM32上能正常通信,但在将i2ctmp007例程移植到SDK的simple_peripheral例程后,无法看到I2C信号输出。已检查过硬件和从设备,问题可能出在软件配置上,涉及I2C初始化、管脚定义及代码移植等环节。
摘要由CSDN通过智能技术生成

Hi,目前使用TI开发板的蓝牙芯片调试硬件I2C没有信号输出,一直没找到原因。

- 使用LAUNCHXL-CC2640R2开发板通过I2C和一个从设备通信;

- 使用STM32通过I2C和从设备读写正常,说明从设备本身没有问题;

- 使用i2ctmp007中的例程和从设备进行I2C通信正常;

问题出在将i2ctmp007中的代码迁移至SDK中的simple_peripheral例程后,始终看不到

I2C信号输出,可能是simple_peripheral例程中少添加或修改了部分代码,但我不知道少了什么。

我的步骤如下:

1. 向SDK中simple_peripheral例程drivers目录下添加i2c.c和i2c.h文件,并在main.c中添加

#include

#include "Board.h"

2. Board.h中定义

#define Board_I2C0              CC2640R2_LAUNCHXL_I2C0

#define Board_I2C_TMP           Board_I2C0

3. CC2640R2_LAUNCHXL.h中定义管脚

#define CC2640R2_LAUNCHXL_I2C0_SCL0 IOID_5

#define CC2640R2_LAUNCHXL_I2C0_SDA0 IOID_15

typedef enum CC2640R2_LAUNCHXL_I2CName {

CC2640R2_LAUNCHXL_I2C0 = 0,

CC2640R2_LAUNCHXL_I2CCOUNT

} CC2640R2_LAUNCHXL_I2CName;

4. CC2640R2_LAUNCHXL.C中添加有关I2C的部分

/*

* =============================== I2C ===============================

*/

#include

#include

I2CCC26XX_Object i2cCC26xxObjects[CC2640R2_LAUNCHXL_I2CCOUNT];

const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2640R2_LAUNCHXL_I2CCOUNT] = {

{

.baseAddr = I2C0_BASE,

.powerMngrId = PowerCC26XX_PERIPH_I2C0,

.intNum = INT_I2C_IRQ,

.intPriority = ~0,

.swiPriority = 0,

.sdaPin = CC2640R2_LAUNCHXL_I2C0_SDA0,

.sclPin = CC2640R2_LAUNCHXL_I2C0_SCL0,

}

};

const I2C_Config I2C_config[CC2640R2_LAUNCHXL_I2CCOUNT] = {

{

.fxnTablePtr = &I2CCC26XX_fxnTable,

.object = &i2cCC26xxObjects[CC2640R2_LAUNCHXL_I2C0],

.hwAttrs = &i2cCC26xxHWAttrs[CC2640R2_LAUNCHXL_I2C0]

},

};

const uint_least8_t I2C_count = CC2640R2_LAUNCHXL_I2CCOUNT;

5. main.c中添加定义

#define TASKSTACKSIZE 640

#define TEST_ADDR 0x1A

#define MODULE_TEST_TEMP1 0x0001 /* Die Temp Result Register */

#define MODULE_TEST_TEMP2 0x0003 /* Object Temp Result Register */

#ifndef Board_TEST_ADDR

#define Board_TEST_ADDR TEST_ADDR

#endif

main.c中主函数中

/* Register Application callback to trap asserts raised in the Stack */

RegisterAssertCback(AssertHandler);

PIN_init(BoardGpioInitTable);

uint8_t txBuffer[1]={0x66};

uint8_t rxBuffer[10];

I2C_Handle i2c;

I2C_Params i2cParams;

I2C_Transaction i2cTransaction;

I2C_init();

/* Create I2C for usage */

I2C_Params_init(&i2cParams);

i2cParams.bitRate = I2C_400kHz;

i2c = I2C_open(Board_I2C_TMP, &i2cParams);

/* Point to the T ambient register and read its 2 bytes */

//txBuffer[0] = TMP007_OBJ_TEMP;

i2cTransaction.slaveAddress = (Board_TEST_ADDR>>1);

i2cTransaction.writeBuf = txBuffer;

i2cTransaction.writeCount = 1;

i2cTransaction.readBuf = NULL;

i2cTransaction.readCount = 0;

while(1)

{

I2C_transfer(i2c, &i2cTransaction);

}

请问哪里有不对的地方吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值