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.

[参考译文] MSPM0C1104:是否可以同时使用 I2C 通信和 LIN 通信?

Guru**** 2455560 points
Other Parts Discussed in Thread: MSPM0C1104

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1490094/mspm0c1104-is-it-possible-to-use-i2c-communication-and-lin-communication-at-the-same-time

器件型号:MSPM0C1104
主题中讨论的其他器件: MSPM0G3507

工具与软件:

尊敬的专家:

我们使用 mspm0c1104尝试在从模式下使用 LIN 通信(uart0)、在主控制器模式下使用 I2C 通信。 如果我们同时使用这两个、其中一方将不会由于中断优先级而工作。 是否有办法同时使用这两者?

(我们使用带有示例代码的 Lin 和 I2C 来实现了每个设计、每个设计都可以单独正常工作。)

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

    大家好、Donguk、

    请将 LIN 中断设置为最高优先级。 并尝试启用 I2C FIFO 以减少 I2C 的 CPU 占用资源。

    此致、

    Zoey

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

    Zoey、您好!

    目前、作为临时措施、我已设置 I2C 通信、其持续时间为 LIN 通信完全终止到下一个 LIN 通信的时段。
    但是、由于通过 I2C 通信要发送和接收的数据长度预计会增加、因此如果 I2C 通信的长度超过 LIN 通信之间的周期、则无法使用此方法。
    因此、必须可以同时进行通信。

    现在、如果 我同时进行通信、它会在中间断开连接。

    如您所说、我在项目中仅使用 ADC0、LIN 和 I2C 中断、因此 LIN 的优先级高于 I2C。

    我不太了解 FIFO。 我希望得到更多的解释。

    此致、

    Donguk

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

    什么是不起作用的? 从您所描述的内容来看、这似乎是一个策略/编码问题。 观察示波器跟踪可以发现、每个操作(I2C/LIN)似乎都要运行到完成、然后才允许另一个器件运行、这并非(通常)所必需的。

    I2C FIFO 始终启用。 您可以存储多达4个字节(每个方向),例如 DL_I2C_fillControllerTXFIFO()。 对于许多 I2C 器件(用法)、这是整个事务、在这种情况下、仅在开始和结束时需要 CPU 干预、并且当您使用 LIN 时、事务可以在后台运行。 借助100kHz I2C、FIFO 在交互之间提供(4*9*10usec)=360usec 的 I2C 活动。  

    此外、I2C 单元具有流控制功能、因此、如果 FIFO 变为空(Tx)或满(Rx)、总线将暂停(时钟延展)、直到 CPU 可以为其提供服务。

    我不太熟悉 LIN、但我知道 LIN 的实时性要求更严格。 即便如此、我认为这些数据是一个字节(9600bps 时为1ms)级别、而不是一个位级别。 凭借适当的中断优先级、只需允许中断为您"调度"、就可以使 CPU 与 I2C 的交互适应介于两者之间的情况。

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

    Bruce、您好!
    感谢您的回答。
    不幸的是、我不太擅长沟通策略。

    在我的示例中、我在 C:\ti\mspm0_sdk_2_04_00_06\examples\nortos\LP_MSPM0C1104\driverlib\i2c_controller_rw_multibyte_fifo_interrupts 中使用了 i2c、并在 C:\ti\mspm0_sdk_2_03_00_07\examples\nortos\LP_lnortos\lp_lw_multibyte_fifo_interrupts 中使用了 LIN。
    路径略有不同、因为我在开发过程中更改了 MCU。

    我对您的回答内容有疑问。

    I2C:它正在以400kbit/s 的速度进行通信、对于 TX、1个数据包的大小为8个字节(其中包括第一个字节中的从器件地址)、对于 RX (不包括第一个字节)为8个字节。
    我将 MCF8329用作 I2C 通信的从板、并遵循数据表中的 I2C 规则。

    LIN:它以19200bps 的速度进行通信、并通信8个字节的数据(如果包含同步字节、ID 字节和校验和字节、则为11个字节)。

    我不确定我的理解是否正确、但回答是否正确意味着 LIN 通信是基于字节的通信、因此如果在1个字节正在进行时中断不仅在字节的开头和结尾重叠、则可以同时通信。

    在我使用的示例中、当我使用调试器进行检查时、我确认 LIN 通信发生了29个中断1次。
    难以设想一种防止中断重叠的方法。 您还有其他示例代码吗?

    此致、

    Donguk

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

    LIN 和 I2C 并不存在不能同时运行的原因;争用发生在中断时、因此您希望这些中断更少/更短(我想吗?) 您通常需要选择 LIN 中断。 [我怀疑这是你刚才说的、但我想确定。]

    1) 1)您提到您已将 LIN 中断优先级设置为高于 I2C/ADC、但您的屏幕截图("中断配置")并没有实际显示出来。

    在这些示例中、每个中断优先级都设置为" ",其中(大概)意味着=0 (最高);更重要的是,优先级都是相同的。 由于您无法将 LIN 设置为高于=0、因此可以设置 I2C (和 ADC?) 较低(=1或=2)。 I2C 同时具有 FIFO 和流控制、因此它可以处理延迟一段时间的问题。

    以不同的优先级运行中断意味着 LIN 可以挤占 I2C 中断(代码)。 如果您小心地将两组数据分开(让 main ()作出决定),这可以很好地工作。

    2) LIN 指挥官使用回调发送 Rx 数据包。 这是从 LIN 中断调用的;示例回调非常简单、但在放入过多内容时应小心。

    3)也有一些设置可以改善 FIFO 的使用,但这些涉及稍多一些。 我想知道您从(1)本身获得了多少收益。