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.

[参考译文] TCAN4550:SPI 通信期间的 SPI 错误

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/903371/tcan4550-spi-error-during-spi-communication

器件型号:TCAN4550

您好!

   我正在尝试通过 SPI 配置 TCAN4550寄存 器、并且由于读取和写入操作正在成功执行、我能够成功地与器件通信。 但是在运行期间、有时读取 SPI 状态寄存器(0x000C)时会出现错误。 读取寄存器时得到的值是0x0001000A。 错误是"SPI 读取序列结束时传输的数据较少、然后请求的数据较少"。

请指导我们了解上述错误的可能原因。 如果我们需要检查其他参数以确定错误原因、请告知我们。

如果您需要更多信息、请告诉我。

此致、

Kumar Achutosh

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

    库马尔

    这通常是由连接到 TCAN4550的时钟问题引起的。 您使用的时钟速率是多少?您可以发送器件型号?

    此致、

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

    尊敬的 Eric:

     感谢您的回答。 连接 TCAN4550的时钟为40MHz、器件型号为 NX2016SA-40M-STD-CZS-3。 我们配置为与 TCAN4550通信的 SPI 波特率为1MHz。

    如果您需要更多信息、请告诉我。

    此致、

    Kumar Achutosh

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

    库马尔

    您能指定何时发生这种情况、还是随机发生?

    此错误是由 READ 命令请求定义的数据量(即来自特定地址的2个字的数据)但返回的数据少于预期而引起的。 当您从分配的存储器或 TCAN4550上的寄存器读取数据时、是否会发生这种情况?

    此致、

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

    尊敬的 Eric:

     

       执行 CAN 帧发送序列时会发生这种情况。 下面提到的是序列。

       

    空 CANFD_Test (空)

    静态 uint8_t dataPayload[64]={0};

    /*定义我们要发送的 CAN 消息*/
    TCAN4x5x_MCAN_TX_Header 接头={0};  

    header.DLC = MCAN_DLC_64B;  
    header.ID = TX_identifier;  
    header.FDF = CANFD_ENABLE;  
    header.BRS = BRS_ENABLE;//位速率开关被启用
    header.EFC = 0;
    插头.mm = 0;
    header.RTR = 0;
    header.XTD = 0;  
    header.ESI = 0;  


    Transmit _CANFD (头文件、数据有效载荷);


    /*接收 CAN 帧*/
    Receive_CANFD (dataPayload);

    发送功能:-  

    无效
    Transmit _CANFD (TCAN4x5x_MCAN_TX_Header *标头、uint8_t *数据有效载荷)


    TCAN4x5x_MCAN_WriteTXBuffer (0、标头、数据有效载荷);  

    TCAN4x5x_MCAN_TransmitBufferContents (0);

    如果您需要更多信息、请告诉我。

    此致、

    Kumar Achutosh

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

    尊敬的 Eric:

     您能不能更新上述问题。

    此致、

    Kumar Achutosh

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

    库马尔

    这似乎会在 Receive_CANFD 函数中发生、但我无法在 Web 的示例代码中找到定义。 这是您自己编写的函数吗? 在该函数块中是否有任何其他 SPI 读取? 我提出的原因是、通过 SPI 读回的数据比预期的要少、因此会引发该标志。

    此外、我还想强调的一点是、虽然这是一个错误标志、但这不会导致 TCAN4550-Q1器件上的任何函数停止工作。

    此致、

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

    尊敬的 Eric:

         我们使用 int 引脚中断来检测 CAN 接收事件、因为这是连接到 PCB 中 MCU 的唯一中断信号(未使用 GPIO1引脚)。 我们看到软件由于持续点击中断而卡住。  在我们的测试中、我们现在已经禁用了接收部分、并且我们有一个虚拟中断处理程序 、由于中断持续被命中、软件在该处理程序中被卡住。

    下面提到的是中断处理程序。

    CY_ISR (CAN_FD_RX_INTERRUPT_INTERRUPT)


    TCAN4x5x_Device_ClearInterruptsAll();

    此致、

    Kumar Achutosh

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

    库马尔

    明白了、这很有道理。

    是否可以解决我上一个帖子中的问题? 当 SPI 事务收到的数据少于 SPI 事务请求的数据时、会发生此问题、但在代码段中、CAN 帧传输可能发生的位置并不明显。

    此外、错误发生后、SPI 事务中会指示 SPI 下溢错误。 那么、该错误是在与 CAN 发送功能相同的 SPI 事务中指示的、还是在该事务之后指示的?

    此致、

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

    尊敬的 Eric:

          我删除了 CAN 发送和接收函数中的 SPI 读取函数。 我观察到,在传输过程中,我们现在没有接收到任何空帧,但软件正被卡在中断中。

    但是在运行期间、有时读取 SPI 状态寄存器(0x000C)时会出现错误。  您能不能告诉我们,我们还需要对中断执行进行任何其他配置。

    此致、

    Kumar Achutosh

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

    尊敬的 Eric:

     您能不能更新上述问题。

    此致、

    Kumar Achutosh

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

    库马尔

    您是否也可以读取寄存器0x0820以确保仅获得 SPIERR? SPI 下溢问题应触发此标志、但我想知道是否有其他中断被抛出。

    您在读取0x000C 时遇到的错误是 SPI 下溢错误、对吧?

    此致、

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

    尊敬的 Eric:

       我已经读取了两个寄存器。 寄存器0x000C、我得到值"0x00000008"、读数0x0820我得到"0x000004A0"。  在删除 SPI 读取后,我在0x000C 寄存器中没有得到 SPI 错误,但正在读取寄存器0x0820,我正在得到值0x000004A0,错误是 CAN 错误,仍然 是软件卡在中断中。

    如果您需要更多信息、请告诉我。

    此致、

    Kumar Achutosh

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

    库马尔

    寄存器0x0820中显示的错误为 CAN 静默、CAN 错误和全局错误。 CAN 错误是 CAN 静默和 CAN 主中断的逻辑或、全局错误是寄存器0x0820中任何中断的逻辑或。 因此、CAN 静音标志是导致其他两个标志升高的原因、如果总线在~850ms 内没有通信、CAN 静音标志升高(请参阅数据表中的 tsilence 参数)。 一旦您在写入时清除此中断、然后继续 CAN 消息传递、它就不会再显示、并且 nINT 引脚将不再切换为低电平以中断软件。

    如果希望此中断不再切换中断引脚、也可以通过向寄存器0x0830中的位10写入0来禁用 CAN 静音中断。

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

    此致、