DA9063版本和寄存器映射

15个员额/0个新员额
最后一篇
Pinkpr.
离线
最后一次露面:2年7个月前
加入:2017-11-14 08:34
DA9063版本和寄存器映射

你好,

我是一个嵌入式系统工程师为我的公司开发BSP,我们使用对话框DA9063-3FHK1 PMIC。雷电竞下载app

在为PMIC监管者监控实现Linux支持时,我发现不同的版本
存在DA9063 PMIC。他们没有相同的寄存器地图。

因为我无法弄清楚什么注册地图我的PMIC版本属于,我在这里发布,以便知道
如何查找在DA9063-3FHK1版本中实现的确切寄存器映射。

此致,

Pinkpr.

设备:
对话
离线
最后一次露面:1个月3周前
职员
加入:2017-09-18 11:54

你好

检查寄存器值的最佳方法是使用DA9063 GUI,这将允许您检查每个寄存器及其功能。-3fhk1代码描述了包,3f是变体编号(OTP),HK1是物理包细节。

3F变型正在被82变型取代,但该变型仍在发布过程中。我建议将来使用82变体。

亲切问候,,

艾略特德克斯特

点击在这里对于DA9063 GUI的链接。

Pinkpr.
离线
最后一次露面:2年7个月前
加入:2017-11-14 08:34
嗨艾略特,谢谢

嗨Elliott,谢谢你的回答。

从我理解的那样,DA9063 GUI被制作与DA9063 eVAL板一起使用。
我没有这个评估板,而且我在互联网上找不到DA9063 GUI。

我实际上并不试图在OTP中找到什么,但我只是想检查我的PMIC版本上的寄存器地址是否符合Linux源文件中写的内容。
我特别喜欢检查ADC部分。Linux内核中没有为DA9063实现的ADC功能,这就是我正在研究的内容。

Pinkpr.

对话
离线
最后一次露面:1个月3周前
职员
加入:2017-09-18 11:54

你好Pinkpr,

DA9063图形用户界面

GUI本身可以在没有性能或eval板的情况下使用,这将允许用户检查和编辑OTP寄存器设置,但不允许用户使用PMIC检查OTP。

点击在这里对于DA9063支持页面。GUI被称为PowerCommander

芯片ID和变体

DA9063驱动程序中有两个寄存器映射。广告表和BB表,BB表用于DA9063驱动器。

芯片ID和变体寄存器值用于检测芯片类型。这些寄存器是:

#define da9063_reg_chip_id 0x181

#define da9063_reg_chip_variant 0x182.

ADC映射

在下面

https://support.dialog-semiconductor.com/pmic-audio/device/da9063?qt-pmic_装置=1#qt-pmic_装置

文档>飞思卡尔BSP>

有DA9063 Android集成。其中包含集成到Freescale/NXP Android版本中的DA9063的HWMON驱动程序示例。

最新版本,DA9063 i.MX 6棒棒糖Android L5.1.1 2.1.0 BSP有一个zip文件,这是DA9063 I.MX 6 LOLLIPOP ANDROID L5.1.1 2.1.0 BSP.ZIP,这包含了DA9063的HWMON示例。

亲切问候,,
艾略特德克斯特

Pinkpr.
离线
最后一次露面:2年7个月前
加入:2017-11-14 08:34
你好,艾略特,

你好,艾略特,

您知道为什么hwmon驱动程序中没有实现内部调节器监控吗?这正是我想要的功能。
我会尝试在您提供的基本驱动程序的顶部添加此功能。

Pinkpr.

对话
离线
最后一次露面:1个月3周前
职员
加入:2017-09-18 11:54

嗨,皮埃尔·奥利维尔,

在过去,过电压/欠电压中断处理程序过于具体,无法包含在通用Linux驱动程序中,内核维护人员不支持添加它们。Android实现中的示例显示了需要如何实现Android版本以在Dialog PEBIX参考平台上进行监控,但相信任何实现都将包含特定于平台的组件。

