TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2640硬件I2C外设驱动发送问题

 以下是我自己写的测试用的I2C写函数,不停地往总线上发送数据

static void myI2C_Fxn()
{

I2C_Params_init(&myI2cParams);
myI2cParams.bitRate = I2C_100kHz;
myI2cHandle = I2C_open(CC2650_I2C0, &myI2cParams);
for(;;)

{

// I2C_open(0,&i2cTransaction);
I2C_Transaction i2cTransaction;

uint8 txBuf[2] = {0xFF,0x00};
uint8 rxBuf[5];
i2cTransaction.writeBuf = txBuf;
i2cTransaction.writeCount = 3;
i2cTransaction.readBuf = NULL;
i2cTransaction.readCount = 0;i2cTransaction.slaveAddress = 0xAA; //arbitrary for demo

//I2C_open(0,&myI2cParams);

I2C_transfer(myI2cHandle, &i2cTransaction);

// I2C_close(myI2cHandle);
Task_sleep(100000);

}

}

然后经示波器抓看,只发送了两个字节,理论上应该发三个字节的吧。是我写的程序哪里有问题还是这个API函数就是只能往总线上发送2个字节的。蓝色是时钟线,黄色是信号线

Eggsy Pang:

看不到你的图片,uint8 txBuf[2] = {0xFF,0x00}; 你这里不是两个字节吗?这里为什么写3:i2cTransaction.writeCount = 3;

Viki Shi:

BLE STACK中有I2C的例程,路径: C:\ti\simplelink_cc2640r2_sdk_1_50_00_58\source\ti\drivers\i2c

user5262192:

回复 Eggsy Pang:

i2cTransaction.slaveAddress = 0xAA,这个是从器件地址,uint8 txBuf[2] = {0xFF,0x00},这个是发送的数据,
示波器上看到是0x55(应该是首字节0xAA右移了一位)和0xFF。实际上这个函数发送的数据是带从器件地址的,加上我原本要发的数据。所以我期望是应该发送三个数据的。而实际上只有两个字节,而且还不都是txBuf里的字节。不知道我这样说能否让您了解情况

Eggsy Pang:

回复 user5262192:

I2C地址只有7位,AA 是8位了

user5262192:

回复 Eggsy Pang:

是的,所以实际发送的时候产生了移位,我之后将0xAA用0x03替代,发送出去的数据是正确的。不过这不是问题的关键,问题是不论在TxBuf中放了多少数据,i2cTransaction.writeCount 大于2,实际发送的字节都为i2cTransaction.slaveAddress 和TxBuf[0], 也就是两个字节。而我现在是需要用I2C写入数据到eeprom,根据I2C协议,需要往总线上发送三个字节(从器件地址,内部单元地址,数据)。

user5262192:

回复 Eggsy Pang:

你好,非常感谢,的确是这个原因导致的,我将正确的从器件地址写入后,在发送完第一个数据后等待到了ack应答后,第二个数据正常发送出去了。还有一个问题,用此API读取数据的时候,我要怎么判断是否成功读取了,用模拟的I2C的话可以通过判断ACK应答,那用这个函数要怎么判断

赞(0)
未经允许不得转载:TI中文支持网 » CC2640硬件I2C外设驱动发送问题
分享到: 更多 (0)