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 响应、探头不工作。

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1300712/tcan4550-bringup-issue---the-probe-does-not-work-because-there-is-no-spi-response

器件型号:TCAN4550
我们将在 Linux 环境中推出 tcan4550。
探测器失败,出现以下错误。 

查看以下信息后、请提供有关哪些领域需要额外确认的帮助。 


[ 1.531193] tcan4x5x spi4.0:不支持的版本号:0
[ 1.537022] tcan4x5x:spi4.0的探测器失败,错误-22

器件树设置如下所示。

*
注释掉了 device-state-gpio 引脚。 这是因为 INH 引脚未单独连接到电路板。
经确认、INH 在电源被打开时保持高电平。 

SPI4:SPI@fa700000{
状态="可以";
tcan4x5x:tcan4x5x@0{
兼容="ti、tcan4x5x";
寄存器=<0>;
#address-Cells =<1>;
#size-cells =<1>;
SPI-max-frequency =<10000000>;
Bosch、MRAM-cfg =<0x0 0 0 16 0 1 1>;
INTERRUPT-PARENT =<&GPIO10>;
中断=<7 IRQ_TYPE_LEVEL_LOW >;
// DEVICE-STATE-GPIO =<&GPIO10 6 GPIO_ACTIVE_HIGH>;
DEVICE-WAKE-GPIO =<&GPIO10 4 GPIO_ACTIVE_HIGH>;
RESET-GPIO =<&GPIO9 0 GPIO_ACTIVE_HIGH>;
};
};


波形
SPI 输入似乎正常工作(dI)、但来自 tcan4550的响应似乎异常。 
当检查 DO 波形时、只能看到0x88。 

 

 


第一个 SPI 波形


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

    您好、JONGHYUN、

    SPI 片选信号在每个字节中止 SPI 读取或写入事务之后错误地转换为高电平。  这会导致 SPI 错误。  有关 SPI 信号协议要求的示意图、请参阅数据表的 SPI 编程第8.5节。

    NCS 信号需要在 SPI 写入/读取事务开始时转换为低电平、并保持低电平、直到完成 SPI 写入/读取事务。  器件会对 SCLK 周期进行计数、以确定事务中是否有正确的位数、作为一种故障保护机制。  如果 SCLK 周期数量不正确、则会设置 SPI 错误、器件将忽略所有写入数据。  

    该器件还能够在单个事务中写入或读取多个数据字。 该器件还会根据包含地址和长度信息的第一个 SPI 字的长度部分、将事务中的位数与预期数字进行比较。  该数据表显示了 NCS 信号转换以及一个两字写入和读取事务示例、您可以将其用作示例。

    NCS 信号转换为低电平后、器件将立即返回带有最重要高级中断位的状态字节、其中包括 SPI 错误(SPIERR)标志。  图中返回0x88是由于 SPIERR 标志、该标志反过来设置全局错误(GLOBALERR)标志。  

    您需要调整 SPI 驱动器、以在整个 SPI 写入/读取事务期间将 nCS 信号保持为低电平。

    此致、

    乔纳森

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

    感谢您的答复。
    检查后、SPI 驱动器每个字的电流位为8。
    (我使用 PL022作为 SPI 器件、最大值为16)

    1.查看产品说明书、发现它使用的是32位字。
    我是否需要支持每个字32位才能使用 TCAN4550?

    2、如果我使用多个字、我还想知道我是否需要额外修改 SPI 驱动器、无论每个字的位如何、都要在数据开始时将 nCS 设置为低电平、在结束时将 nCS 设置为高电平。

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

    尊敬的 JONGHYUN:

    TCAN4550确实为寄存器和 MRAM 数据使用了32位字、但是、只要完整的写入或读取事务(至少为64位)的位总数正确、MCU 通常会使用多个8位或16位字。

    您可能必须修改 SPI 驱动器以控制片选信号。  即使您可以使用32位字、单个寄存器写入或读取也有64位需要传输、同时芯片选择信号处于低电平。  前32位传输地址和长度(或将在事务中传输的32位数据字的数量)、然后下一个字是实际的32位数据字。  如果是写入、则数据来自 MCU。  但如果它是读取、MCU 会继续为 SCLK 计时并从 TCAN4550接收32位数据。  无论哪种方法、nCS 信号都必须在完整的64位时间内保持低电平。

    在单个 SPI 事务中读取或写入多个连续寄存器或 MRAM 空间时、可以将长度字段设置为总数、然后 NCS 应在所有字的总位数中保持低电平。

    因此、对于单个寄存器 R/W、您需要将 Length 值设置为"1"、然后在总共64位的时间内将 nCS 保持为低电平。  

    对于多个字事务、您需要在总共 32 +(长度* 32)位的情况下使 nCS 保持低电平。  

    长度= 1 -> 64位

    长度= 2 -> 96位

    长度= 3 -> 128位

    等等

    此致、

    乔纳森

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

    你好、 Jonathan。

    我修改了 SPI 驱动器、并确认探针运行正常。 

    我想再问两个问题。 
    1.以下波形在探头后的5秒间隔内可见。 这是否正常? 

     



    2.在 CAN 驱动器探测之后是否有推荐的验证操作方法?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 JONGHYUN:

    1. 以下波形在探针后的5秒间隔内可见。 这是否正常?

    SPI 通信由 MCU 启动、这看起来是读取寄存器0x1040、也就是 CAN RX/TX 错误计数器寄存器。  固件中可能会每5秒循环读取一次该寄存器、因此我预计这会正常运行。  TCAN4550针对该寄存器以值0x0000进行响应、因此没有 CAN 消息错误。  MISO 线路上紧接芯片选择变为低电平之后的第一个字节是0xA0。  这是对应于寄存器0x0820[7:0]的全局状态字节。  GLOBALERR 和 CANERR 已被置位、但这可能是由于总线上的 CAN 流量很低所致。  我希望读取寄存器0x0820会显示 CAN 静默(CANSLNT)位被设置为表示 CAN 总线已"静默"至少1秒。  根据您的初始测试设置、这不是问题。

    2. 在 CAN 驱动程序探测器后是否有推荐的验证操作方法?

    对于尝试在 CAN 总线上发送和接收消息之外的操作、我没有推荐的方法。  如果没有将外部器件连接到 CANH/L 引脚、则可以在 MCAN 控制器中使用环回测试模式。  

    首先、您需要将 Control 寄存器的 CCE 和 INIT 位都设置 为1、以初始化配置模式并允许对受限访问位的访问。  (0x1018[1]:0 = 2'b11)

    然后、您需要将控制寄存器中的 TEST 位设置为1 (0x1018[7]= 1'b1)、并将测试寄存器中的 LBCK 位设置为1 (0x1010[4]= 1'b1)来启用外部回路模式。  器件将把它在 CAN 总线上发送的消息回送至自身并忽略任何确认错误。  

    如果您不想在 CAN 总线上看到此测试消息、则可以通过将 Control 寄存器中的 MON 位设置为1来禁用发送器、这只会在内部回送消息。  如果该方法连接到您不想破坏的可正常工作的 CAN 总线、则可用于验证操作。

    此致、

    乔纳森