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.

[参考译文] Linux/INA223:INA223的Linux内核驱动程序和应用程序

Guru**** 2542620 points
Other Parts Discussed in Thread: INA223, INA226, INA219, INA233

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

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/662787/linux-ina223-linux-kernel-driver-application-for-ina223

部件号:INA223
主题中讨论的其他部分: INA226INA219INA233

工具/软件:Linux

您好,先生,

我们正在使用INA223对其中一个ARM板进行电压/电流监控。

它与I2C总线连接,主板与Linux kernel v 4.1 兼容.................................................................15

我想知道是否有任何Linux驱动程序和用户空间应用程序可以加快我们使用此设备的开发速度?

非常感谢您的帮助。 期待您的回复。

如果您需要更多信息,请告诉我。

谢谢!

Siva

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

    我们没有任何Linux驱动程序。 尽管您很可能会找到Linux代码与INA223或其他在线设备进行通信。 我通过快速简单的搜索在网上找到了这个源代码。

    code.woboq.org/.../ina2xx.c.html

    这适用于INA226,INA219和其他型号,但我们所有的数字电流并联监视器都与I2C通信协议非常相似。 希望这有所帮助。

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

    我们的网站上提供了驱动程序代码,请参阅链接belw。 和我之前发的邮件相比,看起来是一样的。

    www.ti.com/.../ina2xxsw-linux

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

    您好,Peter,

    感谢您的意见。  

    我尝试交叉编译相同的代码。 但我收到 了以下错误

    drivers/hwmon/ina2xx.c:在函数'ina2xx_probe'中:

    drivers/hwmon/ina2xx.c:447:27:错误:函数'of_device_Get_match_data'的隐式声明;您的意思是'of_device_Get_modalias'吗? [-Werror=implicit-function-declaration]
    CHIP =(enum ina2xx_IDs)of_device_GET_MATCH_DATA(&client->dev);

    如果您之前知道此错误。 首先请告诉我。

    似乎需要在添加标题的代码中进行一些修改。

    谢谢!

    Siva

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    实际上,您之前通过Google搜索提供的代码不支持设备树
    但最新帖子中提供的代码支持设备压力。
    我的Linux内核v4基于设备压力来检测设备。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这不支持设备压力
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正在获取编译错误!!!
    drivers/hwmon/ina2xx.c:在函数'ina2xx_probe'中:

    drivers/hwmon/ina2xx.c:447:27:错误:函数'of_device_Get_match_data'的隐式声明;您的意思是'of_device_Get_modalias'吗? [-Werror=implicit-function-declaration]
    CHIP =(enum ina2xx_IDs)of_device_GET_MATCH_DATA(&client->dev);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Siva,

    很抱歉看到您的问题。 我不是Linux专家,但是当我在线查看库"<linux/of_device.h>"时,我没有看到名为"of_device_GET_MATE_DATA"的函数。 在编译代码之前,可以尝试用以下选项替换此函数:

    of_device_Get_modalias
    驱动程序匹配设备

    此外,此驱动程序源代码不包含INA233,但INA233 I2C与我们的其他设备(INA226,INA219等)非常相似,因此可能需要对源代码进行一些细微的修改,例如确保注册位置正确,并将INA233添加到"module_device_table"中。

    我希望这能有所帮助。
    此致,
    Peter Iliya
    电流感应应用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Peter,

    感谢您的支持。

    现在,我成功编译了驱动程序,对device_id进行了正确的更改 ,并且成功插入了模块。  

    但我没有看到在/sys/class/hwmon/下创建的相应文件夹

    在我的情况下,hwmon0是温度区。 我只能看到该文件夹。

    我使用此驱动程序的路径是否正确?

    我不确定如何使用驱动器读取寄存器值或电压/电流值。  

    当我使用i2cdetect -y 3探测时,我能够看到具有I2C地址0x41的器件

    请告诉我 ,如果您需要更多信息,我可以分享代码供您参考。

    期待您的帮助

    谢谢!

    Siva

    谢谢!

    Siva

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

    您在/sys/class/hwmon中查找哪个文件夹? 我建议尝试通过命令行界面发送类似于"i2cdetect -y 3"的单独读/写命令。 无论使用什么I2C库,都必须具有i2c读写命令。

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

    我不确定要从i2ctget读取的寄存器地址(配置寄存器)

    i2cdump提供以下值
    根部@imx7d-pcm-061-211.1101万e:~# i2cdump 3 0x41 b
    警告! 此程序可能会混淆I2C总线,导致数据丢失,甚至更糟!
    我将探测文件/dev/i2c-3,地址0x41,mode byte
    是否继续? [Y/n] y
    0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
    00:00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    10:00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    20:00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    30:00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    40:00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    50:00 00 00 00 05 1e 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    60:00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    70:00 00 00 00 05 1e 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    80:00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    90:00 00 00 00 05 1e 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    A0:00 00 00 00 05 1e 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    B0:00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    C0:00 00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    d0:00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    E0:00 00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...
    F0:00 00 00 05 1e 00 00 00 00 00 00 00 00 00 00 00 05 1e 00 00?? ??...

    我无法从数据表中找到注册地址。
    请您提供配置寄存器地址,然后我将从i2ctget读取该地址。

    基本问题如果我能够在用户空间中从i2ctools处理设备,那么这里的INA2XX驱动程序有什么作用?


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

    配置寄存器地址为0x00。 这是因为这是设备中的唯一注册。 您将写入此寄存器(0x00),以便为并联和总线电压测量设置增益并设置输出模式设置(数据表中的表1)。 由于设备中只有一个寄存器,一旦将指针设置为0x00,您就可以使用3字节读取命令获得测量值,如图40所示。

    Linux中的i2c-tools库提供了一个通过命令行与设备进行通信的基本库。 Linux驱动程序可在您的系统的内存中提供特定于设备的功能。 这将使写入固件更容易。

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

    您好,Peter,

    现在我可以在下面看到ina223设备

    # cat /sys/class/hwmon/hwmon0/name

    ina223.
    # cat /sys/class/hwmon/hwmon0/curr1_input
    352.
    # cat /sys/class/hwmon/hwmon0/in0_input
    0
    # cat /sys/class/hwmon/hwmon0/name
    ina223.
    ~# cat /sys/class/hwmon/hwmon0/power1_input
    0

    在dmesg中,我可以看到  

    ~# dmesg | grep ina223.
    [ 0.24.6615万 ] i2c i2c-3:of_i2c:寄存器/soC/AIS-bus@30.8万/i2c@30a5万/ina223@41
    [ 0.24.6772万 ] i2c i2c-3:使用总线ID 3-0041注册的客户端[ina223]
    [ 1.87.1869万 ] ina223 3-0041:探测
    [ 1.87.2693万 ] ina223 3-0041:电源监控器ina223 (分流器= 1万 uOhm)
    [ 1.87.788万 ] i2c-core:驱动程序[ina223]已注册
    [ 4.55.1582万 ] ina223 3-0041:uevent
    [ 4.63.5567万 ] ina223 3-0041:uevent
    [ 4.63.582万 ] ina223 3-0041:uevent
    [ 4.63.6053万 ] ina223 3-0041:uevent

    现在,在这个阶段,我不确定如何从驱动程序填充的系统文件系统中读取电流和电压读数。 请您提供帮助。

    如何使用ina223驱动程序从sysfs更改配置寄存器值。

    请向我提供您对此主题的意见。 期待您的回复

    此致,

    Siva

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

    您不能通过I2C读取INA223的电流或电压,它是仅模拟输出设备,而不是I2C。 I2C接口仅用于选择从模拟输出引脚发送的信号,然后您必须自己对该信号进行采样。

    如果您想要通过I2C读取这些值,请选择此系列中具有内部ADC的设备之一。 如果您还想获得Linux支持,我建议您使用Linux驱动程序中列出的设备之一,因为这些设备已经受支持。

    Andrew

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

    您好,Andrew,

    感谢您的参与。 我正在使用Linux驱动程序和lmsensor应用程序读取这些值。 以下是输出

    #传感器

    ina223-i2c-0-41
    适配器:30a2000.i2c
    in0:+ 0.00 V
    IN1:+ 0.00 V
    POWER1:0.00 W
    电流1:+ 1.21 A

    Linux驱动程序适用于ina226。 但主板上的设备是ina223。 我不确定是否需要在驱动程序中进行任何修改以获得正确的值。

    并联电阻值为5万微欧姆

    从以上输出。 它显示in0,in1和power1的0值。 请在我遗漏的地方提供您的意见。  

    提前感谢您的快速响应。

    此致,

    Siva

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不是使用i2ctools访问设备,而是使用Linux驱动程序,它负责样本。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    INA223与INA226驱动程序不兼容。 INA223不能通过I2C输出电压或电流,因为与INA226不同,它没有内部ADC。 无论您使用哪种驱动器或工具都不会为您提供I2C上的电流或电压。 如果需要读取I2C上的电流或电压,请使用INA226。

    Andrew

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

    您好,Andrew,

    从该线程的早期文章中,建议我们可以通过简单的i2c工具以及Linux驱动程序来读取该设备。  

    但从您的最新帖子中可以看到,我们访问此设备的方向不正确。

    在此阶段,如果我想继续使用INA223设备来测量电流和电压读数。 我是否需要将模拟输出连接到任何ADC?

    如果是,请指出INA223设备的一些专用应用说明。  

    提前感谢您的帮助。  

    此致,

    Siva

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

    您好,Siva,

    是的,在早期的线程中,在驱动程序兼容性方面确实有一些混乱。

    您的答案是正确 的,即您需要将模拟输出连接到ADC。 您选择的哪一个在您的应用程序上是加速的,例如,如果许多应用程序处理器和微控制器内置了一个,您可以在其中连接和读取。 如果您没有可用的ADC,那么使用外部专用ADC可能会更麻烦,因为它值得使用,您应该只使用INA226,它内置了一个,它们 只需几分钱。

    谢谢!
    Andrew