亲切问候,,
艾略特德克斯特

Pinkpr.
离线
最后一次露面:2年7个月前
加入:2017-11-14 08:34
你好,艾略特,

你好,艾略特,

谢谢你的回答。我仍然找不到如何在内部调节器上执行ADC手动转换。

我真的跟着“监控输出电压 - >手动测量调节器输出电压”部分(第6.4页,第13页)AN-PM-024 DA9063电压监控文档,但它似乎根本不起作用。
另外,我注意到本文档内容与数据表内容之间存在一些差异。

例如,文档告诉设置mon_a8_idx = 0.选择BuckCore1监控。但根据数据表,您应该设置mon_a8_idx = 1

那是真的,什么是不是?

Pinkpr.

Pinkpr.
离线
最后一次露面:2年7个月前
加入:2017-11-14 08:34
顺便说一句,是什么

顺便问一下,3F和82版本之间的差异是什么?

对话
离线
最后一次露面:1个月3周前
职员
加入:2017-09-18 11:54

嗨,皮埃尔·奥利维尔,

数据表和应用程序注意:

DA9063数据表规定BUCKCORE1的寄存器值为1,AN-PM-024主要规定BUCKCORE1的寄存器值为1。然而,AN-PM-024表12中的一个表中有一个拼写错误,它表示0h,并且这也应该是一个1,以便正确并与另一个表一致。感谢您指出这一点,我们将更新文档。

变体3F和82:

变体3F和变体82非常相似;某些调节器的电压、电流限制和启动槽有一些微小的变化。次要寄存器也有一些变化,但没有显著改变其操作或用途。更改是由客户和客户要求建议的。

模数转换器

当你说你遵守了文件,但它根本不起作用时,你是什么意思?

亲切问候,,
艾略特德克斯特

Pinkpr.
离线
最后一次露面:2年7个月前
加入:2017-11-14 08:34
我实际上试图得到一个

我实际上试图为每个稳压器获得ADC测量的电压值。

1.根据测量调节器所属的组,通过写入ADC_MAN注册值ADC_MUX(8,9或10)来重置ADC。
2.我在MON_REG_5或MON_REG_6中写入与调节器相关的索引。
3.我在ADC_MAN寄存器中写下ADC_MAN位(1 << 4)。
4.我通过等待事件A寄存器中设置E_ADC_RDY位(1<<3)来等待值准备就绪。
5.我获取ADC_RES_H和ADC_RES_L并合并它们以重建转换结果。

对于属于组A8或A10的每个调节器,问题是,我获得ADC_RES_H和ADC_RES_L充满高位(OXFF)。
在A9的情况下,我根据调节器获得不同的值,但它们根本不是逻辑。

例如,我有(实际上)LDO1电压> LDO2电压。但我的ADC转换讲述了相反的。

这些不合逻辑的行为让我认为我的算法有一个大问题,它可能来自我的数据表/应用程序说明中的错误信息。
这就是我来找你寻求帮助的原因:-)

Pinkpr.

对话
离线
最后一次露面:1个月3周前
职员
加入:2017-09-18 11:54

嗨,皮埃尔·奥利维尔,

我按照应用程序注意的说明,并没有任何问题。雷竞技安卓下载从Variant 3F开始,我将列出我的步骤;我将使用LD05设置为2.8 V作为示例:

  1. 将ADC_MUX设置为所需的通道。对于LDO 5,ADC_MUX设置为0x1001。
  2. 将mon_a9_dx设置为所需的索引。对于LDO5,MON_A9_IDX设置为索引6。
  3. 现在需要触发手动转换。对于ADC_MAN=1的手动转换,当转换完成时,该寄存器将重置回0。
  4. 此操作的结果现在应在ADC_RES_H和ADC_RES_L中,从此操作中获得的结果是2.8 V

