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.

[参考译文] RTOS/CC2650:如何在传感器控制器和 RTOS 之间共享 I2C 总线?

Guru**** 2589265 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/601339/rtos-cc2650-how-do-i-share-the-i2c-bus-between-the-sensor-controller-and-rtos

器件型号:CC2650

工具/软件:TI-RTOS

我需要使用来自主内核的 I2C、而我有一个使用 I2C 运行的传感器控制器任务。 我无法停止传感器控制器任务。 我将对其进行计时、以便不会同时访问 I2C 总线。

我的步骤是:

  1. 我启动 SC 任务
  2. SC 任务使用 I2C
  3. 我将中断从 SC 发送到主内核
  4. 主内核成功使用 I2C
  5. SC 任务再次尝试 I2C (这次出现 STATUS_TIMEOUT 错误)

我有一个独特的情况,我为什么要这样做。 假设这是我唯一的选择。 我出了什么问题? 能否同时使用两者的 I2C?

谢谢、

罗马

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Roman、
    传感器控制器 I2C 资源是位 bang 实现的、而 TI-RTOS 驱动程序使用 I2C 硬件模块。 这意味着您可以并行运行这两个引脚、但不能同时使用相同的引脚。 请参阅"共享 IO 引脚"传感器控制器示例项目、了解如何在主应用程序和传感器控制器驱动程序之间安全地共享引脚。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我看了共享 IO 引脚示例、但它的工作方式有点令人困惑。 您能不能为我澄清一下、要共享 IO 引脚、您需要在每次切换谁拥有这些引脚时启动和停止任务? 切换引脚时、切换 AUX RAM 中的状态/数据对于我来说至关重要、因为我使用的是环形缓冲器、但看起来第一次调用的是重置 SC 结构。

    我是否可以仅使用"scifReinitTaskIo"函数?

    如下所示:

    //启动传感器控制器任务
    scifStartTasksNbl (BV (SCIF_SAMPLE_AFE4404_TASK_ID));
    
    //现在我们侦听来自传感器控制器的中断
    while (1){
    
    //无限期等待 SEM
    Semaphore_pend (hSemMainLoop、BIOS_WAIT_FOREVER);
    
    //清除警报中断源
    scifClearAlertIntSource();
    
    //清除加速计缓冲器的时间
    init_rtos_i2c ();
    clear_fifo_buffer();
    close_rtos_i2c ();
    
    //将 i2c 反馈给传感器控制器、
    //及时进行下一个 RTC 周期
    scifReinitTaskIo (BV (SCIF_SAMPLE_AFE4404_TASK_ID));
    
    //确认警报事件
    scifAckAlertEvents();
    
    }
    

    顺便说一下、感谢您的 Erik 帮助! 我很感激!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当然,在您在 SC 中发出 i2cStart()之前,只需确保同步并调用 i2cStop();在您打开 TI-RTOS 和 scifReinitTaskIo()中的引脚之前。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    完美! 谢谢:)

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

    嗨、Erik、

    刚刚有机会尝试"scifReinitTaskIo"函数、就像我在答复中发布的那样、我仍然遇到 I2C 问题。 我确保在 i2cstop()和 i2cstart()之前和之后运行代码,就像您说的那样,它仍然不起作用。 当我尝试在传感器控制器中使用 I2C 时、在 RTOS 中使用 I2C 后、在 i2cstatus 中会出现0x0002错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您还记得在 RTOS 中关闭 I2C 驱动程序吗?
    您是否尝试使用逻辑分析仪进行分析?