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.

[参考译文] AFE882H1:FIFO_U2H_WR

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1323456/afe882h1-fifo_u2h_wr

器件型号:AFE882H1
主题中讨论的其他器件: AFE881H1

您好!

我正在尝试从我的微型到上述 HART 调制解调器设备发送数据。
 执行的步骤为  

将阈值设置为3、这意味着在数据 FIFO 中的6个级别之后将生成 IRQ  
将数据写入 FIFO U2H (HART 已在配置中启用) FIFO 写入高达32级  
RTS 生效  
等待 CTS 有效  
在该之后、AFE882H1将自动开始向 MOD_OUT 引脚发送数据、因为数据已经在 FIFO 中  


IRQ 到达后(如果 FIFO 到达6级)、再次使数据排队、直到 HART 帧完成。

这里有1个问题  
首先,建议发送前导码字节,因此32级中的1级是前导码字节,右是我要发送2个前导码字节和10个字节的数据(全0)。
是什么顺序?

0x15(fifo reg wr ) 0x01 (奇偶校验)数据(0xFF 前导码)现在我应该继续写入数据, FIFO 指针将自行增加

0x15 (fifo reg wr) 0x01 (奇偶校验)数据 (0xFF 前导码 )(数据 (0xFF 第二前导码字节)  数据(0x00实际数据)数据(0x00  实际数据)同样地  
或者对于每个字节、需要发送  

0x15(fifo reg wr ) 0x01 (奇偶校验)数据(0xFF 前导码)
0x15(fifo reg wr ) 0x01 (奇偶校验)数据( 0xFF 第二前导码字节)
0x15(fifo reg wr ) 0x01 (奇偶校验)数据(0x00实际数据)
0x15(fifo reg wr ) 0x01 (奇偶校验)数据(0x00实际数据),直到传输10字节  

谢谢。
阿尔蒂

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

    Aarti:


    我认为您的顺序正确。 您应发送 RTS、然后检查 CTS 以查看 HART 总线是否已清除。

    您提到的传输序列也是正确的。 您需要将前导码字节置于 U2H FIFO 上以发送0xFF 字节、然后发送数据、直到传输完毕。 请注意、针对您希望发送的数据、奇偶校验字节应该是正确的(对于0xFF 和0x00、奇偶校验字节为0x010)。 我要注意的是、SPI 寄存器中的数据首先写入 MSB、然后以 LSB 优先的方式通过 HART 在 MOD_OUT 上发送(之前是一个开始位、后跟一个奇偶校验位、然后是停止位)。

    数据传输正确。 对于前导码、传输为0x15 0x01 0xFF (如果使用 CRC 校验、则添加了0x84)。 在这个传输期间、/CS 在帧的持续时间内应该为低电平。 如果您正在发送0x00、则传输将为0x15 0x01 0x00 (具有0x77 CRC 字节)。  

    我要注意的是、HART 前导码通常最少5个字节、最大20个字节。 另外、如果您仅发送10个字节的数据、您可能不需要 IRQ。 FIFO 缓冲区的时间长于数据、不可能缓冲区溢出。 当然、大多数事务的时间会长得多、可以使用 IRQ 来跟踪何时读取器件并确定 FIFO 缓冲区中还剩下哪些内容。 表7-9显示了 IRQ 如何与 MODED_STATUS 在该上下文中使用。

    如果传输有问题、我肯定会使用示波器或逻辑分析仪来检查传输情况、确保器件响应正确。 您可以在帖子中发布数据示波器截图


    约瑟夫·吴

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

    感谢 Joseph 的回复。

    我不清楚这里有一个问题、即对于每个字节和奇偶校验数据、我都需要写入 FIFO、但我有两种写入 FIFO 的方法、我与哪一种方法是正确的?
    就像我要发送10字节的数据、FIFO 指针本身不会 递增或会递增  

    方式1:
    0x15 -奇偶校验-(数据- 0x01)
    0x15 -奇偶校验-(数据- 0x02)
    0x15 -奇偶校验-(数据- 0x03)
    0x15 -奇偶校验-(数据- 0x04)
    0x15 -奇偶校验-(数据- 0x05)
    0x15 -奇偶校验-(数据- 0x06)
    0x15 -奇偶校验-(数据- 0x07)
    0x15 -奇偶校验-(数据- 0x08)
    0x15 -奇偶校验-(数据- 0x09)
    0x15 -奇偶校验-(数据- 0x10)

    或其类似  

    方式 2:
    0x15 -奇偶校验-( 数据- 0x01) -奇偶校验- (数据- 0x02) -奇偶  校验-( 数据- 0x03) -奇偶校验- (数据- 0x04)- 奇偶校验  -( 数据- 0x06)-奇偶校验-(数据- 0x07)-奇偶校验-(数据- 0x08)  -奇偶校  验-(数据- 0x09)-奇偶校验- (数据- 0x10)

    在这两个序列中,哪一个在一个以上或一个以下是正确的??

    谢谢、
    阿尔蒂

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

    Aarti:

    第一个序列是正确的序列:

    0x15 -奇偶校验-(数据- 0x01)
    0x15 -奇偶校验-(数据- 0x02)
    0x15 -奇偶校验-(数据- 0x03)
    0x15 -奇偶校验-(数据- 0x04)
    0x15 -奇偶校验-(数据- 0x05)
    0x15 -奇偶校验-(数据- 0x06)
    0x15 -奇偶校验-(数据- 0x07)
    0x15 -奇偶校验-(数据- 0x08)
    0x15 -奇偶校验-(数据- 0x09)
    0x15 -奇偶校验-(数据- 0x10)

    将数据放入 FIFO 就是对 SPI 寄存器的写入、后续写入仍需要通过将数据放入正确的寄存器开始。 每个事务都从0x15开始。

    约瑟夫·吴

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

    因此、目前我的应用程序我想发送255字节一个完整的 HART 帧  

    因此、我要使用32级(5前导码字节)填充 FIFO、其余27级用于数据  

    然后等待电平标志的 IRQ、我在此将 U2H_LEVEL_SET 的阈值设置为3、这意味着一旦 FIFO 只剩下6个电平、IRQ 就会发出、表明 Micro 向 FIFO 写入更多的数据字节  

    在生成此 IRQ 时、我将再次填充26级数据、并重复此过程、直到发送所有255字节数据+ 5字节前导码  

    这种方法是否正确?

    我还看到在数据表中、据说只写入1个额外字节的前导码为什么要求发送5个最小字节的前导码、 我知道对于 HART 数据帧、它需要发送5个字节作为前导码、但数据表中没有这样说  


    提前感谢、
    阿尔蒂  

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

    Aarti:


    是的、这是正确的方法。 您写入0x15寄存器以将数据放入 FIFO 中、然后 FIFO 会将 HART 数据发送到 MOD_OUT。  

    当需要写入大量数据时、您可以使用 FIFO 完整指示来停止向寄存器进行写入。 然后、您可以将 HART 数据写入 MOD_OUT 中、从而减少 FIFO 中的数据量。 当 FIFO_U2H_LEVEL_FLAG 设置为1并设置 IRQ 时、您可以再次开始将数据写入 FIFO、直到 FIFO 填满。 您会反复执行此操作、直到不再写入数据。

    我不知道为什么数据表中说只写入1个额外的前导码字节。 我不确定写这部分内容的人是否完全精通 HART 协议的具体细节、而我们在评论中并没有看到这一点。


    约瑟夫·吴

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

    Joesph,

    在  FIFO_U2H_LEVEL_FLAG 设置为1 并设置 IRQ 之后、您是否在 FIFO 中写入1个字节
    基本上、我是在尝试填充 FIFO 中的所有剩余级别、正如我已经知道的那样、当我接收中断时、我的 FIFO 有6个级别  

    因此我要填充 FIFO 并写入剩余的27个级别、我获得了中断  

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

    Aarti:

    在得到级别标志后、应该只能写入 FIFO、直到您得到 FIFO 已满中断。 其中包括仅将剩余的级别写入 FIFO。 这样不能正常工作吗?  

    约瑟夫·吴

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

    否我尚未检查它是否正常工作  

    但我已经将 U2H 阈值设置为3 、这意味着一旦我的 FIFO 电平为6、我就会中断电平标志  

    尽快我收到中断、如果是、我检查大小是否小于我要发送的字节数  
    我会调用 w

    并发送数据0x15奇偶校验(0x01)和数据(0xFF)、如下所示  
    总 FIFO 水平(32)- FIFO 中已经存在6个水平(6)、即32-6 =在 for 循环中进行26次  

    //设置要发送的数据

    M_WriteData[0]= AFE882H1_CMD_WR_REG (AFE882H1_FIFO_U2H_WR_REG_CMD);

    m_WriteData[1]=(uint8_t) 0x01;//奇偶校验

    m_WriteData[2]=(uint8_t) pTxBuffer[0];





    谢谢。
    阿尔蒂

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

    Aarti:


    我注意到的一点是、您写入的奇偶校验位始终为1、但该值(用于第二个字节)应针对奇校验进行计算。 该位不是启用位、而是奇偶校验位本身。

    我要为序列检查一件事。 当 HART 处于活动状态时、这是通过 SPI 传输数据的问题。 我正在与一位数字设计人员合作来跟踪它。 它可能会影响您写入 FIFO 寄存器的数据、因此请给我一点时间来检查序列。

    约瑟夫·吴

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

    当然、

    此外、我试图通过简单地禁用 AFE882H1中的 CRC 字节来写入配置寄存器  
    0x02 (写入 CONFIG 寄存器) 0x00 0x26 (16位数据) 0x24 (CRC)



    此外、在回读时、我们将尝试读取 CONFIG 寄存器、  
    0x82 (读取 CONFIG 寄存器)

    2个字节的 NOP、用于获取 CONFIG 寄存器的值、但它为0  




    注意:我们在模式1中使用 SPI (pol 0相位1)
    此外、FSDO 会设置为0、  


    谢谢。
    阿尔蒂  

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

    Aarti:


    对于回读、必须启用 SDO。 这是 CONFIG 寄存器中的 DSDO=0。 如果 DSDO=1 (这是默认设置)、则 SDO 为 Hi-Z。 我想您会写入0x00 0x24、而不是0x00 0x26作为数据。

    此外、回读由两个完整的帧完成。 写入为0x82 0x00 0x00以发送命令、回读被加载到输出移位寄存器中、并使用值为0x00 0x00的 NOP 随时钟移出。


    约瑟夫·吴

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

    您好、Joseph:

    谢谢、我现在能够读回您在此处  
    我在整个帧中丢失了0x82、然后在其之后是2个0、  

    但上有任何更新吗?  
    我要为序列检查一件事。 当 HART 处于活动状态时、这是通过 SPI 传输数据的问题。 我正在与一位数字设计人员合作来跟踪它。 它可能会影响您写入 FIFO 寄存器的数据、因此请给我一点时间来检查序列。


    谢谢。
    阿尔蒂

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

    Aarti:

    我们刚刚确定了从 U2H_FIFO 发送 HART FSK 时对 SPI 写入的问题。 使用 SPI 写入 U2H_FIFO 时、在使用器件的双工模式时会注意到这一点。 在 AFE881H1的以下 E2E 主题中会注意到这一点、该主题具有与 AFE882H1非常类似的数字部分。

    e2e.ti.com/.../afe881h1evm-issue-with-hart-data-transmission

    此文本的大部分内容取自另一个帖子、但当器件传输 HART FSK 时、器件将从 FIFO 中提取数据。 对于在大约9.2ms (总共11位时间)的周期内发射的每个字节、都会发生数据提取。 对于每次数据提取、有一个内部复位脉冲(~1us)、此脉冲清除了来自 FIFO 的读取请求。 遗憾的是、如果这个清除与一个 SPI 写入同时、那么它也会清除 SPI 传输。 我们已在 Verilog 代码中检查了这一点、并通过模拟器件的数字部分验证了这种机制。

    确定这个取指令时间的最佳方法是使用 IRQ。 IRQ 可设置为检查 FIFO 何时为空、满或处于某个用户编程的电平。 在之前的每种情况下、IRQ 都会指示器件何时已完成 HART 字节传输并开始 U2H_FIFO 的提取以传输下一个 HART FSK 数据。 在 IRQ 指示处、器件将发送下一个 HART FSK 字节。 经过9ms (略小于10位时间)后、SPI 应该可以自由接收数据。 您会对 U2H_FIFO 执行该写入操作。

    要写入 FIFO、数据取决于特定序列中的正确写入操作、因此无法重复写入。 对于大多数其他操作、如果您没有写入 FIFO、那么另一种应对此问题的方法是每当器件传输 HART 时写入 SPI 数据两次。

    如果您有任何问题、请告诉我。


    约瑟夫·吴

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

    您好、Joseph:

    参考以上对您的回复、我将使用第一种方法、用32个字节填充 FIFO、在本例中、如果我的总传输字节为32个或更小、那么我应该永远不会在 HART OUT 上看到字节缺失  

    但在本例中、我将发送超过32个字节、我必须从 U2H FIFO 同步 SPI 写入和 HART 获取、因此它们绝不会同时发生、我将遵循以下步骤、如果我的理解正确、您能否更正问题?  

    将 FIFO_CFG 寄存器中的 U2H_LEVEL_SET 设置为3
    启用 MODEM_STATUS_MASK 寄存器中的 FIFO_U2H_FULL_FLAG、FIFO_U2H_LEVEL_FLAG
    我 已将数据预加载到 FIFO_U2H 中
    将 MODED_CFG 寄存器中的 RTS 位设置为1
    当 CTS 被置位时、器件开始从 FIFO 提取数据并通过 MOD_OUT 引脚将其发送  

    由于阈值电平设置为3、因此期望在 FIFO 电平为6时接收 IRQ
    收到该中断后、我填充 FIFO、直到 FIFO 已满(在 FIFO 已满的 IRQ 上获得指示)。

    现在、以上建议是将 SPI 写入与 FIFO HART 传输同步。
    根据我的理解、器件每9.2ms 从 FIFO 读取一次数据、 而且在接收到 IRQ 时、器件预计要从 FIFO 中提取数据、因此一旦接收到 中断、我必须等待~0.2ms、然后发送 SPI 写操作是否正确?

    谢谢。
    阿尔蒂

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

    但这种说法不符合  

    1. 在之前的每种情况下、IRQ 都会指示器件何时已完成 HART 字节传输并开始 U2H_FIFO 的提取以传输下一个 HART FSK 数据。
    2. 在 IRQ 指示处、器件将发送下一个 HART FSK 字节。

    根据我的理解、第一点指出、当微控制器从器件接收 IRQ 时、器件正忙于从 FIFO 获取数据、而微控制器应等待几毫秒来向器件发送数据

    据我所知、从第二秒开始、器件已从 FIFO 中提取数据、并正忙于传输 HART FSK、以便器件可以自由接收 SPI 写入

    这是正确的、

    您能解释一下  

    谢谢。

    阿尔蒂

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

    您好、Joseph:

    您能回答我以上提出的问题吗?您能分享时序图以便更好地理解这一案例吗?

    提前感谢您、

    阿尔蒂

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

    Aarti:


    抱歉、星期一是美国的假日。

    是的、我认为您的序列可以正常工作。 不过、我认为 U2H_LEVEL_SET 是<比较而不是<=比较。 因此、将电平设置为3、我认为您需要降至该电平以下才能触发它。 我想它会在5时触发、而不是在6时触发。

    对于您在 IRQ 上的问题、IRQ 表示器件从 FIFO 中获取数据的时间、并将其作为 HART FSK 放置在 MOD_OUT 上。 这会立即发生。 当指明这一点时、您将等待几微秒、微控制器有大约9ms 的时间将 SPI 通信不间断地发送到器件。

    明天我到办公室的时候、我会绘制一个时间图表。


    约瑟夫·吴

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

    当然、谢谢、这将有助于

    我 还有1个疑问、这是  
    在我当前的步骤中:
    首先、我将 FIFO 设置为 FULL  
    我得到 FIFO 满中断、其中仅有一次在 CTS 之后将 RTS 设置为0
    器件 预期通过获取 FIFO 并将数据发送到 MOD_OUT 来在 MOD_OUT 上发送数据、而器件会在内部处理此数据  
    与我的应用程序一样、我希望以每秒32位的  
    在接收到电平 IRQ 时、我开始再次写入 FIFO、但在这里、RTS 已经被设置一次、这意味着调制器已经打开、并发送 HART FSK
    因此、当我填充 FIFO 时、它将会开始在 MOD_OUT 上发送数据。无论何时 FIFO 都将满、因为我没有第二次获得 FIFO 满  

    其次、如果我要发送1个完整帧并进行第二次发送、我需要分离 FIFO。如果我要发送、我是否需要发送软件复位来清除 HART FIFO 和所有内容?

    此致、
    阿尔蒂

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

    Aarti:


    这是我对您上一篇文章的回应。 通常情况下、您会向 FIFO 写入数据、直到收到中断以指示 FIFO_U2H 已满。 此时、您可以设置 RTS、这会打开调制器并开始将数据从 FIFO 发送到 MOD_OUT。 数据继续从 FIFO_U2H 流出、直到达到您为 FIFO_U2H_LEVEL 设置的电平、此时它将发出一个新的 IRQ。 您可以从此处向 FIFO_U2H 发送更多数据、直到您获得另一个 IRQ 来指示它已满。 这就是处理大 HART 字节传输的方式、在已满的 FIFO 与之前设置的某个 FIFO 级别之间进行交替。 一旦 FIFO 为空、它就不会再发送任何字节(尽管调制器将继续发送1)。

    如果您发送的数据长于32字节 FIFO、则不需要更改 RTS。 您已经在开始时设置了 RTS、并将继续从 MOD_OUT 发送数据。 在 HART FSK 传输完成后、RTS 可以取消有效。 从 FIFO_U2H 获取最后一个数据后大约有12.5位时间用于传输延迟、您需要将 RTS 保持在较低的时间以防止发生间隙错误。 这如数据表中的图6-22所示。


    约瑟夫·吴

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

    Aarti:


    此外、我今天有机会与数字设计人员深入讨论此问题、并获得了更多详细信息。

    在后台、此问题仅与 SPI 写入寄存器的问题有关、但不影响从寄存器进行读取。 当对寄存器的写入与在 HART FSK 发送开始时从 FIFO_U2H 获取数据的同时发生缺失的 SPI 写入。

    在器件中、有一个1.2288 MHz 主时钟、周期为0.8138us。 当发生发送 HART FSK 传输时、会产生一个内部复位脉冲来清除 FIFO_U2H 获取。 如果此内部复位在 SPI 写入寄存器时/CS 上升沿的1.5个主时钟内发生、则写入将丢失。 这是一个1.221us 冲突窗口、在该窗口中、将丢失对寄存器的 SPI 写入。

    请注意、从 FIFO_U2H 获取 HART FSK 还会触发与 FIFO 关联的 IRQ 事件。 FIFO_U2H_EMPTY_FLAG、FIFO_U2H_LEVEL_FLAG 和 FIFO_U2H_FULL_FLAG 同时触发、因为 IRQ 会指示何时发送 HART FSK 以及正在从 FIFO_U2H 提取新数据。 请注意、1.221us 冲突窗口和 IRQ 之间存在一定的延迟。 在冲突窗口中、有16个主时钟、直到 IRQ 脉冲并且 IRQ 脉冲是额外的16个主时钟宽度。 在1.2288MHz 下、16个主时钟为13.021us。 当 IRQ 脉冲被触发时、允许 SPI 对寄存器的写入

    在时序图中、该图在冲突窗口的特写图中看起来就像这样及其与 IRQ 的关系。

    在 IRQ 触发后、在一段时间内器件没有从 FIFO_U2H 提取数据。 这个时间周期是 HART FSK 传输中使用的11位时间。 在 HART 中、这是1200波特周期乘以11或9.167ms。 介于 IRQ 指示之间的时间是9.167ms、但应减去 IRQ 延迟和冲突窗口。 这是9.167ms 减去 IRQ 延迟减去1.221us 冲突窗口。 这距离 IRQ 启动大约9.152ms。

    从更深入的时序角度来看、IRQ 是这样的。

    对于器件、主时钟有一个大约±1%的误差、所以需要考虑一些时钟错误。

    希望这能够解释在 SPI 寄存器写入中看到的错误。 如果您有任何疑问、或者我对时间安排的解释不够充分、请告诉我。


    约瑟夫·吴

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

    您好、Joseph:
    我们没有使用 IRQ 机制、
    首先、在应用中、我们每10ms 对 DAC 寄存器进行一次写入  
    此外、在写入 DAC 之后、每隔10ms、我们就会读取 FIFO 状态寄存器、以检查 FIFO_H2U 是否可以读取  
    考虑到 FIFO_H2U 不是空的。在这种情况下、我们读取 FIFO_H2U、然后对其进行处理并将数据写入 FIFO_U2H、从而传输 HART FSK

    我们在 FIFO 中填充32个字节并使 RTS 生效、这应该会使器件通过从 FIFO_U2H 获取数据来发送 FSK
    但这里还要注意的是、每10ms 将数据写入 DAC、还有读取请求用于读取 FIFO_STATUS 寄存器  
    当数据从 FIFO_U2H 发送到
    我看到缺少数据字节  

    FF - 5字节
    78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86
    分析仪捕获中缺少87个数据字节  

    我们如何确保此应用中的数据不会错过、因为我们没有使用 IRQ。

    谢谢。
    阿尔蒂




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

    Aarti、您好!  

    Joe 本周不在办公室。 如果他有时间,他可能会更早地发出提示音,但请期待一个延迟的回复。  

    此致!

    K·琼斯

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

    Aarti:


    对不起,我已经离开办公室一个多星期了,我刚刚赶上了工作。

    如果不使用 IRQ 来指示 FIFO 获取何时发生、则很难确定将数据发送到 HART 传输 FIFO 的正确时间。 如果无法选择 IRQ、您能否使用10ms 计时器将数据发送到器件? 这包括 DAC 写入和 HART 传输。 如果您每10ms 等待一次向 FIFO 发送一个 HART 字节、那么两个 HART 字节之间将存在约833us 的间隙、但您会知道每次传输何时发生。


    约瑟夫·吴

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

    您好、Joseph:

    因此在进行更新  时、我们尝试了使用10ms 计时器向器件发送数据的方法。
    假设要发送的数据字节是34
    向 DAC 寄存器写入数据、然后一次写入 FIFO 1个数据字节、将 FIFO 填充至16个字节后置位 RTS、 然后、在并行(AFE 向外界发送数据)情况下、我们的 FW 会发送待发送的所有消息字节(即写入 DAC 寄存器后10ms 内18 - 1个字节)。
    这也起作用了。

    但在10ms 内发送2字节数据时、计时器不工作  
    10ms 周期、在该周期中、将 数据写入 DAC 寄存器、然后 一次写入 FIFO 2数据字节、 将 FIFO 填充至16个字节后、使 RTS 生效(根据我的理解、在 RTS 生效之前应该不会有任何问题、因为同时没有提取和写入、这可能会导致数据字节丢失) 因此、在 RTS 生效后 、AFE 可能会开始向外界发送数据、并且我们的 FW 会发送待发送的剩余总消息字节(即写入 DAC 寄存器后10ms 内为18 - 2个字节)。
    这是不可能的。。。

    我觉得这可能是因为器件从 FIFO 中提取数据、并且在 FIFO 中写入2个字节导致了一些字节丢失而导致了问题。
    您能不能在此处就上面可能存在的问题发表意见?

    提前感谢。
    此致、
    阿尔蒂

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

    Aarti:


    在我最初的建议中、我建议以10ms 的增量发送 SPI 通信、以便器件获取 FSK 字节、然后在输入下一个字节之前完全传输该字节。 这样、您将只使用 FIFO 的一个元素、这样 FIFO 数据的获取和任何其他 SPI 通信之间就不会发生冲突。

    我不确定我是否理解您的任何一个序列(一次1个数据、一次2个数据)。 部分问题是、我不知道您发送 SPI 命令时和通过 HART FSK 传输数据时之间的时序关系。

    您能介绍一下这些通信方案吗? 显示通信时序的基本示意图可能会有所帮助。


    约瑟夫·吴