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.

[参考译文] LMX2594EVM:SPI 控制、用于自动化写入寄存器映射

Guru**** 2590100 points
Other Parts Discussed in Thread: USB2ANY

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1042367/lmx2594evm-spi-control-for-automation-to-write-register-map

器件型号:LMX2594EVM
主题中讨论的其他器件:USB2ANY

尊敬的团队:

我尝试使用自己的源代码(例如 C、C++、Python)来设置寄存器值、而不是使用 TICS Pro GUI。

检查 此页面后、有一种方法可以使用 python 写入寄存器值。

在这里、我附加了上面链接中的 python 代码摘录、并且有几个问题。

# Write and Read
numerator = 0xDEADBEEF
packet1 = 0x260000 + ((numerator >> 16) & 0xFFFF)
packet2 = 0x270000 + (numerator & 0xFFFF)
buf = ctypes.c_buffer(3) #register length is three bytes for LMX2594

buf[0] = (packet1 >> 16) & 0xFF
buf[1] = (packet1 >> 8) & 0xFF
buf[2] = packet1 & 0xFF
errCode = u2adll.u2aSPI_WriteAndRead(handle, 3, buf)
if errCode < 0: raise Exception('failed to write first packet')

buf[0] = (packet2 >> 16) & 0xFF
buf[1] = (packet2 >> 8) & 0xFF
buf[2] = packet2 & 0xFF
errCode = u2adll.u2aSPI_WriteAndRead(handle, 3, buf)
if errCode < 0: raise Exception('failed to write second packet')

buf[0] = 0xEF
buf[1] = 0x00
buf[2] = 0x00
errCode = u2adll.u2aSPI_WriteAndRead(handle, 3, buf)
if errCode < 0: raise Exception('failed to read R111')
rb_VCO_CAPCTRL = ord(buf[2]) # R111[7:0]
。  

1.使用数据包1和数据包2的目的

在设置寄存器 R111[7:0]之前、我想知道为什么要使用数据包1和数据包2。

我认为、像 buf = ctypes.c_buffers (3)一样、定义缓冲区大小就足够了。

在写入多个寄存器值之前、是否必须设置数据包1和数据包2?

如果是、是否有任何标准来设置数据包值?

2.基于寄存器名称的编程方法

在示例代码中、似乎根据寄存器字段名称写入寄存器值。

是否有其他方法根据寄存器名称 e.g、R0=0x00251C 写入寄存器值、类似于 TICS Pro GUI?

3.示例代码中的 buf 数组

I Expected buff array (大小为3)意味着3个字节的值、buf[0]是寄存器的地址、buf[1]和 buf[2]是特定值。

但是 、在写入 R111值时、在上述代码中将 buf[0]配置为'EF'、  

'ef'不是 R111的地址值、因此我想知道每个 buf 数组值的含义。

4.验证方法

在 python 代码中写入寄存器值后、是否有方法验证 TICS Pro GUI 中的寄存器值?

此致、

 Sung  

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

    您好、Sung、

    熟悉这一点的人正在度假、我会在他回到工作岗位后让他回应。

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

    您好、Sung、

    1. packet1和 packet2变量的使用说明了数据和地址组件之间的区别、并说明了每个字节提交到缓冲区的顺序。 如果需要、可以创建大小合适的缓冲区、并在每次读取和写入寄存器时直接设置每个字节。 关键标准是 u2aSPI_WriteAndRead 函数始终从缓冲区的零索引开始、并将写入/回读编程的字节数。 在读取或写入情况下、始终需要设置地址字节、包括可能在回读时将最高位设置为1。
    2. 我们有一个用于 TICS Pro 的 ActiveX API、它允许进行更高级别的编程(请参阅 https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/703263/lmx2595evm-tics-pro-control-with-matlab)、但我们没有为它提供太多的文档、因为它主要是供内部使用。 在 C:\Program Files (x86)\Texas Instruments\TICS Pro 中、有一个 ActiveXTICSPro.dll 文件可与 win32com 软件包一同使用:
      1. 安装 win32com 软件包:
           PIP 安装 pywin32
      2. 生成包装程序类(可能需要作为 admin shell 运行):
           Python -m win32com.client.makepy -o TICSPro_API.py "C:\Program Files (x86)\Texas Instruments\TICS Pro\ActiveXTICSPro.tlb"
      3. 在脚本文件中、使用 API:
        import TICSPro_API
        import win32com
        
        ticsapp = win32com.client.Dispatch("TICSPro.ActiveX")
        
        # Initialize is an API function to set the startup directory - most other
        # user facing API functions are documented in the excel spreadsheet in the
        # previously linked E2E post
        
        if hasattr(ticsapp,"Initialize"):
            ticsapp.Initialize(r"C:\Program Files (x86)\Texas Instruments\TICS Pro")

        我承认我没有尝试过这个特定的代码。 但我修改了验证库中的此代码、我们每天都会使用该库。 因此、它应该是正确的、否则只需要进行细微调整。
    3. 十六进制(111)= 0x6f。 根据图2 (SPI 读回图)后面的数据表文本、读回要求将 R/W 位设置为1、读回位是 MSB (该字节为0x80)。 0x80 | 0x6f = 0xEF、因此该命令将回读 R111。 其他两个缓冲区字节值可以不会出现任何问题而进行初始化。 我只是想说明一下、当您回读时、buf[1]和 buf[2]与最初清零的值不同、这表示已发生回读。
    4. 要在 TICS Pro 中使用此代码进行验证、您必须关闭 USB2ANY 句柄、然后手动配置 TICS Pro 以使用刚刚关闭的 USB2ANY 并读回寄存器以验证写入过程。 同样、这在 TICS Pro 的 ActiveX API 中有所简化。 ActiveX API 目前无法配置 USB2ANY。 请记住、此示例代码用于在使用 TICS Pro...的情况下对 SPI 进行编程。

    在明年的某个时候、我们计划发布 TICS Pro 版本、该版本通过套接字服务器 API 更直接地展示所有 ActiveX 功能。 理想情况下、此版本将包括 API 手册和 python 客户端

    此致、

    Derek Payne

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

    感谢您的帮助。   我将按您所述进行尝试。 再次感谢您的详细答复。