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.

[参考译文] TMS570LC4357:在 MIBSPI 从器件中接收到不正确的数据

Guru**** 2451970 points
Other Parts Discussed in Thread: TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/628424/tms570lc4357-incorrect-data-received-in-mibspi-slave

器件型号:TMS570LC4357

您好!  

我们有两个板、一个板在从 MibSPI 模式下具有一个 TMS570LC4357。 它们与 SPI 总线(一个时钟、一个 SIMO、一个 CS)相连。  

由于 CS1被激活、数据到达 TG2。

主板始终发送相同的模式(1、2、3、... 22) 1.25MHz 每1ms 执行一次。  

当我们为从板上电时、如果从主板接收到的第一个信号正确、那么在断电之前、一切都是正常的。 如果第一次接收不正确(即数据不等于发送的消息)、则在断电或 CS1手动接地/+5V 之前一切都将发生错误。

如果时钟线被手动关闭/打开、接收将被破坏、如上所述。  

验证接收到的 TG2 (0XFF0C0200)数据在存储器浏览器的 CCS7中完成。  

HCG 项目:

e2e.ti.com/.../8357.hcg.zip

此致、

Alain。

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

    如果 CS1在整个传输周期内保持有效(CSHOLD=1)、那么从器件没有数据字节开始的参考、所以它将只为中的下一个 x 位计时作为数据。 主器件和从器件之间需要进行一些同步、以指示从器件何时通电以及主器件何时通电、从而能够有效地开始传输。 其中一种机制是使用从器件的 Nena 引脚来指示从器件已准备就绪、然后主器件可以任意发送。 如果您不想使用从 Nena 功能、可以禁用 CS 保持功能、这将有效地使用 CS 信号在单个 SPI 传输中标记数据的开始和结束。

    另外、希望您对手动设置 CS1和+5V 的引用是一种类型。 Hercules 上的 IO 为3.3V、不能耐受5V 电压。 除 ADC 相关引脚外、所有引脚上的绝对最大电压均为4.6V。 电压高于可能会导致器件损坏的电压。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Chuck、

    感谢您的回答、借助我们的配置、我们无法为 ENA 接线、通常在三引脚模式的情况下、请参阅参考设计的28.2.5.1美元中的说明。

    否则,我们在调查之后会进行更多的审讯:  

    1/您能解释一下多缓冲器 RAM 传输数据寄存器的 CNSR 的含义是什么、它是否链接到 SCS 引脚?

    2我们已经了解 SCS[0-3]用于选择 TG (0000 -> TG0、0001 -> TG1、...) 但 SCS 4和5的用途是什么?

    3我们需要知道 RX 缓冲区是如何管理的,它是在参考手册中写的“序列发生器请求多缓冲区控制逻辑将接收到的数据写入到相应的 RX RAM 位置”。  “各自的 RX RAM 位置”的含义是什么:

    -上一个接收数据的下一个位置

    -或 接收到的空缓冲区的第一个位置

    我们尝试将 MibSPI3更改为 MibSPI1以检查硬件、结果相同。

    此致、

    Alain、

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

    你好、Chuck、

    我们已经对 MibSPI3进行了一些新的尝试:  

    1/ ENA、CS 保持、CS 保持 FC 激活并在 TG2上接收-->相同的结果

    2 ENA、CS 保持、CS 保持 FC 未激活 和 TG0接收-->无接收

    3在 ENA、 CS 保持未激活和 CS 保持 FC 激活以及 TG0上的接收-->无接收  

    案例3随附的 HCG:  

    e2e.ti.com/.../1220.hcg.zip

    此致、

    Alain

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

    除了 Alain 的输入之外、这里还有一些其他数据。 SPI 在具有芯片选择的4引脚模式下使用。 上面提到了3引脚模式、但这是因为 SOMI 不用作传感器(SPI 主器件)、不需要来自 Hercules MCU 的任何输入。

    我还在 TRM 第1469页的底部发现、多缓冲模式只在 TG0上受支持、但我刚刚意识到这仅适用于3引脚和4引脚、具有 ENA 模式、因此该信息不相关。 这就是 Alain 今天尝试 TG0的原因。

    如上所述、我们正在寻求在4引脚配置中禁用 CS 保持的选项、但 Alain 无法正确配置。 您能查看他的设置吗? 作为替代方案、如果您认为这可能有所帮助、我们可以在4线配置中使用 SPIENA 信号而不是 CS (实际上使用3根导线作为 SOMI)。

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

    我想我们需要在示波器上查看数据流、以真正了解正在发生的情况。 即、我们是否知道主器件传输的数据是否真正符合预期? 我还想知道在接收不正确数据的过程中是否标记了任何错误。 即奇偶校验错误、位错误、组帧错误等

    最后、对于接收到的不正确数据、错误是否可以描述为移位、反转、丢失位、翻转位等? 一般而言、我们是否可以根据接收到的数据的性质诊断任何内容、或者错误数据是否看起来是随机的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Chuck、Francois、

    要恢复运行、我们在 MibSPI (3)从模式下使用3根导线(CLK、MOSI、MISO)、其中 CS1插入3.3V、所有其他 CS 都接地、因此选择了 TG2。

    我们发送42个字的16位:  

    -第一个和第二个是标头0xFF80和0xFF00

    第三个是从0x0000到0xFFFF 的计数器

    -第4个到第40个是从0x0003到0x0027的增量

    -41和42是 CRC32 SO 变量

    如果 TI 电路板在发送器之后启动、一切正常、我们可以在存储器查看器中看到这一点:

      

    您可以看到、一切都与发送的数据一致(计数器值为0X798D)。 我们还有一张示波器图片、其中显示时钟(黄色)和 MOSI (蓝色)。 我们可以看到0xFF80字。  

    重新启动发送器后、示波器会显示相同的图、但在存储器查看器中、我们可以看到:

       

    例如、您可以看到第一个字是0xFFC0而不是0xFF80、就在我们拥有0x8002而不是0x0002和0x0002而不是0x0003之后、等等。  

    感谢你的帮助  

    Alain

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

    正如我所怀疑的那样、这似乎是移位的组合、如果您将其视为连续的非同步数据流、则可能是一些丢失的位。 通过在主器件已经在发送之后启动从器件、从器件如何与正确的数据包同步、因为相对于位移、它只是与 SPICLK 同步? 当您首先启动从站时、它将被设置并等待消息、但当从站在主站之后启动时、无论它在数据流中的什么位置、它都会在配置后立即开始移入位。 它看到的第一个位是 bit0、下一个位1等 因此无法对数据进行帧、因为 CS1始终连接低电平。 我看到数据字节之间的时钟存在"暂停"或间隙、但 SPI 不关心脉冲的长度(在大多数情况下)、因为它仅使用边沿同步和移入和移出数据。

    纠正此行为有两种方法。 在主器件开始计时数据输出之前、始终保证从器件已启动并准备就绪。 二是让主控制 CS1使其在数据包之间失效。 这可能会导致第一个数据包的最后一个字节出现帧错误、并且仍然会损坏第一个数据包中的数据、但会允许从器件与第二个数据包上的主器件同步。