注册细分:

  1. 寄存器034H = 09,这将设置0x1001的ADC_MUX。
  2. 寄存器11Eh=60,这将设置索引为6的MON_A9_IDX。
  3. 寄存器034H = 19,这将触发手动测量。
  4. ADC_RES_H寄存器将包含10位结果的占八位;寄存器38将读取8F,即10001111。
  5. ADC_RES_L寄存器将包含2 LSB(最低有效位),寄存器37将读取0。
  6. 合并ADC_RES_H和ADC_RES_L,这将得到1000111100,转换为十进制得到572,乘以4.883 mV。

我用GUI使用标准I2C接口进行读写命令,我没有使用其其他功能或改变任何其他寄存器值。我还通过不同的监管机构测试了所有三个ADC频道,并没有任何问题。

亲切问候,,

艾略特德克斯特

对话
离线
最后一次露面:1个月3周前
职员
加入:2017-09-18 11:54

你好皮埃尔奥利维尔,

您可能获得ADC_RES_H和ADC_RES_L寄存器的潜在原因是您尝试测量的稳压器不会启用。我重新尝试使用调节器DIS启用的手动测量值并获得相同的结果,但当我启用稳压器时,ADC测量了稳压器的正确输出电压。

亲切问候,,

艾略特德克斯特

Pinkpr.
离线
最后一次露面:2年7个月前
加入:2017-11-14 08:34
嗨艾略特

嗨艾略特

我终于发现了什么问题。
我用示波器探测了I2C行,发现我们在mon_reg_5和mon_reg_6上完成了我们完成的写操作。
我实际上是使用的Regmap_write.Linux内核的函数。此函数验证您尝试写入的寄存器是否实际存在。
我不知道为什么,但是DA9063 Linux驱动程序寄存器范围不包括mon_reg_5和mon_reg_6
我刚刚将寄存器范围扩展到MON_REG_6,一切正常。

一切都将干净,我可能会向Linux驱动程序提交修补程序。

非常感谢您拨给我的时间:-)

Pinkpr.

对话
离线
最后一次露面:1个月3周前
职员
加入:2017-09-18 11:54
你好皮埃尔奥利维尔,

你好皮埃尔奥利维尔,

没问题,很乐意帮忙..

亲切问候,,

艾略特德克斯特

对话
离线
最后一次露面:1个月3周前
职员
加入:2017-09-18 11:54
嗨皮埃尔奥利弗,

嗨皮埃尔奥利弗,

我与驱动程序申请团队发言了关于您最后一个问题的关于您的最后一雷竞技安卓下载个问题,如下所示:

“由于Linux主线V3.16-RC1 DA9063 Linux设备驱动程序使用标准Linux Regmap Framework来访问PMIC的寄存器。

Regmap是寄存器I/O的常用方法,Linux内核中的设备驱动程序通常使用它来执行这些标准访问操作。然而,与其他操作系统I/O方法相比,regmap是不同的。部分差异是由于使用了regmap用来创建芯片模型的寄存器访问权限表。

DA9063设备驱动程序定义寄存器访问权限,以基于设备驱动程序内置的预定义表格列出所有可能的I2C访问DA9063 PMIC寄存器的访问权限。这些表格持有寄存器->{可读、可写、易失性}映射并在文件中静态定义驱动程序/mfd/da9063-i2c.c. 因此,Linux内核regmap核心I/O函数可以根据编码到这些表中的权限限制任何PMIC寄存器访问。

应注意。在Linux设备驱动程序中添加使用Linux核心regmap函数访问寄存器的新功能时:应相应更新相关regmap访问表。如果将新组件添加到现有的启用regmap的设备驱动程序中,则在制定寄存器的访问权限条目时,应仔细考虑每个要访问的新寄存器中的每个位。使用regmap的原因不仅仅是为了实施注册访问限制;性能改进、默认值以及暂停和恢复操作的简化也是regmap设计的一部分。”

亲切问候,,

艾略特德克斯特