spidev2.0作为slave无法收到数据,master以10MHz 的速度发送数据

会一直在等待状态,这是我的设备树:

spi@3230000{ /* SPI3 in 40 pin conn */
	compatible = "nvidia,tegra186-spi-slave";
	/*compatible = "nvidia,tegra234-spi-slave-cnt-mode";*/
	spi-max-frequency = <50000000>;
	status = "okay";
	spi@0 {
		compatible = "tegra-spidev";
		reg = <0x0>;
		spi-max-frequency = <50000000>;
		
		controller-data {
			nvidia,variable-length-transfer;
			nvidia,enable-hw-based-cs;
			nvidia,rx-clk-tap-delay = <0x10>;
			nvidia,tx-clk-tap-delay = <0x0>;
		};
	};
};

确认是有信号发给orin nx的

但是master使用1M速度时候接收正常,3M的话nx接收的数据会右移一位

[ 434.273526] spi_master spi2: cpu-xfer-err [status:0bc00144]
[ 434.279297] spi_master spi2: CMD[33f01827]: Sl M3 CS0 [HHHH] MSB MSb Rx Tx Pa 8b TRANS[00ff0000]:BSY I:255 B:0
[ 434.279297] FIFO[0bc00004]:RxF:23 TxE:64 Err RxSTA TxSTA[E]DMA[00000000]: RxTr:0 TxTr:0 B:91
[ 434.299285] spi_master spi2: failed to transfer one message from queue
[ 450.285861] spi_master spi2: cpu-xfer-err [status:0bc00144]
[ 450.291659] spi_master spi2: CMD[33f01827]: Sl M3 CS0 [HHHH] MSB MSb Rx Tx Pa 8b TRANS[00ff0000]:BSY I:255 B:0
[ 450.291659] FIFO[0bc00004]:RxF:23 TxE:64 Err RxSTA TxSTA[E]DMA[00000000]: RxTr:0 TxTr:0 B:91
[ 450.311661] spi_master spi2: failed to transfer one message from queue
[ 466.296948] spi_master spi2: cpu-xfer-err [status:0bc00144]
[ 466.302723] spi_master spi2: CMD[33f01827]: Sl M3 CS0 [HHHH] MSB MSb Rx Tx Pa 8b TRANS[00ff0000]:BSY I:255 B:0
[ 466.302723] FIFO[0bc00004]:RxF:23 TxE:64 Err RxSTA TxSTA[E]DMA[00000000]: RxTr:0 TxTr:0 B:91
[ 466.322725] spi_master spi2: failed to transfer one message from queue
[ 482.308012] spi_master spi2: cpu-xfer-err [status:0bc00144]
[ 482.313846] spi_master spi2: CMD[33f01827]: Sl M3 CS0 [HHHH] MSB MSb Rx Tx Pa 8b TRANS[00ff0000]:BSY I:255 B:0
[ 482.313846] FIFO[0bc00004]:RxF:23 TxE:64 Err RxSTA TxSTA[E]DMA[00000000]: RxTr:0 TxTr:0 B:91
[ 482.333822] spi_master spi2: failed to transfer one message from queue
[ 498.321804] spi_master spi2: cpu-xfer-err [status:0bc00144]
[ 498.327608] spi_master spi2: CMD[33f01827]: Sl M3 CS0 [HHHH] MSB MSb Rx Tx Pa 8b TRANS[00ff0000]:BSY I:255 B:0
[ 498.327608] FIFO[0bc00004]:RxF:23 TxE:64 Err RxSTA TxSTA[E]DMA[00000000]: RxTr:0 TxTr:0 B:91
[ 498.347609] spi_master spi2: failed to transfer one message from queue

会出现这个错误,并不是一直在等待状态

目前10M的问题暂时不用注意,确认是master那边的问题,但是在2.5M的速率下
接收到的数据
spi mode: 0x3
bits per word: 8
max speed: 10000000 Hz (10000 kHz)
TX | EC 1E 00 22 FD 8A 00 00 FB 00 00 00 AE D6 55 00 00 00 00 00 8A F0 00 00 04 03 00 00 00 01 02 03 |…"…U…|
TX | 04 05 06 07 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 |…|
TX | 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 __ __ __ __ |…|
RX | 08 96 00 01 00 00 00 00 7E FF FF FF 80 00 00 00 04 2F 00 90 40 00 00 00 7F 83 80 00 00 08 91 19 |…~…/…@…|
RX | A2 2A B3 3B 80 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 |.*.;…|
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 __ __ __ __ |…|
使用示波器可以观察到前两个字节是112c,收到的却是0896,这是什么原因

