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.

[参考译文] TMS320F28375S:TMS320F28375S 上的 SSI 的 SPI 数据接收问题

Guru**** 2531950 points
Other Parts Discussed in Thread: TMS320F28375S

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1426352/tms320f28375s-issue-with-spi-data-reception-for-ssi-on-tms320f28375s

器件型号:TMS320F28375S

工具与软件:

团队成员、您好!

我目前正在致力于将 AM4096 SSI 与 TMS320F28375S 控制器集成。 按照  主题中的建议、 我已成功设置 SPI 协议以从 SSI 数据引脚接收12位数据。

但是、我遇到了一个问题、即接收到的数据范围只有2048到4096、而不是预期的0到4096。

根据数据表、SSI 协议的工作方式如下图所示。

我认为在我的案例中、接收到的数据的 MSB 始终为1 (0b1xxxxxxxxxxx)。

我正在获取 FYR 的数据图像

是否有人遇到类似问题或对导致此数据范围问题的原因有建议?

非常感谢您提供任何见解或故障排除技巧!

谢谢。此致

Muzammil Qureshi

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

    尊敬的 Muzammil:  

    我不确定我是否理解整个问题、如果可以、请随时详细说明。 但为了澄清一点、您是否认为数据与预期的数据不完全匹配、因为数据会移位? 您是否仔细检查了您使用的时钟模式/SPI 时序是否正确? 两个器件都需要就正在使用的时钟模式等(锁存/接收数据时与传输数据时)达成一致。  

    此致、

    Allison

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

    您好、Allison:

    我想澄清从编码器(AM4096)接收数据的情况。 编码器使用 SSI 协议输出数据、如我前一条消息中的两个图像所示。 但是、由于时钟速度高、我正在通过 SPI 通信在控制器中接收数据、如 本主题(链接)中所述

    编码器以12位分辨率提供0至4095范围内的数据、如前面的各图所示。 但是、我通过 SPI 接收的数据的范围为2048至4095、表示最高有效位(MSB)始终设置为1。

    我怀疑出现这个问题的原因是、当时钟首次变为低电平时、没有数据从编码器发送(从下图波形中的点1到点2)。 编码器仅在点2之后开始发送数据。 因此、SPI 的 MOSI 引脚在此初始周期(从波形的点1到点2)内处于高电平、控制器会将其解释为数据值1。

    因此、我认为 SPI 的 MOSI 引脚在此时为高电平(从波形的点1到2)、并将其视为数据为1。

    我接收的数据是正确的、但 MSB 始终为1、因此我将获取2048到4096的数据。

    因此、虽然我接收的数据在技术上是正确的、但 MSB 始终为1会导致2048至4095的错误数据范围。  

    虽然我可以通过从接收到的数据中减去2048并将其乘以2来获得正确的数据、以实现0到4095的完整范围、但我不认为这是检索真实数据的正确方法。 您是否有任何解决方案或 SPI 配置允许我在从编码器发送数据时接收数据而无需任何进一步计算?

    此外、编码器正在以上面所附图像中显示的格式发送数据。 您能  为我查看编码器数据表的第11页吗? 非常感谢您的帮助。

    希望您能理解这个问题。

    谢谢。此致  

    Muzammil Qureshi

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

    你好,穆扎米尔,谢谢你的澄清。  

    首先、您能否仔细检查您的 SPI 时钟模式的极性= 1和相位= 1? 查看编码器数据表第11页、似乎编码器期望高电平空闲时钟、数据在上升时钟沿传输、并在下降时钟沿锁存/接收:  

    此致、

    Allison

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

    您好、Allison:

    您能否先复查 SPI 时钟模式的极性= 1且相位= 1?

    是的、我已经检查过、但仍然出现相同的问题。

    我的 SPI 配置如下图所示。

    我还检查了所有其他配置、即所有模式、所有仿真模式和高速模式。

    谢谢。此致

    Muzammil Qureshi

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

    尊敬的 Muzammil:

    时钟模式现在应该匹配、所以我认为这不是配置问题。 您能否尝试使用 SPI 内部环回模式(其中 TX 和 RX 在内部连接在一起)来环回数据并确保您正在接收完整的数据?

    为了澄清、您是否说您看到了全部正确数据被发送到 C2000、但在第一个位上读取的数据不正确? 或者、要传输的数据在开头是否总是为1? 如果从编码器传输的数据不正确、可能需要联系该设备的团队以获取指导。 如果您增加数据大小、您在开始时仍然看到1、但在剩余数据长度中接收完整的12位数据吗?

    此致、

    Allison

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

    您好、Allison:

    为了澄清、您是说您看到了在发送至 C2000的完全正确的数据、但却在第一个位错误地读取了这些数据吗? [报价]

    是的、这是我所说的。

    我已通过手动切换时钟引脚来检查并接收数据、以生成12个脉冲(代码如下所示)。

    uint16_t ReadPosition()
    {
        uint16_t Sample = ShiftIn(SSI_Data, SSI_Clock, (uint8_t)12);
        DEVICE_DELAY_US(20);
    
        return Sample;
    }
    
    uint16_t ShiftIn(uint16_t data_pin, uint16_t clk_pin, uint8_t bit_count)
    {
        uint16_t data = 0;
        uint8_t i;
        for(i=0; i<bit_count; i++)
        {
            data <<= 1;
    
            GPIO_writePin(clk_pin, 0);
            DEVICE_DELAY_US(1);
            
            GPIO_writePin(clk_pin, 1);
            DEVICE_DELAY_US(1);
    
            data |= GPIO_readPin(data_pin);
        }
    
        return data;
    }

    它会生成正确的数据;但是、由于时序问题、我转向 SPI。

    我相信、如果施加正确的时钟脉冲、编码器不会出现问题、并且它会提供正确的数据。

    谢谢。此致

    Muzammil Qureshi

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

    尊敬的 Muzammil:

    如果正确发送数据、唯一的问题是 SPI 上的时钟、则我们将受到 SPI 时钟模式硬件的限制-只有4种时钟模式可供使用。 如果没有任何时钟模式与编码器器件都不兼容、那么还需要考虑是否可以尝试使用 TXFIFO 并添加 TXDLY:

    我发现了与此相关的主题-该主题尚未解决、但可能会为您产生一些想法: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/981032/tms320f28379d-reading-the-angle-from-a-ssi-encoder-using-spi 

    如果这些时钟选项都不起作用、 则我们的 SPI 可能 与该器件不兼容。  

    此致、

    Allison