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-Q1:正常使用1到3小时后、无法发送数据

Guru**** 2470720 points
Other Parts Discussed in Thread: TCAN4550-Q1, TCAN4550

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1462616/tcan4550-q1-after-1-to-3-hours-of-normal-use-data-cannot-be-sent

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

工具与软件:

您好!

两个 TCAN4550-Q1芯片连接到我们器件上的一个 SPI 上、通过芯片选择切换通信。 问题如下:

症状:

1.当设备使用1到3小时时、CAN1无法随机向 CAN 总线发送数据、但 CAN 总线上可以正常接收数据、CAN2正常发送和接收数据;  

2.当 CAN1无法发送数据时,内核不会报告任何错误,并且 CAN1可以在重新初始化后正常使用;

3.多个装置出现相同的现象;

4.CAN1和 CAN2是两条完全独立的 CAN 总线彼此连接、并不连接到一条 CAN 总线;

原理图如下所示:

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

    您好、Wulu、

    Unknown 说:
    1. 当设备使用1到3小时时、CAN1无法在随机时间向 CAN 总线发送数据、但可以在 CAN 总线上正常接收数据、CAN2正常发送和接收数据; [/报价]

    您可以读取各种状态、中断、控制和错误计数器寄存器吗?  (0x000C、0x0800、0x0820、0x0824或0x1050、0x1018、 0x1040、0x1044)

    您的 TX 配置是什么?  您使用的是 TX FIFO、队列还是专用 TX 缓冲区?  您可以监测 TX FIFO/队列状态和挂起寄存器吗? (0x10C4、0x10CC)

    Unknown 说:
    2. 当 CAN1无法发送数据时、内核不会报告任何错误、并且可以在重新初始化后正常使用 CAN1;[/QUOT]

    这包括器件复位、还是仅仅重新写入配置寄存器?  您能否提供用于器件配置的最终寄存器值的列表?

    此致、

    Jonathan

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

    大家好、 Jonathan Nerger:
    我们的器件在 Linux5.10上运行、并使用 mCAN 驱动程序、下面是关于 tcan4550的 devicetree。

    /* spi0 */
    &spi0 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&spi0m1_pins &spi0m1_cs0 &spi0m1_cs1>;
    	num-cs = <2>;
    	max-freq = <18000000>;
    	tcan4x5x0: tcan4x5x@0{
    		compatible = "ti,tcan4x5x";
    		status = "okay";
    		reg = <0>;
    		#address-cells = <1>;
    		#size-cells = <1>;
    		spi-max-frequency = <18000000>;
    		pinctrl-0 = <&can0_int_rst>;
    		interrupt-parent = <&gpio2>;
    		interrupts = <RK_PC3 IRQ_TYPE_LEVEL_LOW>;
    		bosch,mram-cfg = <0x0 0 0 16 0 0 1 1>;
    		reset-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;
    		spi-msb-first;
    	};
    	tcan4x5x1: tcan4x5x@1{
    		compatible = "ti,tcan4x5x";
    		status = "okay";
    		reg = <1>;
    		#address-cells = <1>;
    		#size-cells = <1>;
    		spi-max-frequency = <18000000>;
    		pinctrl-0 = <&can1_int_rst>;
    		interrupt-parent = <&gpio2>;
    		interrupts = <RK_PC5 IRQ_TYPE_LEVEL_LOW>;
    		bosch,mram-cfg = <0x0 0 0 16 0 0 1 1>;
    		reset-gpios = <&gpio2 RK_PC4 GPIO_ACTIVE_HIGH>;
    		spi-msb-first;
    	};
    };
    
    &pinctrl {
    	spi-can { 
    		can0_int_rst: can0-int-rst {
    			rockchip,pins = <2 RK_PC3 RK_FUNC_GPIO &pcfg_pull_up>,
    							<2 RK_PB4 RK_FUNC_GPIO &pcfg_pull_down_drv_level_15>; 
    		};
    		can1_int_rst: can1-int-rst { 
    			rockchip,pins = <2 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>,
    							<2 RK_PC4 RK_FUNC_GPIO &pcfg_pull_down_drv_level_15>; 
    		}; 
    	};
    };

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

    尊敬的 Hangxiang:

    停止发送的器件应设置一些中断、错误计数器或状态位、以提供有关其停止发送的原因的信息。  您将需要监控我之前提到的寄存器、以便我们可以确定您观察到的问题的原因和解决方案。

    此致、

    Jonathan