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.

[参考译文] AM5716:AM5716 mcspi3 上的 TCAN4550 不起作用

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1519360/am5716-tcan4550-on-am5716-mcspi3-does-not-work

器件型号:AM5716
主题中讨论的其他器件: TCAN4550SysConfigSN65HVS882

工具/软件:

您好:

我们正在对 AM5716 上的 tcan4550 进行研究:

我们有以下日志:

   1.485839] tcan4x5x spi3.0: no clock found
[    1.485839] tcan4x5x spi3.0: no CAN clock source defined
[    1.485870] tcan4x5x spi3.0: setup mode 0, 8 bits/w, 10000000 Hz max --> 0
[    1.485931] tcan4x5x spi3.0: GPIO lookup for consumer device-wake
[    1.485931] tcan4x5x spi3.0: using device tree for GPIO lookup
[    1.485931] of_get_named_gpiod_flags: can't parse 'device-wake-gpios' property of node '/ocp/interconnect@48000000/segment@0/target-module@b8000/spi@0/tcan4x5x@0[0]'
[    1.485992] of_get_named_gpiod_flags: can't parse 'device-wake-gpio' property of node '/ocp/interconnect@48000000/segment@0/target-module@b8000/spi@0/tcan4x5x@0[0]'
[    1.486022] tcan4x5x spi3.0: using lookup tables for GPIO lookup
[    1.486022] tcan4x5x spi3.0: No GPIO consumer device-wake found
[    1.486053] tcan4x5x spi3.0: GPIO lookup for consumer reset
[    1.486083] tcan4x5x spi3.0: using device tree for GPIO lookup
[    1.486083] of_get_named_gpiod_flags: parsed 'reset-gpios' property of node '/ocp/interconnect@48000000/segment@0/target-module@b8000/spi@0/tcan4x5x@0[0]' - status (0)
[    1.486175] gpio gpiochip2: Persistence not supported for GPIO 20
[    1.487304] tcan4x5x spi3.0: GPIO lookup for consumer device-state
[    1.487304] tcan4x5x spi3.0: using device tree for GPIO lookup
[    1.487335] of_get_named_gpiod_flags: can't parse 'device-state-gpios' property of node '/ocp/interconnect@48000000/segment@0/target-module@b8000/spi@0/tcan4x5x@0[0]'
[    1.487365] of_get_named_gpiod_flags: can't parse 'device-state-gpio' property of node '/ocp/interconnect@48000000/segment@0/target-module@b8000/spi@0/tcan4x5x@0[0]'
[    1.487396] tcan4x5x spi3.0: using lookup tables for GPIO lookup
[    1.487426] tcan4x5x spi3.0: No GPIO consumer device-state found
[    1.487579] tcan4x5x spi3.0: Unsupported version number:  0
[    1.487609] tcan4x5x: probe of spi3.0 failed with error -22

设备树

&mcspi3 {
	status = "okay";
	ti,pindir-d0-out-d1-in;			//D0: MOSI ;  D1: MISO;
	spi-max-frequency = <10000000>;
	
tcan4x5x: tcan4x5x@0 {
		compatible = "ti,tcan4x5x";
		reg = <0>;
		#address-cells = <1>;
		#size-cells = <1>;
		spi-max-frequency = <10000000>;
		bosch,mram-cfg = <0x0 0 0 16 0 0 1 1>;
		interrupt-parent = <&gpio5>;
		interrupts = <6 IRQ_TYPE_LEVEL_LOW>;
		//device-state-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
		//device-wake-gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>;
		reset-gpios = <&gpio8 20 GPIO_ACTIVE_LOW>;
};
};

逻辑分析:

SPI 可以发送数据、但只接收 0x00 0xFF

