1109346714 发表于 2022-10-19 16:11

SPI读取24位数据发生了数据颠倒

我用SPI读取一个24位的数据,8位8位的读取,读取三次。正常读取出来的数据顺序应该是ABC,我用示波器抓了,波形就是ABC。但是我读取出来的数据却是CAB。这不是最奇怪的,当我只从寄存器取一次数据的时候,我第一个字节读出来的就是A;当我从寄存器取2次数据的时候,第一个字节读出来的就是B;当我从寄存器读三个字节的时候,第一个字节就是C。奇怪的是,当我读第一个字节的时候,系统是怎么知道我后面还是否会继续读取数据,从而给我不同的数据的呢?
读取三个字节:

读取两个字节:

读取一个字节:

LcwSwust 发表于 2022-10-19 17:34

CAB不是颠倒而是错位,你看 CAB CAB CAB,如果去掉前面第一个C,那后面就是ABC ABC

1109346714 发表于 2022-10-19 17:45

找到问题了,问题在于前面,我下发数据后,并没有将缓存区的数据取出,我在一个博客中看见SPI在每次写数据后也依然要将寄存器中的数据读出,哪怕是没用的。在我将前面写数据后的寄存器值读出来丢掉后,后面的数据就是正常顺序的了。

1109346714 发表于 2022-10-19 17:45

LcwSwust 发表于 2022-10-19 17:34
CAB不是颠倒而是错位,你看 CAB CAB CAB,如果去掉前面第一个C,那后面就是ABC ABC...

嗯,我发现是前面数据有一部分并没有被我读出导致的。导致后面的数据都错位了

icecut 发表于 2022-10-19 19:59

实验不是错. 代码不严格的实验,就是自己挖坑自己跳

zerorobert 发表于 2022-11-2 17:49

spi不都是8位的数据吗            

belindagraham 发表于 2022-11-2 17:59

解决SPI数据错几位造成数据整体偏移的问题

backlugin 发表于 2022-11-2 18:17

数据颠倒需要查看是不是数据时序是否正确

phoenixwhite 发表于 2022-11-2 18:45

SPI数据DMA传输错一个字节?

eefas 发表于 2022-11-2 19:23

可以检查是否有SPI数据线外接的情况

10299823 发表于 2022-11-2 20:05

使用示波器测量一下信号是否正确            

janewood 发表于 2022-11-2 20:56

这个是代码的问题还是硬件的问题呢

kkzz 发表于 2022-11-3 20:31

这个可以自己移位颠倒数据的            

V853 发表于 2022-11-5 10:14

SPI硬件设置大小端出问题了?还是传参的顺序出问题了?

朝生 发表于 2022-11-5 10:15

所以是SPI缓存数据堆积的原因导致的呗。

tpgf 发表于 2022-11-7 10:28

是不是数据的高端和低端的配置或者读取顺序出现问题了呢

heimaojingzhang 发表于 2022-11-7 10:39

SPI数据错几位,造成数据整体偏移。比如传0x5555,就有可能变长0xaaaa。

keaibukelian 发表于 2022-11-7 11:38

 软件模式时每次接收之前写入0,完成接收之后写入1,就可以实现软件片选,这个操作可以放在软件模式下的外部中断,或者DMA数据流中断中都可以,为的是清空SPI中的数据寄存器,让其重新开始,把之前寄存器接收到的垃圾(比如残留的1位数据待在SPI-DR之中),还有一个隐含的操作,当只有把SSI写入1时才能正确的清掉各种标志

labasi 发表于 2022-11-7 11:52

本帖最后由 labasi 于 2022-11-7 13:30 编辑

不清楚这个问题

paotangsan 发表于 2022-11-7 12:05

有时遇到的是接收到的首字节错了并非发送的值,并且可能依次偏移。
页: [1] 2
查看完整版本: SPI读取24位数据发生了数据颠倒