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.

[参考译文] SMARTRF06EBK:CC2538 I2C 在连接到 LM4970时响应 NACK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/749892/smartrf06ebk-cc2538-i2c-responding-nack-when-connected-to-lm4970

器件型号:SMARTRF06EBK
主题中讨论的其他器件:LM4970

您好!

在 I2C 上、当我向 LM4970发送复位或任何命令时、它会以 NACK 响应。

我在论坛上尝试了几个解决方案、但这些解决方案没有解决我的问题。 我参考了基础固件中的 I2C 示例代码进行初始化。

我正在共享下面 i2c 的初始化代码和数据发送代码。 我还连接了逻辑分析仪输出。

我想知道我会哪里出错。

此致、

Akshay。

空 I2CInit(空)  

I2CSlaveDisable();
SysCtrlClockSet (false、false、SYS_CTRL_SYSDIV_16MHz);
SysCtrlIOClockSet (SYS_CTRL_SYSDIV_16MHz);
SysCtrlPeripheralEnable (SYS_CTRL_Periph_I2C);
SysCtrlPeripheralReset (SYS_CTRL_Periph_I2C);

GPIOPinTypeI2C (GPIO_B_BASE、I2C_CLK_PIN);
GPIOPinTypeI2C (GPIO_B_BASE、I2C_DATA_PIN);

IOCPinConfigPeriphInput (GPIO_B_BASE、I2C_CLK_PIN、IOC_I2CMSSCL);
IOCPinConfigPeriphInput (GPIO_B_BASE、I2C_DATA_PIN、IOC_I2CMSSDA);
IOCPinConfigPeriphOutput (GPIO_B_BASE、I2C_CLK_PIN、IOC_MUX_OUT_SEL_I2C_CMSSCL);
IOCPinConfigPeriphOutput (GPIO_B_BASE、I2C_DATA_PIN、IOC_MUX_OUT_SEL_I2C_CMSDA);

I2CMasterInitExpClk (SysCtrlClockGet (),false);

I2CSlaveEnable();

INT8 HalI2Csend (uint8地址、uint8 * buf、uint16 len)

uint16 len_index=0;
I2CMasterSlaveAddrSet (address、false);// false 表示 I2C 主设备正在向从设备发起写入操作。

for (len_index =0;len_index < len;len_index++)

I2CMasterDataPut (buf[len_index]);

I2CMasterControl (I2C_MASTER_CMD_SINGLE_SEND);//开始从主器件发送数据。


while (I2CMasterBusy ())



返回0;

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

    您是否尝试将器件用作 I2C 主设备或 I2C 从设备? 初始化代码有点混乱、因为您似乎初始化 I2C 主设备、然后启用 I2C 从设备。

    例如,如果将设备作为从设备运行,我希望您调用“I2CSlaveInit()”来定义从设备地址。 同样、如果您计划作为主器件运行、我希望您调用"I2CMasterEnable/Disable"、而不是从器件版本。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、M-W、

    我将器件用作 I2C 主设备、而 Lm4970是从设备。 那么、如果是主器件、应该是什么初始化代码?

    根据您的建议、我更改了下面的初始化、但仍然无效。 请提供指导

    我还想补充一点、我的 I2C 从地址是0xF4、但如果您看到所连接的逻辑分析仪图像、它不会将地址显示为0xF4。

    SysCtrlClockSet (false、false、SYS_CTRL_SYSDIV_16MHz);
    SysCtrlIOClockSet (SYS_CTRL_SYSDIV_16MHz);
    SysCtrlPeripheralEnable (SYS_CTRL_Periph_I2C);
    SysCtrlPeripheralReset (SYS_CTRL_Periph_I2C);

    GPIOPinTypeI2C (GPIO_B_BASE、I2C_CLK_PIN);
    GPIOPinTypeI2C (GPIO_B_BASE、I2C_DATA_PIN);

    IOCPinConfigPeriphInput (GPIO_B_BASE、I2C_CLK_PIN、IOC_I2CMSSCL);
    IOCPinConfigPeriphInput (GPIO_B_BASE、I2C_DATA_PIN、IOC_I2CMSSDA);
    IOCPinConfigPeriphOutput (GPIO_B_BASE、I2C_CLK_PIN、IOC_MUX_OUT_SEL_I2C_CMSSCL);
    IOCPinConfigPeriphOutput (GPIO_B_BASE、I2C_DATA_PIN、IOC_MUX_OUT_SEL_I2C_CMSDA);

    I2CMasterInitExpClk (SysCtrlClockGet (),false);

    I2CMasterEnable();


    此致、
    Akshay

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

    您好!
    我已经解决了这个问题、问题是 I2CMasterSlaveAddrSet (uint8_t ui8SlaveAddr、bool bReceive)这个函数。
    如果我们在 i2c.c 文件中看到函数 I2CMasterSlaveAddrSet、我们可以观察到地址左移1。

    在本例中、我在 I2CMasterSlaveAddrSet 中传递了我的从地址、该地址左移1。 最终我的地址发生了变化、因此从器件正在响应 NACK。

    要解决此问题、只需>>将地址右移1、然后将地址传递给 I2CMasterSlaveAddrSet。

    此致、
    Akshay