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.

[参考译文] TPL1401:写入 TPL1401寄存器

Guru**** 2443090 points
Other Parts Discussed in Thread: TPL1401

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1434174/tpl1401-writing-tpl1401-registers

器件型号:TPL1401

工具与软件:

下午好!

初始化 TPL1401数字电位器时遇到问题、特别是在尝试写入 GENERAL_CONFIG 寄存器和 DPOT_POSITION 寄存器时。 我再添加一些背景信息。

与上一篇文章一样、我将使用 E2_studio 编程 IDE、而我将使用 Synergy S7G2微控制器、E2_studio 可提供可在后台控制 I2C 寻址+ R/W 的低层驱动程序! 即 bit、意味着您指定一个7位器件地址、然后根据用户使用的(写入/读取)方法、指定 R/W! 位设置为1或0:

读取 TPL1401数据表、地址字节为8位长、AD6 AD5 AD4 AD3 AD2 AD1 AD0 R/! w、与数据表相关前4位是固定的(1001)、接下来的3位取决于 A0引脚、由于我正在控制16 TPL1401、因此我完全有可能:

000

001.

010.

011.

最后、如 R/W 之前所述! 这是使用 I2C 底层方法进行控制的。 已知我必须设置从器件地址、所有可能的组合如下:

0x48 (1001 000) 7位长整型

0x49 (1001 001)  7位 long

0x4A (1001 010)  7位长

0x4B (1001 011)  7位长

如果我要执行 I2C 更新序列、我需要发送地址字节+命令字节+ MSDB + LSDB (32位)、E2_studio 在后台管理前8位、因此我作为用户、只需发送24位。

如果我要执行 I2C 读取序列、我需要发送地址字节+命令字节(写入请求)、然后发送读取请求并存储 TPL1401返回的任何内容。

现在、我可以验证是否读取 TPL1401 STATUS 寄存器和 GENERAL_CONFIG 寄存器。 当我尝试读取提到的设备时、我得到以下信息:

状态:0000 0000 0001 0100 --> 0x14、与 device_id[5:2]值匹配

GENERAL_CONFIG:0000 0001 1111 0000 ->与默认配置相匹配、DPOT_PDN[4:3]字段初始化为10 (断电至高阻抗)

因此、我假设我无法写入/读取 DPOT_POSITION 寄存器、所以逻辑操作是将 DPOT_PDN[4:3]设置为00:上电、问题是、当我尝试写入此寄存器时、似乎无法设置所需的值。

GENERAL_CONFIG 的长度为16位、因此我假设正确的寄存器配置为0000 0001 1110 0000、例如、该配置可以放置在包含两个位置的 uint8_t 数组内

//测试

DATA = 0xE0

uint8_t i2c_data[2]={0x01data};// MSB = 0x00、LSB = data

 

当我调用 i2c 方法时、似乎执行正确、但是当我尝试读取寄存器时、效果仍然与开始时一样、未应用于任何更改、因此我想知道可能缺少哪些内容、如果需要、我可以提供完整的代码。

在求和中、我的写入请求为24位长、命令字节+ MSB + LSB、但在读取相同的寄存器值时保持不变。

您好!

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

    尊敬的 Guillem:  

    每个寄存器为16位。 这是一个很好的迹象、表明您可以成功读取 STATUS 寄存器和 GENERAL_CONFIG 寄存器。 您能否在对 DPOT_POSITION 寄存器执行写入序列期间测量 SDA 和 SCL、并共享一个屏幕截图、以便验证所有内容是否正确。 您的假设是正确的、总共16位写入可以拆分为两个 uint8_t 数组。  

    此致!

    Katlynne Jones

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

    尊敬的 Katlynne:

    感谢您的回答、今天检查我的代码我意识到我使用两个 i2c_write 调用来发送命令字节+ MSB + LSB、每次调用分别为1个字节和2个字节。 由于 Renesas 操作系统控制前8位,我没有意识到每次我调用 i2c_write 方法,我再次发送所有设备地址。 我在同一次调用中尝试了发送全部3个字节、并且能够写入 GENERAL_CONFIG 寄存器。

    猜猜这可以解决问题、谢谢您的参与!