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.

[参考译文] CC2640R2F:使用 TI Driverlib 时 I2C 无法正常工作

Guru**** 2466550 points
Other Parts Discussed in Thread: CC2640R2F

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1552288/cc2640r2f-i2c-not-working-when-using-ti-driverlib

器件型号:CC2640R2F


工具/软件:

我们正在为 CC2640R2F 开发串行引导加载程序、并需要在引导加载程序中使用 I2C。 由于大小限制、我无法使用 TI 驱动程序、因为它对于引导加载程序来说太大、因此我在没有 TI-RTOS 的情况下使用 driverlib。  

我已启用 I2C 时钟并通过以下代码配置 IO

PRCMPowerDomainOn(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL);
while (PRCMPowerDomainStatus(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL)
!= PRCM_DOMAIN_POWER_ON);

PRCMPeripheralRunEnable(PRCM_PERIPH_I2C0);
PRCMPeripheralSleepEnable(PRCM_PERIPH_I2C0);
PRCMPeripheralDeepSleepEnable(PRCM_PERIPH_I2C0);

PRCMLoadSet();
while (!PRCMLoadGet());

IOCPortConfigureSet(PIN_I2C_SCL,IOC_PORT_MCU_I2C_MSSCL,IOC_NO_IOPULL);
IOCPortConfigureSet(PIN_I2C_SDA,IOC_PORT_MCU_I2C_MSSDA,IOC_NO_IOPULL);

使用以下代码初始化 I2C

I2CMasterDisable(I2C0_BASE);
  
if(cfg->atcai2c.baud == 1000000){
    I2CMasterInitExpClk(I2C0_BASE,48000000,false);
}else if(cfg->atcai2c.baud == 400000){
    I2CMasterInitExpClk(I2C0_BASE,48000000,true);
}else{
    I2CMasterInitExpClk(I2C0_BASE,48000000,false);
}
I2CMasterSlaveAddrSet(I2C0_BASE, address,false);
    
I2CMasterEnable(I2C0_BASE);

但当我将 0x07 写入 MCTRL 时、会将 0x00 写入数据寄存器。 mstat:busy 保持为 1、其他 mstat 位全部为零。 I2C 工作不正常、就像我之前使用的 TI 驱动程序一样

是否缺少任何配置?

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

    额外的 I 还启用 UART 以及 I2C 和 UART 可以正常工作、

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

    您好、Ziqi Zuo、

    我想问 TI-RTOS 是否太大、为什么不使用 NORTOS I2C 工程(带有 TI 驱动程序)、或者这里只有 i2c 驱动程序本身对于引导加载程序来说太大?

    谢谢、
    Alex F

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

    具有 NORTOS 的 TI 驱动程序也超过 12KB 限制。 我似乎已经找到了导致该问题的根本原因。 我没有将 IOC 配置为 OpenDrain 和 Input Enable