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.

[参考译文] SK-AM62:了解 MCU+SDK 8.05中的 I2C 驱动程序调用、并针对 FreeRTOS 应用程序进行修改

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1203945/sk-am62-understanding-i2c-driver-calls-in-mcu-sdk-8-05-and-modifying-it-adapt-for-freertos-application

器件型号:SK-AM62
主题中讨论的其他器件:ADS1015

大家好,  

我们想要使用 ADS-1015 ADC 芯片来读取模拟输入并在 Free RTOS (M4F)中生成器件驱动程序代码。

您能不能在这方面给我们提供指导吗?

我们可以在下面的路径中看到 TI 在 Linux 中具有相同的驱动程序,但我们能帮助我们定义 FreeRTOS 开发所需的内容吗?

 

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

    你好

    您指向您的驱动程序是由 Intel 在2016年开发的社区驱动程序、它并未明确与 AM62相关联。 TI 为 TI EVM 上的组件提供通用驱动程序。  

    您需要的是更多的自定义支持、位于免费 RTOS 上。 这不是我们能够直接促进的。 如果您在定制电路板上实现此功能,并且 MCU+ SDK 附带的 I2C 驱动程序出现问题,我们可以尝试提供一些指导。 没有计划针对特定客户/自定义请求开发任何特定驱动程序。

    此致

    Mukul  

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

    尊敬的 Mukul:

    我理解您上面的陈述、但由于 ADS-1015是 TI 的 ADC 芯片。

    我们需要您帮助、确定需要对数据表中的寄存器执行哪些最低配置才能开始从 I2C 线路读取数据。

    我们将基于 Free RTOS 和 No RTOS Based API 创建最起码的骨架驱动程序。

    PFA 在我们所指的数据表中、如下所示

    e2e.ti.com/.../ADS101x_2D00_Q1.pdf

    谢谢。此致、

    Pawamana Tanjore。

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

    尊敬的 Mukul:

    由于我们使用多个输入通道、因此我们有一些查询。 以下是我们的要求

    • 使用   0x0001U 值选择使用地址指针寄存器配置寄存器,将其写入 I2C 以选择 输入作为 AIN3
    •  向配置 寄存器写入111二进制、以选择 AIN3作为输入  
    • 现在、使用地址指针寄存器 0x0000U 再次选择转换寄存器、并将其写入 I2C
    • 因此、我必须执行2次写回2次。
    • PDF 文档在下面附加有一些方法,你能理解实现它的逻辑吗?

    您能否通过共享一些此逻辑的伪代码来指导我?

    谢谢。此致、

    Pawamana Tanjore。

     

     

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

    尊敬的 Mukul:

    你能回答同样的问题吗?!

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

    Pawamana,

    您能否帮助我了解您的硬件设置是否正确、以确保硬件问题不会出现。

    此外、您是否还看过 https://software-dl.ti.com/mcu-plus-sdk/esd/AM62X/08_06_00_18/exports/docs/api_guide_am62x/EXAMPLES_DRIVERS_I2C_READ.html 上的 I2C 读取示例

    支持 MCU 域的 I2C 驱动程序,请在这里的构建表 https://software-dl.ti.com/mcu-plus-sdk/esd/AM62X/08_06_00_18/exports/docs/build_sheet/am62x-sw-buildsheet.html 中进行检查

    此致

    Anshu

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

    是的、Anshu、我已经验证了示例代码并且开始使用与参考相同的代码来实现。

    e2e.ti.com/.../2100.ADS101x_2D00_Q1.pdf

    我将遵循  上面随附的 ADS-101x 数据表的第9.1.7节快速入门指南。

    下面是代码、我要选择 AIN3作为 ADC 芯片 ADS-1015的输入

            /* found temperature sensor */
            /* Set configuration register to select AIN3 in 1015 */
            I2C_Transaction_init(&i2cTransaction);
            i2cTransaction.writeBuf   = txbuffer;
            i2cTransaction.writeCount = 3;
            i2cTransaction.slaveAddress = deviceAddress;
            txBuffer[0] = ADS101X_CONFIG_REG;
            txBuffer[1] = 0xF5; /*3rd byte is to select AIN3 input */
            txbuffer[2] = 0x83; /*4th byte is  selected as default */
            status = I2C_transfer(i2cHandle, &i2cTransaction);

    您能否建议/确认此方法是否是写入 Config 寄存器的正确方法、以选择 AIN3引脚作为 ADC 芯片 ADS-1015x 的输入。?

    请更正并提供一些指导、说明这是一种错误的方法。

    目前我们没有板载 ADC 芯片来验证代码结果、因此您的指导可以为我们提供很多帮助。

    谢谢。此致、

    Pawamana Tanjore。

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

    尊敬的  Anshu Choudhary/Mukul

    希望我的问题很清楚、请提供您的答案。

    我们有兴趣就此话题进行一次简短的电话询问相关问题。

    BR

    Pawamana.  

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

    尊敬的  Anshu Choudhary/Mukul

    您可以在优先级上地址该主题吗?

    BR

    Pawamana.  

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

    Pawamana,

    我认为我们无法帮助您进行自定义驱动程序开发。 我还建议使用 ADC ADS101x EVM 进行驱动程序开发。 使用逻辑分析器(如 saleae) 来验证初始帧结构也将很有帮助。 我 还将尝试与我的 ADC 团队中的同事联系、看看他们是否可以提供帮助。

    此致

    Anshu  

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

    Anshu、您好!

    我能够使用示例...!

    但是、我需要一些关于下面突出显示的意见的输入、来自 ADS-101x 数据表、希望 至少 在下面的问题中您可以帮助我们...!

    8.6.2转换寄存器(P[1:0]= 0h)[RESET = 0000h]
    该16位转换寄存器包含的上一次转换结果采用二进制补码格式。
    转换寄存器在上电后清零、并在第一次转换完成前保持为0

    • 为什么最后一次转换以二进制补码格式存储..?
    • 我们是否需要将该二进制补码转换为正常二进制
    • 如果我们确实需要符号扩展、在出现负值时我们需要做什么
    • 请分享该代码段

    BR

    Pawamana Tanjore。

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

    Pawamana.  

    这些问题最好由 ADC 论坛的专家来回答。 这些是以 ADC 为中心的问题。

    我将把问题转给相应的业务部门。 感谢您的耐心等待。

    此致

    Anshu

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

    Anshu、您好!

    我最近在 TI 网站上看到了一些与 i2c 编程相关的文档。

    请找到 相同的屏幕截图、我已下载代码。

    下面链接和屏幕截图中提到的这段代码 看起来与我尝试为 ADS1015 ADC 实现的代码类似(NoRTOS + Free RTOS)

    ADS1115示例 C 代码软件

    • 您能 仔细查看一下这个问题吗?是否针对 FreeRTOS + NO RTOS (M4F)内核的示例代码提供此代码?
    • 如果是,为什么这个链接没有提供所有这些天..!
    • 如果有更多与此类似的用于连接 不同传感器的 ADC (ADS1015)的链接代码片段、请分享。
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Pawamana ,

    我很高兴您可以在 ADS115产品页面上找到资源。 我将把您的问题发送给 ADS 专家。

    此致

    Anshu

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

    尊敬的  Pawamana:

    我很抱歉你的失望。  您可能发现了 TI 提供用于与 ADS101x 器件通信的工具。  您找到的最新"C"代码应该是适用于大多数微控制器的通用代码、它要求 您在使用软件时、需要遵循针对 I2C 外设的适当驱动程序调用。  您可能还需要查看 最新的 ADS101x-Q1数据表 、因为它可能对您有所帮助。  最近刚刚更新。  图7-10以时序图显示写入过程。  因此、与两次背靠背写入相比、您可以通过对器件进行单次写入来简化此过程、既可以设置指针、也可以写入配置。

    我将尝试回答您的具体问题、因为它们与 ADS1015相关、但我可能无法回答有关 AM64x 用法的具体问题。  ADS1015可进入低功耗状态、并默认采用单次触发工作模式。  这意味着该器件要求在您每次希望进行转换时通过写入配置寄存器将位15设置为1。

    因此、要在 AIN3/GND 上启动转换、您的正确配置应该设置为0xF583。  因此、您展示的代码片段似乎是正确的。

    8.6.2转换寄存器(P[1:0]= 0h)[RESET = 0000h]
    该16位转换寄存器包含的上一次转换结果采用二进制补码格式。
    转换寄存器在上电后清零、并在第一次转换完成前保持为0

    • 为什么最后一次转换以二进制补码格式存储..?
    • 我们是否需要将该二进制补码转换为正常二进制
    • 如果我们确实需要符号扩展、在出现负值时我们需要做什么
    • 请分享该代码段
    [/报价]

    无论使用差分输入测量还是单端输入测量(以 GND 为基准)、ADS1015的 ADC 转换结果始终为二进制补码。  这就是说、结果始终是 AINP 相对于 AINN。  由于 AINN 连接到 GND、因此您将只受器件的+FSR (满量程)限制、不受任何负向偏移的限制。  使用二进制补码的优点是符号位将始终指示结果是正还是负。  有很多方法可以实现正确的符号扩展。  变量应为有符号整数或短整数。  对于此器件系列、我通常要做的是收集 RX 缓冲区中的转换结果并放入一个短整数中。

    // Assign short signed integer to variable result
    short int result;
    result = (rxBuffer[0])<< 8) | rxBuffer[1];
    //Right-shift binary 2's complement result to 12 bits
    result = result >> 4;

    如果您有其他与 ADS1015相关的问题、请告诉我。

    此致、

    Bob B