CC2640R2F I2C问题
使用I2C Callback模式,连续写两包数据,第二包发不出去。
下面是读,写,初始化函数。
static uint8_t I2C_read(void)
{
static I2C_Transaction transactionR;
memset(i2cSet.readBuf, 0, sizeof(i2cSet.readBuf));
transactionR.writeCount = 0;
transactionR.writeBuf = NULL;
transactionR.readCount = sizeof(i2cSet.readBuf);
transactionR.readBuf = i2cSet.readBuf;
transactionR.slaveAddress = HAL_I2C_SLAVE_ADDR_DEF;
I2C_transfer(i2cHandle, &transactionR);
return SUCCESS;
}
static uint8_t I2C_write(uint8_t *pData, uint8_t len)
{
static I2C_Transaction transactionW;
i2cSet.readWriteFlag = WRITE_OPERATE;
transactionW.writeCount = len;
transactionW.writeBuf = i2cSet.writeBuf;
transactionW.readCount = 0;
transactionW.readBuf = NULL;
transactionW.slaveAddress = HAL_I2C_SLAVE_ADDR_DEF;
uint8_t result = I2C_transfer(i2cHandle, &transactionW);
return SUCCESS;
}
uint8_t I2C_initialize(void)
{
I2C_Params params;
I2C_init();
I2C_Params_init(¶ms);
params.transferMode = I2C_MODE_CALLBACK;
params.transferCallbackFxn = I2C_callbackFxn;
params.bitRate = I2C_100kHz;
i2cHandle = I2C_open(CC2640R2_LOCK_I2C0, ¶ms);
if (!i2cHandle) {
return FAILURE;
}
i2cSet.readWriteFlag = READ_OPERATE;
keySet.count = 0;
keyFuncSet.step = 0;
return SUCCESS;
}
CC2640R2F的I2C driver跟CC26XX其他芯片是一致的,可以参考这两个芯片的I2C实现例程。
另外,在Resource Explorer里也有CC2640R2F的相关例程,具体如下:
For the i2ctmp007 project: SDK->Examples->Development Tools->CC2640R2 LaunchPad -> TI Drivers->i2ctmp007
For SLA: SDK -> SimpleLink Academy -> Bluetooth LE -> Bluetooth Low Energy + Sensors BoosterPack
非常感谢,我现在想把CC2640R2F作为从设备,请问可以吗?
我在I2CSlave.c找不到I2CSlave_Config的定义呢。
确实是还没有I2C slave的driver。但是I2C 模块CC2640跟CC2640R2F是一样的,你可以参考CC2640的slave 例程
你好,我也是用例程发两包数据,但是第二包发不出去,你的问题是怎么解决的?谢谢!
哪一个例程? 两包数据是怎么发的?
你好,我用的是i2ctmp007例程,这个例程txbuffer只发了一个数据,我要在txbuffer发4个数据,数据长度也改了,但是在实际情况是还是只有一个数据发送出去了
可以用示波器看一下,如果第一次写,从设备没有ACK回应,那不会再继续写了。所以建议检查你所接的从设备是否有ACK回应
你好,我看例程是7bit从设备地址的设置,如果是8bit,应该在哪里设置?
I2C 的短地址 只支持 7位。