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.

[参考译文] TM4C1294NCPDT:I2C同时作为主控制器和从控制器运行

Guru**** 2611705 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1098119/tm4c1294ncpdt-i2c-simultaneous-operation-as-both-a-master-and-a-slave

零件号:TM4C1294NCPDT

大家好 ,TivaWare外设驱动程序库文档 (SW-TM4C-DRL-UG.TIVA 2.1)指出:" 3.156 I2C模块既支持作为主设备也支持作为从设备发送和接收数据,也支持作为主设备和从设备同时进行操作"。   是否有如何执行此操作的示例?

我在许多项目中使用TIVA作为I2C主控,但不是从属控制器,看 着文档,我看不到 可以调用什么功能来同时将其设置为主控制器和从属控制器。

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

    你(们)好

    是否有如何执行此操作的示例?[/引述]

     在C:\ti\TivaWare_C_Series-Slave.Examples\Peripherals\i2c\Slave_Receive_int.c.中有一个特定于从属设备的示例2.2 0.295  还有一个来自C:\ti\TivaWare_C_Serie-Sloop.works\Examples\Peripherals\i2c\master_slaver_looping.c.的主从属示例2.2 0.295 请参考这些示例。  

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

    您好,Charles,感谢您的回复。   起初,我认为master_slaver_loopback示例可能是我所寻找的,但它似乎只是一个I2C主示例,它使用TIVA环回 功能使相同 的I2C引脚*作为调试的从属设备*,而不是实际的从属设备。

    我要寻找的是一种使用两个TIVA开发板进行I2C通信的方法,其中 一 个可以随意切换到主模式,另一个可以切换到从属模式。

    我不确定I2C规范是否允许这样做。 我 现在将开始研究规范,但我想在您或论坛上的任何其他人认识 他人的情况下,发布回复。

    如果TIVA不允许这样做,我想我只需要在两个TIVA板上使用单独的GPIO引脚,就可以在 任何给定时间内将哪个引脚作为主控引脚,哪个引脚需要作为从属引脚进行通信。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="46.7243万" url="~/support/pulcs/arm-based微控制器-group/arm-based微控制器/f/arm-based微控制器-forum/109.8119万/tm4c1294ncpdt-i2c-simult-operation-as both1294 both -a-master-and -a-slaver/407.0154万"I2V#4070154"I  将407.0154万将在两个主板之间切换为其他模式的IVA/IVA/IVA/I模式[引用开发中的哪一种模式]

    不,我认为这是不可能的。 每个节点如何知道何时从主节点切换到从节点,反之亦然? 主控制器正在启动SCL时钟,而从控制器不启动SCL时钟。 为了使从属设备更改为主设备,需要重新配置I2C模块。  

    您是否有机会查看 C:\ti\TivaWare_C_Series-Tiv.Examples\Peripherals\i2c\Slaver_receive_int.c. 2.2 ?0.295 如果您查看代码,它将启用从属设备,尽管它也使主设备能够将数据传输到自身。  

    //
    //启用I2C0从属模块。
    //
    I2CSlaveEnable (I2C0_BASE);

    //
    //将从属地址设置为slaver_address。 在环回模式下,它是一个
    //发送到的任意7位数(在上面的宏中设置)
    // I2CMasterSlaveAddrSet函数。
    //
    I2CSlaveInit (I2C0_BASE,SLAVE_ADDRESS);

    //
    //告诉主模块它将在总线上放置什么地址
    //与从属设备通信。 将地址设置为slaver_address
    //(在从属模块中设置)。 Receive参数设置为false
    //表示I2C主设备正在向从属设备启动写入操作。 如果
    //正确,这表示I2C主设备正在启动读取
    //从属设备。
    //
    I2CMasterSlaveAddrSet (I2C0_BASE,SLAVE_ADDRESS,FALSE);

    //
    //设置用于显示消息的串行控制台。 这只是
    //对于此示例程序,不需要进行正确的I2C操作。
    //
    InitConsole();

    //
    //启用对处理器的中断。
    //
    IntMasterEnable();

    请注意,I2C模块可以在四种不同的模式下工作。  

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

    I2C规范(UM1.0204万 R6) Sec 3.1 8允许但不要求丢失仲裁的主中继器在运行时切换到从属模式并接受事务。 TRM (SPMS433B) Sec 18.3 .1.8 将仲裁损失视为致命错误,我认为这意味着(正如Charles所说的)它不会这样做。

    TIVA具有多个I2C装置。 每侧都没有理由不能使用2x I2C单元,一个主控单元和一个从属单元,所有4x都在同一总线上。

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

    感谢Bruce的见解!

    还要补充一点,该数据表提供了I2C从属操作的命令流程图。 还有用于主操作的流程图。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="9.362万" url="~/support/pulcs/arm-based微控制器-group/arm-based微控制器/f/arm-based微控制器-forum/109.8119万/tm4c1294ncpdt-i2c-simult-operation-as-both -a-master-and1294 -a-master-and -a-slaver/407.026万#4070260#slaver\spire_peripherals\cont_receive.\cont_inspir_iWare\inspir_ine.\cont_inspir_ine.\cont_inspir_inspira\cont_inspira\ine.\cont_inspira\ <xmt-block0>407.026万 2.2 0.295

    您好,Charles -是的,我刚才看了一下。  它与使用TIVA环回功能向自身发送数据的另一个示例非常相似。   它看起来仅对*singa* TIVA MCU能够作为*I自身*的主从非常有用。   与我所需要的使用案例不同,两个TIVA在使用单个I2C单元的情况下相互进行通话,但可以根据其他 TIVA在当时尝试的状态(主或从)在主和从之间切换。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    R204 秒407.0627万秒不会在3.1 上接受交易模式,但不会接受交易,而不会在上接受交易模式下的交易(U204。 [/引述]

    谢谢,Bruce。  是的,我知道规格说明...  具体而言,本部分:

    "如果控制器(主控制器)还包含目标(从控制器)功能,并且在寻址阶段失去仲裁,则获胜控制器(主控制器)可能正在尝试对其寻址。 因此,丢失的控制器(主)必须立即切换到其目标(从机)模式。"

    TIVA具有407.0627万具有多个I2C装置。 可能没有任何理由让每侧不能使用2x I2C装置,一个主控装置和一个从属装置,所有4x都在同一总线上。[/QUOT]

    设计此板的电气工程师告诉我他使用了所有可用的I2C装置,并要求我(固件工程师)研究使用 TIVA执行此类主/从开关的可能性。  显然TIVA上仍有一些针脚可用。  由于这种类型的主/从切换似乎是不可能的,我认为我们的下一个最佳计划是使用其中一个引脚来指示 何时应处于主/从模式。

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

    一种可能的策略是使每一侧都处于从属模式,除非它有一个要执行的主操作,之后它会立即切换回从属模式。

    这两种方式总是可能会尝试同时向对方发送主事务。 如果是这样,我预计一个人将获得仲裁失败的条件,而另一个人将获得一个不好的条件。 一种可能的策略是将仲裁丢失端重新配置(在固件中)作为从属设备,获胜的一方会重试几次。 这与您所询问的内容基本相同,只是不是自动的。

    我没有尝试过,但似乎可以。