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.

[参考译文] CC2650:I2C 从设备的 CC2650寄存器设置

Guru**** 2580075 points
Other Parts Discussed in Thread: CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/722304/cc2650-cc2650-register-setting-for-i2c-slave

器件型号:CC2650

尊敬的 TI 成员:

我正在通过 I2C 开发 F28069和 CC2650之间的通信、以提供状态信息。

F28069是 I2C 主设备、仅发送状态数据

CC2650是 I2C 端口、仅接收状态数据并作为 BLE 信息进行存储。

我已经使用其他器件将 F28069测试为 I2C 主设备、并且工作正常。

当我尝试从 F28069向 C2650、I2C SCL 发送数据时、SDA 波形如下所示。

通道3是 SDA、通道2是 SCL。

如您所见、似乎存在一些冲突、F28069和 CC2650看起来都发送了一些数据。

我唯一的 CC2650 I2C 配置是  

 I2CSlaveInit (I2C0_BASE、0x74);// 7位地址

我想 CC2650作为从器件发送模式运行、我想将其设置为从器件接收器

但我找不到任何相关的寄存器。

请问如何将 CC2650设置为从接收器?

此致、

Hae Ryong

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

    您是否也为 I2C 操作配置了 IO 引脚? 您能否提供一些代码片段来说明您正在做的事情、或者更好地说明我可以运行的一个小示例项目?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答、

    请参阅以下代码片段

    用于 main.c

    /*********
    *局部变量
    */
    PIN_Handle i2cPinHandle;
    PIN_STATE i2cPinState;
    /*********
    *全局变量
    */
    PIN_Config i2cPinTable[]={
    Board_I2C0_SDA | PIN_INPUT_EN | PIN_PULLUP | PIN_OPENDRAIN、
    Board_I2C0_SCL | PIN_INPUT_EN | PIN_PULLUP | PIN_OPENDRAIN、
    PIN_TERMINE
    };
    
    int main()
    {//
    寄存器应用程序回调以捕捉堆栈中发出的断言*/
    RegisterAssertBack (AssertHandler);
    
    Board_initGeneral();
    
    PRCMPowerDomainOn (PRCM_DOMAIN_Periph);
    
    Power_setDependency (CC26XX_Periph_I2C0);PRCMPower_Dependence_Enable
    
    
    
    
    
    
    
    
    
    (PRCM_Power_Imperrent);PRCMPendence_Power_Contract_Imdle_Imdle_Contrendency (PRCM_Power_Power_Power_Conserved);以及 PRCMPON_Power_Contract_Contract_Contract_Contract_Im_Conserved (PRCMP= PRCMP= PRCMP= PRCMP=);PRCMP= PRCMP= PRCMP= PRCMP= PRCMP= PRCMP= PRCMPON_ENDULEST_ENDULEST_PRCMP= PRCMP= PRCMP= PRCMP=
    
    
    PINCC26XX_setMux (i2cPinHandle、Board_I2C0_SDA、IOC_PORT_MCU_I2C_MSSDA);
    PINCC26XX_setMux (i2cPinHandle、Board_I2C0_SCL、IOC_PORT_MCU_I2C_MSSCL);
    
    #ifndef power_Saving
    //设置待机、断电和空闲模式的约束*/
    Power_setConstraint (Power_setTask_disallow);
    Power_setTask_enrate*
    
    
    
    
    
    
    
    
    
    
    
    (*)/iCall_remote_remote_remote_remote_remote_remote_remote_remote_remote_remote_trades*(*(*)(*)(*)(*)/ iCall_tradle/ tradle/ iTask_tradle/ iCall_remote_remote_remote_remote_remote_remote_remote_remote_remote_remote_remote_remote_remote_remote_tr
    
    i2cPinHandle = PIN_OPEN (&i2cPinState、i2cPinTable);
    if (!i2cPinHandle){
    System_abort ("初始化板 LED 引脚时出错"\n);
    }
    
    /*启用中断并启动 SYS/BIOS */
    BIOS_start();
    
    返回0;
    }
    

    在任务初始化函数处添加从器件初始化

    I2CSlaveInit (I2C0_BASE、0x74);// 7位地址 

    在 TaskFxn 中添加 I2C 接收函数

    //读取从机状态寄存器
    if (I2CSlaveStatus (I2C0_BASE)=I2C_SLAVE_ACT_RREQ_FBR)
    {
    int i;
    uint8_t b_char[4];
    uint32_t reg_addr=10;
    
    REG_addr = I2CSlaveDataGet (I2C0_BASE);
    for (i=0;i<4;i++)
    {
    while (I2CSlaveStatus (I2C0_BASE)=I2C_SLAVE_ACT_RREQ);
    i2cRecvData[i]= I2CSlaveDataGet (I2C0_BASE);
    b_char[i]=(uint8_t)(i2cRecvData[i]&0x000000FF);
    }
    } 

    我想这就是我为 I2C 从设备功能添加的所有内容。

    如果您需要其他任何东西、请告诉我。

    此致、

    Hae Ryong

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

    您的代码对我来说似乎可以、当您使用内部上拉电阻器时、您是否确保没有外部上拉电阻器起作用? 您以多快的 I2C 速度运行?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、M-W、

    我在 F28069电路板中有外部上拉电阻器、CC2650电路板通过5线电缆进行连接、因为 F28069和 CC2650位于不同的电路板中。
    电缆长度仅为10 cm 左右。
    SCL 和 SDA 的外部上拉电阻的设置是什么? 我想尝试更改它。

    我已经尝试将 I2C 速度设置为400k 和100k、这两种情况都是相同的。

    此致、
    Hae Ryong
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    要禁用内部上拉电阻、您需要将 I2CCC26XX.c 驱动程序文件包含在工程中并更改内部 PIN 设置。 在该函数中查找 I2CCC26XX_INPLOP、将"PIN_PULUP"更改为"PIN_NOPULL"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、M-W、

    很抱歉耽误你的回答。

    我已尝试如下引脚设置

    PIN_Config i2cPinTable[]={
    Board_I2C0_SDA | PIN_INPUT_EN | PIN_NOPULL | PIN_OPENDRAIN、
    Board_I2C0_SCL | PIN_INPUT_EN | PIN_NOPULL | PIN_OPENDRAIN、
    PIN_TERMINATE
    };

    我得到的波形与以前相同、似乎没有任何变化。

    但是、我不确定我是否正在使用 I2CCC26XX.c、因为我找不到我的文件中调用的 I2CCC26XX_init()。
    我认为我在 C:\ti_tirtos_cc13xx_cc26xx_2_18_00_03\products\cc26xxware_2_23_03_17162\driverlib 中仅使用 i2c.h

    问题出在哪呢?

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

    你说得完全正确、我肯定已经滑倒了、以为我们会再次谈论 I2C 主驱动器。 您是否有另一个可用作主设备的器件(例如另一个 LaunchPad)? 如果您可以使用两个 LaunchPad 进行复制、那么我也可以尝试一下。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Hae、

    您是否能够尝试将其复制到两个 LaunchPad 上?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好、M-W

    感谢您的关注。

    我正在与当地 FAE 一起处理这个问题。
    我想他可以处理这个问题。

    感谢您的友好支持。

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

    好的、请告诉我是否还有其他需要帮助的东西。 我现在要将其标记为"思考已解决"、以关闭它。 如果您有解决方案、请随时更新。