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.

[参考译文] RM57L84x I2C CAN#39;t 输出 SCL

Guru**** 2460850 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/654057/rm57l84x-i2c-can-t-output-scl

主题中讨论的其他器件:HALCOGEN

您好!

我使用 RM57L84x 作为 I2C 主设备、与以100kHz 频率运行的 I2C 外设通信。

它在大多数时间内都能正常工作、但在这种情况下、RM57L84x 的 can‘t 输出 SCL (clk)。

出现、我检查 Tx 数据是否已加载到 Tx 寄存器 I2CDXR。关闭 RM57L84x

 一段时间后、通信变为正常。 我的 i2c 驱动程序代码由 HALCoGen 04.06.01。生成

代码如下:

uint8 writeDataToRTC (uint8 addr、uint8 cnt、uint8*数据)

{   

   uint32延迟= 0;

   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    //       主传输功能                     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    

   /*配置要与*/通话的从机地址  

   i2cSetSlaveAdd (i2cREG1、RTC_ADDRESS);

   /*将方向设置为发送器*/    

   /*注意:可选-在 Init 中完成*/    

   i2cSetDirection (i2cREG1、I2C_transmitter);

   /*配置数据计数*/  

   /*数据计数+ 1 (字地址)*/  

   i2cSetCount (i2cREG1、cnt + 1);

   /*将模式设置为主设备*/  

   i2cSetMode (i2cREG1、I2C_MASTER);

   /*设置编程计数后停止*/  

   i2cSetStop (i2cREG1);

   /*发送开始条件*/  

   i2cSetStart (i2cREG1);

   /*发送字地址*/  

   i2cSendByte (i2cREG1、addr);

   /*轮询模式下的 Transmit data_count 数据数量*/  

   i2cSend (i2cREG1、cnt、data);

   /*等待总线忙被清除*/    

   while (i2cIsBusy (i2cREG1)=true);

   /*等待直到检测到停止*/    

   while (i2cIsStopDetected (i2cREG1)=0);

   /*清除停止条件*/   

  i2cClearSCD (i2cREG1);

   /*在开始下一个块之前使用 Simple Dealya */   

  /*取决于从属设备准备就绪的速度*/     

   for (delay=0;delay<100000;delay++);

   返回1;

 

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

    您是否已检查 SCL 低电平周期的源。 在大多数 I2C 应用中、从器件可以强制时钟扩展并将 SCL 保持在低电平、以便主器件在准备好接收数据之前无法再发送数据。 这是一种让从属方能够将信息传递给它直至其准备就绪的自然方法。 测试这种情况的一种方法是在其中一个周期内断开从器件、并查看主器件是否再次开始切换 SCL。