应该是nx读早了一位数据

Hi,
Do you use Jetpack 6.1? If you use previous version, would suggest upgrade.

And you can refer to the valid examples in

Jetson/L4T/peripheral/ - eLinux.org

你好,谢谢回复.
现在没有办法升级,我们项目必须得用JetPack5.1.2,可以在JetPack5.1.2上解决吗

我确认pinmxu配置和gpio配置正确,没有条件环回测试

Hi,
Please check if you can enable GPIO synchronization for running in 10MHz:
SPI Slave Mode GPIO Synchronization - #7 by KevinFFF

gpio同步没法使用,我们在自制板子上连接的mcu,没有gpio连接的mcu

mcu_candump.txt (7.3 KB)
mcu_cansend.txt (6.6 KB)
我现在连接了spi1和spi0,使用mcu_candump接收mcu_cansend发送的数据,接受一些帧后会报错:
[ 657.094094] spi_master spi2: cpu-xfer-err [status:05400144]
[ 657.099865] spi_master spi2: CMD[33f01827]: Sl M3 CS0 [HHHH] MSB MSb Rx Tx Pa 8b TRANS[00ff0000]:BSY I:255 B:0
[ 657.099865] FIFO[05400144]:RxF:10 TxE:64 Err[Er] RxSTA TxSTA[UE]DMA[00000000]: RxTr:0 TxTr:0 B:35
[ 657.120112] spi_master spi2: failed to transfer one message from queue
然后接受停止运行,这是为什么?
wo

spi0为master,spi1为slave

你好,请问这个问题有一些进展吗

Hi,
In the setup we run in 8Mbps and don’t observe any issue:

Jetson/L4T/peripheral/ - eLinux.org

Please refer to the setup on developer kit, and check if there is any clue for your custom board.

你好,谢谢你们的回复,可以提供下spidev_test的源码吗,我不确定是否是我的程序写的有问题

Hi,
The test code is in upstream kernel. Please check

kernel/kernel-5.10/tools/spi/spidev_test.c

spi slave接收数据,接收36个字节大小的spi帧,master一秒发送3000帧给spi slave,程序运行会有这个错误
[ 657.094094] spi_master spi2: cpu-xfer-err [status:05400144]
[ 657.099865] spi_master spi2: CMD[33f01827]: Sl M3 CS0 [HHHH] MSB MSb Rx Tx Pa 8b TRANS[00ff0000]:BSY I:255 B:0
[ 657.099865] FIFO[05400144]:RxF:10 TxE:64 Err[Er] RxSTA TxSTA[UE]DMA[00000000]: RxTr:0 TxTr:0 B:35
[ 657.120112] spi_master spi2: failed to transfer one message from queue
和speed没有太大关系,和吞吐量的关系很大

你好,有尝试过我说的这种方法测试吗

尝试最新的JetPack6.1仍然有这个问题,请提供一些建议,谢谢

[ 198.311584] spi_master spi1: transferred[0] != requested[36]
[ 198.311593] spi_master spi1: CMD[13f01827]: Sl M1 CS0 [HHHH] MSB MSb Rx Tx Pa 8b TRANS[00ff0000]:BSY I:255 B:0
FIFO[04c00144]:RxF:9 TxE:64 Err[Er] RxSTA TxSTA[UE]DMA[00000000]: RxTr:0 TxTr:0 B:35
[ 198.311605] spi_master spi1: cpu-xfer-err [status:04c00004]
[ 198.311607] spi_master spi1: CMD[13f01827]: Sl M1 CS0 [HHHH] MSB MSb Rx Tx Pa 8b TRANS[00ff0000]:BSY I:255 B:0
FIFO[04c00144]:RxF:9 TxE:64 Err[Er] RxSTA TxSTA[UE]DMA[00000000]: RxTr:0 TxTr:0 B:35
[ 198.311618] spi_master spi1: failed to transfer one message from queue

JetPack6.1会多一行报错