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.

[参考译文] LAUNCHXL-CC2640R2:I2C 通信从未成功传输

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/849599/launchxl-cc2640r2-i2c-comm-never-has-successful-transfer

器件型号:LAUNCHXL-CC2640R2
主题中讨论的其他器件:DAC7571

我不熟悉 I2C 通信、并编写了以下代码来连接 TI DAC7571。 我已正确连接所有内容、并已编写初始代码、现在仅传输 SIGN.ampAC。 代码对我来说似乎是正确的,但我仍然不知道为什么我无法通过 I2C_Transfer()成功进行传输。 有人能不能帮助我了解到底发生了什么错误? CCS Cloud 不会产生任何错误、只是从不传输数据。 很抱歉、代码有点乱、显然仍在进行中。 提前感谢。

#include 
#include 
#include 
#include 

/*驱动程序头文件*/
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

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

uint8_t rxBuffer[0]; //接收缓冲
区 uint8_t txBuffer[2]; //发送缓冲
区 btransferool Done = false;
bool openDone = true;
bool 状态;

静态空 writeCallbackDefault (I2C_Handle handle、I2C_Transaction * transac、bool 结果){
//设置长度字节
if (结果){
transferDone =真;
} 否则{
//事务失败,相应地执行...
}
};

struct{//用于存储信号振幅(最大值为4095)
unsigned int ampac:12;
unsigned int ampDC:12;
}信号;



/*
==== mainThread ====
//
void *mainThread (void *arg0){
//局部变量
I2C_init();
I2C_Handle 句柄;
I2C_Params 参数;
I2C_Transaction i2cTrans;

//配置 I2C 参数。
I2C_PARAMS_INIT (params);
params.bitrate = I2C_400kHz;
params.transferMode = I2C_MODE_CALLACK;
params.transferCallbackFxn = writeCallbackDefault;

//准备要发送的数据
signal.ampAC = 2047;
signal.ampDC = signal.ampac/2;
txBuffer[0]= signal.ampAC;
txBuffer[1]= SIGNAL .ampAC >> 8;

//初始化主 I2C 事务结构
i2cTran.writeBuf = txBuffer;
i2cTrans.writeCount = 2;
i2cTrans.readBuf =空;
i2cTrans.ReadCount = 0;
i2cTrans.slaveAddress = 0x4C;

//打开 I2C
句柄= I2C_open (Board_I2C0、params);

if (handle == NULL){
//打开 I2C 时出错
openDone = false;
while (1);
}

//执行 I2C 传输(在回调模式下)
I2C_transfer (handle、&i2cTrans);

返回(NULL);
} 

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

    您好!

    当您说它从未传输数据时、您意味着它在物理上从未在 SCL/SDA 引脚上传输、还是 从不调用 writeCallbackDefault?

    您是否有示波器或逻辑分析仪、可用于探测引脚并查看是否传输了任何数据?

    此致、

    R.M.

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

    一些测试以及 SCL 和 SDA 线路是否正常工作。 我测试了多个信号电平(100、2000、4095等)、两条线路正常工作。 writeCallbackDefault 中的结果变量也会变为"true"。 但是、DAC 的线路永远不会改变。 即使在2000测试中(这应该会导致~1.5V 的输出电压)、我也看不到任何变化。 可能发生什么事了?

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

    我已经解决了。 事实证明 txBuffer 是向后的。  TI DAC7571 需要12位来控制输出、它将其在2个连续字节上拆分为4位和8位(包含数据的4个 MSB 字节的字节还有其他信息)。 我刚才错误地将它们分配到了缓冲器中。

    感谢您成为跳板、并帮助我解决 R.M.的问题