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 从设备:何时可以使用 NACKing?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/597419/tm4c1294ncpdt-i2c-slave-when-is-nacking-possible

器件型号:TM4C1294NCPDT

您好!

我目前正在实施一个小型 I2C 从设备、该设备将向实施主设备并与从设备通信的学生演示 I2C 通信(在回送模式下、但我目前已使用外部上拉电阻器对其进行设置以进行调试)。 为此、我希望实现在错误检测/传播方面表现得尽可能好、即、只要主器件的行为不符合预期、我就想 NACK。 我的从器件实现了一个典型的基于寄存器的器件、即主器件需要通过 I2C 来寻址从器件、然后写入一个寄存器地址、然后它最终可以读取或写入从器件的寄存器。

它基本上可以工作、但我希望返回的 nack 比我目前要多。 但是、在某些情况下、我的从代码会停止主代码而不是 NACKing、并使其中止事务、这是我不理解的。 例如、当我在 I2C_SLAVE_INT_DATA 中断中提供 I2C_SLAVE_ACT_TREQ 时、我希望 NACK 该请求而不是返回数据(我认为 NACK 有效)。 为此,我尝试执行 I2CSlaveACKValueSet (...,0)而不是 I2CSlaveDataPut ()。 但是、当我这么做时、事务(如逻辑分析仪所示)在主器件发送寻址字节和从器件发送 ACK 后变为保持状态-请记住、尽管我尝试 NACK。 我假设失速是由从器件的时钟拉伸引起的、但我不确定。 我想知道我是否可以使用 TM4C1294NCPDT 从器件进行任何尝试。 基本上,我想知道在哪个调用 I2CSLaveACKValueSet()的 instants 会产生影响,因为 MCU 数据表和 TivaWare 文档都没有接近这一数量的细节。

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

    几年前、公司和我尝试设计了"多串行模式诊断设备-带显示屏"。 (显示报告的成功或失败-并清楚地报告(英文)用户的错误。) 而且、与您的结果非常相似、我们在"简单"方面取得了成功、但在 I2C 和 CAN 操作(两者都比较困难)方面却没有取得太大的成功。 (我们的产品包括 UART、SPI、I2C 和 CAN。)

    最后、我们通过"放弃内置 I2C/MCU 支持并诉诸位拆裂来实现(大多数)这些"涉及的函数"。    我们卖给了不到10所学校----我们目标的十分之一----并找到了(其他)混凝土结构----这邀请了我们的(硬)校长。

    一件真正有帮助的事情-我们从多个 ARM 供应商那里读取了相关数据(因此很少在这里这么做)-这是我们能够"测试"数据级别的唯一方法-真的需要...

    然后(和我们一起)-现在(和您一起) I2C 从设备实施不适当地使我们老化-并导致许多"错过"的晚间活动... (您(可能)是一个较小的岩石、还是一个较短的山?)    (即、您(真的)是否需要所有这些(非常)少数民族 I2C 的"用例"-您认为(很好)额外的努力将"得到认可"并获得回报?)