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.
您好,
我使用 I2C 时遇到问题。 我正在尝试将 TMS570 (主模式)中的数据发送到 STS-35,从动数字温度传感器。 但是,MCU 不发送数据。 我用 HALCOGen 的例子来使用它。
代码如下:
//STS35测量
UINT8_t TPU = 0;
对于(i = 0;i <255;I++)
对于(TPU = 0;TPU<5;TPU++);
/*配置从属设备的地址以与*/通话
i2cSetSlaveAdd(i2cREG1, STS35_Address);
sciSend (scilinREG,22,(无符号字符*)“I2C 从配置\r\n”);
/*将方向设为发射器*/
/*注:可选-在 Init 中完成*/
i2cSetDirection (i2cREG1,I2C_TRANSMENT);
sciSend (scilinREG,41,(无符号字符*)“已配置发送器的 I2C 方向\r\n”);
/*配置数据计数*/
/*数据计数(字词地址)*/
i2cSetCount (i2cREG1,STS35_BSIZE);
sciSend (scilinREG,27,(无符号字符*)“I2C 数据计数已配置\r\n”);
/*将模式设置为主模式*/
i2cSetMode (i2cREG1,I2C_MASTER);
sciSend (scilinREG,28,(无符号字符*)“I2C 主模式已配置\r\n”);
/*设置预设计数后的停止*/
i2cSetStop(i2cREG1);
sciSend (scilinREG,25,(无符号字符*)“I2C 停止位已配置\r\n”);
/*发射开始条件*/
i2cSetStart(i2cREG1);
sciSend (scilinREG,26,(无符号字符*)“I2C 起始位已配置\r\n”);
/*在轮询模式下传输数据计数*
i2cSend (i2cREG1,STS35_BSIZE,TX_Pack);
sciSend (scilinREG,16,(无符号字符*)“I2C 发送字节\r\n”);
/*等待总线忙线被清除*/
while (i2cIsBusBusy (i2cREG1)== true);
sciSend (scilinREG,22,(无符号字符*)“I2C 总线正忙已清除\r\n”);
/*等待检测到停止*/
i2cIsStopDetected (i2cREG1)== 0);
sciSend (scilinREG,19,(无符号字符*)“检测到 I2C 停止\r\n”);
/*清除停止条件*/
i2cClearSCD (i2cREG1);
sciSend (scilinREG,18,(无符号字符*)“I2C 停止已清除\r\n”);
/*启动下一个区块前的简单代尔莱*/
/*取决于从属设备准备就绪的速度*/
对于(i = 0;i <255;I++)
(TPU = 0;TPU<40;TPU++);
程序将保持在/*中,等待检测到停止*/等待停止位。 我尝试用 OSC 测量帧,但在 SDA 或 SCLK 上未检测到任何位。
非常感谢。
此致,
莱安德罗
您好,
SCL 和 SDA 线路 都是漏极开路,这意味 着 I2C 模块 可以驱动低输出 ,但不能驱动高输出。 要使 I2C 线路能够达到较高的水平,您必须通过电阻器将 SCL 和 SDA 拉至 VCCIO (3.3V)。 请仔细检查您的主板上是否有 SCL 和 SDA 线路上的拉线。
QJ 您好,
感谢您的回复。 我设置了拉电阻器,并使用 HALCOGen 配置它。 我给你发送了一份有关它的捕获。 但是,我可以在从属设备附近添加上拉电阻器。 你认为可能有必要这样做吗? 谢谢!
内部上拉太弱。 请分别向 SCL 和 SDA 线路添加一个上拉电阻器。
QJ 您好,
谢谢! 我添加了4K7外部上拉,我可以获得信号。 但是,我只获得了两个帧,使用了六个帧(我更改了它以了解它的工作原理)。 它可能与从属反应有关吗?
此致,
莱安德罗