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.

[参考译文] TCAN4550EVM:tcan4x5x 驱动程序加载问题

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1211622/tcan4550evm-tcan4x5x-driver-loading-issue

器件型号:TCAN4550EVM
主题中讨论的其他器件:TCAN4550

您好、TI 团队、

我们将 TCAN4550 EVM 与 IMX8MN Nano EVK 配合使用。

我们正在为 TCAN4550模块加载3个驱动程序。

1) insmod can-dev.ko

2) insmod m_can.ko

3) insmod tcan4x5x.ko

 

在加载 tcan4x5x 驱动程序期间显示以下所述的错误。

[  35.106793] tcan4x5x spi1.0:找不到时钟

[  35.111038] tcan4x5x spi1.0:未定义 CAN 时钟源

[35.177749]  tcan4x5x spi1.0:不支持的版本号: 0

[35.214917]  tcan4x5x:spi1.0的探测失败,错误-22

有关不支持的版本号问题、您能否向我们提供指导。

注意–对于 TCAN EVM、我们不提供时钟。 TCAN EVM 本身具有40MHz 晶体时钟。

 

参考日志

 

1)根@CT-100:~#

ROOT@CT-100:~# insmod can-dev.ko.

[22.982106]  CAN 设备驱动程序接口

根@CT-100:~#

root@CT-100:~# insmod m_can.ko.

根@CT-100:~#

根@CT-100:~#

root@CT-100:~# insmod tcan4x5x.ko.

[  35.106793] tcan4x5x spi1.0:找不到时钟

[  35.111038] tcan4x5x spi1.0:未定义 CAN 时钟源

[35.177749]  tcan4x5x spi1.0:不支持的版本号: 0

[35.214917]  tcan4x5x:spi1.0的探测失败,错误-22

 

我们将使用以下提到的引脚实现 TACCN EVM 和 IMX8 Nano 之间的硬件连接。

1) SDI
2) SDO
3) SCLK
4) RST
5) GPO1/CLKOUT
6) nCS
7) nINT
8) GPO2

如果需要其他详细信息、请告诉我。

 

此致

