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.

[参考译文] DS90UB949A-Q1EVM:如何使用 Analog LaunchPAD ALP 中的 board.ReadI2C (0x00、0x00、>31)将接收/读取缓冲区大小扩展为>32字节?

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1303296/ds90ub949a-q1evm-how-to-expand-receive-read-buffer-size-to-a-length-of-32-bytes-using-board-readi2c-0x00-0x00-31-in-analog-launchpad-alp

器件型号:DS90UB949A-Q1EVM
主题中讨论的其他器件:ALPUSB2ANY

我已经与 TI 电路板和应用层协议(ALP)就读取/写入 I2C 事务进行了沟通。

 

此时、我遇到了有关 TI ALP (Python)和串行器板的缓冲器限制的问题。 我目前的努力涉及读取长度超过32字节的 I2C 消息。

例如、如果我执行-> board.ReadI2C (0x15、0x45、31)

output->[1、0、0、0、13、0、0、0、0、0、0、54、0、0、0、0、0、0、0、0、0、0、0、81]//31示例输出 有数据

但是、如果我执行 board.ReadI2C (0x15、0x45、32)

output->[0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0]//示例32长度输出 无数据  

问题在于 board.ReadI2C 的第三个参数最多只能读取31个字节。

我认为这可能是因为接收缓冲区最多只能提供32字节。

是否可以将接收缓冲区扩展到大于31的值(32字节数据)?

如果您指导如何增大缓冲区大小以促进读取超过32字节的数据、我将不胜感激。 你在这方面的专门知识和协助将是非常宝贵的。

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

    周老师、您好!

    考虑到这一点、 USB2ANY API 2.7.0.0版中规定的大于32字节的读取限制是固定的、因为固件只能读取32字节或更少的字节。

    由于 ALP 使用该 USB2ANY API 来连接器件、因此似乎无法从开发的 ALP 端对其进行更改、因为我们无法从 ALP 库中扩展缓冲器。

    此致!

    米格尔

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

    你好、Miguel、

    您是否知道可以访问寄存器起始或停止长度的任何其他脚本? 例如、如果我想从寄存器长度索引32-64读取、在 ALP 中是否可以实现此操作?

    谢谢。

     -周老师

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

    周老师、您好!

    我可以问其目的是通过 I2C 同时读取超过32个字节的数据吗?

    另外、0x45似乎是一个以949A 器件为基准的保留寄存器、您试图从此处读取大于32个字节的数据是否出于某种原因?

    此致!

    米格尔

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

    你好、Miguel、

    通过 I2C 读取>32字节数据的目的是收集一些与我正在处理的项目相关的内部诊断信息。 这些诊断/数据中包含大约70字节的数据。  

    上面使用的示例并不是我尝试实现的实际保留寄存器。  

    此致!

    周老师

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

    周老师、您好!

    感谢您的澄清! 我想我现在明白了、70个字节来自外部源、而不是 SER-DES 器件本身。

    在这种情况下、32字节缓冲区限制最可能的解决方案是执行多次 I2C 读取、按照上述方式访问单独的索引、并将结果连接到一个列表中。 我相信、我们在较小规模上有一个如何做到这一点的示例。 请允许我花点时间来研究这一点。 我将向您提供我找到的任何更新。

    此致!

    米格尔

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

    非常感谢米格尔! 期待您的答复。

    此致!

     -周老师

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

    你好、Miguel、

    我想知道针对此问题的另一项解决方法是将数据打印为文本而不是数据字节吗? 这也受到任何库限制吗?

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

    周老师、您好!

    感谢您的耐心等待、E2E 在加载时遇到问题。

    以下是我们的器件中使用的16字节读取示例、但该示例假设存储字节信息的位置是不同的(949的 APB 寄存器):

    DEF APB_READ_reg (addr16b、通道、Device_ID):
      APB_CTL = 0x48
      APB_ADR0 = 0x49
      APB_ADR1 = 0x4A
      APB_DATA0 = 0x4B
      APB_DATA1 = 0x4C
      APB_DATA2 = 0x4D
      APB_DATA 3 = 0x4E

    如果频道不等于0:
      页面= 0x03
    Elif 频道==1:
      页= 0x0B
    其他:
      页面= 0x03

    addr16b_lsb = addr16b &0xFF
    ADDR16b_MSB =(ADDR16b & 0xFF00)>> 8
    board.WriteI2C (Device_ID、APB_ADR0、addr16b_lsb)
    board.WriteI2C (Device_ID、APB_ADR1、addr16b_msb)
    board.WriteI2C (Device_ID、APB_CTRL、页面)

    apbData0 = board.ReadI2C (Device_ID、APB_DATA0)
    apbDATA1 = board.ReadI2C (Device_ID、APB_DATA1)
    apbData2 = board.ReadI2C (Device_ID、APB_DATA2)
    apbData3 = board.ReadI2C (Device_ID、APB_DATA3)

    APBData =(apbData3 << 24)+(apbData2 << 16)+(apbData1 << 8)+(apbData0 <<0)
    val32位= APBData
    返回值32位

    RegVal = APB_READ_reg (0x004、int (Port)、Device_RX)
    打印"Result =、"(RegVal)

    我知道、我不知道库中以文本而不是字节的形式打印数据存在局限性、但我可以向团队核实这一点是否存在任何限制。

    此致!

    米格尔

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

    非常感谢您的支持。 我会浏览一下您的回复/代码、并与我的团队讨论这些内容。 您是否有关于之前回复的任何其他文档或信息? 我正在尝试弄清楚如何使用它来分解数据字节?  

     -周老师

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

    周老师、您好!

    我可以提供的额外文档是、USB2ANY 论坛可能能够提供有关 ALP 实施以运行 I2C 函数的 API 的更多详细信息、此外、[Directory]\Analog LaunchPAD v1.57.0010\Profiles\FPDL3Base 下存在 I2C 写入和读取命令库、命名为 FPDLink3_Lib.py。  

    此致!

    米格尔