首页 > 技术知识 > 正文

1. 前言

承接上篇调试记录 https://www.ebaina.com/articles/140000012616

2. 官方的回环测试结果 sudo ./spidev_test -D /dev/spidev2.0 -s8000000 -g512 -b32 -H -p0 -n1 -r & sleep 5 sudo ./spidev_test -D /dev/spidev0.0 -s8000000 -g512 -b32 -H -p0 -n1 -zzz -t nvidia@dhcp-10-19-107-152:~$ sh spi1.sh Disabling receive using device: /dev/spidev0.0 setting spi mode for read,write setting spi bpw setting max speed for rd/wr spi mode: 1 bits per word: 32 bytes per word: 4 max speed: 8000000 Hz (8000 KHz) no. runs: 1 Using seed:0x5f894840 loop count = 0 using sequential pattern … transfer bytes [512] 0000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0010: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 0020: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 0030: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0040: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 0050: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 0060: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 0070: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 0080: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 0090: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F 00A0: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF 00B0: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF 00C0: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF 00D0: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF 00E0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF 00F0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE 00 0100: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 0110: 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 0120: 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 0130: 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 0140: 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 0150: 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 0160: 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 0170: 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 0180: 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 0190: 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 01A0: A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 01B0: B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 01C0: C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 01D0: D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 01E0: E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 01F0: F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE 00 01 /dev/spidev2.0: TEST PASSED /dev/spidev0.0: TEST PASSED ====== Transfer stats ==== Transmit: total: 512B (0KiB 0MiB) total: 1P ioerr: 0B (0KiB 0MiB) ioerr: 0P Rate: wire total: -1B/s (0KB/s) total: -1B/s (0KB/s) wire total: -1P/s total: -1P/s Total time: 0.007458s
<
3. 使用官方提供的测试程序

输入命令是可以正常运行的 将spi3更改为slave,并输入命令(没有更改寄存器值)

spi1 reg value mosi : 0x444 miso : 0x444 sck : 0x444 cs0 : 0x448 cs1 : 0x448 spi3 reg value mosi : 0x444 miso : 0x444 sck : 0x444 cs0 : 0x448 cs1 : 0x448 4. 测试回环模式

使用spidev0.0进行环回测试, 连接了MISO和MOSI,然后使用spidev_test进行测试, 但是收到的数据总是0 用devmem查看器的值也如下所示

mosi : 0x444 miso : 0x444 sck : 0x444 cs0 : 0x448 cs1 : 0x448

可能是spidev_test的版本不一致。 当我运行这个命令时,我犯了一个错误。 我使用的版本如下 xavier nx平台调试spi从模式3

尝试下面的命令

sudo ./spidev_test -D /dev/spidev0.0 -s4000000 -g16 -n10

xavier nx平台调试spi从模式31

再试一次这个命令

sudo ./spidev_test -D/dev/spidev0.0 -n1 -s10000000 -g10 -p1 -zz ubuntu:~$ sudo ./spidev_test -D/dev/spidev0.0 -n1 -s10000000 -g10 -p1 -zz [sudo] password for titan: using device: /dev/spidev0.0 setting spi mode for read,write setting spi bpw setting max speed for rd/wr spi mode: 0 bits per word: 8 bytes per word: 1 max speed: 10000000 Hz (10000 KHz) no. runs: 1 Using seed:0x5f9f64e2 loop count = 0 Using even no. pattern … transfer bytes [10] 0000: 02 04 06 08 0A 0C 0E 10 12 14 transfer: Return actual transfer length: 10 receive bytes [10] 0000: 00 00 00 00 00 00 00 00 00 00 mismatch index 0 ^^^ 00 00 00 00 00 00 00 00 00 00 00 /dev/spidev0.0: TEST FAILED !!! (status:-1)

确保连接pin19/pin21进行环回测试。 使用如下命令,回环收发正常

nvidia@dhcp-10-19-107-152:~$ sudo ./spidev_test -D /dev/spidev0.0 -s8000000 -g512 -b32 -H -p0 -n1 -zzz -t Disabling receive using device: /dev/spidev0.0 setting spi mode for read,write setting spi bpw setting max speed for rd/wr spi mode: 1 bits per word: 32 bytes per word: 4 max speed: 8000000 Hz (8000 KHz) no. runs: 1 Using seed:0x5fa0cce0 loop count = 0 using sequential pattern …. transfer bytes [512] 0000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0010: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 0020: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 0030: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0040: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 0050: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 0060: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 0070: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 0080: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 0090: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F 00A0: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF 00B0: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF 00C0: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF 00D0: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF 00E0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF 00F0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE 00 0100: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 0110: 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 0120: 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 0130: 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 0140: 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 0150: 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 0160: 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 0170: 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 0180: 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 0190: 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 01A0: A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 01B0: B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 01C0: C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 01D0: D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 01E0: E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 01F0: F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE 00 01 /dev/spidev0.0: TEST PASSED ====== Transfer stats ==== Transmit: total: 512B (0KiB 0MiB) total: 1P ioerr: 0B (0KiB 0MiB) ioerr: 0P Rate: wire total: -1B/s (0KB/s) total: -1B/s (0KB/s) wire total: -1P/s total: -1P/s Total time: 0.003599s
<

使用官方工具回环模式测试:

sudo ./spidev_test -D /dev/spidev0.0 spi mode: 0 bits per word: 8 max speed: 500000 Hz (500 KHz) 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 DE AD BE EF BA AD F0 0D

SPI从模式的收发测试基本完成了

5. 遗留问题

我想设置一个SOC上的SPI到从模式,配置DTB, SOC上的SPI可以进入从模式驱动,但测试程序将报告一个错误。

[ 929.254481] spi_master spi0: transferred[0] != requested[18] [ 929.254644] spi_master spi0: CMD[33f01827]: Sl M3 CS0 [HHHH] MSB MSb Rx Tx Pa 8b TRANS[00ff0000]:BSY I:255 B:0 [ 929.254644] FIFO[02c00004]:RxF:5 TxE:64 Err RxSTA TxSTA[E]DMA[00000000]: RxTr:0 TxTr:0 B:17 [ 929.254994] spi_master spi0: cpu-xfer-err [status:02c00144] [ 929.255109] spi_master spi0: CMD[33f01827]: Sl M3 CS0 [HHHH] MSB MSb Rx Tx Pa 8b TRANS[00ff0000]:BSY I:255 B:0 [ 929.255109] FIFO[02c00004]:RxF:5 TxE:64 Err RxSTA TxSTA[E]DMA[00000000]: RxTr:0 TxTr:0 B:17 [ 929.255516] spi_master spi0: failed to transfer one message from queue can’t send spi message: Input/output error Aborted

这个问题不影响正常使用

猜你喜欢