大家好,我看了SensorTag例程,感觉里面的代码太复杂,想把I2C部分移到simpleBLEPeripheral中太难了,而且那些功能我全都不用上(比如选择传感器和各种自检测等),就只参照SWRU393_CC2640_BLE_Software_Developer's_Guide.pdf的I2C部分添加了代码,对于我只需要传一个传感器的数据应该是够用了。但发现I2C仍然不通,用示波器抓SCL和SDA的信号,发现地址的最高位没弄对,下面是示波器图:
代码 :
先在初始化中加上:
I2C_Params_init(&SbpI2cParams);
SbpI2cParams.bitRate = I2C_100kHz;
SbpI2cHandle = I2C_open(CC2650_I2C0, &SbpI2cParams);
然后在循环上加上:
I2C_Transaction i2cTransaction;
uint8 txBuf[] = {0x76};
uint8 rxBuf[5];
i2cTransaction.writeBuf = txBuf;
i2cTransaction.writeCount = 1;
i2cTransaction.readBuf = NULL;
i2cTransaction.readCount = 0;
i2cTransaction.slaveAddress = 0xd1; //arbitrary for demo
I2C_transfer(SbpI2cHandle, &i2cTransaction);
可以看到它传输了地址0x51和数据0x76,但我想让它输的地址是0xd1,11010001变成了01010001,我试了许多数据,发现都是最高位的地址不见了,而数据都是对的,连续传几次都一样。
请问可能是什么原因呢?