谢谢

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

    夏先生、

    我们没有 AM571x 和 TCAN4550 的参考设计、因此我们没有重现的方法。 SPI 节点看起来正确。  

    是否在 SPI 上完成了基本环回测试?

    如果 SPI 运行良好、我猜可能是您的 TCAN 设置/驱动器问题所在。  

    -Josue

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“620240" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1519360/am5716-tcan4550-on-am5716-mcspi3-does-not-work

    我们正在对 AM5716 上的 tcan4550 进行研究:

    我们有以下日志:

    [/报价]

    您好夏

      本例中使用的 SDK 版本是什么? 和 Linux 内核版本?

    此致

      Semon

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

    Linux 内核 6.1、谢谢。 tcan4550 驱动程序包含在 Linux 内核源树中。 所以我认为 tcan 驱动器正常。

    今天上午,我们注意到一个奇怪的现象:

    MOSI 处于运行状态时为 1.9v、、而不是 3.3V。

    在软件中、我刚刚找到了如何将 MOSI 引脚配置为 OUTPUT_HIGH/OUTPUT_LOW。

    现在无法将其配置为 1.9v 或 3.3V。

    这是如何发生的?

    	// spi3
    //		{VOUT1_VSYNC, (M14 | PIN_OUTPUT_PULLUP)},		// spi3_sclk 				SPI3_SCLK ,	
    	{VOUT1_VSYNC, (M8 | PIN_INPUT)},		// spi3_sclk 				SPI3_SCLK ,	
    	{VOUT1_DE,   (M8 | PIN_INPUT)},					// spi3_d1 					SPI3_MISO
    	{VOUT1_HSYNC,   (M8 | PIN_OUTPUT)},					// spi3_d0 					SPI3_MOSI 
    	{VOUT1_CLK,  (M8 | PIN_OUTPUT)},					// spi3_cs0 				SPI3_CS0
    	//{VOUT1_CLK,  (M8 | PIN_OUTPUT | SLEWCONTROL)},					// spi3_cs0 				SPI3_CS0
    

    以上是 MLO 中的 mcspi3 引脚配置

    谢谢

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

    夏、

    我们必须确保引脚多路复用器正确、可以从 数据表中确认

    焊球 焊球名称 比值 多路复用模式
    E11.

    VOUT1_VSYNC

    spi3_sclk 8.
    B10.

    VOUT1_DE

    spi3_d1 8.
    C11

    VOUT1_HSYNC

    spi3_d0 8.
    D11.

    VOUT1_CLK

    spi3_cs0 8.

     看起来不错。

    将此用例输入到 SysConfig:假设用例为主 SPI 全双工:

    这是使用 https://www.ti.com/lit/an/sprac44a/sprac44a.pdf 中提到的转换工具时的输出

    {VOUT1_CLK, (M8 | PIN_OUTPUT)}, /* D11 vout1_clk.spi3_cs0 */
    {VOUT1_DE, (M8 | PIN_INPUT)},   /* B10 vout1_de.spi3_d1 */
    {VOUT1_HSYNC, (M8 | PIN_OUTPUT)},       /* C11 vout1_hsync.spi3_d0 */
    {VOUT1_VSYNC, (M8 | PIN_INPUT)},        /* E11 vout1_vsync.spi3_sclk */ 

    所以、这一切看起来都是正确的。 我必须请我们的一位硬件人员参与进来。

    您是否尝试过   将 VOUT1_HSYNC (M8 | PIN_OUTPUT)}中的条目更改为  PIN_INPUT、看看我们是否得到正确的行为?

    您能尝试一下吗?

    -Josue

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

    大家好

    我找到了关键点:

    我们在 SPI1 上测试了驱动程序、并且 tcan 驱动程序成功运行。

    在用户空间配置 (IP link set CAN0 xxx) 后,我们可以通过 cansend 实用程序发送消息。

    、点是、mcspi1 和 mcspi3 之间的区别是什么?

    我们有以下信息:

    1 我们使用示波器捕获波形:

     在 mcspi3 上、示波器上的波、正常、包括时钟、cs。mosi、MISO 、并且 tcan 响应良好。

    、我们使用逻辑分析仪捕获数据,这是可以的,逻辑分析仪可以正确读取 MOSI/MISO 数据。

    但、从 mcspi3 到 tcan 驱动程序、tcan 驱动程序获取的所有 SPI 数据为 0。

    2 我们使用一个简单的测试代码,如下所示:

    static void tcan4x5x_can_test(struct spi_device *spi)
    {
    	char cmd1[] = {0x41, 0x10, 0x00, 0x01};
    	char cmd2[] = {0x41, 0x08, 0x00, 0x01};
    	char result[8] = {0};
    	int status = -1;
    
    	status = spi_write_then_read(spi, &cmd1, 4, &result, 4);
    	print_hex_dump(KERN_DEBUG, "rx1:", DUMP_PREFIX_OFFSET, 16, 1,result, 8, true);
    	status = spi_write_then_read(spi, &cmd2, 4, &result, 4);
    	print_hex_dump(KERN_DEBUG, "rx2:", DUMP_PREFIX_OFFSET, 16, 1,result, 8, true);
    }
    

    此代码仅从 mcspi3 获得 0。

    我们在 mcspi1 上测试了这个 问题、它返回了正确的数据。 tCAN 驱动器。μ s 也是如此

    3 我们认为它与 mcspi3 和 mcspi1 控制器有关。

    SPI 从器件的配置相同

    &mcspi1 {
    	status = "okay";
    	ti,pindir-d0-out-d1-in;			//D0: MOSI ;  D1: MISO;
    	spi-max-frequency = <5000000>;
    #if 0	
    	eeprom: at25@0{
    		compatible = "atmel,at25";
    		reg = <0>;
    		spi-max-frequency = <1000000>;
    		//spi-max-frequency = <5000000>;
    		
    		///spi-cpha;
    		///spi-cpol;
    
    		///pagesize = <64>;
    		///size = <32768>;
    		///address-width = <16>;
    	
    		at25,byte-len = <0x8000>;
    		at25,addr-mode = <2>;		//=="address-width = <16>;"
    		at25,page-size = <64>;
    	};
    #else 
    tcan4x5x_phony: tcan4x5x@0 {
    		compatible = "ti,tcan4x5x";
    		reg = <0>;
    		#address-cells = <1>;
    		#size-cells = <1>;
    		spi-max-frequency = <1000000>;
    		bosch,mram-cfg = <0x0 0 0 16 0 0 1 1>;
    		interrupt-parent = <&gpio5>;
    		interrupts = <6 IRQ_TYPE_LEVEL_LOW>;
    		//device-state-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
    		//device-wake-gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>;
    		reset-gpios = <&gpio8 20 GPIO_ACTIVE_HIGH>;
    };
    #endif
    

    &mcspi3 {
    	status = "okay";
    	ti,pindir-d0-out-d1-in;			//D0: MOSI ;  D1: MISO;
    	spi-max-frequency = <1000000>;
    	
    tcan4x5x: tcan4x5x@0 {
    		compatible = "ti,tcan4x5x";
    		reg = <0>;
    		#address-cells = <1>;
    		#size-cells = <1>;
    		spi-max-frequency = <1000000>;
    		bosch,mram-cfg = <0x0 0 0 16 0 0 1 1>;
    		interrupt-parent = <&gpio5>;
    		interrupts = <6 IRQ_TYPE_LEVEL_LOW>;
    		//device-state-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
    		//device-wake-gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>;
    		reset-gpios = <&gpio8 20 GPIO_ACTIVE_HIGH>;
    };
    

    SPI 主器件的配置:

       mcspi3: spi@0 {
        compatible = "ti,omap4-mcspi";
        reg = <0x0 0x200>;
        interrupts = <0 86 4>;
        #address-cells = <1>;
        #size-cells = <0>;
        ti,spi-num-cs = <2>;
        dmas = <&sdma_xbar 15>, <&sdma_xbar 16>;
        dma-names = "tx0", "rx0";
        status = "disabled";
       };
      };
    
       mcspi1: spi@0 {
        compatible = "ti,omap4-mcspi";
        reg = <0x0 0x200>;
        interrupts = <0 60 4>;
        #address-cells = <1>;
        #size-cells = <0>;
        ti,spi-num-cs = <4>;
        dmas = <&sdma_xbar 35>,
               <&sdma_xbar 36>,
               <&sdma_xbar 37>,
               <&sdma_xbar 38>,
               <&sdma_xbar 39>,
               <&sdma_xbar 40>,
               <&sdma_xbar 41>,
               <&sdma_xbar 42>;
        dma-names = "tx0", "rx0", "tx1", "rx1",
             "tx2", "rx2", "tx3", "rx3";
        status = "disabled";
       };
      };
    
    

    这些是 TI SDK 默认值。

    SPI 控制器驱动程序是相同的、我们没有对其进行修改。

    请提供帮助

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

    Linux 内核版本:6.1(对应于 TI SDK 9.2)

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

    您好夏霞、

    我将离开办公室、直到下一个星期一。

    -Josue

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Linux 内核版本:6.1(对应于 TI SDK 9.2)

    您好夏

      请提供此工程的完整 DTS 文件

       在 SDK 中、默认情况下、mcspi3 用于以下定义、请检查是否存在冲突

    ------------------------------------------------

    &mcspi3{
       状态=“正常“;
       TI、pindir-d0-out-D1-in;

       SN65HVS882:SN65HVS882@0{
           兼容=“pisosr-GPIO";“;
           GPIO 控制器;
           #GPIO-cells =<2>;

           reg =<0>;
           SPI-max-frequency =<1000000>;
           SPI-cpol;
       };
    };

    ------------------------------------------------

    此致

      Semon

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

    e2e.ti.com/.../compiled_5F00_am571x_2D00_eth.dtb.dts.rar

    完整的 DTS

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

    Semon、

    这是一个好主意。 检查 Xia 上传的.dts 后、似乎没有冲突。

    夏、

    在 u-boot dts 上有没有与 mcspi3 相关的内容?

    另一个问题是、您是否尝试更改 Mcspi3 的最大频率以 匹配 mcspi1? (我只看到不同之处)

    您是否还能确认以下段落中有一个拼写错误:

    [报价 userid=“620240" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1519360/am5716-tcan4550-on-am5716-mcspi3-does-not-work/5856066 #5856066“]

    1 我们使用示波器捕获波形:

     在 mcspi3 上、示波器上的波、正常、包括时钟、cs。mosi、MISO 、并且 tcan 响应良好。

    [/报价]

    我相信您的意思是 mcspi1 正确吗?

    您是否也对 mcspi3 进行了任何一次波捕获? 时钟是否正常工作?

    -Josue

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

    1 您是否尝试更改 Mcspi3 的最大频率以 匹配 mcspi1? (我只看到不同之处)

    ——我们将 mcspi3 和 mcspi1 的最大频率都设置为 1M、 mcspi1 工作正常、不是 mcspi3

    2 您是否也对 mcspi3 进行了任何一次波捕获? 时钟是否正常工作?
    ——我们对 mcspi3、所有时钟、cs、mosi、MISO 正常工作、进行相同的操作、并且逻辑分析仪可以对 SPI 数据进行解码

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

    夏、

    我认为 McSPI1 和 McSPI3 之间没有任何差异。

    在 u-boot dts 上是否有任何与 mcspi3 相关的内容?

    -Josue

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

    你好,如何检查这个? 我们不会修改任何与 u-boot dts 相关的内容、只修改 MLO 中的 pinmux 和 Linux 内核中的 dts。

    以下是我们编译的 u-boot dts。 谢谢

    e2e.ti.com/.../u_2D00_boot_5F00_am571x_2D00_idk.dtb.dts.rar

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

    您好:

    我今天不在办公室。 请预计 1 到 2 个工作日的响应时间会延迟。

    -Josue

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“504839" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1519360/am5716-tcan4550-on-am5716-mcspi3-does-not-work/5868985 #5868985“]

    我今天不在办公室。 请预计 1 到 2 个工作日的响应时间会延迟。

    -Josue

    [/报价]

    你好、Josue

       是否有 am5716 环回测试功能的 Mcspi3 可以在没有 SPI 从器件的情况下测试 SPI 主器件?

    此致

      Semon

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

    尊敬的 Semon:

    是的、我的理解是、由于您将 Rx 连接到 TX 或 MISO 连接到 MOSI、因此可以在没有从器件的情况下进行 Mcspi 环回测试。

    -Josue.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我的理解是、由于您要将 Rx 连接到 TX 或 MISO 连接到 MOSI、因此可以在没有从设备的情况下执行 Mcspi 环回测试。

    你好 Josue

      AM5716 中是否有任何寄存器可以在没有硬件跳接线的情况下执行环回测试?

      例如、对于 spi3_d0/SPI_D1/数据线、它可以映射到不同的 PIN。  spi3_D1 可以映射到  

      如果映射到 b10、只需配置 PADCONFIG?  

      含义是:如果我将 b10 和 y1 都配置为 spi3_d1、会导致哪个错误?

     您能否验证 mcspi3 以检查它是否正常工作? 标准 EVM 板上没有 spi3 接口、无法进行测试

    此致

      Semon

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“620240" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1519360/am5716-tcan4550-on-am5716-mcspi3-does-not-work/5865718 #5865718“]

    1 您是否尝试更改 Mcspi3 的最大频率以 匹配 mcspi1? (我只看到不同之处)

    ——我们将 mcspi3 和 mcspi1 的最大频率都设置为 1M、 mcspi1 工作正常、不是 mcspi3

    2 您是否也对 mcspi3 进行了任何一次波捕获? 时钟是否正常工作?
    ——我们对 mcspi3、所有时钟、cs、mosi、MISO 正常工作、进行相同的操作、并且逻辑分析仪可以对 SPI 数据进行解码

    [/报价]

    您好夏

      请尝试通过以下链接进行环回测试:

    linux下的spi环回测试 Ω linuxspi测试程序 Ω CSDN博客 Ω

    e2e.ti.com/.../4405.spidev_5F00_test

    命令:

    root@am57xx-EVM:/home#./spidev_test -D /dev/spidev2.0 -v
    SPI 模式:0x0
    每个字的位数:8
    最大速度:500000 Hz (500 KHz)
    TX | FF FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |… @…… Ð μ s。
    RX | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |....................................................
    root@am57xx-EVM:/home#

    DTS 更改:

           mcspi3:SPI@480b8000{
               兼容=“ti、OMAP4-mcspi“;
               reg =<0x480b8000 0x200>;
               中断= ;
               #address-cells =<1>;
               #size-cells =<0>;
               ti、hwmods =“mcspi3";“;
               TI、spi-num-cs =<2>;
               DMA =<&sdma_xbar 15>、<&sdma_xbar 16>;
               dma-names =“tx0",“,"rx0"、"rx0";“;</s>“
               
               spidev@0{
                   SPI-max-frequency =<1000000>;
                   reg =<0>;

                   compatible =“linux、spidev“;
               };
               // status =“disabled";“;
           };

    此致

      Semon

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

    您好夏霞、

    您能否分享一下这个问题是如何解决的?

    -Josue

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“507109" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1519360/am5716-tcan4550-on-am5716-mcspi3-does-not-work/5882820 #5882820“]

      AM5716 中是否有任何寄存器可以在没有硬件跳接线的情况下执行环回测试?

      例如、对于 spi3_d0/SPI_D1/数据线、它可以映射到不同的 PIN。  spi3_D1 可以映射到  

      如果映射到 b10、只需配置 PADCONFIG?  

      含义是:如果我将 b10 和 y1 都配置为 spi3_d1、会导致哪个错误?

    [/报价]

    你好、Josue

      spi3_di 可以映射到 5 个不同的 PIN、此客户工程是从一个旧的 PIN 继承的、该旧的 PIN 已将 spid3_di 映射到 这个新工程中的另一个 PIN

      映射到另一个 PIN 时、映射了两个 PIN、导致此问题

    此致

      Semon

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

    很棒的发现