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.

[参考译文] DAC8742H:尝试通过 HART/SPI 调制解调器芯片发出字符。

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/751104/dac8742h-trying-to-send-a-character-out-through-the-hart-spi-modem-chip

器件型号:DAC8742H

我成功地创建了从 DAC8742H HART 调制解调器芯片接收字节的代码。 现在、我需要将一个字符从 SPI 端口发送到 HART 调制解调器芯片。 我有一个 MACTek Viator RS232 HART 接口模块、并且在我的 Windows 计算机上使用 TeraTerm。

首先、下面是我配置的方法:

我发送复位:

TxBuffer = 0x07 0x00 0x01

我发送 CONTRAL_REG:

TxBuffer = 0x02 0x00 0x4c

我发送 MODEM_IRQ_MASK:

TxBuffer = 0x21 0x7f 0x3f

我发送 MODEM_CONTROL:

TxBuffer = 0x22 0x00 0x48

我发送 FIFO_LEVEL_SET:

TxBuffer = 0x25 0x00 0x11

最后、我发送 PAFF_Jabber:

TxBuffer = 0x27 0x00 0x02

每秒 I:

读取状态寄存器、应答是:0xA0 0xc0 0x26

向 FIFO_D2M 写入一个字节:TxBuffer = 0x23 0x01 0x61

读取状态寄存器、应答是:0xA0 0xc0 0x32

向 FIFO_D2M 写入一个字节:TxBuffer = 0x23 0x01 0x62

读取状态寄存器、应答是:0xA0 0xc0 0x22

向 FIFO_D2M 写入一个字节:TxBuffer = 0x23 0x01 0x63

读取状态寄存器、应答是:0xA0 0xc0 0x22

等等...

TeraTerm 中没有字节到达。 示波器在 MOD_IN 或 MOD_INF 线路上不显示任何活动、只是一个恒定波:

在这个镜像中、绿色是 IRQ 线路、蓝色是 MOD_IN、红色(蓝色后面)是 MOD_INF。

有什么建议吗?

