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.

[参考译文] TM4C129XNCZAD:I2C 写入数据问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/612171/tm4c129xnczad-i2c-write-data-issue

器件型号:TM4C129XNCZAD
主题中讨论的其他器件:UCD90120A

我正在开发 I2C 写入函数、以参考线程将数据写入 UCD90120A

但是、除非我添加如下所示的延迟、否则我无法使代码正常工作

--***** ----

内部
I2C_Single_Write (uint8_t ui8Command、uint8_t ui8Data)


 // while (!I2CMasterBusy (I2C1_base)); //检查 I2C 主设备是否忙,因此等待
   uint32_t 错误;

   I2CMasterSlaveAddrSet (I2C1_base、UCD_I2Cadr、false);// ucd addr 从器件
   I2CMasterDataPut (I2C1_base、ui8Command);//将命令放置到 I2C1
   I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START);//发送
   SysCtlDelay(1);
   while (I2CMasterBusy (I2C1_base)); //检查 I2C 主设备是否占线、因此等待


   I2CMasterDataPut (I2C1_base、ui8Data);//将数据放入 I2C1
   I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_FINISH);//发送
   SysCtlDelay(1);
   while (I2CMasterBusy (I2C1_base)); //检查 I2C 主设备是否占线、因此等待

   返回0;

------

这样做的原因可能是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Rakesh、
    您能解释一下如果您不添加 SysCtlDelay(1)将发生什么情况吗? 它是否只是经过 while (I2CMasterBusy (I2C1_base)语句? 如果是这种情况、我唯一能想到的是 I2C 状态机尚未转变为设置繁忙标志的状态、此时 CPU 正在轮询该标志。 SYSCLK 和 I2C 的速度是多少?

    另请参阅 I2C 应用手册、 该手册将对 www.ti.com/.../spma073.pdf 有所帮助
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    请允许我注意、供应商的 Amit (您的同事)提供了一个"背靠背"("切换"的状态检查)-由于129类器件在具有 I2C 时实现了更高的速度、这看起来是"必需的"。   (在此处可通过论坛的搜索框进行搜索/查找...)

    这种"背靠背"(状态切换机制)消除了对(另一种)延迟的需求...

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

    您好、Charles、

     如果我必须在"完成"byte....in 之前发送更多的数据字节、则问题就变得不可解决

    1) 我为 START 命令添加了1个延迟

    2) 我必须为连续字节添加45个延迟

    3) 我为完成字节添加了1个延迟...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    超级棒! 我将搜索相关帖子。 非常高兴您和 Robert 等人一起为您提供这些宝贵的提示。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Rakesh、
    我可以找到一个由我的同事回答的帖子、他建议替换:

    while (I2CMasterBusy (I2C8_BASE));

    使用

    while (!(I2CMasterBusy (I2C8_BASE)));

    while (I2CMasterBusy (I2C8_BASE));

    e2e.ti.com/.../1250522

    请尝试将 I2C8替换为您的 I2C1。

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

    您好、Charles、

    就是这样-没错!
    虽然非传统的-许多人已经使用和-但在"非常特殊的情况"下-这对于129类 MCU 很有用。 (不能与123类一起使用...)

    海报应理解采用"这种背靠背延迟机制"所获得的简单性、这将为他节省时间/精力来确定"不同的持续时间延迟"。

    我希望、获得"相似"(现在被禁止)也许我们的海报可以授予"满意我的问题"绿色点击...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当然、如果它还在那里、我会给您"喜欢"的感觉。 不要责怪我。 我没有将其删除。 :-)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    查尔斯

    我肯定知道,“你”不是“有罪的一方”。    您也不是向海滩前的位置"推销"博客、团体、视频的人。   (如此浪费——无愧——如此“难以理解和接受!”)

    使用"论坛页面顶部"来"快速、轻松、增强"该论坛所界定的器件(此处的 MCU)相关的(大多数)所有重要技术数据的位置并进行查看、这是否"合理"?  

    "强迫用户离开"论坛-而不是 Google -或 Digikey  (上帝禁止-客户-用户 可能会遇到竞争对手的卓越设备)有何意义?   

    舒适度和便利性长期以来一直被证明是畅销产品-在当前论坛设计中、既没有"超越"(甚至不爬出)...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    您的建议得到了很好的采纳。 我们正在进行一些讨论、以便为论坛社区创建一些常见问题解答注释。 仍处于规划阶段。 我还没有时间线。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    [引用用户="Charles Tsaaa"]为论坛社区创建一些常见问题解答备注的讨论

    谢谢您-这肯定会对您有所帮助。  (可能-假设论坛用户可以找到此类备注!)

    也就是说、这些"常见问题解答备注"不应该是"容易快速记录"、这意味着它们(或它们的链接)在论坛页面上"嵌入"了吗?   迫使论坛用户离开论坛-在"搜索"明显和必要的"-"论坛相关技术文档"-证明很难证明其合理性并证明其具有明显优势...   (除克拉西制造之外!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    是的、这确实是计划。 TM4C 论坛条目页面顶部提供了一些常见问题解答链接或便利贴。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Charles Tsaaa"] TM4C 论坛条目页面顶部的一些常见问题链接或便签。

    感谢 Charles -请允许我们注意、"便签"(由 Amit 编写)已"(非常)接近论坛页面顶部。   (因此,这方面没有"真正"的改进)

    常见问题解答链接很受欢迎-但(实际上)几乎所有相关/有用/指导的 MCU 技术数据都应该是"容易 发现且可链接"-而无需客户-用户"离开论坛页面!"

    您的论坛页面应显示为"Central Data、Info & Idea Repository"、其中包含与 TM4C 相关的所有技术内容。    (哪一项会以指数方式增加论坛的使用和价值-这是什么-是不是?)

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

    您能解释一下如果您不添加 SysCtlDelay(1)将发生什么情况吗?

    在行中、我无法观察到结束字节的 i2c 事务。该事务以列表18个时钟终止。 如果我在 SysCtlDelay 处添加一个 brk、那么完成字节溢出...

    它是否只是经过 while (I2CMasterBusy (I2C1_base)语句?

    如何测试??

    SYSCLK 和 I2C 的速度是多少?

    SYSCLK 为120MHz、I2C 为400kHz

     您是否建议我用类似的东西替换 SysCtlDelay(1)?? 这是我可以从另一个评论中理解的

    while (!I2CMasterBusy (I2C1_base));//检查忙

    while (I2CMasterBusy (I2C1_base));//检查主设备是否空闲

    如果是,这不会影响可重入性??

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在文档 spama073.pdf 中... 它是指示例代码示例 ektm4c129_i2c_master_cpu_fifo、ektm4c129_i2c_master_udma_fifo 等...我在 TivaWare_C_Series-2.1.3.156等 Tivaware 文件夹中找不到上述示例 从何处获取使用上述功能的示例代码??..
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    这是我提到的为 I2CMasterBusy 添加后对背的检查的帖子。
    e2e.ti.com/.../1250522