你好,
我是一名嵌入式系统工程师,为我公司自行设计的电路板之一开发BSP,我们使用Dialog DA9063-3FHK1 PMIC。雷电竞下载app
在实现对PMIC调节器监视的Linux支持时,我发现不同的版本DA9063 PMIC存在。它们没有相同的寄存器映射。
由于我不知道我的PMIC版本属于哪个寄存器映射,我在这里发帖以便知道如何找出在DA9063-3FHK1版本中实现的确切寄存器映射。
最好的问候,
PinkPR
你好
检查寄存器值的最佳方法是使用DA9063 GUI,这将允许您检查每个寄存器及其功能。-3FHK1代码描述了包装,3F是变体编号(OTP), HK1是物理包装详细信息。
3F改型正在被82改型取代,但是这个改型还在发布的过程中。我建议将来使用82版本。
亲切的问候,
艾略特德克斯特
点击在这里为DA9063 GUI的链接。
你好,埃利奥特,谢谢你的回答。
据我所知,DA9063 GUI是为了与DA9063 Eval板一起使用。我没有这个评估板,加上我在网上找不到DA9063的GUI。
实际上,我并没有试图找到OTP中的内容,只是想检查PMIC版本上的寄存器地址是否与Linux源文件中所写的内容兼容。我特别想检查一下ADC部分。在Linux内核中没有为DA9063实现ADC特性,这就是我正在做的工作。
你好PinkPR,
DA9063 GUI
GUI本身可以在没有性能或评估板的情况下使用,这将允许用户检查和编辑OTP寄存器设置,但不允许用户使用PMIC检查OTP。
点击在这里查看DA9063支持页面。这个GUI被称为PowerCommander
芯片ID和变体
在DA9063驱动程序中有两个寄存器映射。AD表和BB表,BB表用于DA9063驱动。
芯片ID和可变寄存器值用于检测芯片类型。这些寄存器是:
#定义DA9063_REG_CHIP_ID 0x181
#定义DA9063_REG_CHIP_VARIANT 0x182
ADC的映射
下
https://support.dialog-semiconductor.com/pmic-audio/device/da9063?qt-pmic_device=1#qt-pmic_device
文档>飞思卡尔BSP >
有DA9063 Android集成。这些包含了DA9063的HWMON驱动程序集成到飞思卡尔/恩智浦Android版本的示例。
最新的版本,DA9063 i.m mx 6 Lollipop Android L5.1.1 2.1.0 BSP有一个ZIP文件,这是DA9063 i.m x6 Lollipop Android L5.1.1 2.1.0 BSP.zip,其中包含DA9063的hwmon示例。
亲切的问候,艾略特德克斯特
嗨,艾略特,
你知道为什么内部调节器监控没有在hwmon驱动程序中实现吗?这正是我想要的特性。我将尝试在您提供的基本驱动程序之上添加此功能。
嗨Pierre-Olivier,
在过去,过/欠电压中断处理程序太特定了,不能包含在一般的Linux驱动程序中,内核维护人员也不支持添加它们。Android实现中的示例展示了如何在Dialog PEBIX参考平台上实现Android版本的监控,但相信任何实现都将包含特定于平台的组件。
谢谢你的回答。我仍然找不到如何在内部调节器上执行ADC手动转换。
我真的遵循了《监测输出电压—>手动测量稳压器输出电压》第6.4部分(第13页)AN-PM-024 DA9063电压监控文档,但它似乎根本不起作用。另外,我注意到这个文档内容和数据表内容之间的一些差异。
例如,文档告诉设置Mon_a8_idx = 0选择BUCKCORE1监控。但根据数据表,你应该设置Mon_a8_idx = 1.
Mon_a8_idx = 0
Mon_a8_idx = 1
那么什么是真的,什么是假的呢?
顺便问一下,3F和82版本有什么不同?
数据表和应用说明:
DA9063数据表规定BUCKCORE1的寄存器值为1,而AN-PM-024主要规定BUCKCORE1的寄存器值为1。然而,在AN-PM-024的一个表中有一个拼写错误,表12,它表示0h,这也应该是一个1,以正确和与另一个表一致。谢谢你指出这一点,我们会更新文件。
变型3F和82:
变种3F和变种82非常相似;对某些稳压器电压、电流限制和启动槽有一些小的变化。对次要寄存器也有一些更改,但不会对其操作或目的产生重大更改。这些更改是由客户和客户需求推荐的。
ADC
你说你按照文件做了但根本没用,你是什么意思?
我实际上是想为每个稳压器获得一个adc测量的电压值。
1.我通过在ADC_MAN寄存器中写入值ADC_MUX来重置ADC(根据测量的调节器所属的组,8,9或10)。2.我将与调节器相关的索引写在MON_REG_5或MON_REG_6中。3.我在ADC_MAN寄存器中写入ADC_MAN位(1 << 4)。4.我通过等待EVENT_A寄存器中的E_ADC_RDY位(1 << 3)来等待值准备好。5.我得到ADC_RES_H和ADC_RES_L,并合并它们以重新构建转换结果。
问题是,对于属于A8或A10组的每个调节器,我得到一个充满高位(OxFF)的ADC_RES_H和ADC_RES_L。在A9的情况下,根据调节器的不同,我得到了不同的值,但它们根本不符合逻辑。
例如,我有(在现实中)LDO1电压> LDO2电压。但我的ADC转换告诉我相反的情况。
这些不合逻辑的行为让我认为我的算法有一个大问题,它可能来自我的数据表/应用程序注释中的坏信息。这就是为什么我来找你寻求帮助:-)
我按照申请说明上的说明做了,没有任何问题。雷竞技安卓下载我将列出我的步骤,从变体3F开始;我将以LD05设置为2.8 V为例:
注册分类:
我使用了带有标准I2C接口的GUI来读取和写入命令,我没有使用它的任何其他功能或更改任何其他寄存器值。我还用不同的调节器测试了所有三个ADC通道,没有任何问题。
你好Pierre-Olivier,
ADC_RES_H和ADC_RES_L寄存器充满高位(OxFF)的潜在原因是您试图测量的调节器未启用。我在关闭稳压器的情况下重新尝试了手动测量,得到了与您相同的结果,但是当我启用稳压器时,ADC测量了稳压器的正确输出电压。
嗨,艾略特
我终于找到了问题所在。我用示波器探测了I2C线,发现我们对MON_REG_5和MON_REG_6没有做写操作。我实际上是在用regmap_writeLinux内核的功能。这个函数验证要写入的寄存器是否实际存在。我不知道为什么,但是DA9063 Linux驱动注册范围不包括MON_REG_5和MON_REG_6.我只是将寄存器范围扩展到MON_REG_6,一切正常。
regmap_write
一旦一切都清理干净,我可能会向Linux驱动程序提交一个补丁。
非常感谢你抽出时间来帮助我:-)
没问题,很乐意帮忙。
嗨Pierre-Oliver,
关于你的最后一个问题,我已经和Driver应用团队谈过了,回雷竞技安卓下载复如下:
自Linux mainline v3.16-rc1以来,DA9063 Linux设备驱动程序已经使用标准的Linux regmap框架来访问PMIC的寄存器。
Regmap是寄存器I/O的一种常用方法,通常由Linux内核中的设备驱动程序使用来执行这些标准访问操作。但是,regmap与其他操作系统I/O方法不同。部分差异是由于regmap使用寄存器访问权限表来创建芯片模型。
DA9063设备驱动程序定义了寄存器访问权限,根据设备驱动程序中预定义的表列出了对DA9063 PMIC寄存器的所有可能的I2C访问。这些桌子可以容纳寄存器->{可读,可写,易失}映射和在文件中静态定义司机/打码/ da9063-i2c.c.因此,Linux内核regmap核心I/O函数可以根据编码到这些表中的权限限制任何PMIC寄存器访问。
要小心。当在Linux设备驱动程序中添加将使用Linux核心regmap函数访问寄存器的新功能时:相关的regmap访问表应该相应更新。如果将新组件添加到现有的启用regmap的设备驱动程序中,在制定寄存器的访问权限条目时,应该仔细考虑要访问的每个新寄存器中的每个位。使用regmap的原因不仅仅是为了加强寄存器访问限制;性能改进、默认值以及挂起和恢复操作的简化也是regmap设计的一部分。”
你好
检查寄存器值的最佳方法是使用DA9063 GUI,这将允许您检查每个寄存器及其功能。-3FHK1代码描述了包装,3F是变体编号(OTP), HK1是物理包装详细信息。
3F改型正在被82改型取代,但是这个改型还在发布的过程中。我建议将来使用82版本。
亲切的问候,
艾略特德克斯特
点击在这里为DA9063 GUI的链接。
你好,埃利奥特,谢谢你的回答。
据我所知,DA9063 GUI是为了与DA9063 Eval板一起使用。
我没有这个评估板,加上我在网上找不到DA9063的GUI。
实际上,我并没有试图找到OTP中的内容,只是想检查PMIC版本上的寄存器地址是否与Linux源文件中所写的内容兼容。
我特别想检查一下ADC部分。在Linux内核中没有为DA9063实现ADC特性,这就是我正在做的工作。
PinkPR
你好PinkPR,
DA9063 GUI
GUI本身可以在没有性能或评估板的情况下使用,这将允许用户检查和编辑OTP寄存器设置,但不允许用户使用PMIC检查OTP。
点击在这里查看DA9063支持页面。这个GUI被称为PowerCommander
芯片ID和变体
在DA9063驱动程序中有两个寄存器映射。AD表和BB表,BB表用于DA9063驱动。
芯片ID和可变寄存器值用于检测芯片类型。这些寄存器是:
#定义DA9063_REG_CHIP_ID 0x181
#定义DA9063_REG_CHIP_VARIANT 0x182
ADC的映射
下
https://support.dialog-semiconductor.com/pmic-audio/device/da9063?qt-pmic_device=1#qt-pmic_device
文档>飞思卡尔BSP >
有DA9063 Android集成。这些包含了DA9063的HWMON驱动程序集成到飞思卡尔/恩智浦Android版本的示例。
最新的版本,DA9063 i.m mx 6 Lollipop Android L5.1.1 2.1.0 BSP有一个ZIP文件,这是DA9063 i.m x6 Lollipop Android L5.1.1 2.1.0 BSP.zip,其中包含DA9063的hwmon示例。
亲切的问候,
艾略特德克斯特
嗨,艾略特,
你知道为什么内部调节器监控没有在hwmon驱动程序中实现吗?这正是我想要的特性。
我将尝试在您提供的基本驱动程序之上添加此功能。
PinkPR
嗨Pierre-Olivier,
在过去,过/欠电压中断处理程序太特定了,不能包含在一般的Linux驱动程序中,内核维护人员也不支持添加它们。Android实现中的示例展示了如何在Dialog PEBIX参考平台上实现Android版本的监控,但相信任何实现都将包含特定于平台的组件。
亲切的问候,
艾略特德克斯特
嗨,艾略特,
谢谢你的回答。我仍然找不到如何在内部调节器上执行ADC手动转换。
我真的遵循了《监测输出电压—>手动测量稳压器输出电压》第6.4部分(第13页)AN-PM-024 DA9063电压监控文档,但它似乎根本不起作用。
另外,我注意到这个文档内容和数据表内容之间的一些差异。
例如,文档告诉设置
Mon_a8_idx = 0
选择BUCKCORE1监控。但根据数据表,你应该设置Mon_a8_idx = 1
.那么什么是真的,什么是假的呢?
PinkPR
顺便问一下,3F和82版本有什么不同?
嗨Pierre-Olivier,
数据表和应用说明:
DA9063数据表规定BUCKCORE1的寄存器值为1,而AN-PM-024主要规定BUCKCORE1的寄存器值为1。然而,在AN-PM-024的一个表中有一个拼写错误,表12,它表示0h,这也应该是一个1,以正确和与另一个表一致。谢谢你指出这一点,我们会更新文件。
变型3F和82:
变种3F和变种82非常相似;对某些稳压器电压、电流限制和启动槽有一些小的变化。对次要寄存器也有一些更改,但不会对其操作或目的产生重大更改。这些更改是由客户和客户需求推荐的。
ADC
你说你按照文件做了但根本没用,你是什么意思?
亲切的问候,
艾略特德克斯特
我实际上是想为每个稳压器获得一个adc测量的电压值。
1.我通过在ADC_MAN寄存器中写入值ADC_MUX来重置ADC(根据测量的调节器所属的组,8,9或10)。
2.我将与调节器相关的索引写在MON_REG_5或MON_REG_6中。
3.我在ADC_MAN寄存器中写入ADC_MAN位(1 << 4)。
4.我通过等待EVENT_A寄存器中的E_ADC_RDY位(1 << 3)来等待值准备好。
5.我得到ADC_RES_H和ADC_RES_L,并合并它们以重新构建转换结果。
问题是,对于属于A8或A10组的每个调节器,我得到一个充满高位(OxFF)的ADC_RES_H和ADC_RES_L。
在A9的情况下,根据调节器的不同,我得到了不同的值,但它们根本不符合逻辑。
例如,我有(在现实中)LDO1电压> LDO2电压。但我的ADC转换告诉我相反的情况。
这些不合逻辑的行为让我认为我的算法有一个大问题,它可能来自我的数据表/应用程序注释中的坏信息。
这就是为什么我来找你寻求帮助:-)
PinkPR
嗨Pierre-Olivier,
我按照申请说明上的说明做了,没有任何问题。雷竞技安卓下载我将列出我的步骤,从变体3F开始;我将以LD05设置为2.8 V为例:
注册分类:
我使用了带有标准I2C接口的GUI来读取和写入命令,我没有使用它的任何其他功能或更改任何其他寄存器值。我还用不同的调节器测试了所有三个ADC通道,没有任何问题。
亲切的问候,
艾略特德克斯特
你好Pierre-Olivier,
ADC_RES_H和ADC_RES_L寄存器充满高位(OxFF)的潜在原因是您试图测量的调节器未启用。我在关闭稳压器的情况下重新尝试了手动测量,得到了与您相同的结果,但是当我启用稳压器时,ADC测量了稳压器的正确输出电压。
亲切的问候,
艾略特德克斯特
嗨,艾略特
我终于找到了问题所在。
我用示波器探测了I2C线,发现我们对MON_REG_5和MON_REG_6没有做写操作。
我实际上是在用
regmap_write
Linux内核的功能。这个函数验证要写入的寄存器是否实际存在。我不知道为什么,但是DA9063 Linux驱动注册范围不包括MON_REG_5和MON_REG_6.
我只是将寄存器范围扩展到MON_REG_6,一切正常。
一旦一切都清理干净,我可能会向Linux驱动程序提交一个补丁。
非常感谢你抽出时间来帮助我:-)
PinkPR
你好Pierre-Olivier,
没问题,很乐意帮忙。
亲切的问候,
艾略特德克斯特
嗨Pierre-Oliver,
关于你的最后一个问题,我已经和Driver应用团队谈过了,回雷竞技安卓下载复如下:
自Linux mainline v3.16-rc1以来,DA9063 Linux设备驱动程序已经使用标准的Linux regmap框架来访问PMIC的寄存器。
Regmap是寄存器I/O的一种常用方法,通常由Linux内核中的设备驱动程序使用来执行这些标准访问操作。但是,regmap与其他操作系统I/O方法不同。部分差异是由于regmap使用寄存器访问权限表来创建芯片模型。
DA9063设备驱动程序定义了寄存器访问权限,根据设备驱动程序中预定义的表列出了对DA9063 PMIC寄存器的所有可能的I2C访问。这些桌子可以容纳寄存器->{可读,可写,易失}映射和在文件中静态定义司机/打码/ da9063-i2c.c.因此,Linux内核regmap核心I/O函数可以根据编码到这些表中的权限限制任何PMIC寄存器访问。
要小心。当在Linux设备驱动程序中添加将使用Linux核心regmap函数访问寄存器的新功能时:相关的regmap访问表应该相应更新。如果将新组件添加到现有的启用regmap的设备驱动程序中,在制定寄存器的访问权限条目时,应该仔细考虑要访问的每个新寄存器中的每个位。使用regmap的原因不仅仅是为了加强寄存器访问限制;性能改进、默认值以及挂起和恢复操作的简化也是regmap设计的一部分。”
亲切的问候,
艾略特德克斯特