谢谢、

       Ken

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

    如果您尝试使用 DAC8742H 调制数据、则应监控 MOD_OUT。 这是您要尝试做的吗? 需要注意的一点是、写入 FIFO_D2M 后、必须向调制解调器控制中的 RTS 位写入1才能开始调制。

    谢谢、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我添加了对 MODEM_CONTROL 寄存器的写入:0x22 0x00 0x49 (RTS 位为位0)。 在 TeraTerm 中仍没有字符到达。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ken、

    您之前说过您正在监控 MOD_IN 和 MOD_INF、对吧? 调制输出信号将位于 MOD_OUT 引脚上。

    写入 FIFO 后、您是否将0x49写入控制寄存器? 这是必需的。 一旦 RTS 被置为有效、器件将调制 FIFO 中的所有 HART 字节。

    还可以通过写入 DUP_EN 来使用全双工器件、以确保将预期值写入 TX FIFO。

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

    加雷特:

    为了答复您之前的答复、我在 MOD_OUT 上有一个示波器、它是1V 的平坦线。

    我将 DUP_EN 设置为1。

    我已在将我的字节发送到 FIFO_D2M 寄存器后将 RTS 设置为1。

    我还尝试反转 RTS、在将我的字节发送到 FIFO_D2M 寄存器之前将其设置为1、并在之后将其设置回0。 没有区别。 无论采用哪种方式、都不会传输字符。

    在所有情况下、MOD_OUT 始终保持在1V。

       Ken

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的 H/W 家伙做了一个小改动、现在 MOD_OUT 在0v 时平坦。 MOD_IN 具有良好的锯齿波、但 MOD_OUT 不是。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ken、

    说到硬件、您是否有可以共享的原理图、以便我验证硬件设置?

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

    e2e.ti.com/.../IR4-HART-modem.pdfGarrett:

    我的硬件员工已经离开了一天。 我有以下内容...

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

    当 DUP_EN 设置为1时、MOD_OUT 在零时保持平坦、直到 MODE_CONTROL 寄存器设置为0x00 0x4d、然后 MOD_OUT 开始振荡:

    SendHARTFifoReg ()、第425行: 读取 MODEM_STATUS_REG (a0) TxBuffer = 0xa0 00、RxBuffer =  0xa0 c0 26  
    SendHARTFifoReg ()、第484行: 读取 MODEM_CONTROL (A2)      TxBuffer = 0xa2 00、RxBuffer =   0xa2 00 4c  
    SendHARTFifoReg ()、第543行: 读取 FIFO_D2M (A3)                       TxBuffer = 0xa3 00、RxBuffer =   0xa3 02 00  
    SendHARTFifoReg (),第631行: 写入 FIFO_D2M (23)                      TxBuffer = 0x23 01 61 <===
    SendHARTFifoReg ()、第661行: 读取 FIFO_D2M (A3)                       TxBuffer = 0xa3 00、RxBuffer =   0xa3 18 00  
    SendHARTFifoReg (),第720行: 写入 MODEM_CONTROL (22)     TxBuffer = 0x22 00 4D
    SendHARTFifoReg ()、第750行: 读取 FIFO_D2M (A3)                       TxBuffer = 0xa3 00、RxBuffer =   0xa3 02 00  
    SendHARTFifoReg (),第811行: 读取 MODEM_CONTROL (A2)      TxBuffer = 0xa2 00,RxBuffer =   0xa2 00 4D  

    SendHARTFifoReg ()、第425行: 读取 MODEM_STATUS_REG (a0) TxBuffer = 0xa0 00、RxBuffer =   0xa0 c0 27  
    SendHARTFifoReg (),第484行: 读取 MODEM_CONTROL (A2)      TxBuffer = 0xa2 00、RxBuffer =   0xa2 00 4D  
    SendHARTFifoReg ()、第543行: 读取 FIFO_D2M (A3)                       TxBuffer = 0xa3 00、RxBuffer =   0xa3 02 00  
    SendHARTFifoReg (),第631行: 写入 FIFO_D2M (23)                       TxBuffer = 0x23 01 62 <===
    SendHARTFifoReg ()、第661行: 读取 FIFO_D2M (A3)                       TxBuffer = 0xa3 00、RxBuffer =   0xa3 02 00  
    SendHARTFifoReg (),第720行: 写入 MODEM_CONTROL (22)     TxBuffer = 0x22 00 4D
    SendHARTFifoReg (),第750行: 读取 FIFO_D2M (A3)            TxBuffer = 0xa3 00、RxBuffer =   0xa3 02 00  
    SendHARTFifoReg (),第811行: 读取 MODEM_CONTROL (A2)   TxBuffer = 0xa2 00,RxBuffer =  0xa2 00 4D  

    我看到 MOD_OUT 波形没有变化、TeraTerm 中没有字节到达

       Ken

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

    您好 Ken、

    DUP_EN 不是调制所必需的、但可以帮助进行测试。 在 RTS 被置为有效前、调制不应开始、因此写入 0x22 00 4D 会启动调制。 您的图像未正确连接、是否可以重新连接?

    有关原理图的一些注释:

    为了实现稳定性、C93应直接连接到 MOD_OUT。 另外、我建议使用10nF 而不是22nF、因为22nF 是最大值

    CLK_CFG1和 XEN 看起来是连接在一起的、但不连接到 IOVDD 或 GND。 这些应连接到 IOVDD 以使用内部振荡器。

    谢谢、

    Garrett

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

    1. C93已被删除。 这会影响功能吗?
    我们使用的是外部振荡器。 如果您遵循 OscSelect、您将看到它接地。

    我今天早上回答了 SPI 命令并作出了响应。 上述信息。 这是否提供了任何线索?

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

    该电容应直接位于 MOD_OUT 上。 输出调制器可能不稳定、没有它时会振荡。 在大多数情况下可能是可以的、但在最终设计中、您应该添加此电容器。
    2.明白了,我现在看到了。

    我想看看您之前描述的输出波形。 在第一段中、第631行似乎成功地将某个内容写入 FIFO、因为在该特定写入后空标志为低电平。 您无法通过读取 FIFO_D2M 来验证 FIFO 的内容、因为数据位是只写的。 写入 CTS 后、如果器件处于全双工模式、则可以读取 FIFO_M2D 以查看传输的数据。 但是、您还应该看到 MOD_OUT 上的调制。

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

    加雷特:

    我扩展了我的测试程序:

    1.我关闭了 DUP_EN

    2.我向 FIFO_D2M 发送四个字符

    我读取 FIFO_D2M、它说 FIFO 中有四个字节

    4、打开 RTS 位

    5、我读取 FIFO_D2M、它说 FIFO 中有零字节

    6.我打开 RTS 位

    等待5秒钟、然后重复...

    MOD_OUT 上的示波器跟踪显示一条平坦线、直至我提高 RTS、然后我得到一个恒定正弦波、直到 RTS 变为低电平、然后得到一条平坦线:

       Ken

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

    [引用用户="Ken Nadler"]

    加雷特:

    我扩展了我的测试程序:

    1.我关闭了 DUP_EN

    2.我向 FIFO_D2M 发送四个字符

    我读取 FIFO_D2M、它说 FIFO 中有四个字节

    4、打开 RTS 位

    5、我读取 FIFO_D2M、它说 FIFO 中有零字节

    6.我打开 RTS 位

    等待5秒钟、然后重复...

    MOD_OUT 上的示波器跟踪显示一条平坦线、直至我提高 RTS、然后我得到一个恒定正弦波、直到 RTS 变为低电平、然后得到一条平坦线:

       Ken

    [/报价]

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

    这听起来是正确的、除了 MOD_OUT 是一个恒定正弦波、而不是代表 TX FIFO 中字节的1200Hz/2200Hz FSK。 您的图像未正确连接、您能否重新连接它们以便我查看输出?

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

    加雷特:

    我将再次尝试连接示波器输出。

    e2e.ti.com/.../HART-MOD_5F00_OUT.docx

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

    波形看起来就像您说的那样只是1200Hz 载波。 您是否在将 RTS 写入高电平后立即监控 MOD_OUT? 在捕获过程中开始时、波形看起来几乎是不连续的、但在给定的噪声级别下、很难分辨。 当 RTS 为高电平时、如果 TX FIFO 中没有数据、调制解调器将调制1200Hz 波形。 我可以看到、在 RTS 仍然为高电平时、您会在某种程度上错过捕获中的数据、只看到载波。 只是一个想法。

    要确认、您能否提供每个 SPI (CS、SDO、CLK)事务的示波器捕获、以验证器件状态并写入 FIFO? 在写入 RTS=1后、获得更清晰的 MOD_OUT 捕获也会很有帮助。

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

    加雷特:

    一些进展:

    我重新打开了 DUP_EN。 我将示波器设置为在 SPI1CS1上触发。 我能够捕获 MOD_OUT、SPI1CS1和 HART_MOD。 请参见随附的。 当我将 IRQ 位设置为1时、MOD_OUT 会进行调制。 我已确定外部 MACTek HART 转 USB 调制解调器导致 HART 线路以1200Hz 的频率持续振荡、这可能掩盖了 DAC8742H 尝试发送的情况。 如果我拔下 MACTek、HART_MOD 线是平坦的。 DAC8742H 在传输字符时不应导致该线路振荡?e2e.ti.com/.../HART-MOD_5F00_OUT-2.docx

    在生产产品中、我不想将 DUP_EN 设置为1、我该怎么办?

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

    您好 Ken、

    当启用 DUP_EN 时、它允许调制器和解调器同时处于活动状态。 由于 HART 协议是半双工协议、每次只有一个器件可以传输、但该模式仅用于执行回读测试。 当设备与其他 HART 设备通信时、不应启用 DUP_EN。

    为了测试 MOD_OUT、我最初会断开另一个 HART 转 USB 调制解调器、以避免可能导致的任何干扰。 在随附的捕获中、在哪里测量蓝色和橙色波形? 根据橙色波形的振幅、我假设这是由 HART 转 USB 调制解调器生成的。 是的、当器件调制时、您应该会看到从 MOD_OUT 耦合到 HART_MOD 的1200Hz/2200Hz 正弦波。

    下面是 EVM 的一个示例。 三个字节被加载到 FIFO 中、然后 RTS 被切换。 通道1来自 MOD_OUT、通道2为 SPI CS。 在 CS RTS 的第一个上升沿上、设置并调制 FIFO 中的三个字节。 在 CS RTS 的第二个上升沿上清除、调制停止。 三个字节后的1200Hz 信号是由于 RTS 仍然设置为 FIFO 为空。

    谢谢、

    Garrett

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

    加雷特:

    MAKTek 转换器似乎是问题的原因。 我已将 DUP_EN 位改回零、断开了 MAKTek 的连接、现在示波器显示了 MOD_OUT 和 HART_MOD 线路上的 HART 调制。

    下一步是将 HART 发送和接收测试例程合并到我的应用程序中。

    最后我想我已经走过了艰难的部分。 感谢您在过去一周左右的帮助。

    完成后、我将发布一份我为完成这项工作所做的工作的摘要。

    最棒的...

           Ken