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.

[参考译文] ADS7138-Q1:ADS7138-Q1 -通过 i2cset 和 i2cdump 写入操作码

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1195015/ads7138-q1-ads7138-q1---writing-opcodes-via-i2cset-and-i2cdump

器件型号:ADS7138-Q1
主题中讨论的其他器件:ADS7138、BP-ADS7128

我正在尝试 在与运行 debian Distro 的 Beagle Bone Black 连接的设备上从 ADS7138QRTERQ1写入和读取。
与该问题 ADS7138-Q1类似:I2C 通信、我已读取该值、在读取和写入器件之前、我们需要设置操作码: (0x08表示写入、0x10表示读取)。

使用 i2cset 和 i2cdump、如何发送这些操作码?  
尝试写入 i2cbut 2器件地址0x14、地址0x05、值0x80时、添加操作码会抛出无效、而排除操作码将忽略写入。   

使用操作码、我们无法使用操作码0x08写入寄存器0x05:  

#i2cset -y 2 0x14 0x0805 0x80
Error: Data address invalid!

在不使用操作码的情况下、将值0x80写入接口2寄存器0x05上的器件地址0x14。
读回同一个寄存器、我们读取0x83、而不是我们写入的值、表示右侧失败:

# i2cset -y 2 0x14 0x05 0x80
# i2cdump -r 0x05-0x05 -y 2 0x14
No size specified (using byte-data access)     
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef00:
83            

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

    为进行比较、我可以写入同一控制器接口(i2c-2)上的其他 I2C 器件。
    首先读取寄存器0x00、器件地址0x3E、观测器0x39。
    然后、写入0x40并读回:

    # i2cdump -r 0x00-0x00 -y 2 0x3E
    	No size specified (using byte-data access)
         	0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
    	00: 39                                                 9
    # i2cset -y 2 0x3E 0x00 0x40
    # i2cdump -r 0x00-0x00 -y 2 0x3E 
    	No size specified (using byte-data access)
         	0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
    	00: 40                                                 

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

    塞缪尔:

    抱歉、您遇到了此问题。  以下是在解决此问题时应遵循的一些步骤。

    1. 对于这些问题中的任何一个、我首先要检查的是电源连接(AVDD、DVDD)。
    2. 接下来、让我们确认为 i2c 地址0x14配置的器件? 图8-3和表8-2展示了如何设置地址。  要获取地址0x14、R1 =100k 且 R2未填充。  R1连接在 decap 和 ADDR 引脚之间。  如果您没有按照上述方式配置 ADDR 引脚、则地址会有所不同。
    3. 接下来、将示波器或逻辑分析仪连接到 SDA 和 SCL。 下面是 Beagle Bone Black 尝试与 ADS7138通信时看到的波形。  请确认所有逻辑转换均符合预期。  请参见下图。

    希望我们能够快速解决您的问题。

    此致、艺术

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

    尊敬的 Art:  

    感谢您的快速响应。  

    1. 没有显式测量此值,但我认为这些测试在下一个结果中是隐式的。

    2、我在原理图中确认了这一点,我无法分享。  

    3、我确定了 SDA 和 SDC 线路的范围:

    从 BBB 发出命令:  
    # i2cdump -r 0x05-0x05 -y 2 0x14.




    范围 pt1:

    示波器 PT2 (直接向右滚动):

    我认为这一命令具有以下作用:

    将 0x05写入 器件0x14

    从器件0x14读取0x82

    我认为这显示了有效的 i2c 通信?

    那么、我在上面提出的问题仍然是:如何配置该器件以读取电压通道? 我们如何处理 i2cset 和 i2cdump 操作码?

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

    轻微更正。  

    在我的 pt1图像中、我注释0==读取、而我的意思是0==写入。 我在 PT2图像中已经看到它了。

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

    塞缪尔:

    1. 我同意您的 i2c 正常工作。 感谢确认。
    2. 我理解与操作码的混淆。 有用于寄存器读取、寄存器写入、块写入等的操作码  但是、没有读取转换结果的寄存器。  原因是、器件地址处的常规 i2c 读取将读取转换结果、除非前面的命令是"单寄存器读取"或"块寄存器读取"。  例如、如果发送单个寄存器读取命令、则下一个 i2c 读取将为寄存器值。  如果接着执行另一个 i2c 读取、则将获得转换结果。
    3. 上电时、器件默认为手动模式、通道0。 我建议您发送 i2c 读取、不进行任何寄存器写入或运行代码用法。  在本例中、只需从0x14处读取器件即可。  使用图25 (帧 A)中的格式。  当然、您必须相对于 ADC GND 将直流电压连接到通道0。  如果你将其保持为浮点、你将得到0x00 (或与之接近的值)作为一个转换结果。
    4. 下面是评估模块(BP-ADS7128)的一个示例。 该器件使用地址001000 (0x10)。  请注意、分析器在报告地址时会查看整个8位、因此在 i2c 地址0x10处进行 i2c 读取时显示为0x21。
    5. 我希望这对您有所帮助。 我已经设置了硬件、因此我可以捕获其他事务来帮助阐明通信。

     此致、艺术

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

    尊敬的 Art:  

    感谢您对操作码的评论。  
    我 启动了器件并在 I2C 器件上转储了整个0x14地址2:  


    root@beaglebone:/home/apps# i2cdump -y 2 0x14
    No size specified (using byte-data access)
    0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
    00: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    10: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    20: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    30: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    40: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    50: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    60: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    70: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    80: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    90: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    a0: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    b0: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    c0: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    d0: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    e0: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????
    f0: 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d ????????????????

    我不能真正生成0x8d (10001101b)的头或尾。
    它确实会在很小(0x8b、0x9a)附近跳动、但始终具有几乎相同的值。  
    设备配置是否错误?  

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

    塞缪尔:

    1. 您能否确认您的通信格式符合图8.7?
    2. 如果您与此图保持一致、则器件不太可能正常运行、因为我们期望转换结果为两个字节、而您也不能期望 MSB 和 LSB 具有相同的字节。
    3. 是否在上电后直接进行了读取?
    4. 明天我将会编写代码来手动配置器件。  我想创建一个有关如何使用此器件的教程、因为配置问题很常见。  本教程将包含 psudo-code 和捕获的 i2c 通信。

    此致、 艺术

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

    尊敬的 Art:  

    感谢您的快速响应。  

    1.让我在周一确认一下我可以获得逻辑分析仪/示波器的机会。  

    2.与1.

    3.是的,是刚上电的时候。  初始引导时、可能有一些内容正在写入 i2c 总线。 可能我下一步最好的办法就是获取一个逻辑分析仪。  

    4.非常感谢。  

    为了便于理解、在你们分享的屏幕截图中、该器件返回一系列0x4E 和0xF0。 这些是给定通道的转换结果的 MSB 和 LSB 吗? 如果未指定寄存器、您如何知道将返回哪个通道?  

     例如、通过参阅表8-11、我不清楚哪个寄存器将是通道0的转换结果。 我看到 0x60为 MAX_CH0_LSB、但我没有看到一般转换结果。  
    您提到 "原因是、在器件地址进行常规 i2c 读取将读取转换结果、除非前一条命令是"单寄存器读取"或"块寄存器读取"。"  
    这是否意味着、如果您没有指定寄存器、它将仅返回[Ch0 MSB、Ch0 LSB、Ch1 MSB、Ch1 LSB 等]?

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

    Luke、

    只是为了让你知道。  我明天会在实验中详细介绍这一点。   

    艺术

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

    尊敬的 Art:  

    我详细了解了我们使用的器件。 我不知道有一些细微差别(与 ADS7138QRTERQ1无关)。

    在引导后再次执行读取、并使用不同的 i2c 实用程序(字面上称为 i2c)、我们能够对 地址0x14上的 ADC 进行更实际的读取。 在此、我们从 寄存器00读取地址0x14的 FF。   

    您能否帮助我将寄存器与每个通道的转换电压读数的 MSB/LSB 相关联?  

    root@beaglebone:/home/apps# ./i2c -d 14 r 0 FF
    device address: 0x14.
    number of bytes to read: 0xFF (255)
    
    ----------
    reg val
    ----------
    0x00: 0x83
    0x01: 0x50
    0x02: 0x83
    0x03: 0x40
    0x04: 0x83
    0x05: 0x50
    0x06: 0x83
    0x07: 0x30
    0x08: 0x83
    0x09: 0x50
    0x0A: 0x83
    0x0B: 0x40
    0x0C: 0x83
    0x0D: 0x50
    0x0E: 0x83
    0x0F: 0x40
    0x10: 0x83
    0x11: 0x40
    0x12: 0x83
    0x13: 0x40
    0x14: 0x83
    0x15: 0x40
    0x16: 0x83
    0x17: 0x40
    0x18: 0x83
    0x19: 0x40
    0x1A: 0x83
    0x1B: 0x30
    0x1C: 0x83
    0x1D: 0x40
    0x1E: 0x83
    0x1F: 0x40
    0x20: 0x83
    0x21: 0x40
    0x22: 0x83
    0x23: 0x40
    0x24: 0x83
    0x25: 0x40
    0x26: 0x83
    0x27: 0x50
    0x28: 0x83
    0x29: 0x30
    0x2A: 0x83
    0x2B: 0x40
    0x2C: 0x83
    0x2D: 0x40
    0x2E: 0x83
    0x2F: 0x40
    0x30: 0x83
    0x31: 0x30
    0x32: 0x83
    0x33: 0x40
    0x34: 0x83
    0x35: 0x40
    0x36: 0x83
    0x37: 0x40
    0x38: 0x83
    0x39: 0x40
    0x3A: 0x83
    0x3B: 0x40
    0x3C: 0x83
    0x3D: 0x40
    0x3E: 0x83
    0x3F: 0x40
    0x40: 0x83
    0x41: 0x40
    0x42: 0x83
    0x43: 0x40
    0x44: 0x83
    0x45: 0x40
    0x46: 0x83
    0x47: 0x30
    0x48: 0x83
    0x49: 0x50
    0x4A: 0x83
    0x4B: 0x50
    0x4C: 0x83
    0x4D: 0x40
    0x4E: 0x83
    0x4F: 0x40
    0x50: 0x83
    0x51: 0x50
    0x52: 0x83
    0x53: 0x40
    0x54: 0x83
    0x55: 0x40
    0x56: 0x83
    0x57: 0x40
    0x58: 0x83
    0x59: 0x40
    0x5A: 0x83
    0x5B: 0x40
    0x5C: 0x83
    0x5D: 0x40
    0x5E: 0x83
    0x5F: 0x30
    0x60: 0x83
    0x61: 0x40
    0x62: 0x83
    0x63: 0x40
    0x64: 0x83
    0x65: 0x40
    0x66: 0x83
    0x67: 0x50
    0x68: 0x83
    0x69: 0x40
    0x6A: 0x83
    0x6B: 0x40
    0x6C: 0x83
    0x6D: 0x50
    0x6E: 0x83
    0x6F: 0x40
    0x70: 0x83
    0x71: 0x30
    0x72: 0x83
    0x73: 0x50
    0x74: 0x83
    0x75: 0x40
    0x76: 0x83
    0x77: 0x40
    0x78: 0x83
    0x79: 0x40
    0x7A: 0x83
    0x7B: 0x40
    0x7C: 0x83
    0x7D: 0x50
    0x7E: 0x83
    0x7F: 0x40
    0x80: 0x83
    0x81: 0x50
    0x82: 0x83
    0x83: 0x40
    0x84: 0x83
    0x85: 0x40
    0x86: 0x83
    0x87: 0x40
    0x88: 0x83
    0x89: 0x40
    0x8A: 0x83
    0x8B: 0x30
    0x8C: 0x83
    0x8D: 0x50
    0x8E: 0x83
    0x8F: 0x50
    0x90: 0x83
    0x91: 0x50
    0x92: 0x83
    0x93: 0x40
    0x94: 0x83
    0x95: 0x40
    0x96: 0x83
    0x97: 0x50
    0x98: 0x83
    0x99: 0x50
    0x9A: 0x83
    0x9B: 0x40
    0x9C: 0x83
    0x9D: 0x40
    0x9E: 0x83
    0x9F: 0x40
    0xA0: 0x83
    0xA1: 0x40
    0xA2: 0x83
    0xA3: 0x30
    0xA4: 0x83
    0xA5: 0x40
    0xA6: 0x83
    0xA7: 0x40
    0xA8: 0x83
    0xA9: 0x40
    0xAA: 0x83
    0xAB: 0x30
    0xAC: 0x83
    0xAD: 0x50
    0xAE: 0x83
    0xAF: 0x40
    0xB0: 0x83
    0xB1: 0x40
    0xB2: 0x83
    0xB3: 0x50
    0xB4: 0x83
    0xB5: 0x40
    0xB6: 0x83
    0xB7: 0x40
    0xB8: 0x83
    0xB9: 0x40
    0xBA: 0x83
    0xBB: 0x40
    0xBC: 0x83
    0xBD: 0x30
    0xBE: 0x83
    0xBF: 0x40
    0xC0: 0x83
    0xC1: 0x30
    0xC2: 0x83
    0xC3: 0x40
    0xC4: 0x83
    0xC5: 0x30
    0xC6: 0x83
    0xC7: 0x40
    0xC8: 0x83
    0xC9: 0x30
    0xCA: 0x83
    0xCB: 0x50
    0xCC: 0x83
    0xCD: 0x20
    0xCE: 0x83
    0xCF: 0x50
    0xD0: 0x83
    0xD1: 0x30
    0xD2: 0x83
    0xD3: 0x50
    0xD4: 0x83
    0xD5: 0x40
    0xD6: 0x83
    0xD7: 0x60
    0xD8: 0x83
    0xD9: 0x50
    0xDA: 0x83
    0xDB: 0x40
    0xDC: 0x83
    0xDD: 0x30
    0xDE: 0x83
    0xDF: 0x40
    0xE0: 0x83
    0xE1: 0x30
    0xE2: 0x83
    0xE3: 0x30
    0xE4: 0x83
    0xE5: 0x50
    0xE6: 0x83
    0xE7: 0x30
    0xE8: 0x83
    0xE9: 0x40
    0xEA: 0x83
    0xEB: 0x40
    0xEC: 0x83
    0xED: 0x50
    0xEE: 0x83
    0xEF: 0x40
    0xF0: 0x83
    0xF1: 0x50
    0xF2: 0x83
    0xF3: 0x40
    0xF4: 0x83
    0xF5: 0x50
    0xF6: 0x83
    0xF7: 0x40
    0xF8: 0x83
    0xF9: 0x40
    0xFA: 0x83
    0xFB: 0x40
    0xFC: 0x83
    0xFD: 0x30
    0xFE: 0x83
    ----------

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

    塞缪尔:  
    真是个好消息。  我们仍在进行硬件设置、但我认为您已经解决了这一问题。  此设备需要大量配置且具有多种模式、因此我想放一个教程。

    在任何情况下、您能否确认此案例已关闭?

    艺术

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

    尊敬的 Art:  

    我也很高兴我能够从设备中获得更多有用的信息!
    遗憾的是、我仍然无法将来自器件的读数解释为转换后的电压读数。  

    您能帮助我解释特定信道吗?  

    例如、从数据表可以看出:  

    0x6C MAX_CH6_LSB MAX_CH6_LSB 寄存器(地址= 0x6C)[复位= 0x0]

    0x6D MAX_CH6_MSB MAX_CH6_MSB 寄存器(地址= 0x6D)[复位= 0x0]

    0x8C MIN_CH6_LSB MIN_CH6_LSB 寄存器(地址= 0x8C)[复位= 0xFF]

    0x8D MIN_CH6_MSB MIN_CH6_MSB 寄存器(地址= 0x8D)[复位= 0xFF]

    参考我的读数:

    0x6C:0x83
    0x6D:0x50

    0x8C:0x83
    0x8D:0x50

    最大值_通道6:

    0x5083 => 20611

    最小通道6:  

    0x5083 => 20611


    这些值是没有道理的。 我是否 正确地解释了数据表? 或者、我是否正确配置了器件?  

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

    塞缪尔:

    这可能是正确的。  然而、两个不同通道似乎不太可能具有完全一样的转换结果。  它还取决于 ADC 所处的模式。  如果它处于16位模式、那么转换结果可以计算为:

    在你的情况下、如果器件未在12位模式中被设定、结果是没有意义的、这是因为12位将有一个最大值为4096的代码。

    艺术

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

    尊敬的 Art Kay:  

    有任何与 教程相关的更新吗?

    会很 感激。

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

    Aske、

    这是一项正在进行的工作。  我们已设置硬件并已开始此过程、但可能需要几周的时间才能完成文档编制。

    艺术

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

    你好、Art

    它如何处理文档?

    我已经迫不及待想使用 IC 了  

    Aske.