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.

[参考译文] CC3200MOD:I2C 写入卡在 I2CTransact 中

Guru**** 2782445 points

Other Parts Discussed in Thread: CC3200MOD

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/578083/cc3200mod-i2c-write-getting-stuck-in-i2ctransact

器件型号:CC3200MOD

尽管我努力并研究了 CC3200MOD 模块的问题、但通过 I2C 通信仍然存在问题。 I2C 驱动器卡在 i2c_if.c 源文件的第115-118行(代码如下所示)。

while ((map_I2CMasterIntStatusEx (I2C_base、false)
&(I2C_INT_MASTER | I2C_MRI_CLKTOUT)= 0)
{
} 

I2C 外设一直在等待主中断、但从未发生过。

根据之前论坛帖子(此处链接)的回复(实际上从未正式解决)、我尝试使用 1.1.0 SDK 发行说明 (从第41页开始)中提供的建议来模拟 I2C 以消除问题。 下面显示了手动生成的 I2C 仿真的波形、该波形用于尝试解决卡住的问题。

在模拟 I2C 后、我仍然从 I2C 外设获得相同的波形、并且我永远不会通过 I2CTransact 函数调用中列出的上面的环路。 该波形如下所示:

此外、我加载了在首次将定制板上的 I2C 线路连接到 CC3200MOD LaunchPad 上的 I2C 线路后运行的相同 I2C 演示 sketch。 当我在 LaunchPad 上加载 sketch 时、sketch 工作正常。 我能够成功地通过 I2C 读取和写入电路板上的传感器。 然后、我重新尝试了定制板上的相同 sketch、再次强调、它卡在相同的位置。 我必须对 sketch 进行的唯一更改是 pinmux 配置。

在我的定制板上、SCL 引脚与模式 PIN_MODE_5复用为 PIN_05。 SDA 引脚与 LP 上的相同、通过模式 PIN_MODE_1复用为 PIN_02。

下面是我要加载到 LP 和自定义 PCB 上的 sketch 的主要入口点:

int main (void)
{
//电路板初始化
BoardInit();

MAP_PRCMPeripheralClkEnable (PRCM_GPIOA1、PRCM_RUN_MODE_CLK);
MAP_PRCMPeripheralClkEnable (PRCM_I2CA0、PRCM_RUN_MODE_CLK);

//为 I2C0 I2C_SCL 配置 PIN_05 (定制 PCB)
MAP_PinTypeI2C (PIN_05、PIN_MODE_5);

//为 I2C0 I2C_SDA 配置 PIN_02 (定制 PCB)
MAP_PinTypeI2C (PIN_02、PIN_MODE_1);

//为 I2C0 I2C_SCL (LaunchPad)配置 PIN_01
// MAP_PinTypeI2C (PIN_01、PIN_MODE_1);
//

//////为 I2C0 I2C_SDA (LaunchPad)配置 PIN_02
// MAP_PinTypeI2C (PIN_02、PIN_MODE_1);

I2C_IF_Open (I2C_MASTER_MODE_FST);
I2CEmulation();

uint16_t hdcdev_id = GetHDC1080ManufacturerID ();
uint16_t optdev_id = GetOPT3001DeviceID ();


I2C_IF_CLOSE ();

int i = 0;
while (1)
{
i = i + 1;
}

返回0;
} 

引导加载程序和芯片组在 LP 和定制 PCB 之间具有相同的版本。

INFO:> Bootloader version:2.1.4.0
INFO:>芯片组 version:16. 

有人有什么想法吗? 我已经完全耗尽了我所知道的一切...

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

    您说过 I2C 代码可在 CC3200MOD LaunchPad 上运行、因此这可能是引脚复用或硬件问题。 需要检查的几件事:

    配置引脚时、您还必须从其默认值中将其"取消多路复用"。 尝试将所有未使用的引脚设置为模式0、这样我们就知道 I2C 线路上没有干扰。 您可以使用 dev.ti.com 上的 PinMuxTool 轻松实现此目的。

    2.查看 CC3200MOD LaunchPad 原理图并查找与定制板不同的任何上拉电阻器等: www.ti.com/.../tidrc48.pdf

    此致、
    Sarah