Ramji Mishra

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

    您好 Ramji、

    不受支持的版本号0和-22错误可能是由于 SPI 配置错误或 SPI 协议错误导致无法与 TCAN4550寄存器成功通信。  

    您能否检查 SPI 总线是否配置和初始化正确、并使用示波器或逻辑分析仪监控波形以查看它们是否正确?  如果是、您能提供这些波形供我回顾吗?

    一个常见问题是 TCAN4550需要32位字、如果不进行一些修改、可能无法设置许多 SPI 模块来支持该功能。  我们需要确保 SPI 配置正确并能够与 TCAN4550通信。

    此致、

    Jonathan

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

    尊敬的 Jonathan:

    感谢您的答复。 我测试了 SPI 通信。 测试使用了 spidev.ko 驱动程序和 spi-test 实用程序。 SPI 总线上没有从器件连接。 外部环回连接器用于 MISO 和 MOSI 线路之间的数据传输。

    请查看以下随附的逻辑分析仪波形。

    请确认 IT/建议任何其他测试拓扑。

    此致

    Ramji Mishra

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

    尊敬的 Jonathan:

    我还通过 TCAN 模块测试了 SPI 信号。 在加载 tCAN 驱动器时捕获信号。 它显示了 clk 线路的初始(空闲)状态与 MISO 和 MOSI 线路中的设置不匹配。  请查看以下随附的 逻辑分析仪波形。

    TCAN4550需要32位字和许多 SPI 模块-请引导我、我可以在哪里检查此32位字设置。

    此致

    Ramji Mishra

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

    尊敬的 Ramji:

    时钟的初始空闲状态(极性)实际上与 TCAN4550的预期不同。  

    我不熟悉特定的处理器或其所拥有的 SPI 驱动器、因此我只能指出 TCAN4550的要求来支持此问题。  许多 SPI 驱动器支持不同的 SPI 模式、或时钟和数据信号之间的极性。  通常可以通过函数调用中的参数设置轻松地更改这些设置。  如果 SPI 驱动器有一个模式控制参数、则应将其设置为"模式0 (CPOL=0、CPHA = 0)。

    但更重要的是、"芯片选择"或"启用"信号每8个位切换一次为高电平。  这不正确、片选或使能信号必须在 SPI 事务的所有位中保持低电平。  一旦使能信号变为高电平、TCAN4550就会终止 SPI 事务、并通过确定它是否接收到正确位数(必须是32的倍数)(或一个完整的数据字)来检查错误情况 以及它是根据 SPI 标头中的"长度"字段接收到足够的数据字、还是在芯片选择或使能信号转换为低电平之后发送的第4个字节。  如果接收到的位不是32位的倍数、或者数据字过多或过少、器件会丢弃事务中接收到的任何数据。  这可能是客户应用程序中发生的情况。

    您可以在 SPI 写入和 SPI 读取事务的数据表时序图中看到、芯片选择(nCS)或使能信号在事务开始时转换为低电平、并在至少2个字或64位或 SPI 时钟周期内保持低电平。  图实际上显示、通过将长度字段设置为"2"来写入两个连续的寄存器、因此在芯片选择信号为低电平时有96个 SPI 时钟周期。  但是、对于单寄存器读取或写入、在片选信号较低时、至少应有64位或 SPI 时钟周期。  前32位是 R/W 操作代码(0x41或0x1)、后跟寄存器地址、然后是长度字段、以指示后续的寄存器数量或数据字。  对于单个寄存器 R/W、长度字段应设置为"1"。  在这个前32位"标头"字之后、应该会为每个寄存器传输32位附加数据、或者长度字节指示的数据字。

    因此、可能需要修改 SPI 驱动器以同时支持32位数据字(当前设置为8位) 并且它需要在32位字之间将芯片选择或使能信号保持为低电平、以便 R/W 事务不会在头字(或前32位)发送完毕后立即中止。

    解决 SPI 模式或时钟/数据极性并修改 SPI 驱动器以更正芯片选择转换应允许处理器与 TCAN4550通信并解决该问题。

    此致、

    Jonathan

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

    尊敬的  Jonathan:

    很抱歉迟到了回复。 我在 TCAN 驱动程序中进行了以下更改。

    静态 int tcan4x5x_can_probe (struct spi_device *spi)
    SPI_SET_drvdata (spi、priv);

    /*配置 SPI 总线*/
    - spi->bits_per_word = 8;
    + spi->bits_per_word = 32;
    + SPI->CHIP_SELECT = 0;
    + SPI->MODE = SPI_MODE_0;
    +printk("***** SPI-MODE=%d\n***** "、spi->mode);
    +printk("***** 每个字的位=%d\n**** "、spi->bits_per_word);
    REt = SPI_SETUP (SPI);
    +printk("***** SPI-SETUP-RET=%d\n***** "、ret);
    IF (RET)

    我能够看到每个字具有32位、并将芯片选择配置为 GPIO。 芯片选择现在处于低电平状态、但仍然无法读取版本号。

    下面显示了逻辑分析仪中的上述数据和时钟。

    一段时间后、TCAN 进入睡眠模式/任何其他模式。 我在 逻辑分析仪中看到以下提到的输出。

    我想知道0x01000841和0x00000000数据。

    此致

    Ramji Mishra

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

    尊敬的 Ramji:

    芯片选择引脚必须从高电平转换为低电平、以指示新的 SPI 写入或读取事务开始、并且必须在事务结束时转换回高电平、以指示 SPI 事务完成。  TCAN4550将对芯片使能转换之间的时钟周期进行计数、以确保出现正确的数字、否则会将其视为 SPI 错误。

    这也看起来您的字节序列是相反的。  例如、在读取操作中、发送的最高有效字节为0x41。  您的第二张图显示0x41是第一个字中发送的最低有效字节。

    您能否确保连接到芯片使能的 GPIO 在每个 SPI 事务开始时从高电平转换为低电平、然后在结束时从低电平转换为高电平、然后还能确保字节顺序正确?  当您使芯片选择正常工作后、即使您的字节极性不正确、TCAN4550也应该开始在 MISO 线路上向您发送状态字节。

    此致、

    Jonathan