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.

[参考译文] CCS/EK-TM4C123GXL:TM4C123上的两个 I2C 从端口同时处于活动状态

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/627525/ccs-ek-tm4c123gxl-two-i2c-slave-ports-active-at-the-same-time-on-the-tm4c123

器件型号:EK-TM4C123GXL
主题中讨论的其他器件:TM4C123ENERGIA

工具/软件:Code Composer Studio

您好!

我正在尝试使用 TM4C123G 仿真2个 i2c 从器件。 基本上、我需要能够在两个地址中接收 i2c 作为从器件。

因此、从我作为 i2c 主器件的 rasberry PI、我连接到 SCL2/SCL3和 sda2/sda3、并连接10K 上拉电阻器。

以下代码部分工作。 i2cdetect 将检测0x40和0x42上的两个器件、但您只能写入0x42 -如果您写入0x40、则会崩溃。 如果代码被注释掉以一次启用一个 i2c 总线、它将适用于任何一个 i2c 总线。 我使用了10K 电阻器、这可能是问题所在。

但是、如果 tm4c 有双地址方案、那将会很好、所以我不会再花这些额外的引脚。

任何想法/帮助/推荐都非常感谢。

此致、

C.A.

#include 

void setup(){

Wire.setModule(2);
Wire.onReceive(receiveEvent2);
Wire.begin(0x40);

Wire.setModule(3);
Wire.onReceive(receiveEvent3);
Wire.begin(0x42);

Serial.begin(230400);
Serial.println("init");
}

void loop(){
}


void receiveEvent2(int n){

Wire.setModule(2);
Serial.print("2:\t");
while (0 < Wire.available ()){
int c = Wire.read();
serial.print(c);
serial.print ('\t');
}
serial.println ();
}

void receiveEvent3 (int n){

Wire.setModule(3);
serial.print ("3:\t");
while (0 < Wire.available ()){
int c = Wire.read();
serial.print(c);
serial.print ('\t');
}
serial.println ();
}

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

    您为什么会考虑10K 上拉 Rs A (潜在)问题?  (它们比更高的值 MCU 内部 Rs 有效得多。)

    您已经介绍了独特的"仅限于函数调用"(所有"代码详细信息"均为"隐藏"、这证明(超出)大多数人(或可能的任何地方)审查和指导/评论的能力。

    您必须意识到、您的"实际"代码是必需的"(仅调用函数-证明输出(大量)值)-("大量"-是种类...)

    例如、您会调用"Wire.setModule(2);"  、在这里、任何人都如何"知道"该函数的工作原理?   以及"代码实现的正确性?   除了"Serial.print()"-我们可以"猜中的"Serial.print()"-我/他人-没有线索!    

    在这里寻求帮助时、您的工作是否不是提供此类(必需)详细信息?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、
    TM4C123支持第二个从器件地址。 有关详细信息、请参阅数据表。 它同时具有 I2CSOAR 和 I2CSOAR2寄存器。 我认为对于标准速度的上拉、10K 应该是可以的。 它将取决于 I2C 速度和总线上的总电容、具体取决于您拥有的器件数量。 但是、要计算 I2C 上拉电阻、您可以参考此应用手册。 www.ti.com/.../slva689.pdf

    我对 Energia 没有太多经验。 如果您想充分利用 MCU 的功能、我建议您使用 TivaWare 库。 下面是用于配置两个不同从地址的 API。

    16.2.2.36 I2CSlaveAddressSet
    设置 I2C 从器件地址。
    原型:
    无效
    I2CSlaveAddressSet (uint32_t ui32Base、
    334 2016年7月25日
    内部集成电路(I2C)
    uint8_t ui8AddrNum、
    uint8_t ui8SlaveAddr)
    参数:
    ui32Base 是 I2C 模块的基址。
    ui8AddrNum 确定设置的从地址。
    ui8SlaveAddr 是7位从器件地址
    描述:
    此函数写入指定的从器件地址。 ui32AddrNum 域决定哪个从设备
    地址已配置。 例如、值0用于配置主地址和值
    配置次级侧。
    注:
    并非所有 Tiva 器件都支持一个次地址。 请参阅器件数据表至
    确定是否支持此功能。
    返回:
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    我们的海报没有提到"Energia"- 海报的主题栏、帖子的正文和标签中完全没有提到这一点
    我记得您曾被"保留了有关"Energia 的使用"(由于其限制)-但您(不知为何)(现在)已经将海报的函数调用识别为"基于 Energia "。

    因为"Energia"有自己的专用论坛、而海报中没有提到"Energia 的独家使用"、"非 Energia 用户"如何"知道"Energia"是"在使用中"?

    您是否可以建议此类海报-在展示(预期的)"正常/习惯"TM4C 风格和用法的问题和代码时-他们应该(部分)提及其"特殊用途?"  如果我对 Energia 有一点"暗示"-我不会浪费时间/精力...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    你是对的。 重新阅读该海报未具体提及 Energia 的帖子。 他提到了 Raspberry Pi、代码使用"Wire"库为 I2C 呈现 Energia 草图。 但它可能是 RP 的代码。 让我们等待海报的澄清。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1_MODULE、

    您是对的-这是 Energia 代码、我应该已经将其标记为正确的代码。
    虽然我也使用 CCS、但我通常会在 Energia 中进行原型设计、然后将其导入 CCS。 基本上、我将从 Energia 过渡到 CCS。

    谢谢、
    -ca