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/CCStudio:I2C NACK 句柄

Guru**** 2585825 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/633443/ccs-ccstudio-i2c-nack-handle

器件型号:CCStudio

工具/软件:Code Composer Studio

根据"CSL_I2C_PollExample"、我正在使用 CSL I2C 写入和读取函数。 C5517器件。

我注意到、当发生 NACK 时、SCL 保持低电平。 我将在 I2C 总线上没有从器件的情况下对其进行测试、DSP 作为 I2C 主器件。

根据手册、用户应:

6.2.9.2用户对 NACK 的响应
用户在响应 NACK 时必须执行以下步骤。
1.设置 ICMDR.STP,它发送一个停止位并释放 SCL。
2.将 ICSTR.Nack=1置位以清除标志。
3.等待 ICMDR.MST 自清零、然后再启动更多的 I2C 事务。
当 MST 位清零时、控制器已经完成发送停止位。 通过验证 MST 位是否被清除
检查函数开始时 ICMDR.MST 是否等于0。 此检查允许处理器时间
要执行其它任务,但在 ICMDR.MST 被清除之前不启动一个新的传输。

CSL 函数是否处理 NACK 事件? 我是否必须按照手册中的规定添加处理 NACK 事件的代码?

谢谢你

Stefano

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

    您能否准确地分享您使用的 SDK? 哪个版本的 I2C 驱动程序?

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

    Yordan、您好!

    我 将 C55_CSL_3.04与 CCS5搭配使用。


    /**@文件 cSL_i2c.c
    *
    *@简要 I2C 功能层 API 源文件
    *
    *路径:\(CSLPATH)\ src
    *

    /*====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *修订历史记录
    *===================
    * 2008年10月8日创建
    * 2008年10月23日针对代码审核注释进行了更新
    * 2010年8月13日 CSL v2.10发行版
    * 2011年7月6日 CSL v2.50发布
    * 2012年9月13日 CSL v3.00版本
    * 2012年12月20日 CSL v3.01版本
    *====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *

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

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

    此外、我从 I2C_WRITE CSL 函数中注意到、数据发送后不会发送停止条件。

    如何使用 I2C_WRITE CSL 函数在 I2C 轮询模式下处理启动和停止条件? 我在 CSL_I2C_PollExample_out 上看不到停止条件。

    我需要使用 I2C 主发送器模式。 在我的应用中、我需要 输出到 I2C IO 扩展器。

    CSL_i2c_ioExpander .c 也无法帮助解决我的问题。

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

    Stefano、

    在 CSL_i2c_polled_example.c 的读取和写入 I2C 数据中似乎有一个 startstop 命令

    状态= I2C_READ (gI2cRdBuf、CSL_I2C_DATA_SIZE、CSL_I2C_EEPROM_ADDR、
    
    gI2cWrBuf、CSL_EEPROM_ADDR_SIZE、true、
    
    startStop、CSL_I2C_MAX_TIMEOUT、false); 

    您所说的缺失吗?

    Lali

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

    你好,Lali,

    感谢你的答复。

    我注意到 CSL 函数处理开始和停止、但查看 CSL_i2c.c 文件中的代码、我觉得它会将 ICMDR 寄存器中的 START 和 STOP 位置为有效。 阅读 C5517参考手册、我了解一旦数据 I2C 数据寄存器为0 (传输所有数据)、就会发送停止位。

    我的问题是:如果发生超时或 NACK、会发生什么情况? 如何处理超时/ NACK 条件? 我对此进行了测试、并使用示波器看到、一旦发生 NACK 或超时、SCL 保持低电平、BUSY 位= 1 (这是因为未发送停止条件!)。  

    我需要使用 I2C 轮询模式。

    谢谢、

    Stefano

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

    仍在等待一个好的答案。

    请告诉我。

    谢谢你