主题中讨论的其他器件:USB2ANY
是否有办法通过 python 脚本而不是通过 TICS Pro 来控制 LMX EVM? 我可以通过 TICS PRO 操作 EVM 器件、但找不到器件在器件管理器中注册的串行端口。 是否有办法通过 USB2ANY 发送 SPI 命令以进入 LMX 板?
谢谢、
Darren
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.
是否有办法通过 python 脚本而不是通过 TICS Pro 来控制 LMX EVM? 我可以通过 TICS PRO 操作 EVM 器件、但找不到器件在器件管理器中注册的串行端口。 是否有办法通过 USB2ANY 发送 SPI 命令以进入 LMX 板?
谢谢、
Darren
Darren、
Dean Banerjee 的帖子展示了如何使用 TICS Pro 的 ActiveX 界面来执行基本的 TICS Pro 自动化。 但是、您特别请求了一种方法来绕过 TICS Pro 直接与 USB2ANY 通信。 有一种方法可以做到这一点,但我必须告诉你,它没有得到官方的支持-您遇到的任何问题都将由您来处理:)
使用 python、您可以使用 cTypes 模块的 WinDLL 包装程序打包 TICS Pro 中包含的 USB2ANY DLL。 您可以从此处调用 USB2ANY DLL 提供的任何函数。 我包含了一个代码片段、其中显示了以下基本示例。 我要注意的是、我没有测试过此代码、但它基于我们开发库中的示例脚本、因此我认为它的任何问题都应该很快识别出来。
import ctypes
u2adll = ctypes.WinDLL(r"C:\path\to\USB2ANY.dll")
# Scan available USB2ANY devices
controllers = []
buf = ctypes.c_buffer(80)
for i in range(u2adll.u2aFindControllers()):
controllers.append(u2adll.u2aGetSerialNumber(i, buf))
# Open a session with whatever the first USB2ANY is
if not controllers: raise Exception('no USB2ANY found')
handle = u2adll.u2aOpen(controllers[0])
# Configure SPI bus
bitRateKbps = 400
divider = int(24000 / bitRateKbps)
dividerHigh = (divider >> 8) & 0xFF
dividerLow = (divider & 0xFF)
errCode = u2adll.u2aSPI_Control(handle, #u2a handle
1, #SPI capture on leading edge
0, #SPI inactive state low
1, #SPI MSB first
0, #SPI 8-bit
1, #SPI with every packet
1, #SPI active low
dividerHigh,
dividerLow)
if errCode < 0: raise Exception('failed to configure SPI bus: ' + str(errCode))
# 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]
# Close session
u2adll.u2aClose(handle)
下面随附了一个 API 文档、其中详细介绍了由 USB2ANY DLL 提供的函数-在这里、我可以在代码片段中获取 u2adll 对象的函数名称。 我从未找到固件版本2.7.0.0的 API 文档的非初始副本、但它仍然应该是准确的-我们使用此副本针对随 TICS Pro 打包的 USB2ANY DLL 和固件版本。
e2e.ti.com/.../api_5F00_reference_5F00_for_5F00_usb2any_5F00_sdk_5F00_2.7.0.pdf
此致、
Derek Payne
Darren、
从技术上讲、DLL 有一个64位版本、但它用于与我们在 EVM 上使用的固件版本不同的固件版本。 您必须将新固件加载到 USB2ANY 上、这需要 USB2ANY 固件加载器应用程序(通常我们不在 TI 外部提供此功能、但据我所知、该策略没有严格的实施-我会通过电子邮件向您发送文件、 但我们的电子邮件过滤器之一会擦除附件)。 这也会导致 USB2ANY 与 TICS Pro 不兼容、直到固件降级。 您需要一个不同的 API 文档、因为从版本2.7.0.0到支持64位运算的版本有一些变化。
更简单的解决方案是使用32位 python。 如果由于某种原因(例如您的其他软件要求中的严重依赖关系)而无法实现、我将尝试通过 E2E 提供固件加载程序和更新的固件。 这将是一个全面的实验、因为我们从未尝试在64位固件上使用 USB2ANY 与我们的任何器件进行通信-如果它不起作用、您可以自行操作。
此致、
Derek Payne